iobroker.admin 6.2.6 → 6.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/io-package.json +13 -13
- package/package.json +1 -1
- package/www/asset-manifest.json +5 -5
- package/www/index.html +1 -1
- package/www/static/js/5710.110bb3eb.chunk.js +100 -0
- package/www/static/js/5710.110bb3eb.chunk.js.map +1 -0
- package/www/static/js/{main.0193d507.js → main.9a3a56b7.js} +5 -5
- package/www/static/js/{main.0193d507.js.map → main.9a3a56b7.js.map} +1 -1
- package/www/static/js/5710.7d75fb68.chunk.js +0 -100
- package/www/static/js/5710.7d75fb68.chunk.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["assets/sentry.svg","Utils.jsx","dialogs/CommandDialog.jsx","helpers/cardSort.jsx","components/DragWrapper.jsx","components/DrawerItem.jsx","components/CustomDragLayer.jsx","components/ContextWrapper.jsx","components/CustomPopper.jsx","components/Drawer.jsx","components/Connecting.jsx","components/Wizard/WizardPasswordTab.jsx","components/LicenseTexts.jsx","components/Wizard/WizardLicenseTab.jsx","assets/pin.svg","components/Wizard/WizardSettingsTab.jsx","components/Wizard/WizardAuthSSLTab.jsx","components/Wizard/WizardPortForwarding.jsx","assets/longLogo.svg","dialogs/WizardDialog.jsx","dialogs/SystemSettingsTabs/MainSettingsDialog.jsx","dialogs/SystemSettingsTabs/RepositoriesDialog.jsx","dialogs/SystemSettingsTabs/LicensesDialog.jsx","dialogs/SystemSettingsTabs/CertificatesDialog.jsx","dialogs/SystemSettingsTabs/SSLDialog.jsx","dialogs/SystemSettingsTabs/ACLDialog.jsx","dialogs/SystemSettingsTabs/StatisticsDialog.jsx","webpack://src-rx/./src/assets/css/style.css?dfc8","dialogs/SystemSettingsDialog.jsx","login/Login.jsx","dialogs/ExpertModeDialog.jsx","dialogs/NewsAdminDialog.jsx","dialogs/HostWarningDialog.jsx","Workers/LogsWorker.jsx","Workers/InstancesWorker.jsx","Workers/HostsWorker.jsx","Workers/AdaptersWorker.jsx","Workers/ObjectsWorker.jsx","dialogs/GenereteInputsModal.jsx","helpers/hooks/useStateLocal.jsx","dialogs/DiscoveryDialog.jsx","App.jsx","webpack://src-rx/./src/index.css?449b","bootstrap.jsx","components/Command.jsx","components/CustomModal.jsx","components/CustomSelectButton.jsx","components/HostSelectors.jsx","components/IsVisible.jsx","components/JsonConfigComponent/ConfigGeneric.jsx","components/JsonConfigComponent/ConfigAlive.jsx","components/JsonConfigComponent/ConfigAutocomplete.jsx","components/JsonConfigComponent/ConfigAutocompleteSendTo.jsx","components/JsonConfigComponent/ConfigCRON.jsx","components/JsonConfigComponent/ConfigCertificateSelect.jsx","components/JsonConfigComponent/ConfigCheckbox.jsx","components/JsonConfigComponent/ChipInput.jsx","components/JsonConfigComponent/ConfigChip.jsx","components/JsonConfigComponent/ConfigColor.jsx","components/JsonConfigComponent/ConfigCoordinates.jsx","components/JsonConfigComponent/ConfigCustom.jsx","components/JsonConfigComponent/ConfigDatePicker.jsx","components/JsonConfigComponent/ConfigFileSelector.jsx","components/JsonConfigComponent/ConfigFile.jsx","components/JsonConfigComponent/ConfigFunc.jsx","components/JsonConfigComponent/ConfigIP.jsx","components/JsonConfigComponent/ConfigImageUpload.jsx","components/JsonConfigComponent/ConfigInstanceSelect.jsx","components/JsonConfigComponent/ConfigJsonEditor.jsx","components/JsonConfigComponent/ConfigLanguage.jsx","components/JsonConfigComponent/ConfigNumber.jsx","components/JsonConfigComponent/ConfigObjectId.jsx","components/JsonConfigComponent/ConfigPassword.jsx","components/JsonConfigComponent/ConfigPattern.jsx","components/JsonConfigComponent/ConfigRoom.jsx","components/JsonConfigComponent/ConfigSelect.jsx","components/JsonConfigComponent/ConfigSelectSendTo.jsx","components/JsonConfigComponent/ConfigSendto.jsx","components/JsonConfigComponent/ConfigSetState.jsx","components/JsonConfigComponent/ConfigSlider.jsx","components/JsonConfigComponent/ConfigStaticDivider.jsx","components/JsonConfigComponent/ConfigStaticHeader.jsx","components/JsonConfigComponent/ConfigStaticImage.jsx","components/JsonConfigComponent/ConfigStaticText.jsx","components/JsonConfigComponent/ConfigTable.jsx","components/JsonConfigComponent/ConfigText.jsx","components/JsonConfigComponent/ConfigTextSendTo.jsx","components/JsonConfigComponent/ConfigTimePicker.jsx","components/JsonConfigComponent/ConfigTopic.jsx","components/JsonConfigComponent/ConfigUser.jsx","components/JsonConfigComponent/ConfigPanel.jsx","components/State.jsx","components/TabContainer.jsx","components/TabContent.jsx","components/TabHeader.jsx","components/ToggleThemeMenu.jsx","components/Utils.jsx","dialogs/AdapterUpdateDialog.jsx","dialogs/LicenseDialog.jsx","dialogs/SlowConnectionWarningDialog.jsx","helpers/MaterialDynamicIcon.jsx","helpers/MobileDialog.jsx","dialogs/AdapterDeletionDialog.jsx","assets/globe.svg","assets/link.svg","components/MDUtils.jsx","components/Markdown.jsx","dialogs/AdapterInfoDialog.jsx","dialogs/AddInstanceDialog.jsx","components/Adapters/AdapterRow.jsx","components/Adapters/AdapterTile.jsx","dialogs/GitHubInstallDialog.jsx","components/Adapters/AdaptersUpdater.jsx","dialogs/AdaptersUpdaterDialog.jsx","dialogs/RatingDialog.jsx","tabs/Adapters.jsx","tabs/CustomTab.jsx"],"names":["_path","_excluded","_extends","target","i","source","key","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","SvgSentry","_ref","svgRef","title","titleId","props","ForwardRef","ANSI_RESET","ANSI_RESET_COLOR","ANSI_RESET_BG_COLOR","ANSI_BOLD","ANSI_RESET_BOLD","STYLES","bytes","GB","MB","text","mhz","units","u","fileName","pos","hex","bw","r","g","seconds","t","days","hours","minutes","link","objects","adapterInstance","attr","placeholder","hosts","hostname","adminInstance","object","value","ip","error","ipInt","octet","obj","localIp","networkInterfaces","hostIp","inter","instanceObj","currentHostname","adminHost","host","adapter","instance","context","_urls","port","native","placeholders","p","item","protocol","ids","id","_a","_b","_c","_d","_link","_port","callback","result","m","original","style","code","password","passwordRepeat","Utils","styles","theme","CommandDialog","classes","Close","Command","running","e","OpenInBrowser","funcSet","setTabs","tabs","moveCard","atIndex","hoverClientY","hoverMiddleY","card","index","findCard","copyCard","cards","c","canDrag","setEndDrag","iconJSX","selected","compact","badgeContent","badgeColor","tab","_id","children","name","ref","handlerId","drop","useDrop","monitor","draggedId","overIndexActions","hoverBoundingRect","isDragging","drag","preview","useDrag","getEmptyImage","opacity","event","amber","DrawerItem","icon","onClick","editList","visible","editListFunc","badgeAdditionalContent","badgeAdditionalColor","content","ListItemButton","Tooltip","Grid","ListItemIcon","Badge","ListItemText","layerStyles","snapToGrid","x","y","snappedX","snappedY","getItemStyles","initialOffset","currentOffset","isSnapToGrid","transform","CustomDragLayer","itemType","useDragLayer","renderItem","ContextWrapper","ContextWrapperProvider","stateContext","setState","setStateContext","prevState","jsControllerVersion","count","element","Adapters","_installed","useStyles","timer","anchorEl","setAnchorEl","open","setOpen","placement","setPlacement","handleClick","newPlacement","prev","el","Edit","Popper","TransitionProps","Fade","Paper","Typography","DRAWER_FULL_WIDTH","DRAWER_COMPACT_WIDTH","ucFirst","str","STATES","tabsInfo","Apps","Info","Store","Subtitles","ViewList","ArtTrack","Dvr","ViewHeadline","Subscriptions","FlashOn","PersonOutline","Storage","Drawer","changes","notifications","logErrors","logWarnings","nameTab","_","idx","socket","newTabs","newObjCopy","state","hostsUpdate","adaptersUpdate","repository","installed","update","instances","dynamicTabs","singleton","instNum","READY_TO_USE","a","b","systemConfig","it","map","aa","bb","tabsVisible","handleNavigation","IconButton","ChevronLeft","currentTab","Icon","newObj","href","SwipeableDrawer","List","withWidth","offset","Connecting","TOOLBAR_HEIGHT","WizardPasswordTab","TextField","errorPassword","errorPasswordRepeat","Button","WizardLicenseTab","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions","lines","LicenseTexts","line","FormControl","InputLabel","Select","MenuItem","FormControlLabel","Checkbox","Toolbar","SvgPin","SETTINGS_WIDTH","WizardSettingsTab","position","data","changed","latitude","longitude","center","Style","Map","Tile","OSM","View","Feature","Point","lonLat","zoom","Fab","WizardAuthSSLTab","FormGroup","FormHelperText","WizardPortForwarding","_style","_g","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_g2","_path9","_path10","SvgLongLogo","WizardDialog","namespace","PlayArrow","settings","pass","discovery","certPublic","certPrivate","certs","redirect","Router","Check","ToggleThemeMenu","AppBar","Stepper","Step","StepLabel","MyMapComponent","MainSettingsDialog","evt","items","elem","cb","results","selectId","newData","ll","history","repo","Confirm","selectors","MapContainer","TileLayer","repoToArray","repos","arrayToRepo","array","k","DragHandle","SortableItem","_index","repositories","multipleRepos","adminGuiConfig","dataAux","onDelete","onChangeText","onChangeActiveRepo","TableRow","TableCell","showWarning","arr","indexA","indexB","Delete","SortableList","Table","TableHead","TableBody","RepositoriesDialog","oldTitle","newRepo","newTitle","newConfig","oldIndex","newIndex","Add","TableContainer","LicensesDialog","login","resolve","reject","err","licenses","_password","license","CertificatesDialog","cert","rows","type","parts","getRootProps","getInputProps","acceptedFiles","fileRejections","msg","mm","ee","file","reader","SSLDialog","letsEncrypt","ACLDialog","ownerType","elemNum","num","rts","bitGroup","bit","owner","checks","checkboxes","lang","users","groups","objectRights","ii","blueGrey","StatisticsDialog","common","newValue","SOME_PASSWORD","SystemSettingsDialog","diagData","newTab","licenseManager","newState","systemRepositories","systemCertificates","systemLicenses","currentPassword","tabsList","LinearProgress","MyComponent","histories","idAux","Tab","reason","Tabs","TabPanel","other","Box","boxShadow","Login","body","action","motto","Avatar","CircularProgress","Link","node","ExpertModeDialog","boolSettings","func","buttonIcon","doNotShow","setDoNotShow","onClose","Build","expertModeDialogFunc","themeType","root","StyledEngineProvider","ThemeProvider","Status","Warning","Cancel","checkActive","adapterName","checkConditions","condition","installedVersion","vers","vers1","vers2","checkMessages","messages","lastMessageId","messagesToShow","today","message","showIt","uuid","NewsAdminDialog","newsArr","current","setId","last","setLast","indexArr","setIndexArr","newId","linkTitle","frame","newsAdminDialogFunc","themeName","Update","Memory","ImportExport","PermDeviceInformation","CancelPresentation","SettingsRemote","a11yProps","classNameBox","HostWarningDialog","ackCallback","dateFormat","setValue","disabled","setDisabled","expanded","setExpanded","handleChange","handleChangeAccordion","panel","isExpanded","black","nameInst","currentInstance","ExpandMore","hostWarningDialogFunc","LogsWorker","maxLogs","errors","warnings","newLogs","handler","isConnected","currentHost","isEnabled","lastKey","isNew","length","time","ts","tt","from","logSize","InstancesWorker","oldObj","doNotRequestAdapters","HostsWorker","hostId","promises","pResults","AdaptersWorker","adapters","ObjectsWorker","doNotUnsubscribe","custom","types","generateObj","path","GenerateInputsModal","newInstances","onApplyModal","onCloseModal","setError","isError","schema","setSchema","schemaData","setSchemaData","objValue","Settings","ConfigPanel","_error","generateInputsFunc","useStateLocal","defaultValue","boxHeight","headCells","EnhancedTableHead","numSelected","rowCount","onSelectAllClick","createSortHandler","property","headCell","buildComment","comment","defaultLogLevel","step","setStep","listMethods","setListMethods","checkboxChecked","setCheckboxChecked","disableScanner","setDisableScanner","discoveryData","setDiscoveryData","fetchData","resultList","listChecked","lastSelection","readOldData","dataDiscovery","aliveHosts","setAliveHosts","checkSelectHosts","setCheckSelectHosts","hostInstances","setHostInstances","aliveValue","devicesFound","setDevicesFound","devicesProgress","setDevicesProgress","instancesFound","setInstancesFound","scanRunning","setScanRunning","servicesProgress","setServicesProgress","setSelected","handlerInstall","stepUp","stepDown","extendObject","discoverScanner","dataArray","handleSelectAllClick","newSelected","n","isSelected","selectedIndex","checkLicenseAndInputs","objName","setInstallStatus","status","setLogs","logsEl","setCurrentInstall","setCmdName","setInstallProgress","setFinishInstall","params","setInstancesInputsParams","installProgress","currentInstall","installStatus","cmdName","resetStateBack","checkInstall","suggested","setSuggested","showAll","setShowAll","instancesInputsParams","steps","logs","finishInstall","selectLogsIndex","setSelectLogsIndex","Visibility","label","newCheckboxChecked","SelectWithIcon","val","ReportProblem","AssignmentTurnedIn","logsSuccess","adapterId","find","logsError","NavigateBefore","Search","LibraryAdd","NavigateNext","Instances","Intro","Logs","Files","Objects","Users","Enums","Hosts","EasyMode","query","generateClassName","App","elementFind","events","adminAlive","newsFeed","lastNewsId","news","info","checkNews","_repository","currentThemeName","newThemeName","translations","drawerState","configNotSaved","allStored","SlowConnectionWarningDialog","hasUnsavedData","color","invertedColor","noTranslation","enabled","ownSettings","progress","version","adminObj","isStrict","config","storedExpertMode","user","userObj","itemHost","alive","h","now","readTimeoutMs","small","opened","closed","cmd","commandRunning","Snackbar","isYes","stack","Loader","expertModePermanent","IsVisible","HostSelectors","hostName","PictureInPictureAlt","DndProvider","Menu","build","container","LocalizationProvider","_themeName","versionChanged","ignoreErrors","errText","pattern","closeOnReady","activeCmdId","log","upload","gotAdmin","gotWww","max","progressText","exitCode","_adapter","maxLength","match","part","CustomModal","toggleTranslation","fullWidth","help","maxWidth","applyDisabled","applyButton","titleButtonApply","titleButtonClose","onApply","textInput","overflowHidden","CustomSelectButton","arrayItem","contained","icons","translateSuffix","aliveHost","selectedHostObj","getAttr","att","LIKE_SELECT","confirm","isOk","z","dep","_attr","arrayIndex","globalData","customObj","hidden","renderedItem","ConfigGeneric","ConfigAlive","ConfigAutocomplete","selectOptions","options","option","ConfigAutocompleteSendTo","list","ConfigCRON","showDialog","ConfigCertificateSelect","ConfigCheckbox","isIndeterminate","variantComponent","Input","FilledInput","OutlinedInput","light","bottomLineColor","keyCodes","ChipInput","addChipOptions","numChipsBefore","numChipsAfter","focusedChip","chips","chip","additionalUpdates","allowDuplicates","alwaysShowPlaceholder","blurBehavior","chipRenderer","defaultChipRenderer","className","clearInputValueOnChange","dataSource","dataSourceConfig","delayBeforeAdd","disableUnderline","filter","FormHelperTextProps","fullWidthInput","helperText","InputProps","inputRef","InputLabelProps","inputValue","newChipKeyCodes","newChipKeys","onBeforeAdd","onAdd","onBlur","onChange","onFocus","onKeyDown","onKeyPress","onKeyUp","onUpdateInput","readOnly","required","rootRef","variant","actualInputValue","hasInput","shrinkFloatingLabel","chipComponents","InputMore","InputComponent","withStyles","isFocused","isDisabled","isReadOnly","handleDelete","Chip","blue","ConfigLanguage","ConfigColor","ColorPicker","textColor","ConfigCoordinates","getOrLoadRemote","remote","shareScope","remoteFallbackUrl","existingRemote","onload","d","script","loadComponent","sharedScope","module","url","ConfigCustom","i18nURL","json","uniqueName","fileToLoad","componentName","component","keys","Component","ConfigDatePicker","DatePicker","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFileSelector","files","folderName","dirFiles","f","ok","folder","maxSize","ext","base64","byte","deleteFile","binaryString","len","buf","buffer","folders","buttons","play","accept","ConfigFile","extension","FileSelect","ConfigFunc","enums","TextWithIcon","ConfigIP","ips","ConfigImageUpload","exist","UploadImage","ConfigInstanceSelect","ConfigJsonEditor","showSelectId","LANGUAGES","languages","ConfigNumber","_value","isNumber","ConfigObjectId","PASSWORD_PLACEHOLDER","ConfigPassword","repeatPassword","_notEqual","InputAdornment","VisibilityOff","ConfigPattern","ConfigSelect","ConfigSelectSendTo","v","_item","ip2int","findNetworkAddressOfHost","ConfigSendto","hostObj","_origin","response","arg","ConfigSetState","ConfigSlider","min","unit","marks","ConfigStaticDivider","ConfigStaticHeader","ConfigStaticImage","src","ConfigStaticText","objectToArray","nameOfFirstAttr","nameOfSecondAttr","arrayToObject","row","ConfigTable","orderCheck","order","orderBy","newOrder","comparator","stabilizedThis","visibleValue","updateVisible","newItem","accumulator","currentValue","clear","valueInputRef","attrItem","schemaForAttribute","schemaItem","valueChange","buttonsWidth","doAnyFilterSet","filterOn","ConfigText","ConfigTextSendTo","ConfigTimePicker","TimePicker","convertID2Topic","prefix","topic","ConfigTopic","ConfigUser","_users","components","ConfigChip","ConfigRoom","ItemComponent","ConfigPanelStyled","Accordion","AccordionSummary","AccordionDetails","State","TabContainer","TabContent","TabHeader","toggleTheme","size","NAMESPACE","months","QUALITY_BITS","SIGNATURES","word","isDesc","forEnumId","dest","removed","defaultEnabling","s","rgb","secs","angle","format","year","day","date","rel","states","instanceId","noCommon","newSmartName","byON","smartType","language","nnn","_smartName","smartName","empty","invert","mix","tmp","themes","newTheme","dateObj","dd","header","attrs","doc","filename","quality","ex","blob","signature","AdapterUpdateDialog","dependency","entry","objMessages","oldVersion","newVersion","show","rule","op","ver","res","button","LicenseDialog","setText","loading","setLoading","licenseDialogFunc","ICON_CACHE","objIcon","MaterialDynamicIcon","iconName","objIconBool","setUrl","Element","MOBILE_WIDTH","MobileDialog","moreMobileIcon","AdapterDeletionDialog","deleteCustomSupported","SvgGlobe","_polygon","SvgLink","MDUtils","changelog","level","cont","ignoreHeaders","changelogA","licenseA","newLines","CONVERTER_OPTIONS","ADAPTER_CARD","EXPAND_LANGUAGE","Markdown","_level","nextProps","nextContext","changeLog","entries","oneEntry","author","_title","affiliate","_changeLog","authors","email","translatedFrom","ListItem","menu","ch","Affiliates","links","CustomLink","CustomH","versions","pos1","pos2","prefixHttp","prefixImage","isImage","cells","j","crt","Editor","meta","reactElements","trimmed","rct","AdapterInfoDialog","uri","uriGithub","rawUri","readme","html","AddInstanceDialog","dependencies","instanceNumbers","checkDeps","green","red","AdapterRow","enabledCount","installedCount","installedFrom","GitHub","isCategory","connectionType","updateAvailable","rightDependencies","rightOs","sentry","categoryName","openInstallVersionDialog","descHidden","versionDate","onSetRating","rating","ChevronRight","Cloud","CloudOff","ArrowUpward","ArrowDownward","Remove","Refresh","Help","Publish","DeleteForever","AddToPhotos","boxShadowHover","MyImage","alt","img","AdapterTile","image","onUpdate","description","onAddInstance","onInfo","expertMode","onUpload","onDeletion","rebuild","onRebuild","stat","allowAdapterInstall","allowAdapterReadme","allowAdapterDelete","allowAdapterUpdate","allowAdapterRating","openCollapse","setCollapse","focused","setFocused","bool","Rating","MoreVert","flat","depth","acc","cur","categories","installFromUrl","autocompleteValue","setAutocompleteValue","debug","setDebug","setCurrentTab","category","closeInit","_list","Sms","_params","_url","AdaptersUpdater","adapterObj","checked","ListItemSecondaryAction","Language","AdaptersUpdaterDialog","updated","RatingDialog","votings","commentsByLanguage","found","ListItemAvatar","WIDTHS","SUM","arg1","arg2","bigUpdate","indicateUpdate","_adapters","hostData","ratings","_hostData","_ratings","nodeVersion","checkVersion","descWidth","location","repositoryValue","votes","nodeJsVersion","hostOs","categoriesSorted","categoriesExpanded","installedInGroup","_titles","installedList","viewMode","updateList","categoriesTiles","filterTiles","customUrl","deleteCustom","oldState","adapterToUpdate","adapterInstallVersion","all","onlyInstalled","search","filteredList","desc","cached","textDaysAgo0","textDaysAgo1","textDaysAgo2","textDaysAgo","sortPopularFirst","sortRecentlyUpdated","cat","daysAgo10","daysAgo","_daysAgo10","reload","updateAllButtonAvailable","formatNews","ViewModule","FolderOpen","Folder","Star","ignoreVersion","getHref","instancesWorker","hrefs","CustomTab","prevProps","snapshot"],"mappings":"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","file":"static/js/5710.110bb3eb.chunk.js","sourcesContent":["var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSentry(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 256 230\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M251.22 187.856c5.785 10.045 6.345 20.608 1.538 28.958-4.8 8.357-14.192 13.143-25.768 13.143h-21.816c.259-4.068.431-8.17.431-12.302 0-4.628-.215-9.198-.531-13.754l14.35-.014c3.528 0 6.38-2.867 6.38-6.403a6.46 6.46 0 0 0-.768-3.053l-91.46-158.97a6.349 6.349 0 0 0-5.54-3.24 6.374 6.374 0 0 0-5.461 3.09l-14.522 25.243c44.134 33.27 73.804 84.813 77.864 143.333.316 4.548.531 9.119.531 13.753 0 4.132-.172 8.228-.424 12.302h-71.246c.388-4.053.611-8.148.611-12.302 0-4.649-.273-9.233-.776-13.753-3.52-32.206-19.286-60.748-42.503-80.89l-10.003 17.376c17.54 16.325 29.512 38.558 32.767 63.514.59 4.505.92 9.09.92 13.753 0 4.154-.273 8.264-.74 12.302H29.01c-11.576 0-20.968-4.793-25.768-13.15-4.807-8.35-4.247-18.905 1.538-28.958l13.56-23.238a79.42 79.42 0 0 1 20.715 16.052l-8.083 13.768a6.523 6.523 0 0 0-.77 3.054 6.383 6.383 0 0 0 6.382 6.395l32.033.015c-2.687-15.356-9.772-29.21-19.918-40.183-5.979-6.445-12.963-11.9-20.738-16.074l35.77-62.15a151.427 151.427 0 0 1 21.564 14.624c30.827 25.013 51.644 61.955 55.416 103.776h19.172c-3.91-48.892-28.477-92.006-64.937-120.548a171.205 171.205 0 0 0-21.672-14.457l30.532-53.045C109.583 5.77 118.42 0 128.036 0c9.607 0 18.438 5.77 24.223 15.823l98.961 172.033z\",\n fill: \"#FB2D26\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSentry);\nexport default __webpack_public_path__ + \"static/media/sentry.e732e10c5c1ceed0955b2fec6dab33f8.svg\";\nexport { ForwardRef as ReactComponent };","const ANSI_RESET = 0;\nconst ANSI_RESET_COLOR = 39;\nconst ANSI_RESET_BG_COLOR = 49;\nconst ANSI_BOLD = 1;\nconst ANSI_RESET_BOLD = 22;\n\nconst STYLES = {\n 30: {color: 'black'}, // ANSI_BLACK\n 31: {color: 'red'}, // ANSI_RED\n 32: {color: 'green'}, // ANSI_GREEN\n 33: {color: 'yellow'}, // ANSI_YELLOW\n 34: {color: 'blue'}, // ANSI_BLUE\n 35: {color: 'purple'}, // ANSI_PURPLE\n 36: {color: 'cyan'}, // ANSI_CYAN\n 37: {color: 'white'}, // ANSI_WHITE\n\n 90: {color: 'grey'}, // ANSI_BRIGHT_BLACK\n 91: {color: 'lightred'}, // ANSI_BRIGHT_RED\n 92: {color: 'lightgreen'}, // ANSI_BRIGHT_GREEN\n 93: {color: 'lightyellow'}, // ANSI_BRIGHT_YELLOW\n 94: {color: 'lightblue'}, // ANSI_BRIGHT_BLUE\n 95: {color: 'lightpurple'}, // ANSI_BRIGHT_PURPLE\n 96: {color: 'lightcyan'}, // ANSI_BRIGHT_CYAN\n 97: {color: 'white'}, // ANSI_BRIGHT_WHITE\n\n 40: {backgroundColor: 'black'}, // ANSI_BG_BLACK\n 41: {backgroundColor: 'red'}, // ANSI_BG_RED\n 42: {backgroundColor: 'green'}, // ANSI_BG_GREEN\n 43: {backgroundColor: 'yellow'}, // ANSI_BG_YELLOW\n 44: {backgroundColor: 'blue'}, // ANSI_BG_BLUE\n 45: {backgroundColor: 'purple'}, // ANSI_BG_PURPLE\n 46: {backgroundColor: 'cyan'}, // ANSI_BG_CYAN\n 47: {backgroundColor: 'white'}, // ANSI_BG_WHITE\n\n 100: {backgroundColor: 'grey'}, // ANSI_BRIGHT_BG_BLACK\n 101: {backgroundColor: 'lightred'}, // ANSI_BRIGHT_BG_RED\n 102: {backgroundColor: 'lightgreen'}, // ANSI_BRIGHT_BG_GREEN\n 103: {backgroundColor: 'lightyellow'}, // ANSI_BRIGHT_BG_YELLOW\n 104: {backgroundColor: 'lightblue'}, // ANSI_BRIGHT_BG_BLUE\n 105: {backgroundColor: 'lightpurple'}, // ANSI_BRIGHT_BG_PURPLE\n 106: {backgroundColor: 'lightcyan'}, // ANSI_BRIGHT_BG_CYAN\n 107: {backgroundColor: 'white'}, // ANSI_BRIGHT_BG_WHITE\n}\n\nclass Utils {\n /**\n * Format bytes to MB or GB\n * @param {!number} bytes\n * @returns {String}\n */\n static formatRam(bytes) {\n\n const GB = Math.floor(bytes / (1024 * 1024 * 1024) * 10) / 10;\n bytes %= (1024 * 1024 * 1024);\n const MB = Math.floor(bytes / (1024 * 1024) * 10) / 10;\n let text = '';\n\n if (GB > 1) {\n text += GB + ' GB';\n } else {\n text += MB + ' MB';\n }\n\n return text;\n }\n\n static formatSpeed(mhz) {\n return mhz + ' MHz';\n }\n\n static formatBytes(bytes) {\n if (Math.abs(bytes) < 1024) {\n return bytes + ' B';\n }\n\n const units = ['KB','MB','GB'];\n //const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return bytes.toFixed(1) + ' ' + units[u];\n }\n\n static getFileExtension(fileName) {\n const pos = fileName.lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n } else {\n return null;\n }\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n static invertColor(hex, bw) {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n // invert color components\n r = (255 - r).toString(16);\n g = (255 - g).toString(16);\n b = (255 - b).toString(16);\n // pad each with zeros and return\n return '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n }\n\n /**\n * Format number in seconds to time text\n * @param {number} seconds\n * @param {function} t i18n.t function\n * @returns {String}\n */\n static formatSeconds(seconds, t) {\n const days = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n let hours = Math.floor(seconds / 3600);\n if (hours < 10) {\n hours = '0' + hours;\n }\n seconds %= 3600;\n let minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n let text = '';\n if (days) {\n text += days + ' ' + t('daysShortText') + ' ';\n }\n text += hours + ':' + minutes + ':' + seconds;\n\n return text;\n }\n\n // internal use\n static _replaceLink(link, objects, adapterInstance, attr, placeholder, hosts, hostname, adminInstance) {\n if (attr === 'protocol') {\n attr = 'secure';\n }\n\n try {\n const object = objects['system.adapter.' + adapterInstance];\n\n if (link && object) {\n if (attr === 'secure') {\n link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');\n } else {\n let value = object.native[attr];\n // workaround for port\n if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {\n if (object.native.secure === true) {\n value = 443;\n } else {\n value = 80;\n }\n }\n\n if (attr === 'bind' || attr === 'ip') {\n let ip = object.native.bind || object.native.ip;\n if (ip === '0.0.0.0') {\n ip = Utils.getHostname(object, objects, hosts, hostname, adminInstance);\n }\n if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, ip || '');\n } else {\n link = link.replace(`%${placeholder}%`, ip || '');\n }\n } else if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, value);\n } else {\n link = link.replace(`%${placeholder}%`, value);\n }\n }\n } else {\n console.log('Cannot get link ' + attr);\n link = link.replace(`%${placeholder}%`, '');\n }\n } catch (error) {\n console.log(error);\n }\n return link;\n }\n\n static ip2int(ip) {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n }\n\n static findNetworkAddressOfHost(obj, localIp) {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n } else if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n } else if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) { // if DNS name\n hostIp = ip.address;\n } else {\n if (ip.family === 'IPv4' && localIp.includes('.') &&\n (Utils.ip2int(localIp) & Utils.ip2int(ip.netmask)) === (Utils.ip2int(ip.address) & Utils.ip2int(ip.netmask))) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n });\n });\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n } else if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n } else if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) { // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n });\n });\n }\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n });\n });\n }\n\n return hostIp;\n }\n\n static getHostname(instanceObj, objects, hosts, currentHostname, adminInstance) {\n if (!instanceObj || !instanceObj.common) {\n return null;\n }\n\n let hostname;\n // check if the adapter from the same host as admin\n const adminHost = objects['system.adapter.' + adminInstance]?.common?.host;\n if (instanceObj.common.host !== adminHost) {\n // find IP address\n const host = hosts.find(obj => obj._id === 'system.host.' + instanceObj.common.host);\n if (host) {\n const ip = Utils.findNetworkAddressOfHost(host, currentHostname);\n if (ip) {\n hostname = ip;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null\n }\n } else {\n hostname = currentHostname;\n }\n\n return hostname;\n }\n\n /**\n * Format number in seconds to time text\n * @param {string} link pattern for link\n * @param {string} adapter admin name\n * @param {string} instance admin instance\n * @param {object} context {objects, hostname(of browser), protocol(of browser)}\n * @returns {array<any>}\n */\n static replaceLink(link, adapter, instance, context) {\n const _urls = [];\n let port;\n\n if (link) {\n const instanceObj = context.objects[`system.adapter.${adapter}.${instance}`];\n const native = instanceObj?.native || {};\n\n let placeholders = link.match(/%(\\w+)%/g);\n\n if (placeholders) {\n for (let p = 0; p < placeholders.length; p++) {\n let placeholder = placeholders[p];\n\n if (placeholder === '%ip%') {\n let ip = native.bind || native.ip;\n if (!ip || ip === '127.0.0.1' || ip === 'localhost' || ip === '0.0.0.0') {\n // Check host\n ip = Utils.getHostname(instanceObj, context.objects, context.hosts, context.hostname, context.adminInstance);\n }\n\n if (_urls.length) {\n _urls.forEach(item => item.url = item.url.replace('%ip%', ip));\n } else {\n link = link.replace('%ip%', ip ||'');\n }\n } else if (placeholder === '%protocol%') {\n let protocol = native.secure === undefined ? native.protocol : native.secure;\n if (protocol === true || protocol === 'true') {\n protocol = 'https';\n } else if (protocol === false || protocol === 'false' || !protocol) {\n protocol = 'http';\n }\n protocol = protocol.replace(/:$/, '');\n\n if (_urls.length) {\n _urls.forEach(item => item.url = item.url.replace('%protocol%', protocol));\n } else {\n link = link.replace('%protocol%', protocol);\n }\n } else if (placeholder === '%instance%') {\n link = link.replace('%instance%', instance);\n if (_urls.length) {\n _urls.forEach(item => item.url = item.url.replace('%instance%', instance));\n } else {\n link = link.replace('%instance%', instance);\n }\n } else {\n // remove %%\n placeholder = placeholder.replace(/%/g, '');\n\n if (placeholder.startsWith('native_')) {\n placeholder = placeholder.substring(7);\n }\n\n // like web.0_port or web_protocol\n if (!placeholder.includes('_')) {\n // if only one instance\n const adapterInstance = adapter + '.' + instance;\n if (_urls.length) {\n _urls.forEach(item =>\n item.url = Utils._replaceLink(item.url, context.objects, adapterInstance, placeholder, placeholder, context.hosts, context.hostname, context.adminInstance));\n } else {\n link = Utils._replaceLink(link, context.objects, adapterInstance, placeholder, placeholder, context.hosts, context.hostname, context.adminInstance);\n port = context.objects['system.adapter.' + adapterInstance]?.native?.port;\n }\n } else {\n const [adapterInstance, attr] = placeholder.split('_');\n\n // if instance number not found\n if (!adapterInstance.match(/\\.[0-9]+$/)) {\n // list all possible instances\n let ids;\n if (adapter === adapterInstance) {\n // take only this one instance and that's all\n ids = [adapter + '.' + instance];\n } else {\n ids = Object.keys(context.objects)\n .filter(id => id.startsWith('system.adapter.' + adapterInstance + '.') && context.objects[id].common.enabled)\n .map(id => id.substring(15));\n }\n\n // eslint-disable-next-line\n ids.forEach(id => {\n if (_urls.length) {\n const item = _urls.find(t => t.instance === id);\n if (item) {\n item.url = Utils._replaceLink(item.url, context.objects, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);\n } else {\n // add new\n const _link = Utils._replaceLink(link, context.objects, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);\n const _port = context.objects['system.adapter.' + id]?.native?.port;\n _urls.push({url: _link, port: _port, instance: id});\n }\n } else {\n const _link = Utils._replaceLink(link, context.objects, id, attr, placeholder, context.hosts, context.hostname, context.adminInstance);\n const _port = context.objects['system.adapter.' + id]?.native?.port;\n _urls.push({url: _link, port: _port, instance: id});\n }\n });\n } else {\n link = Utils._replaceLink(link, context.objects, adapterInstance, attr, placeholder, context.hosts, context.hostname, context.adminInstance);\n port = context.objects['system.adapter.' + adapterInstance]?.native?.port;\n }\n }\n }\n }\n }\n }\n\n if (_urls.length) {\n return _urls;\n } else {\n return [{url: link, port}];\n }\n }\n\n static objectMap(object, callback) {\n let result = [];\n for (let key in object) {\n result.push(callback(object[key], key));\n }\n return result;\n }\n\n static fixAdminUI(obj) {\n if (obj && obj.common && !obj.common.adminUI) {\n if (obj.common.noConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'none';\n } else if (obj.common.jsonConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'materialize';\n } else {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'html';\n }\n\n if (obj.common.jsonCustom) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n } else if (obj.common.supportCustoms) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n }\n\n if (obj.common.materializeTab && obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'materialize';\n } else if (obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'html';\n }\n\n obj.common.adminUI && console.warn(`Please add to \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`);\n }\n }\n\n static parseColorMessage(text) {\n if (text && (text.includes('\\u001b[') || text.includes('\\u001B['))) {\n // eslint-disable-next-line\n let m = text.match(/\\u001b\\[\\d+m/gi);\n if (m) {\n const original = text;\n const result = [];\n let style = {};\n for (let i = 0; i < m.length; i++) {\n const pos = text.indexOf(m[i]);\n if (pos) {\n result.push({ text: text.substring(0, pos), style: JSON.parse(JSON.stringify(style)) });\n }\n const code = parseInt(m[i].substring(2), 10);\n if (STYLES[code]) {\n Object.assign(style, STYLES[code]);\n } else if (ANSI_RESET_COLOR === code) {\n delete style.color;\n } else if (ANSI_RESET_BG_COLOR === code) {\n delete style.backgroundColor;\n } else if (ANSI_RESET_BOLD === code) {\n delete style.fontWeight;\n } else if (ANSI_BOLD === code) {\n style.fontWeight = 'bold';\n } else if (ANSI_RESET === code) {\n style = {};\n }\n text = text.substring(m[i].length + pos);\n }\n if (text) {\n result.push({ text, style: JSON.parse(JSON.stringify(style)) });\n }\n\n return {original, parts: result};\n } else {\n return text;\n }\n } else {\n return text;\n }\n }\n\n static PASSWORD_ERROR_LENGTH = 'Password must be at least 8 characters long and have numbers, upper and lower case letters';\n static PASSWORD_ERROR_NOT_EQUAL = 'Repeat password is not equal with password';\n static PASSWORD_ERROR_EMPTY = 'Empty password is not allowed';\n static PASSWORD_SET = '***********';\n\n static checkPassword(password, passwordRepeat) {\n password = password || '';\n passwordRepeat = passwordRepeat || '';\n if (password && passwordRepeat && password !== Utils.PASSWORD_SET && passwordRepeat !== Utils.PASSWORD_SET) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return Utils.PASSWORD_ERROR_LENGTH;\n } else if (password !== passwordRepeat) {\n return Utils.PASSWORD_ERROR_NOT_EQUAL;\n } else {\n return false;\n }\n } else if (password && password !== Utils.PASSWORD_SET) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return Utils.PASSWORD_ERROR_LENGTH;\n } else {\n return false;\n }\n } else if (passwordRepeat && passwordRepeat !== Utils.PASSWORD_SET) {\n if (passwordRepeat.length < 8 || !passwordRepeat.match(/\\d/) || !passwordRepeat.match(/[a-z]/) || !passwordRepeat.match(/[A-Z]/)) {\n return Utils.PASSWORD_ERROR_LENGTH;\n } else {\n return false;\n }\n } else if (password === Utils.PASSWORD_SET || passwordRepeat === Utils.PASSWORD_SET) {\n return false;\n } else {\n return Utils.PASSWORD_ERROR_EMPTY;\n }\n }\n}\n\nexport default Utils;","import React, { Component } from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@mui/styles';\n\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n IconButton,\n} from '@mui/material';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport OpenInBrowserIcon from '@mui/icons-material/OpenInBrowser';\n\nimport Command from '../components/Command';\n\nconst styles = theme => ({\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n hiddenDialog: {\n display: 'none',\n },\n dialogRoot: {\n height: 'calc(100% - 64px)',\n }\n});\n\nclass CommandDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n log: ['$ iobroker ' + (props.cmd || '')],\n init: false,\n max: null,\n value: null,\n progressText: '',\n closeOnReady: (window._localStorage || window.localStorage).getItem('CommandDialog.closeOnReady') === 'true',\n checked: true\n };\n\n this.t = props.t;\n }\n render() {\n const { classes } = this.props;\n\n return <Dialog\n scroll=\"paper\"\n fullWidth={true}\n classes={{ root: !this.props.visible ? classes.hiddenDialog : '', paper: classes.dialogRoot }}\n onClose={this.props.inBackground ? this.props.onClose : this.props.onInBackground}\n open={true}\n maxWidth=\"md\"\n >\n <DialogTitle>\n {this.state.progressText || this.props.t('Running command')}\n <IconButton size=\"large\" className={classes.closeButton} onClick={this.props.onClose} disabled={this.props.inBackground}>\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers style={{ height: '100%' }}>\n <Command\n noSpacing={true}\n key=\"command\"\n ready={this.props.ready}\n host={this.props.host}\n socket={this.props.socket}\n t={this.props.t}\n inBackground={this.props.inBackground}\n commandError={this.props.commandError}\n errorFunc={this.props.errorFunc}\n performed={this.props.performed}\n callback={this.props.callback}\n cmd={this.props.cmd}\n onFinished={() => this.state.closeOnReady && this.props.onClose()}\n onSetCommandRunning={running => this.props.onSetCommandRunning(running)}\n />\n </DialogContent>\n <DialogActions style={{ justifyContent: 'space-between' }}>\n <FormControlLabel\n control={\n <Checkbox\n disabled={this.props.inBackground}\n checked={this.state.closeOnReady}\n onChange={e => {\n this.setState({ closeOnReady: e.target.checked });\n (window._localStorage || window.localStorage).setItem('CommandDialog.closeOnReady', e.target.checked ? 'true' : 'false');\n }} />}\n label={this.props.t('close on ready')}\n />\n <div>\n <Button\n variant=\"contained\"\n autoFocus\n disabled={this.props.inBackground}\n style={{ marginRight: 8 }}\n onClick={this.props.onInBackground}\n startIcon={<OpenInBrowserIcon />}\n color=\"primary\">\n {this.props.confirmText || this.props.t('In background')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={!this.props.inBackground}\n onClick={this.props.onClose}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </div>\n </DialogActions>\n </Dialog>;\n }\n}\n\nCommandDialog.propTypes = {\n t: PropTypes.func,\n confirmText: PropTypes.string,\n header: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n callback: PropTypes.bool,\n onInBackground: PropTypes.func.isRequired,\n visible: PropTypes.bool.isRequired,\n ready: PropTypes.bool.isRequired,\n onSetCommandRunning: PropTypes.func.isRequired,\n cmd: PropTypes.string,\n errorFunc: PropTypes.func,\n performed: PropTypes.func,\n inBackground: PropTypes.bool,\n commandError: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n host: PropTypes.string.isRequired,\n};\n\nexport default withStyles(styles)(CommandDialog);","import _ from 'lodash';\n\nconst funcSet = _.throttle(\n (setTabs, tabs) => setTabs(tabs)\n , 200);\n\nconst moveCard = (id, atIndex, tabs, setTabs, hoverClientY, hoverMiddleY) => {\n const { card, index } = findCard(id, tabs);\n if (index === atIndex) {\n return;\n }\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = JSON.parse(JSON.stringify(tabs));\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n funcSet(setTabs,copyCard);\n }\n};\n\nconst findCard = (id, cards) => {\n const card = cards.find(c => c.name === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nexport { moveCard, findCard };","import React, { useEffect, useRef } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { findCard, moveCard } from '../helpers/cardSort';\nconst style = {\n cursor: 'move',\n};\nconst DragWrapper = ({ canDrag, setEndDrag, iconJSX, selected, compact, badgeContent, badgeColor, tab, tabs, setTabs, _id, children, name }) => {\n const ref = useRef(null);\n const [{ handlerId }, drop] = useDrop({\n accept: 'box',\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n // canDrop: () => false,\n hover({ _id: draggedId }, monitor) {\n if (!ref.current) {\n return;\n }\n const { index: overIndexActions } = findCard(_id, tabs);\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n moveCard(draggedId,\n overIndexActions,\n tabs,\n setTabs,\n hoverClientY,\n hoverMiddleY\n );\n }\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'box',\n item: { _id: tab.name, ...tab, iconJSX, selected, compact, badgeContent, badgeColor },\n canDrag: () => canDrag,\n end: () => setEndDrag(),\n collect: monitor => ({ isDragging: monitor.isDragging() }),\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const opacity = isDragging ? 0 : 1;\n drag(drop(ref));\n\n return <div ref={ref} style={{ ...style, opacity }} data-handler-id={handlerId}>\n <a type=\"box\" data-handler-id={handlerId} onClick={event => event.preventDefault()} href={`/#${name}`} style={{ ...style, opacity, color: 'inherit', textDecoration: 'none' }} >\n {children}\n </a>\n </div>;\n}\n\nexport default DragWrapper;","import PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { withStyles } from '@mui/styles';\n\nimport Badge from '@mui/material/Badge';\nimport Grid from '@mui/material/Grid';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport amber from '@mui/material/colors/amber';\n\nimport Utils from '../Utils';\nimport { Checkbox } from '@mui/material';\n\nconst styles = theme => ({\n selected: {\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : Utils.invertColor(theme.palette.primary.main, true),\n '&:hover': {\n color: theme.palette.primary.main,\n '& $selectedIcon': {\n color: theme.palette.primary.main,\n }\n },\n },\n selectedIcon: {\n color: theme.palette.mode === 'light' ? 'white' : Utils.invertColor(theme.palette.primary.main, true),\n },\n compactBadge: {\n paddingLeft: 12,\n },\n noWrap: {\n flexWrap: 'nowrap',\n height: 40\n },\n warn: {\n backgroundColor: amber[500]\n }\n});\n\nconst DrawerItem = props => {\n const {\n badgeColor,\n badgeContent,\n classes,\n compact,\n icon,\n onClick,\n selected,\n text,\n editList,\n visible,\n editListFunc,\n badgeAdditionalContent,\n badgeAdditionalColor,\n style\n } = props;\n\n let content = text ? text.replace('>', '>') : '';\n\n if (content === 'Text->Kommandos') {\n content = 'Text→Cmd';\n } else if (content === 'Text->Commands') {\n content = 'Text→Cmd';\n }\n\n return <div style={Object.assign({ display: 'flex' }, style || {})}>\n {!!editList && <Checkbox checked={visible} onClick={editListFunc} />}\n <ListItemButton\n className={clsx({ [classes.selected]: selected }, compact && classes.compactBadge)}\n onClick={onClick}\n >\n <Tooltip title={compact ? content : ''}>\n <Grid\n container\n spacing={1}\n alignItems=\"center\"\n className={classes.noWrap}\n >\n <Grid item>\n <ListItemIcon style={{ minWidth: 0 }} classes={{root: clsx(selected && classes.selectedIcon)}}>\n <Badge\n badgeContent={badgeContent || 0}\n color={(badgeColor === 'warn' ? 'default' : badgeColor) || 'primary'}\n classes={badgeColor === 'warn' ? { badge: classes.warn } : {}}\n >\n {icon}\n </Badge>\n </ListItemIcon>\n </Grid>\n {!compact &&\n <Grid item>\n <ListItemText>\n <Badge\n badgeContent={badgeAdditionalContent || 0}\n color={(badgeAdditionalColor === 'warn' ? 'default' : badgeAdditionalColor) || 'primary'}\n classes={badgeAdditionalColor === 'warn' ? { badge: classes.warn } : {}}\n >\n {content}\n </Badge>\n </ListItemText>\n </Grid>\n }\n </Grid>\n </Tooltip>\n </ListItemButton>\n </div>;\n}\n\nDrawerItem.propTypes = {\n icon: PropTypes.object,\n onClick: PropTypes.func,\n style: PropTypes.object,\n selected: PropTypes.bool,\n compact: PropTypes.bool,\n text: PropTypes.string,\n themeType: PropTypes.string,\n badgeContent: PropTypes.number,\n badgeColor: PropTypes.oneOf(['', 'default', 'primary', 'secondary', 'error', 'warn'])\n};\n\nexport default withStyles(styles)(DrawerItem);","\nimport React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport DrawerItem from './DrawerItem';\nimport { withStyles } from '@mui/styles';\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\nconst snapToGrid = (x, y) => {\n const snappedX = Math.round(x / 32) * 32\n const snappedY = Math.round(y / 32) * 32\n return [snappedX, snappedY]\n}\n\nconst getItemStyles = (initialOffset, currentOffset, isSnapToGrid) => {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none'\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform\n };\n}\n\nconst styles = theme => ({\n root: {\n background: theme.palette.background.default,\n }\n})\nconst CustomDragLayer = ({ classes }) => {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n // targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n targetIds: monitor.getTargetIds()\n }));\n\n const renderItem = () => {\n switch (itemType) {\n case 'box':\n return <div className={classes.root} style={{ width: 179, }}><DrawerItem\n key={item.name}\n editList={true}\n visible={item.visible}\n editListFunc={() => { }}\n compact={item.compact}\n // onClick={() => this.props.handleNavigation(tab.name)}\n icon={item.iconJSX}\n text={item.title}\n selected={item.selected}\n badgeContent={item.badgeContent}\n badgeColor={item.badgeColor} /></div>;\n default:\n return null;\n }\n }\n\n if (!isDragging) {\n return null;\n }\n\n return <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>\n {renderItem()}\n </div>\n </div>;\n};\n\nexport default withStyles(styles)(CustomDragLayer);","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\n\nimport Adapters from '../tabs/Adapters';\n\nexport const ContextWrapper = createContext();\n\nexport const ContextWrapperProvider = ({ children }) => {\n const [stateContext, setState] = useState({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null\n });\n\n const setStateContext = obj => {\n setState(prevState =>\n Object.keys(prevState).length === Object.keys(obj).length ?\n { ...obj }\n :\n { ...prevState, ...obj }\n );\n };\n\n useEffect(() => {\n if (stateContext.hosts) {\n const jsControllerVersion = stateContext.repository['js-controller'].version;\n let count = 0;\n stateContext.hosts.forEach(element => {\n if (Adapters.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n setStateContext({ hostsUpdate: count });\n }\n\n if (stateContext.installed) {\n let count = 0;\n Object.keys(stateContext.installed).forEach(element => {\n const _installed = stateContext.installed[element];\n const adapter = stateContext.repository[element];\n if (element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n Adapters.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n setStateContext({ adaptersUpdate: count });\n }\n\n }, [stateContext.hosts, stateContext.installed, stateContext.repository]);\n\n return <ContextWrapper.Provider value={{ stateContext, setStateContext }}>\n {children}\n </ContextWrapper.Provider>;\n};","import React from 'react';\nimport { makeStyles } from '@mui/styles';\nimport Popper from '@mui/material/Popper';\nimport Typography from '@mui/material/Typography';\nimport Fade from '@mui/material/Fade';\nimport Paper from '@mui/material/Paper';\nimport { IconButton } from '@mui/material';\nimport EditIcon from '@mui/icons-material/Edit';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst useStyles = makeStyles((theme) => ({\n typography: {\n padding: theme.spacing(2),\n },\n}));\n\nlet timer;\n\nconst CustomPopper = ({ editList, onClick }) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [open, setOpen] = React.useState(false);\n const [placement, setPlacement] = React.useState();\n const classes = useStyles();\n\n const handleClick = (newPlacement) => (event) => {\n setAnchorEl(event.currentTarget);\n setOpen((prev) => placement !== newPlacement || !prev);\n setPlacement(newPlacement);\n };\n return <>\n <IconButton\n size=\"large\"\n style={editList ? { color: 'red' } : null}\n onClick={(el) => {\n onClick();\n if (!editList) {\n handleClick('right')(el);\n timer = setTimeout(() => setOpen(false), 3000);\n } else {\n setOpen(false);\n clearTimeout(timer);\n }\n }}\n title={I18n.t('show/hide item')}>\n <EditIcon />\n </IconButton>\n <Popper style={{ zIndex: 2222 }} open={open} anchorEl={anchorEl} placement={placement} transition>\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper>\n <Typography className={classes.typography}>{I18n.t('You can drag and drop list items for reorder')}</Typography>\n </Paper>\n </Fade>\n )}\n </Popper>\n </>;\n}\n\nexport default CustomPopper;","import React, { Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Avatar, Drawer as MaterialDrawer } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport Typography from '@mui/material/Typography';\n\nimport SwipeableDrawer from '@mui/material/SwipeableDrawer';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport AppsIcon from '@mui/icons-material/Apps';\nimport InfoIcon from '@mui/icons-material/Info';\nimport StoreIcon from '@mui/icons-material/Store';\nimport SubtitlesIcon from '@mui/icons-material/Subtitles';\nimport ViewListIcon from '@mui/icons-material/ViewList';\nimport ArtTrackIcon from '@mui/icons-material/ArtTrack';\nimport DvrIcon from '@mui/icons-material/Dvr';\nimport ViewHeadlineIcon from '@mui/icons-material/ViewHeadline';\nimport SubscriptionsIcon from '@mui/icons-material/Subscriptions';\nimport FlashOnIcon from '@mui/icons-material/FlashOn';\nimport PersonOutlineIcon from '@mui/icons-material/PersonOutline';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport FilesIcon from '@mui/icons-material/FileCopy';\n\nimport LogoutIcon from '@iobroker/adapter-react-v5/icons/IconLogout';\n\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport DragWrapper from './DragWrapper';\nimport CustomDragLayer from './CustomDragLayer';\nimport { ContextWrapper } from './ContextWrapper';\nimport CustomPopper from './CustomPopper';\nimport { getHref } from '../tabs/CustomTab';\nimport DrawerItem from './DrawerItem';\nimport Adapters from '../tabs/Adapters';\n\nexport const DRAWER_FULL_WIDTH = 180;\nexport const DRAWER_COMPACT_WIDTH = 50;\n\nfunction ucFirst(str) {\n return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();\n}\n\nconst styles = theme => ({\n root: {\n flexShrink: 0,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n display: 'flex',\n flexDirection: 'column',\n },\n rootFullWidth: {\n width: DRAWER_FULL_WIDTH,\n },\n rootCompactWidth: {\n width: DRAWER_COMPACT_WIDTH,\n },\n paper: {\n width: 'inherit',\n overflowX: 'hidden'\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n ...theme.mixins.toolbar,\n justifyContent: 'flex-end',\n position: 'sticky',\n top: 0,\n zIndex: 2,\n background: theme.palette.background.default\n },\n headerCompact: {\n padding: 0,\n },\n headerLogout: {\n justifyContent: 'space-between'\n },\n list: {\n paddingTop: 0,\n flex: '1 0 auto',\n },\n logout: {\n color: theme.palette.primary.main\n },\n icon: {\n width: 20,\n height: 20,\n },\n logoWhite: {\n background: '#FFFFFF'\n },\n logoSize: {\n width: 50,\n height: 50\n },\n avatarBlock: {\n width: '100%',\n display: 'flex',\n // justifyContent: 'center',\n // marginLeft: 48,\n marginTop: 5,\n marginBottom: 5\n },\n avatarNotVisible: {\n opacity: 0,\n transition: 'opacity 0.3s'\n },\n avatarVisible: {\n opacity: 1\n },\n expand: {\n marginBottom: 5,\n marginLeft: 5\n },\n styleVersion: {\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#ffffff5e' : '#0000005e',\n alignSelf: 'center',\n marginLeft: 5\n },\n editButton: {\n position: 'sticky',\n bottom: 0,\n right: 0,\n width: 'fit-content',\n marginLeft: 'auto',\n marginTop: 'auto',\n transition: 'opacity 0.5s',\n }\n});\n\nexport const STATES = {\n opened: 0,\n closed: 1,\n compact: 2\n};\n\nconst tabsInfo = {\n 'tab-intro': {order: 1, icon: <AppsIcon />},\n 'tab-info': {order: 5, icon: <InfoIcon />, host: true},\n 'tab-adapters': {order: 10, icon: <StoreIcon />, host: true},\n 'tab-instances': {order: 15, icon: <SubtitlesIcon />, host: true},\n 'tab-objects': {order: 20, icon: <ViewListIcon />},\n 'tab-enums': {order: 25, icon: <ArtTrackIcon />},\n 'tab-devices': {order: 27, icon: <DvrIcon />, host: true},\n 'tab-logs': {order: 30, icon: <ViewHeadlineIcon />, host: true},\n 'tab-scenes': {order: 35, icon: <SubscriptionsIcon />},\n 'tab-events': {order: 40, icon: <FlashOnIcon />},\n 'tab-users': {order: 45, icon: <PersonOutlineIcon />},\n 'tab-javascript': {order: 50},\n 'tab-text2command-0': {order: 55, instance: 0},\n 'tab-text2command-1': {order: 56, instance: 1},\n 'tab-text2command-2': {order: 57, instance: 2},\n 'tab-node-red-0': {order: 60, instance: 0},\n 'tab-node-red-1': {order: 61, instance: 1},\n 'tab-node-red-2': {order: 62, instance: 2},\n 'tab-fullcalendar-0': {order: 65, instance: 0},\n 'tab-fullcalendar-1': {order: 66, instance: 1},\n 'tab-fullcalendar-2': {order: 67, instance: 2},\n 'tab-echarts': {order: 70, instance: 2},\n 'tab-eventlist-0': {order: 80, instance: 0},\n 'tab-eventlist-1': {order: 81, instance: 1},\n 'tab-eventlist-2': {order: 82, instance: 2},\n 'tab-hosts': {order: 100, icon: <StorageIcon />},\n 'tab-files': {order: 110, icon: <FilesIcon />},\n};\n\nclass Drawer extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tabs: [],\n editList: false,\n logErrors: 0,\n logWarnings: 0,\n hostError: 0,\n hostsUpdate: Drawer.calculateHostUpdates(this.props.hosts, this.props.repository),\n adaptersUpdate: Drawer.calculateAdapterUpdates(this.props.installed, this.props.repository),\n };\n\n this.instances = null;\n\n this.refEditButton = React.createRef();\n\n this.getTabs();\n }\n\n static getDerivedStateFromProps(props, state) {\n const hostsUpdate = Drawer.calculateHostUpdates(props.hosts, props.repository);\n const adaptersUpdate = Drawer.calculateAdapterUpdates(props.installed, props.repository);\n if (hostsUpdate !== state.hostsUpdate || adaptersUpdate !== state.adaptersUpdate) {\n return { hostsUpdate, adaptersUpdate };\n } else {\n return null;\n }\n }\n\n static calculateHostUpdates(hosts, repository) {\n if (hosts && repository) {\n const jsControllerVersion = repository['js-controller']?.version || '';\n let count = 0;\n hosts.forEach(element => {\n if (Adapters.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n return count;\n } else {\n return 0;\n }\n }\n\n static calculateAdapterUpdates(installed, repository) {\n if (installed) {\n let count = 0;\n\n Object.keys(installed).sort().forEach(element => {\n const _installed = installed[element];\n const adapter = repository && repository[element];\n if (element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n Adapters.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n return count;\n } else {\n return 0;\n }\n }\n\n instanceChangedHandler = changes => {\n this.getTabs(true);\n }\n\n componentDidMount() {\n this.props.instancesWorker.registerHandler(this.instanceChangedHandler, true);\n\n this.onNotificationsHandler()\n .then(() => {\n this.props.hostsWorker.registerNotificationHandler(this.onNotificationsHandler);\n\n if (!this.logsHandlerRegistered) {\n this.logsHandlerRegistered = true;\n this.props.logsWorker.registerErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.registerWarningCountHandler(this.onWarningsUpdates);\n }\n });\n }\n\n onNotificationsHandler = () => {\n return this.props.hostsWorker.getNotifications()\n .then(notifications => this.calculateWarning(notifications))\n .catch(error => window.alert('Cannot get notifications: ' + error));\n };\n\n onErrorsUpdates = logErrors => {\n if (this.props.currentTab !== 'tab-logs' || (this.props.currentTab === 'tab-logs' && this.state.logErrors)) {\n this.setState({ logErrors });\n }\n }\n\n onWarningsUpdates = logWarnings => {\n if (this.props.currentTab !== 'tab-logs' || (this.props.currentTab === 'tab-logs' && this.state.logWarnings)) {\n this.setState({ logWarnings });\n }\n }\n\n calculateWarning = notifications => {\n if (!notifications) {\n return;\n }\n\n let count = 0;\n\n Object.keys(notifications).forEach(host => {\n if (!notifications[host]?.result?.system) {\n return;\n }\n\n if (Object.keys(notifications[host].result.system.categories).length) {\n let obj = notifications[host].result.system.categories;\n\n Object.keys(obj).forEach(nameTab =>\n Object.keys(obj[nameTab].instances).forEach(_ => count++));\n }\n });\n\n this.setState({ hostError: count });\n }\n\n componentWillUnmount() {\n this.props.instancesWorker.unregisterHandler(this.instanceChangedHandler);\n this.props.hostsWorker.unregisterNotificationHandler(this.onNotificationsHandler);\n\n if (this.logsHandlerRegistered) {\n this.logsHandlerRegistered = false;\n this.props.logsWorker.unregisterErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.unregisterWarningCountHandler(this.onWarningsUpdates);\n }\n }\n\n componentDidUpdate() {\n if (!this.isSwipeable() && this.props.state !== STATES.opened && this.state.editList) {\n this.setState({ editList: false });\n }\n }\n\n getTabs(update) {\n return this.props.socket.getCompactInstances(update)\n .then(instances => {\n let dynamicTabs = [];\n if (instances) {\n Object.keys(instances).forEach(id => {\n const instance = instances[id];\n\n if (!instance || !instance.adminTab) {\n return;\n }\n\n let tab = 'tab-' + id.replace('system.adapter.', '').replace(/\\.\\d+$/, '');\n\n const singleton = instance.adminTab.singleton;\n let instNum;\n if (!singleton) {\n const m = id.match(/\\.(\\d+)$/);\n if (m) {\n instNum = parseInt(m[1], 10);\n tab += '-' + instNum;\n }\n }\n\n if (dynamicTabs.find(item => item.name === tab)) {\n return;\n }\n\n let title;\n\n if (instance.adminTab.name) {\n if (typeof instance.adminTab.name === 'object') {\n if (instance.adminTab.name[this.props.lang]) {\n title = instance.adminTab.name[this.props.lang];\n } else if (instance.adminTab.name.en) {\n title = this.props.t(instance.adminTab.name.en);\n } else {\n title = this.props.t(instance.name);\n }\n } else {\n title = this.props.t(instance.adminTab.name);\n }\n } else {\n title = this.props.t(instance.name);\n }\n\n let obj;\n if (tabsInfo[tab]) {\n obj = Object.assign({ name: tab }, tabsInfo[tab]);\n } else {\n obj = { name: tab, order: instance.adminTab.order !== undefined ? instance.adminTab.order : 200};\n }\n\n if (!obj.icon) {\n obj.icon = `adapter/${instance.name}/${instance.icon}`;\n }\n\n obj.title = title;\n\n if (!singleton) {\n //obj.instance = instance;\n if (instNum) {\n obj.title += ' ' + instNum;\n }\n }\n dynamicTabs.push(obj);\n });\n }\n\n const READY_TO_USE = ['tab-intro', 'tab-adapters', 'tab-instances', 'tab-logs', 'tab-files', 'tab-objects', 'tab-hosts', 'tab-users', 'tab-enums'];\n // DEV ONLY\n let tabs = Object.keys(tabsInfo).filter(name => READY_TO_USE.includes(name));\n\n tabs = tabs.map(name => {\n const obj = Object.assign({ name }, tabsInfo[name]);\n obj.title = I18n.t(ucFirst(name.replace('tab-', '').replace('-0', '').replace(/-(\\d+)$/, ' $1')));\n obj.visible = true;\n return obj;\n });\n\n // add dynamic tabs\n tabs = tabs.concat(dynamicTabs);\n\n tabs = tabs.filter(obj => obj);\n tabs.forEach(obj => obj.visible = true);\n\n tabs.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order;\n } else if (a.order) {\n return -1;\n } else if (b.order) {\n return 1;\n } else {\n return a.name > b.name ? -1 : (a.name > b.name ? 1 : 0);\n }\n });\n\n // Convert\n this.props.socket.getCompactSystemConfig()\n .then(systemConfig => {\n systemConfig.common.tabsVisible = systemConfig.common.tabsVisible || [];\n\n tabs.forEach(tab => {\n const it = systemConfig.common.tabsVisible.find(el => el.name === tab.name);\n if (it) {\n tab.visible = it.visible;\n }\n });\n\n const map = {}\n systemConfig.common.tabsVisible.forEach((item, i) => map[item.name] = i);\n\n tabs.sort((a, b) => {\n const aa = map[a.name];\n const bb = map[b.name];\n if (aa !== undefined && bb !== undefined) {\n return aa - bb;\n } else if (aa) {\n return -1;\n } else if (bb) {\n return 1;\n } else {\n return 0;\n }\n });\n\n this.setState({tabs}, () => {\n const tabsVisible = tabs.map(({ name, visible }) => ({ name, visible }));\n\n if (JSON.stringify(tabsVisible) !== JSON.stringify(systemConfig.common.tabsVisible)) {\n this.props.socket.getSystemConfig(true)\n .then(systemConfig => {\n systemConfig.common.tabsVisible = tabsVisible;\n\n return this.props.socket.setSystemConfig(systemConfig)\n .catch(e => window.alert('Cannot set system config: ' + e));\n });\n }\n });\n });\n })\n .catch(error => window.alert('Cannot get instances: ' + error));\n }\n\n getHeader() {\n const { classes, state, handleNavigation } = this.props;\n\n return <div className={clsx(\n classes.header,\n this.props.state === STATES.opened && this.props.isSecure && classes.headerLogout,\n !this.isSwipeable() && this.props.state !== STATES.opened && classes.headerCompact\n )}>\n <div className={clsx(classes.avatarBlock, state === 0 && classes.avatarVisible, classes.avatarNotVisible)}>\n <a href=\"/#easy\" onClick={event => event.preventDefault()} style={{ color: 'inherit', textDecoration: 'none' }}>\n {this.props.adminGuiConfig.icon ?\n <div style={{height: 50, withWidth: 102, lineHeight: '50px'}}>\n <img src={this.props.adminGuiConfig.icon} alt=\"logo\" style={{maxWidth: '100%', maxHeight: '100%', verticalAlign: 'middle'}}/>\n </div>\n :\n <Avatar\n onClick={() => handleNavigation('easy')}\n className={classes.logoSize}\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n }\n </a>\n {!this.props.adminGuiConfig.icon && this.props.versionAdmin && <Typography className={classes.styleVersion}>v{this.props.versionAdmin}</Typography>}\n </div>\n <IconButton\n size=\"large\"\n onClick={() => {\n if (this.isSwipeable() || this.props.state === STATES.compact) {\n this.props.onStateChange(STATES.closed);\n } else {\n this.props.onStateChange(STATES.compact)\n }\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n </div>;\n }\n\n isSwipeable() {\n return this.props.width === 'xs' || this.props.width === 'sm';\n }\n\n tabsEditSystemConfig = idx => {\n const { tabs } = this.state;\n const { socket } = this.props;\n let newTabs = JSON.parse(JSON.stringify(tabs));\n if (idx !== undefined) {\n newTabs[idx].visible = !newTabs[idx].visible;\n }\n return this.props.socket.getSystemConfig(true)\n .then(newObjCopy => {\n newObjCopy.common.tabsVisible = newTabs.map(({ name, visible }) => ({ name, visible }));\n\n if (idx !== undefined) {\n this.setState({ tabs: newTabs }, () =>\n socket.setSystemConfig(newObjCopy)\n .catch(e => window.alert('Cannot set system config: ' + e)));\n } else {\n return socket.setSystemConfig(newObjCopy)\n .catch(e => window.alert('Cannot set system config: ' + e));\n }\n });\n }\n\n getNavigationItems() {\n const { tabs, editList, logErrors, logWarnings } = this.state;\n const { systemConfig, currentTab, state, classes, handleNavigation } = this.props;\n if (!systemConfig) {\n return;\n }\n return tabs.map((tab, idx) => {\n if (!editList && !tab.visible) {\n return null\n }\n\n if (this.props.adminGuiConfig.admin.menu && this.props.adminGuiConfig.admin.menu[tab.name] === false) {\n return null;\n }\n\n return <DragWrapper\n key={tab.name}\n canDrag={editList}\n name={tab.name}\n iconJSX={!!tabsInfo[tab.name]?.icon ? tabsInfo[tab.name].icon : <Icon className={classes.icon} src={tab.icon} />}\n _id={tab.name}\n selected={currentTab === tab.name}\n tab={tab}\n compact={!this.isSwipeable() && state !== STATES.opened}\n badgeContent={logErrors || logWarnings || 0}\n badgeColor={logErrors ? 'error' : (logWarnings ? 'warn' : '')}\n tabs={tabs}\n setEndDrag={() => this.tabsEditSystemConfig()}\n setTabs={newObj => this.setState({ tabs: newObj })}\n >\n <DrawerItem\n themeType={this.props.themeType}\n key={tab.name}\n editList={editList}\n visible={tab.visible}\n editListFunc={() => this.tabsEditSystemConfig(idx)}\n compact={!this.isSwipeable() && state !== STATES.opened}\n onClick={e => {\n if (e.ctrlKey || e.shiftKey) {\n getHref(this.props.instancesWorker, tab.name, this.props.hostname, this.props.protocol, this.props.port, this.props.hosts, this.props.adminInstance)\n .then(href => {\n if (href) {\n console.log(href);\n // Open in new tab\n window.open(`${window.location.protocol}//${window.location.host}/${href}`, tab.name).focus();\n } else {\n handleNavigation(tab.name);\n }\n });\n } else {\n handleNavigation(tab.name);\n }\n }}\n icon={!!tabsInfo[tab.name]?.icon ? tabsInfo[tab.name].icon : <Icon src={tab.icon} className={classes.icon} />}\n text={tab.title}\n selected={currentTab === tab.name}\n badgeContent={this.badge(tab).content}\n badgeColor={this.badge(tab).color}\n badgeAdditionalContent={this.badge(tab)?.additionalContent}\n badgeAdditionalColor={this.badge(tab)?.additionalColor}\n />\n </DragWrapper>;\n });\n }\n\n badge = tab => {\n switch (tab.name) {\n case 'tab-logs':\n const { logErrors, logWarnings } = this.state;\n return { content: logErrors || logWarnings || 0, color: (logErrors ? 'error' : 'warn') || '' };\n\n case 'tab-adapters':\n return { content: this.state.adaptersUpdate || 0, color: 'primary' };\n\n case 'tab-hosts':\n return { content: this.state.hostsUpdate || 0, color: 'primary', additionalContent: this.state.hostError, additionalColor: 'error' };\n\n default:\n return { content: 0, color: '', additionalContent: 0, additionalColor: '' };\n }\n }\n\n render() {\n const { classes } = this.props;\n\n if (this.isSwipeable()) {\n return <SwipeableDrawer\n className={classes.root}\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onClose={() => this.props.onStateChange(STATES.closed)}\n onOpen={() => this.props.onStateChange(STATES.opened)}\n classes={{ paper: classes.paper }}\n >\n <CustomDragLayer />\n\n {this.getHeader()}\n\n <List>\n {this.getNavigationItems()}\n </List>\n {this.props.isSecure &&\n <DrawerItem\n themeType={this.props.themeType}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n }\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && <div className={this.props.classes.editButton}>\n <CustomPopper\n editList={this.state.editList}\n onClick={() => this.setState({ editList: !this.state.editList })}\n />\n </div>}\n </SwipeableDrawer>;\n } else {\n return <MaterialDrawer\n className={clsx(classes.root, this.props.state !== STATES.opened ? classes.rootCompactWidth : classes.rootFullWidth)}\n variant=\"persistent\"\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n classes={{ paper: classes.paper }}\n onMouseEnter={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = 1)}\n onMouseLeave={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = 0)}\n >\n <CustomDragLayer />\n\n {this.getHeader()}\n <List className={classes.list}>\n {this.getNavigationItems()}\n </List>\n {this.props.isSecure &&\n <DrawerItem\n themeType={this.props.themeType}\n style={{flexShrink: 0}}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout} text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n }\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && <div\n className={this.props.classes.editButton}\n style={{opacity: 0}}\n ref={this.refEditButton}\n >\n <CustomPopper\n editList={this.state.editList}\n onClick={() => this.setState({ editList: !this.state.editList })}\n />\n </div>}\n </MaterialDrawer>;\n }\n }\n}\n\nDrawer.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n state: PropTypes.number,\n adminGuiConfig: PropTypes.object,\n onStateChange: PropTypes.func,\n onLogout: PropTypes.func,\n systemConfig: PropTypes.object,\n logoutTitle: PropTypes.string,\n isSecure: PropTypes.bool,\n currentTab: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n socket: PropTypes.object,\n ready: PropTypes.bool,\n versionAdmin: PropTypes.string,\n expertMode: PropTypes.bool,\n handleNavigation: PropTypes.func,\n\n instancesWorker: PropTypes.object,\n hostsWorker: PropTypes.object,\n logsWorker: PropTypes.object,\n\n hostname: PropTypes.string,\n protocol: PropTypes.string,\n port: PropTypes.number,\n adminInstance: PropTypes.string,\n\n installed: PropTypes.object,\n hosts: PropTypes.array,\n repository: PropTypes.object,\n};\n\nDrawer.contextType = ContextWrapper;\nexport default withWidth()(withStyles(styles)(Drawer));","import { withStyles } from '@mui/styles';\n\nconst offset = 187;\n\nconst styles = {\n root: {\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n position: 'fixed',\n background: 'rgba(0, 0, 0, .3)',\n zIndex: 20000\n },\n connecting: {\n left: '40%',\n top: '40%',\n width: '20%',\n height: '20%',\n position: 'absolute'\n },\n spinner: {\n animation: '$rotator 1.4s linear infinite'\n },\n path: {\n strokeDasharray: 187,\n strokeDashoffset: 0,\n transformOrigin: 'center',\n animation: '$dash 1.4s ease-in-out infinite, $colors 5.6s ease-in-out infinite'\n },\n '@keyframes colors': {\n '0%': {\n stroke: '#4285F4'\n },\n '25%': {\n stroke: '#DE3E35'\n },\n '50%': {\n stroke: '#F7C223'\n },\n '75%': {\n stroke: '#1B9A59'\n },\n '100%': {\n stroke: '#4285F4'\n }\n },\n '@keyframes dash': {\n '0%': {\n strokeDashoffset: offset\n },\n '50%': {\n strokeDashoffset: offset / 4,\n transform: 'rotate(135deg)'\n },\n '100%': {\n strokeDashoffset: offset,\n transform: 'rotate(450deg)'\n }\n },\n '@keyframes rotator': {\n '0%': {\n transform: 'rotate(0deg)'\n },\n '100%': {\n transform: 'rotate(270deg)'\n }\n }\n};\n\nfunction Connecting(props) {\n\n const { classes } = props;\n\n return <div className={ classes.root }>\n <div className={ classes.connecting }>\n <svg className={ classes.spinner } width=\"100%\" height=\"100%\" viewBox=\"0 0 66 66\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle className={ classes.path } fill=\"none\" strokeWidth=\"6\" strokeLinecap=\"round\" cx=\"33\" cy=\"33\" r=\"30\"/>\n </svg>\n </div>\n </div>;\n}\n\nexport default withStyles(styles)(Connecting);","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport TextField from '@mui/material/TextField';\nimport Grid from '@mui/material/Grid';\nimport Toolbar from '@mui/material/Grid';\n\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport IconCheck from '@mui/icons-material/Check';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport AdminUtils from '../../Utils';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: {\n color: theme.palette.secondary.main,\n },\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + parseInt(theme.spacing(1), 10)}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: theme.spacing(2)\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: TOOLBAR_HEIGHT + 'px',\n }\n});\n\nclass WizardPasswordTab extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n password: '',\n passwordRepeat: '',\n errorPassword: true,\n errorPasswordRepeat: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <form className={ this.props.classes.form} noValidate autoComplete=\"off\">\n <Grid container direction=\"column\">\n <Grid item>\n <h2 className={ this.props.classes.title }>{ this.props.t('You must set the administrator password') }</h2>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n disabled\n className={ this.props.classes.input }\n label={this.props.t('Administrator name')}\n value=\"admin\"\n InputProps={{ readOnly: true }}\n helperText={ this.props.t('Administrator name cannot be changed') }\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n inputProps={{\n autoComplete: 'new-password',\n form: {\n autoComplete: 'off',\n },\n }}\n onKeyDown={e => {\n if (e.keyCode === 13 && this.state.password && !this.state.errorPassword) {\n const el = window.document.getElementById('admin_password');\n if (el) {\n el.focus();\n }\n }\n }}\n autoComplete=\"off\"\n className={ this.props.classes.input }\n ref={ this.focusRef }\n label={this.props.t('Administrator password')}\n type=\"password\"\n value={ this.state.password }\n error={ this.state.errorPassword }\n onChange={ e => {\n const errorPassword = AdminUtils.checkPassword(e.target.value);\n const errorPasswordRepeat = AdminUtils.checkPassword(e.target.value, this.state.passwordRepeat);\n this.setState({\n password: e.target.value,\n errorPassword: errorPassword ? this.props.t(errorPassword) : false,\n errorPasswordRepeat: errorPasswordRepeat ? this.props.t(errorPasswordRepeat) : false\n });\n } }\n helperText={ this.props.t('Password must be at least 8 characters long and have numbers, upper and lower case letters') }\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n inputProps={{\n autoComplete: 'new-password',\n form: {autoComplete: 'off'},\n id: 'admin_password'\n }}\n onKeyDown={e => {\n if (e.keyCode === 13 && this.state.password && !this.state.errorPassword && !this.state.errorPasswordRepeat) {\n this.props.onDone(this.state.password);\n }\n } }\n autoComplete=\"off\"\n className={ this.props.classes.input }\n label={ this.props.t('Repeat administrator password') }\n value={ this.state.passwordRepeat }\n type=\"password\"\n error={ !!this.state.errorPasswordRepeat }\n onChange={ e => {\n const errorPasswordRepeat = AdminUtils.checkPassword(this.state.password, e.target.value);\n this.setState({\n passwordRepeat: e.target.value,\n errorPasswordRepeat: errorPasswordRepeat ? this.props.t(errorPasswordRepeat) : false\n });\n } }\n helperText={ this.state.errorPasswordRepeat || '' }\n />\n </Grid>\n </Grid>\n </form>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button color=\"primary\" variant={\"contained\"} onClick={ () => this.props.onDone(this.state.password) } disabled={ !!this.state.errorPasswordRepeat || this.state.errorPassword } startIcon={<IconCheck/>}>{ this.props.t('Set administrator password') }</Button>\n </Toolbar>\n </Paper>;\n }\n}\n\nWizardPasswordTab.propTypes = {\n t: PropTypes.func,\n socket: PropTypes.object,\n onDone: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(WizardPasswordTab));\n","const license = {\n 'en': 'The MIT License (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'de': 'MIT-Lizenz (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:\\n' +\n 'Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\\n' +\n 'DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',\n\n 'ru': 'Лицензия MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:\\n' +\n 'Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.\\n' +\n 'ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.',\n\n 'it': 'Licenza MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Si concede gratuitamente l\\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il \"Software\"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:\\n' +\n 'l\\'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.\\n' +\n 'IL SOFTWARE VIENE FORNITO \"COSÌ COM\\'È\" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',\n\n 'fr': 'Licence MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'pt': 'Licença MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'nl': 'MIT-licentie\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'es': 'Licencia MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el \"Software\"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:\\n' +\n 'El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\\n' +\n 'EL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',\n\n 'pl': 'Licencja MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'zh-cn': 'MIT许可证\\n' +\n '\\n' +\n 'Copyright © 2014-2021 bluefox, 2014 hobbyquaker\\n' +\n '\\n' +\n '特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人 同等权利,只需服从以下义务:\\n' +\n '在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。\\n' +\n '该软件是\"按原样\"提供的,没有任何形式的明示或暗示,包括但不限于为特定目的和 不侵权的适销性和适用性的保证担保。在任何情况下,作者或版权持有人,都无权要求 任何索赔,或有关损害赔偿的其他责任。无论在本软件的使用上或其他买卖交易中, 是否涉及合同,侵权或其他行为。\\n'\n};\n\nexport default license;","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport Toolbar from '@mui/material/Toolbar';\nimport MenuItem from '@mui/material/MenuItem';\nimport Grid from '@mui/material/Grid';\nimport Select from '@mui/material/Select';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport Paper from '@mui/material/Paper';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport IconWorld from '@mui/icons-material/Language';\nimport IconCheck from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport LicenseTexts from '../LicenseTexts';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n gridDiv: {\n height: 'calc(100% - ' + TOOLBAR_HEIGHT + 'px)',\n width: '100%',\n overflow: 'hidden',\n padding: theme.spacing(2),\n textAlign: 'center'\n },\n languageSelect: {\n minWidth: 200,\n marginRight: theme.spacing(3),\n },\n licenseDiv: {\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight + parseInt(theme.spacing(1), 10) + 70}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n statAccept: {\n marginTop: 10,\n color: '#ff636e',\n },\n statAcceptDiv: {\n display: 'inline-block',\n },\n statAcceptNote: {\n textAlign: 'left',\n marginLeft: 32,\n },\n greenButton: {\n marginLeft: theme.spacing(1),\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: TOOLBAR_HEIGHT + 'px',\n },\n licenseTextDiv: {\n width: '100%',\n maxWidth: 600,\n textAlign: 'left',\n margin: 'auto',\n },\n licenseText: {\n marginBottom: 15,\n }\n});\n\nclass WizardLicenseTab extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n statisticsAccepted: false,\n lang: this.props.lang || I18n.getLanguage(),\n notAgree: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n renderNotAgree() {\n if (!this.state.notAgree) {\n return null;\n }\n return <Dialog\n open={true}\n onClose={() => this.setState({ notAgree: false }) }\n >\n <DialogTitle >{ this.props.t('Message') }</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <span role=\"img\" aria-label=\"unhappy\">😒</span> { this.props.t('Sorry, you cannot use ioBroker.')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ notAgree: false }) }\n color=\"primary\"\n startIcon={<IconCheck/>}\n >\n { I18n.t('Understand') }\n </Button>\n </DialogActions>\n </Dialog>\n }\n\n renderLicenseText() {\n let lines = LicenseTexts[I18n.getLanguage()] || LicenseTexts.en;\n lines = lines.split('\\n');\n return <div className={this.props.classes.licenseTextDiv}>{lines.map((line, i) => <div className={this.props.classes.licenseText} key={i}>{line}</div>)}</div>;\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <Grid container className={ this.props.classes.gridDiv } direction=\"column\">\n <Grid item>\n <FormControl variant=\"standard\" className={ this.props.classes.languageSelect }>\n <InputLabel><IconWorld/>{ this.props.t('Language') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ I18n.getLanguage() }\n onChange={e => {\n I18n.setLanguage(e.target.value);\n this.setState( { lang: e.target.value });\n }}\n >\n <MenuItem value=\"en\">English</MenuItem>\n <MenuItem value=\"de\">Deutsch</MenuItem>\n <MenuItem value=\"ru\">русский</MenuItem>\n <MenuItem value=\"pt\">Portugues</MenuItem>\n <MenuItem value=\"nl\">Nederlands</MenuItem>\n <MenuItem value=\"fr\">français</MenuItem>\n <MenuItem value=\"it\">Italiano</MenuItem>\n <MenuItem value=\"es\">Espanol</MenuItem>\n <MenuItem value=\"pl\">Polski</MenuItem>\n <MenuItem value=\"zh-cn\">简体中文</MenuItem>\n </Select>\n </FormControl>\n <div className={ this.props.classes.statAcceptDiv }>\n <FormControlLabel\n className={ this.props.classes.statAccept }\n control={<Checkbox ref={ this.focusRef } checked={ this.state.statisticsAccepted } onChange={e => this.setState({statisticsAccepted: e.target.checked }) } />}\n label={ this.props.t('I agree with the collection of anonymous statistics.') }\n />\n <div className={ this.props.classes.statAcceptNote }>{ this.props.t('(This can be disabled later in settings)') }</div>\n </div>\n </Grid>\n <Grid item>\n <h1>{ this.props.t('License terms') }</h1>\n </Grid>\n <Grid item className={ this.props.classes.licenseDiv }>\n {this.renderLicenseText()}\n </Grid>\n </Grid>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button variant=\"contained\" color=\"grey\" onClick={ () => this.setState({notAgree: true}) } startIcon={<IconCancel/>}>{ this.props.t('Not agree') }</Button>\n <Button variant=\"contained\" color=\"primary\" className={ this.props.classes.greenButton } disabled={ !this.state.statisticsAccepted } onClick={ () => this.props.onDone({lang: this.state.lang}) } startIcon={<IconCheck/>}>{ this.props.t('Agree') }</Button>\n <div className={ this.props.classes.grow }/>\n </Toolbar>\n { this.renderNotAgree() }\n </Paper>;\n }\n}\n\nWizardLicenseTab.propTypes = {\n t: PropTypes.func,\n socket: PropTypes.object,\n onDone: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(WizardLicenseTab));\n","var _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 293.334 293.334\",\n width: \"48px\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"#4dabf5\"\n },\n d: \"M146.667,0C94.903,0,52.946,41.957,52.946,93.721c0,22.322,7.849,42.789,20.891,58.878 c4.204,5.178,11.237,13.331,14.903,18.906c21.109,32.069,48.19,78.643,56.082,116.864c1.354,6.527,2.986,6.641,4.743,0.212 c5.629-20.609,20.228-65.639,50.377-112.757c3.595-5.619,10.884-13.483,15.409-18.379c6.554-7.098,12.009-15.224,16.154-24.084 c5.651-12.086,8.882-25.466,8.882-39.629C240.387,41.962,198.43,0,146.667,0z M146.667,144.358 c-28.892,0-52.313-23.421-52.313-52.313c0-28.887,23.421-52.307,52.313-52.307s52.313,23.421,52.313,52.307 C198.98,120.938,175.559,144.358,146.667,144.358z\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n style: {\n fill: \"#4dabf5\"\n },\n cx: 146.667,\n cy: 90.196,\n r: 21.756\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPin);\nexport default __webpack_public_path__ + \"static/media/pin.773680e20aed21cad6ec30a795863659.svg\";\nexport { ForwardRef as ReactComponent };","import { createRef, Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport Toolbar from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport Fab from '@mui/material/Fab';\n\nimport 'ol/ol.css';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport Feature from 'ol/Feature';\nimport {Tile, Vector as LayerVector } from 'ol/layer';\nimport { Icon, Style } from 'ol/style';\nimport {OSM, Vector as VectorSource} from 'ol/source';\nimport { Point } from 'ol/geom';\nimport { toLonLat, fromLonLat } from 'ol/proj';\n\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\n//Icons\nimport {FaCrosshairs as GeoIcon} from 'react-icons/fa';\nimport PinSVG from '../../assets/pin.svg';\nimport IconCheck from '@mui/icons-material/Check';\n\nconst TOOLBAR_HEIGHT = 64;\nconst SETTINGS_WIDTH = 300;\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: {\n color: theme.palette.secondary.main,\n },\n mainGrid: {\n height: 'calc(100% - ' + TOOLBAR_HEIGHT + 'px)',\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n mapGrid: {\n height: '100%',\n width: `calc(100% - ${SETTINGS_WIDTH + parseInt(theme.spacing(4), 10)}px)`,\n overflow: 'hidden',\n },\n map: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n },\n controlItem: {\n width: SETTINGS_WIDTH,\n marginBottom: theme.spacing(1),\n },\n controlItemAddress: {\n width: SETTINGS_WIDTH - 40,\n marginBottom: theme.spacing(1),\n },\n gridSettings: {\n width: SETTINGS_WIDTH + parseInt(theme.spacing(2), 10),\n margin: theme.spacing(1),\n textAlign: 'left',\n height: '100%',\n overflow: 'auto'\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: TOOLBAR_HEIGHT + 'px',\n },\n settingsGrid: {\n width: '100%',\n height: 'calc(100% - 54px)',\n }\n});\n\nclass WizardSettingsTab extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n password: '',\n passwordRepeat: '',\n errorPassword: false,\n errorPasswordRepeat: false,\n tempUnit: '°C',\n currency: '€',\n dateFormat: 'DD.MM.YYYY',\n isFloatComma: true,\n country: '',\n city: '',\n address: '',\n longitude: 0,\n latitude: 0,\n firstDayOfWeek: 'monday'\n };\n\n this.focusRef = createRef();\n\n this.props.socket.getCompactSystemConfig(true)\n .then(obj =>\n this.setState({\n tempUnit: obj.common.tempUnit,\n currency: obj.common.currency,\n dateFormat: obj.common.dateFormat,\n isFloatComma: obj.common.isFloatComma,\n country: obj.common.country,\n city: obj.common.city,\n address: '',\n longitude: obj.common.longitude,\n latitude: obj.common.latitude,\n firstDayOfWeek: obj.common.firstDayOfWeek || 'monday',\n }, () => this.updateMap()));\n }\n\n positionReady(position) {\n this.setState({\n latitude: position.coords.latitude.toFixed(8),\n longitude: position.coords.longitude.toFixed(8)\n }, () => this.updateMap());\n }\n\n getPositionForAddress() {\n window.fetch('https://nominatim.openstreetmap.org/search?format=json&q=' + encodeURIComponent(this.state.country + ' ' + this.state.city + ' ' + this.state.address))\n .then(data => data.json())\n .then(data => {\n let changed = false;\n\n if (!data || !data[0]) {\n return window.alert(this.props.t('Nothing found'));\n }\n\n let latitude = parseFloat(this.state.latitude);\n if (latitude !== parseFloat(data[0].lat)) {\n latitude = parseFloat(data[0].lat);\n changed = true;\n }\n let longitude = parseFloat(this.state.longitude);\n if (longitude !== parseFloat(data[0].lon)) {\n longitude = parseFloat(data[0].lon);\n changed = true;\n }\n changed && this.setState({longitude, latitude}, () =>\n this.updateMap());\n })\n .catch(e =>\n window.alert(this.props.t('Cannot fetch address %s', e)));\n }\n\n updateMap() {\n // OPEN STREET MAPS\n if (window.navigator.geolocation && (!this.state.longitude || !this.state.latitude)) {\n window.navigator.geolocation.getCurrentPosition(position => this.positionReady(position));\n }\n\n const center = fromLonLat([parseFloat(this.state.longitude || 0), parseFloat(this.state.latitude || 0)]);\n\n if (!this.OSM) {\n // get the coordinates from browser\n\n this.OSM = {};\n this.OSM.markerSource = new VectorSource();\n\n this.OSM.markerStyle = new Style({\n image: new Icon(/** @type {olx.style.IconOptions} */ ({\n anchor: [0.5, 49],\n anchorXUnits: 'fraction',\n anchorYUnits: 'pixels',\n opacity: 0.75,\n src: PinSVG\n }))\n });\n\n this.OSM.oMap = new Map({\n target: 'map',\n layers: [\n new Tile({source: new OSM()}),\n new LayerVector({\n source: this.OSM.markerSource,\n style: this.OSM.markerStyle,\n })\n ],\n view: new View({center, zoom: 17})\n });\n\n this.OSM.marker = new Feature({\n geometry: new Point(center),\n name: this.props.t('Your home')\n });\n\n this.OSM.markerSource.addFeature(this.OSM.marker);\n\n this.OSM.oMap.on('singleclick', event => {\n const lonLat = toLonLat(event.coordinate);\n this.setState( {longitude: lonLat[0], latitude: lonLat[1]}, () => this.updateMap());\n });\n }\n\n const zoom = this.OSM.oMap.getView().getZoom();\n this.OSM.marker.setGeometry(new Point(center));\n this.OSM.oMap.setView(new View({center, zoom}));\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n this.updateMap();\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <Grid container direction=\"column\" className={ this.props.classes.mainGrid }>\n <Grid item className={ this.props.classes.gridSettings }>\n <Grid container direction=\"column\">\n <Grid item>\n <h2 className={ this.props.classes.title }>{ this.props.t('Important main settings') }</h2>\n </Grid>\n <Grid container direction=\"column\" className={this.props.classes.settingsGrid}>\n <Grid item style={{textAlign: 'left'}}>\n <FormControl variant=\"standard\" className={ this.props.classes.controlItem }>\n <InputLabel>{ this.props.t('Temperature unit') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.tempUnit }\n onChange={e => this.setState({tempUnit: e.target.value}) }\n >\n <MenuItem value=\"°C\">°C</MenuItem>\n <MenuItem value=\"°F\">°F</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Currency') }\n className={ this.props.classes.controlItem }\n value={ this.state.currency }\n onChange={ e => this.setState( {currency: e.target.value })}\n />\n </Grid>\n <Grid item style={{textAlign: 'left'}}>\n <FormControl variant=\"standard\" className={ this.props.classes.controlItem }>\n <InputLabel>{ this.props.t('Date format') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.dateFormat }\n onChange={e => this.setState({dateFormat: e.target.value}) }\n >\n <MenuItem value=\"DD.MM.YYYY\">DD.MM.YYYY</MenuItem>\n <MenuItem value=\"YYYY.MM.DD\">YYYY.MM.DD</MenuItem>\n <MenuItem value=\"MM/DD/YYYY\">MM/DD/YYYY</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item style={{textAlign: 'left'}}>\n <FormControl variant=\"standard\" className={ this.props.classes.controlItem }>\n <InputLabel>{ this.props.t('Float divider') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.isFloatComma }\n onChange={e => this.setState({isFloatComma: e.target.value}) }\n >\n <MenuItem value={ true }>{this.props.t('comma')} - 3,14</MenuItem>\n <MenuItem value={ false }>{this.props.t('point')} - 3.14</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item style={{textAlign: 'left'}}>\n <FormControl variant=\"standard\" className={ this.props.classes.controlItem }>\n <InputLabel>{ this.props.t('Country') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.country || '' }\n onChange={e => this.setState({country: e.target.value}) }\n >\n <MenuItem value=\"\">{ this.props.t('Please select country') }</MenuItem>\n <MenuItem value=\"Germany\">{ this.props.t('Germany') }</MenuItem>\n <MenuItem value=\"Austria\">{ this.props.t('Austria') }</MenuItem>\n <MenuItem value=\"Switzerland\">{ this.props.t('Switzerland') }</MenuItem>\n <MenuItem value=\"Russian Federation\">{ this.props.t('Russian Federation') }</MenuItem>\n <MenuItem value=\"France\">{ this.props.t('France') }</MenuItem>\n <MenuItem value=\"Netherlands\">{ this.props.t('Netherlands') }</MenuItem>\n <MenuItem value=\"Italy\">{ this.props.t('Italy') }</MenuItem>\n <MenuItem value=\"United Kingdom\">{ this.props.t('United Kingdom') }</MenuItem>\n <MenuItem value=\"United States\">{ this.props.t('United States') }</MenuItem>\n <MenuItem value=\"China\">{ this.props.t('China') }</MenuItem>\n\n <MenuItem value=\"Afghanistan\">{ this.props.t('Afghanistan') }</MenuItem>\n <MenuItem value=\"Albania\">{ this.props.t('Albania') }</MenuItem>\n <MenuItem value=\"Algeria\">{ this.props.t('Algeria') }</MenuItem>\n <MenuItem value=\"American Samoa\">{ this.props.t('American Samoa') }</MenuItem>\n <MenuItem value=\"Andorra\">{ this.props.t('Andorra') }</MenuItem>\n <MenuItem value=\"Angola\">{ this.props.t('Angola') }</MenuItem>\n <MenuItem value=\"Anguilla\">{ this.props.t('Anguilla') }</MenuItem>\n <MenuItem value=\"Antarctica\">{ this.props.t('Antarctica') }</MenuItem>\n <MenuItem value=\"Antigua and Barbuda\">{ this.props.t('Antigua and Barbuda') }</MenuItem>\n <MenuItem value=\"Argentina\">{ this.props.t('Argentina') }</MenuItem>\n <MenuItem value=\"Armenia\">{ this.props.t('Armenia') }</MenuItem>\n <MenuItem value=\"Aruba\">{ this.props.t('Aruba') }</MenuItem>\n <MenuItem value=\"Australia\">{ this.props.t('Australia') }</MenuItem>\n <MenuItem value=\"Azerbaijan\">{ this.props.t('Azerbaijan') }</MenuItem>\n <MenuItem value=\"Bahamas\">{ this.props.t('Bahamas') }</MenuItem>\n <MenuItem value=\"Bahrain\">{ this.props.t('Bahrain') }</MenuItem>\n <MenuItem value=\"Bangladesh\">{ this.props.t('Bangladesh') }</MenuItem>\n <MenuItem value=\"Barbados\">{ this.props.t('Barbados') }</MenuItem>\n <MenuItem value=\"Belarus\">{ this.props.t('Belarus') }</MenuItem>\n <MenuItem value=\"Belgium\">{ this.props.t('Belgium') }</MenuItem>\n <MenuItem value=\"Belize\">{ this.props.t('Belize') }</MenuItem>\n <MenuItem value=\"Benin\">{ this.props.t('Benin') }</MenuItem>\n <MenuItem value=\"Bermuda\">{ this.props.t('Bermuda') }</MenuItem>\n <MenuItem value=\"Bhutan\">{ this.props.t('Bhutan') }</MenuItem>\n <MenuItem value=\"Bolivia\">{ this.props.t('Bolivia') }</MenuItem>\n <MenuItem value=\"Bosnia and Herzegovina\">{ this.props.t('Bosnia and Herzegovina') }</MenuItem>\n <MenuItem value=\"Botswana\">{ this.props.t('Botswana') }</MenuItem>\n <MenuItem value=\"Bouvet Island\">{ this.props.t('Bouvet Island') }</MenuItem>\n <MenuItem value=\"Brazil\">{ this.props.t('Brazil') }</MenuItem>\n <MenuItem value=\"British Indian Ocean Territory\">{ this.props.t('British Indian Ocean Territory') }</MenuItem>\n <MenuItem value=\"Brunei Darussalam\">{ this.props.t('Brunei Darussalam') }</MenuItem>\n <MenuItem value=\"Bulgaria\">{ this.props.t('Bulgaria') }</MenuItem>\n <MenuItem value=\"Burkina Faso\">{ this.props.t('Burkina Faso') }</MenuItem>\n <MenuItem value=\"Burundi\">{ this.props.t('Burundi') }</MenuItem>\n <MenuItem value=\"Cambodia\">{ this.props.t('Cambodia') }</MenuItem>\n <MenuItem value=\"Cameroon\">{ this.props.t('Cameroon') }</MenuItem>\n <MenuItem value=\"Canada\">{ this.props.t('Canada') }</MenuItem>\n <MenuItem value=\"Cape Verde\">{ this.props.t('Cape Verde') }</MenuItem>\n <MenuItem value=\"Cayman Islands\">{ this.props.t('Cayman Islands') }</MenuItem>\n <MenuItem value=\"Central African Republic\">{ this.props.t('Central African Republic') }</MenuItem>\n <MenuItem value=\"Chad\">{ this.props.t('Chad') }</MenuItem>\n <MenuItem value=\"Chile\">{ this.props.t('Chile') }</MenuItem>\n <MenuItem value=\"Christmas Island\">{ this.props.t('Christmas Island') }</MenuItem>\n <MenuItem value=\"Cocos Islands\">{ this.props.t('Cocos Islands') }</MenuItem>\n <MenuItem value=\"Colombia\">{ this.props.t('Colombia') }</MenuItem>\n <MenuItem value=\"Comoros\">{ this.props.t('Comoros') }</MenuItem>\n <MenuItem value=\"Congo\">{ this.props.t('Congo') }</MenuItem>\n <MenuItem value=\"Cook Islands\">{ this.props.t('Cook Islands') }</MenuItem>\n <MenuItem value=\"Costa Rica\">{ this.props.t('Costa Rica') }</MenuItem>\n <MenuItem value=\"Croatia\">{ this.props.t('Croatia') }</MenuItem>\n <MenuItem value=\"Cuba\">{ this.props.t('Cuba') }</MenuItem>\n <MenuItem value=\"Cyprus\">{ this.props.t('Cyprus') }</MenuItem>\n <MenuItem value=\"Czech Republic\">{ this.props.t('Czech Republic') }</MenuItem>\n <MenuItem value=\"Denmark\">{ this.props.t('Denmark') }</MenuItem>\n <MenuItem value=\"Djibouti\">{ this.props.t('Djibouti') }</MenuItem>\n <MenuItem value=\"Dominica\">{ this.props.t('Dominica') }</MenuItem>\n <MenuItem value=\"Dominican Republic\">{ this.props.t('Dominican Republic') }</MenuItem>\n <MenuItem value=\"East Timor\">{ this.props.t('East Timor') }</MenuItem>\n <MenuItem value=\"Ecuador\">{ this.props.t('Ecuador') }</MenuItem>\n <MenuItem value=\"Egypt\">{ this.props.t('Egypt') }</MenuItem>\n <MenuItem value=\"El Salvador\">{ this.props.t('El Salvador') }</MenuItem>\n <MenuItem value=\"Equatorial Guinea\">{ this.props.t('Equatorial Guinea') }</MenuItem>\n <MenuItem value=\"Eritrea\">{ this.props.t('Eritrea') }</MenuItem>\n <MenuItem value=\"Estonia\">{ this.props.t('Estonia') }</MenuItem>\n <MenuItem value=\"Ethiopia\">{ this.props.t('Ethiopia') }</MenuItem>\n <MenuItem value=\"Falkland Islands (Malvinas)\">{ this.props.t('Falkland Islands (Malvinas)') }</MenuItem>\n <MenuItem value=\"Faroe Islands\">{ this.props.t('Faroe Islands') }</MenuItem>\n <MenuItem value=\"Fiji\">{ this.props.t('Fiji') }</MenuItem>\n <MenuItem value=\"Finland\">{ this.props.t('Finland') }</MenuItem>\n <MenuItem value=\"French Guiana\">{ this.props.t('French Guiana') }</MenuItem>\n <MenuItem value=\"French Polynesia\">{ this.props.t('French Polynesia') }</MenuItem>\n <MenuItem value=\"French Southern Territories\">{ this.props.t('French Southern Territories') }</MenuItem>\n <MenuItem value=\"Gabon\">{ this.props.t('Gabon') }</MenuItem>\n <MenuItem value=\"Gambia\">{ this.props.t('Gambia') }</MenuItem>\n <MenuItem value=\"Georgia\">{ this.props.t('Georgia') }</MenuItem>\n <MenuItem value=\"Ghana\">{ this.props.t('Ghana') }</MenuItem>\n <MenuItem value=\"Gibraltar\">{ this.props.t('Gibraltar') }</MenuItem>\n <MenuItem value=\"Guernsey\">{ this.props.t('Guernsey') }</MenuItem>\n <MenuItem value=\"Greece\">{ this.props.t('Greece') }</MenuItem>\n <MenuItem value=\"Greenland\">{ this.props.t('Greenland') }</MenuItem>\n <MenuItem value=\"Grenada\">{ this.props.t('Grenada') }</MenuItem>\n <MenuItem value=\"Guadeloupe\">{ this.props.t('Guadeloupe') }</MenuItem>\n <MenuItem value=\"Guam\">{ this.props.t('Guam') }</MenuItem>\n <MenuItem value=\"Guatemala\">{ this.props.t('Guatemala') }</MenuItem>\n <MenuItem value=\"Guinea\">{ this.props.t('Guinea') }</MenuItem>\n <MenuItem value=\"Guinea-Bissau\">{ this.props.t('Guinea-Bissau') }</MenuItem>\n <MenuItem value=\"Guyana\">{ this.props.t('Guyana') }</MenuItem>\n <MenuItem value=\"Haiti\">{ this.props.t('Haiti') }</MenuItem>\n <MenuItem value=\"Heard and Mc Donald Islands\">{ this.props.t('Heard and Mc Donald Islands') }</MenuItem>\n <MenuItem value=\"Honduras\">{ this.props.t('Honduras') }</MenuItem>\n <MenuItem value=\"Hong Kong\">{ this.props.t('Hong Kong') }</MenuItem>\n <MenuItem value=\"Hungary\">{ this.props.t('Hungary') }</MenuItem>\n <MenuItem value=\"Iceland\">{ this.props.t('Iceland') }</MenuItem>\n <MenuItem value=\"India\">{ this.props.t('India') }</MenuItem>\n <MenuItem value=\"Isle of Man\">{ this.props.t('Isle of Man') }</MenuItem>\n <MenuItem value=\"Indonesia\">{ this.props.t('Indonesia') }</MenuItem>\n <MenuItem value=\"Iran\">{ this.props.t('Iran') }</MenuItem>\n <MenuItem value=\"Iraq\">{ this.props.t('Iraq') }</MenuItem>\n <MenuItem value=\"Ireland\">{ this.props.t('Ireland') }</MenuItem>\n <MenuItem value=\"Israel\">{ this.props.t('Israel') }</MenuItem>\n <MenuItem value=\"Ivory Coast\">{ this.props.t('Ivory Coast') }</MenuItem>\n <MenuItem value=\"Jersey\">{ this.props.t('Jersey') }</MenuItem>\n <MenuItem value=\"Jamaica\">{ this.props.t('Jamaica') }</MenuItem>\n <MenuItem value=\"Japan\">{ this.props.t('Japan') }</MenuItem>\n <MenuItem value=\"Jordan\">{ this.props.t('Jordan') }</MenuItem>\n <MenuItem value=\"Kazakhstan\">{ this.props.t('Kazakhstan') }</MenuItem>\n <MenuItem value=\"Kenya\">{ this.props.t('Kenya') }</MenuItem>\n <MenuItem value=\"Kiribati\">{ this.props.t('Kiribati') }</MenuItem>\n <MenuItem value=\"Korea\">{ this.props.t('Korea') }</MenuItem>\n <MenuItem value=\"Kosovo\">{ this.props.t('Kosovo') }</MenuItem>\n <MenuItem value=\"Kuwait\">{ this.props.t('Kuwait') }</MenuItem>\n <MenuItem value=\"Kyrgyzstan\">{ this.props.t('Kyrgyzstan') }</MenuItem>\n <MenuItem value=\"Lao People's Democratic Republic\">{ this.props.t('Lao People\\'s Democratic Republic') }</MenuItem>\n <MenuItem value=\"Latvia\">{ this.props.t('Latvia') }</MenuItem>\n <MenuItem value=\"Lebanon\">{ this.props.t('Lebanon') }</MenuItem>\n <MenuItem value=\"Lesotho\">{ this.props.t('Lesotho') }</MenuItem>\n <MenuItem value=\"Liberia\">{ this.props.t('Liberia') }</MenuItem>\n <MenuItem value=\"Libyan Arab Jamahiriya\">{ this.props.t('Libyan Arab Jamahiriya') }</MenuItem>\n <MenuItem value=\"Liechtenstein\">{ this.props.t('Liechtenstein') }</MenuItem>\n <MenuItem value=\"Lithuania\">{ this.props.t('Lithuania') }</MenuItem>\n <MenuItem value=\"Luxembourg\">{ this.props.t('Luxembourg') }</MenuItem>\n <MenuItem value=\"Macau\">{ this.props.t('Macau') }</MenuItem>\n <MenuItem value=\"Macedonia\">{ this.props.t('Macedonia') }</MenuItem>\n <MenuItem value=\"Madagascar\">{ this.props.t('Madagascar') }</MenuItem>\n <MenuItem value=\"Malawi\">{ this.props.t('Malawi') }</MenuItem>\n <MenuItem value=\"Malaysia\">{ this.props.t('Malaysia') }</MenuItem>\n <MenuItem value=\"Maldives\">{ this.props.t('Maldives') }</MenuItem>\n <MenuItem value=\"Mali\">{ this.props.t('Mali') }</MenuItem>\n <MenuItem value=\"Malta\">{ this.props.t('Malta') }</MenuItem>\n <MenuItem value=\"Marshall Islands\">{ this.props.t('Marshall Islands') }</MenuItem>\n <MenuItem value=\"Martinique\">{ this.props.t('Martinique') }</MenuItem>\n <MenuItem value=\"Mauritania\">{ this.props.t('Mauritania') }</MenuItem>\n <MenuItem value=\"Mauritius\">{ this.props.t('Mauritius') }</MenuItem>\n <MenuItem value=\"Mayotte\">{ this.props.t('Mayotte') }</MenuItem>\n <MenuItem value=\"Mexico\">{ this.props.t('Mexico') }</MenuItem>\n <MenuItem value=\"Micronesia\">{ this.props.t('Micronesia') }</MenuItem>\n <MenuItem value=\"Moldova\">{ this.props.t('Moldova') }</MenuItem>\n <MenuItem value=\"Monaco\">{ this.props.t('Monaco') }</MenuItem>\n <MenuItem value=\"Mongolia\">{ this.props.t('Mongolia') }</MenuItem>\n <MenuItem value=\"Montenegro\">{ this.props.t('Montenegro') }</MenuItem>\n <MenuItem value=\"Montserrat\">{ this.props.t('Montserrat') }</MenuItem>\n <MenuItem value=\"Morocco\">{ this.props.t('Morocco') }</MenuItem>\n <MenuItem value=\"Mozambique\">{ this.props.t('Mozambique') }</MenuItem>\n <MenuItem value=\"Myanmar\">{ this.props.t('Myanmar') }</MenuItem>\n <MenuItem value=\"Namibia\">{ this.props.t('Namibia') }</MenuItem>\n <MenuItem value=\"Nauru\">{ this.props.t('Nauru') }</MenuItem>\n <MenuItem value=\"Nepal\">{ this.props.t('Nepal') }</MenuItem>\n <MenuItem value=\"Netherlands Antilles\">{ this.props.t('Netherlands Antilles') }</MenuItem>\n <MenuItem value=\"New Caledonia\">{ this.props.t('New Caledonia') }</MenuItem>\n <MenuItem value=\"New Zealand\">{ this.props.t('New Zealand') }</MenuItem>\n <MenuItem value=\"Nicaragua\">{ this.props.t('Nicaragua') }</MenuItem>\n <MenuItem value=\"Niger\">{ this.props.t('Niger') }</MenuItem>\n <MenuItem value=\"Nigeria\">{ this.props.t('Nigeria') }</MenuItem>\n <MenuItem value=\"Niue\">{ this.props.t('Niue') }</MenuItem>\n <MenuItem value=\"Norfolk Island\">{ this.props.t('Norfolk Island') }</MenuItem>\n <MenuItem value=\"Northern Mariana Islands\">{ this.props.t('Northern Mariana Islands') }</MenuItem>\n <MenuItem value=\"Norway\">{ this.props.t('Norway') }</MenuItem>\n <MenuItem value=\"Oman\">{ this.props.t('Oman') }</MenuItem>\n <MenuItem value=\"Pakistan\">{ this.props.t('Pakistan') }</MenuItem>\n <MenuItem value=\"Palau\">{ this.props.t('Palau') }</MenuItem>\n <MenuItem value=\"Palestine\">{ this.props.t('Palestine') }</MenuItem>\n <MenuItem value=\"Panama\">{ this.props.t('Panama') }</MenuItem>\n <MenuItem value=\"Papua New Guinea\">{ this.props.t('Papua New Guinea') }</MenuItem>\n <MenuItem value=\"Paraguay\">{ this.props.t('Paraguay') }</MenuItem>\n <MenuItem value=\"Peru\">{ this.props.t('Peru') }</MenuItem>\n <MenuItem value=\"Philippines\">{ this.props.t('Philippines') }</MenuItem>\n <MenuItem value=\"Pitcairn\">{ this.props.t('Pitcairn') }</MenuItem>\n <MenuItem value=\"Poland\">{ this.props.t('Poland') }</MenuItem>\n <MenuItem value=\"Portugal\">{ this.props.t('Portugal') }</MenuItem>\n <MenuItem value=\"Puerto Rico\">{ this.props.t('Puerto Rico') }</MenuItem>\n <MenuItem value=\"Qatar\">{ this.props.t('Qatar') }</MenuItem>\n <MenuItem value=\"Reunion\">{ this.props.t('Reunion') }</MenuItem>\n <MenuItem value=\"Romania\">{ this.props.t('Romania') }</MenuItem>\n <MenuItem value=\"Rwanda\">{ this.props.t('Rwanda') }</MenuItem>\n <MenuItem value=\"Saint Kitts and Nevis\">{ this.props.t('Saint Kitts and Nevis') }</MenuItem>\n <MenuItem value=\"Saint Lucia\">{ this.props.t('Saint Lucia') }</MenuItem>\n <MenuItem value=\"Saint Vincent and the Grenadines\">{ this.props.t('Saint Vincent and the Grenadines') }</MenuItem>\n <MenuItem value=\"Samoa\">{ this.props.t('Samoa') }</MenuItem>\n <MenuItem value=\"San Marino\">{ this.props.t('San Marino') }</MenuItem>\n <MenuItem value=\"Sao Tome and Principe\">{ this.props.t('Sao Tome and Principe') }</MenuItem>\n <MenuItem value=\"Saudi Arabia\">{ this.props.t('Saudi Arabia') }</MenuItem>\n <MenuItem value=\"Senegal\">{ this.props.t('Senegal') }</MenuItem>\n <MenuItem value=\"Serbia\">{ this.props.t('Serbia') }</MenuItem>\n <MenuItem value=\"Seychelles\">{ this.props.t('Seychelles') }</MenuItem>\n <MenuItem value=\"Sierra Leone\">{ this.props.t('Sierra Leone') }</MenuItem>\n <MenuItem value=\"Singapore\">{ this.props.t('Singapore') }</MenuItem>\n <MenuItem value=\"Slovakia\">{ this.props.t('Slovakia') }</MenuItem>\n <MenuItem value=\"Slovenia\">{ this.props.t('Slovenia') }</MenuItem>\n <MenuItem value=\"Solomon Islands\">{ this.props.t('Solomon Islands') }</MenuItem>\n <MenuItem value=\"Somalia\">{ this.props.t('Somalia') }</MenuItem>\n <MenuItem value=\"South Africa\">{ this.props.t('South Africa') }</MenuItem>\n <MenuItem value=\"South Georgia South Sandwich Islands\">{ this.props.t('South Georgia South Sandwich Islands') }</MenuItem>\n <MenuItem value=\"Spain\">{ this.props.t('Spain') }</MenuItem>\n <MenuItem value=\"Sri Lanka\">{ this.props.t('Sri Lanka') }</MenuItem>\n <MenuItem value=\"St. Helena\">{ this.props.t('St. Helena') }</MenuItem>\n <MenuItem value=\"St. Pierre and Miquelon\">{ this.props.t('St. Pierre and Miquelon') }</MenuItem>\n <MenuItem value=\"Sudan\">{ this.props.t('Sudan') }</MenuItem>\n <MenuItem value=\"Suriname\">{ this.props.t('Suriname') }</MenuItem>\n <MenuItem value=\"Svalbard and Jan Mayen Islands\">{ this.props.t('Svalbard and Jan Mayen Islands') }</MenuItem>\n <MenuItem value=\"Swaziland\">{ this.props.t('Swaziland') }</MenuItem>\n <MenuItem value=\"Sweden\">{ this.props.t('Sweden') }</MenuItem>\n <MenuItem value=\"Syrian Arab Republic\">{ this.props.t('Syrian Arab Republic') }</MenuItem>\n <MenuItem value=\"Taiwan\">{ this.props.t('Taiwan') }</MenuItem>\n <MenuItem value=\"Tajikistan\">{ this.props.t('Tajikistan') }</MenuItem>\n <MenuItem value=\"Tanzania\">{ this.props.t('Tanzania') }</MenuItem>\n <MenuItem value=\"Thailand\">{ this.props.t('Thailand') }</MenuItem>\n <MenuItem value=\"Togo\">{ this.props.t('Togo') }</MenuItem>\n <MenuItem value=\"Tokelau\">{ this.props.t('Tokelau') }</MenuItem>\n <MenuItem value=\"Tonga\">{ this.props.t('Tonga') }</MenuItem>\n <MenuItem value=\"Trinidad and Tobago\">{ this.props.t('Trinidad and Tobago') }</MenuItem>\n <MenuItem value=\"Tunisia\">{ this.props.t('Tunisia') }</MenuItem>\n <MenuItem value=\"Turkey\">{ this.props.t('Turkey') }</MenuItem>\n <MenuItem value=\"Turkmenistan\">{ this.props.t('Turkmenistan') }</MenuItem>\n <MenuItem value=\"Turks and Caicos Islands\">{ this.props.t('Turks and Caicos Islands') }</MenuItem>\n <MenuItem value=\"Tuvalu\">{ this.props.t('Tuvalu') }</MenuItem>\n <MenuItem value=\"Uganda\">{ this.props.t('Uganda') }</MenuItem>\n <MenuItem value=\"Ukraine\">{ this.props.t('Ukraine') }</MenuItem>\n <MenuItem value=\"United Arab Emirates\">{ this.props.t('United Arab Emirates') }</MenuItem>\n <MenuItem value=\"United States minor outlying islands\">{ this.props.t('United States minor outlying islands') }</MenuItem>\n <MenuItem value=\"Uruguay\">{ this.props.t('Uruguay') }</MenuItem>\n <MenuItem value=\"Uzbekistan\">{ this.props.t('Uzbekistan') }</MenuItem>\n <MenuItem value=\"Vanuatu\">{ this.props.t('Vanuatu') }</MenuItem>\n <MenuItem value=\"Vatican City State\">{ this.props.t('Vatican City State') }</MenuItem>\n <MenuItem value=\"Venezuela\">{ this.props.t('Venezuela') }</MenuItem>\n <MenuItem value=\"Vietnam\">{ this.props.t('Vietnam') }</MenuItem>\n <MenuItem value=\"Virgin Islands (British)\">{ this.props.t('Virgin Islands (British)') }</MenuItem>\n <MenuItem value=\"Virgin Islands (U.S.)\">{ this.props.t('Virgin Islands (U.S.)') }</MenuItem>\n <MenuItem value=\"Wallis and Futuna Islands\">{ this.props.t('Wallis and Futuna Islands') }</MenuItem>\n <MenuItem value=\"Western Sahara\">{ this.props.t('Western Sahara') }</MenuItem>\n <MenuItem value=\"Yemen\">{ this.props.t('Yemen') }</MenuItem>\n <MenuItem value=\"Zaire\">{ this.props.t('Zaire') }</MenuItem>\n <MenuItem value=\"Zambia\">{ this.props.t('Zambia') }</MenuItem>\n <MenuItem value=\"Zimbabwe\">{ this.props.t('Zimbabwe') }</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('City') }\n className={ this.props.classes.controlItem }\n value={ this.state.city }\n onChange={ e => this.setState( {city: e.target.value })}\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Address') }\n className={ this.props.classes.controlItemAddress }\n value={ this.state.address }\n onKeyUp={e => e.keyCode === 13 && this.getPositionForAddress() }\n onChange={ e => this.setState( {address: e.target.value })}\n helperText={ this.props.t('Used only to calculate position.')}\n />\n <Fab size=\"small\" onClick={() => this.getPositionForAddress() }><GeoIcon/></Fab>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Longitude') }\n className={ this.props.classes.controlItem }\n value={ this.state.longitude }\n onChange={ e => this.setState( {longitude: parseFloat(e.target.value.replace(',', '.')) })}\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Latitude') }\n className={ this.props.classes.controlItem }\n value={ this.state.latitude }\n onChange={ e => this.setState( {latitude: parseFloat(e.target.value.replace(',', '.')) })}\n />\n </Grid>\n <Grid item style={{textAlign: 'left'}}>\n <FormControl variant=\"standard\" className={ this.props.classes.controlItem }>\n <InputLabel>{ this.props.t('Week starts with') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.firstDayOfWeek }\n onChange={e => this.setState({firstDayOfWeek: e.target.value}) }\n >\n <MenuItem value=\"monday\">{this.props.t('monday')}</MenuItem>\n <MenuItem value=\"sunday\">{this.props.t('sunday')}</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item className={ this.props.classes.mapGrid }>\n <div id=\"map\" className={ this.props.classes.map }/>\n </Grid>\n </Grid>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={ () => this.props.onDone({\n tempUnit: this.state.tempUnit,\n currency: this.state.currency,\n dateFormat: this.state.dateFormat,\n isFloatComma: this.state.isFloatComma,\n country: this.state.country,\n city: this.state.city,\n longitude: this.state.longitude,\n latitude: this.state.latitude,\n }) }\n startIcon={<IconCheck/>}\n >{ this.props.t('Save') }</Button>\n <div className={ this.props.classes.grow }/>\n </Toolbar>\n </Paper>;\n }\n}\n\nWizardSettingsTab.propTypes = {\n t: PropTypes.func,\n socket: PropTypes.object,\n onDone: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(WizardSettingsTab));\n","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@mui/material/Grid';\nimport Toolbar from '@mui/material/Grid';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport FormGroup from '@mui/material/FormGroup';\n\nimport IconCheck from '@mui/icons-material/Check';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: {\n color: theme.palette.secondary.main,\n },\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + parseInt(theme.spacing(1), 10)}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n textAlign: 'left',\n },\n inputLine: {\n width: 400,\n margin: 'auto',\n marginBottom: 50\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: TOOLBAR_HEIGHT + 'px',\n }\n});\n\nclass WizardAuthSSLTab extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n auth: !!this.props.auth,\n secure: !!this.props.secure,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <form className={ this.props.classes.form} noValidate autoComplete=\"off\">\n <Grid container direction=\"column\">\n <Grid item>\n <h2 className={ this.props.classes.title }>{ this.props.t('It is suggested to enable the authentication in admin') }</h2>\n </Grid>\n <Grid item className={this.props.classes.inputLine}>\n <FormGroup>\n <FormControlLabel\n className={this.props.classes.input}\n control={\n <Checkbox\n checked={this.state.auth}\n onChange={() => this.setState({auth: !this.state.auth})}\n />\n }\n label={this.props.t('Authentication in Admin')}\n\n />\n <FormHelperText>{this.props.t('Activate the check of password in admin if you plan to access your ioBroker is not in \"Demilitarized Zone\"')}</FormHelperText>\n </FormGroup>\n </Grid>\n <Grid item>\n <FormControl variant=\"standard\" className={this.props.classes.input}>\n <InputLabel>{this.props.t('Certificates')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.secure}\n onChange={e => this.setState({secure: e.target.value})}\n >\n <MenuItem value={false}>{this.props.t('No SSL')}</MenuItem>\n <MenuItem value={true}>{this.props.t('Use self signed certificates')}</MenuItem>\n </Select>\n <FormHelperText>{this.state.secure ?\n this.props.t('Browsers will inform you about the problem with self-signed certificates, but the communication is encrypted.') :\n this.props.t('Your communication with admin is not encrypted')}</FormHelperText>\n </FormControl>\n </Grid>\n </Grid>\n </form>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button color=\"primary\" variant=\"contained\" onClick={ () => this.props.onDone({auth: this.state.auth, secure: this.state.secure}) } startIcon={<IconCheck/>}>{ this.props.t('Apply') }</Button>\n </Toolbar>\n </Paper>;\n }\n}\n\nWizardAuthSSLTab.propTypes = {\n auth: PropTypes.bool,\n secure: PropTypes.bool,\n t: PropTypes.func,\n socket: PropTypes.object,\n onDone: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(WizardAuthSSLTab));\n","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport Toolbar from '@mui/material/Grid';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\n\nimport IconCloud from '@mui/icons-material/Public';\nimport IconCloudPro from '@mui/icons-material/Language';\nimport IconCheck from '@mui/icons-material/Check';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: {\n color: theme.palette.secondary.main,\n },\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + parseInt(theme.spacing(1), 10)}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: theme.spacing(2)\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: TOOLBAR_HEIGHT + 'px',\n },\n text: {\n fontSize: 16,\n },\n\n error: {\n fontSize: 24,\n color: '#c61f1f'\n },\n warning: {\n fontSize: 20,\n color: '#c6891f'\n },\n information: {\n fontSize: 18,\n color: '#429c1b'\n },\n button: {\n marginRight: theme.spacing(2),\n },\n});\n\nclass WizardPortForwarding extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n auth: true,\n secure: false\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <form className={ this.props.classes.form} noValidate autoComplete=\"off\">\n <Grid container direction=\"column\">\n <Grid item>\n <h2 className={ this.props.classes.title }>{ this.props.t('Important information about port forwarding') }</h2>\n </Grid>\n <Grid item>\n {!this.props.auth ? <div className={this.props.classes.error}>{this.props.t('Warning!')}</div> : null}\n {this.props.auth && !this.props.secure ? <div className={this.props.classes.warning}>{this.props.t('Be aware!')}</div> : null}\n {this.props.auth && this.props.secure ? <div className={this.props.classes.information}>{this.props.t('Information')}</div> : null}\n\n <div className={this.props.classes.text}>{this.props.t('Do not expose iobroker Admin or Web interfaces to the internet directly via the port forwarding!')}</div>\n </Grid>\n <Grid item style={{marginTop: 16}}>\n <div className={this.props.classes.text}>{this.props.t('The Cloud services from iobroker.net/pro can help here to do that securely:')}</div>\n </Grid>\n <Grid item style={{marginTop: 16}}>\n <Button\n className={this.props.classes.button}\n color=\"secondary\"\n variant=\"contained\"\n onClick={ () => window.open('https://iobroker.pro', 'help') }\n startIcon={<IconCloudPro />}\n >ioBroker.pro</Button>\n <Button\n color=\"secondary\"\n variant=\"contained\"\n onClick={ () => window.open('https://iobroker.net', 'help') }\n startIcon={<IconCloud />}\n >ioBroker.net</Button>\n </Grid>\n </Grid>\n </form>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button color=\"primary\" variant=\"contained\" onClick={ () => this.props.onDone(this.state.password) } startIcon={<IconCheck/>}>{ this.props.t('Understand') }</Button>\n </Toolbar>\n </Paper>;\n }\n}\n\nWizardPortForwarding.propTypes = {\n auth: PropTypes.bool,\n secure: PropTypes.bool,\n t: PropTypes.func,\n socket: PropTypes.object,\n onDone: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(WizardPortForwarding));\n","var _style, _g, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g2, _path9, _path10;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLongLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 550 370\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#144578;}\\n\\t.st1{fill:#3499CC;}\\n\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M293.2,244.1h-2.4v-3.2h-8.3v3.2h-2.4v-6.5c0-1,0.2-1.8,0.5-2.6s0.8-1.5,1.4-2.1c0.6-0.6,1.3-1,2.1-1.3 c0.8-0.3,1.7-0.5,2.6-0.5h5.3c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5V244.1 z M282.6,238.5h8.3v-5.1h-4.1c-0.1,0-0.2,0-0.5,0c-0.2,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.6,0.2-1,0.4s-0.7,0.4-0.9,0.7 s-0.5,0.7-0.7,1.2s-0.3,1-0.3,1.7V238.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M306.4,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M317.5,236.6h-4.1v7.5H311v-7.5H308v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M329.7,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M327.4,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M340.5,244.1h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-3.1v7.5h-2.4v-8.6 c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.2s0.3-0.1,0.5-0.1h4.3c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6v-0.7h3.2c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.5,0.1,0.7,0.2c0.2,0.1,0.5,0.3,0.7,0.4c0.2,0.2,0.4,0.4,0.6,0.6 c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.3,0.2,0.7,0.2,1.1v6.5h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-2.1 c0.1,0.3,0.1,0.6,0.1,0.9V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M358.1,240.8c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5 c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3v2.3h-4.3 c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2c0.3,0,0.6-0.1,0.7-0.3 c0.2-0.2,0.3-0.4,0.3-0.7v-3.3c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3h-5.2v-2.2h5.2c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6c0.3,0.3,0.6,0.6,0.8,1c0.2,0.4,0.3,0.9,0.3,1.5V240.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M369,236.6h-4.1v7.5h-2.4v-7.5h-3.1v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M381.1,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C381,236.4,381.1,236.9,381.1,237.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M396.2,244.1H392c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-6.5h2.4v6.5c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2V244.1z M399.5,245c0,0.4-0.1,0.8-0.2,1.1 c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6c-0.2,0.2-0.5,0.3-0.7,0.4s-0.5,0.2-0.7,0.2c-0.2,0.1-0.5,0.1-0.7,0.1H392V246 h4.3c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7v-10.8h2.4V245z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M412.5,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M410.1,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M425.2,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M436,236.6h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v6.5h-2.4v-6.5c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.3-0.1,0.5-0.1,0.7-0.1h5.3 V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M447.8,244.1h-1.1c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-10.7h2.4v10.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h1.1V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M451.7,232.2h-2.4v-2.1h2.4V232.2z M451.7,244.1h-2.4v-9.8h2.4V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M462.6,232.4h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v10.8H454v-10.8c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.5-0.1,0.7-0.1h5.3 V232.4z M462.6,236.6h-5.3v-2.4h5.3V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M474.7,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C474.6,236.4,474.7,236.9,474.7,237.5z\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M221.6,211.5c0,1.3-0.2,2.6-0.6,4c-0.4,1.4-1.1,2.8-2.1,4c-1,1.2-2.3,2.3-3.8,3.1c-1.6,0.8-3.5,1.2-5.8,1.2 h-38.6c-0.7,0-1.4-0.1-2-0.4c-0.6-0.3-1.2-0.6-1.6-1.1c-0.5-0.5-0.8-1-1.1-1.6c-0.3-0.6-0.4-1.3-0.4-2v-45.9c0-0.7,0.1-1.4,0.4-2 c0.3-0.6,0.6-1.2,1.1-1.6c0.5-0.5,1-0.8,1.6-1.1c0.6-0.3,1.3-0.4,2-0.4h34c1.3,0,2.6,0.2,4,0.7c1.4,0.4,2.8,1.2,4,2.1 c1.2,1,2.3,2.3,3.1,3.8c0.8,1.6,1.2,3.5,1.2,5.8v1.9c0,1.8-0.3,3.7-0.9,5.8c-0.6,2.1-1.6,4-2.9,5.9c1.1,0.7,2.2,1.6,3.2,2.5 c1,1,1.9,2.1,2.6,3.4c0.8,1.3,1.4,2.8,1.8,4.4c0.4,1.6,0.7,3.5,0.7,5.4V211.5z M211.4,209.5c0-1.3-0.2-2.5-0.6-3.6 c-0.4-1.1-1-2-1.8-2.7c-0.8-0.8-1.7-1.3-2.7-1.7c-1.1-0.4-2.3-0.6-3.6-0.6h-22.9v-10.3h18.4c1.3,0,2.5-0.2,3.6-0.6 c1.1-0.4,2-1,2.7-1.7c0.8-0.8,1.3-1.7,1.7-2.7c0.4-1.1,0.6-2.3,0.6-3.6V180c0-1.5-0.7-2.2-2.1-2.2h-29v35.8h33.6c0.2,0,0.4,0,0.7,0 c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7c0.2-0.3,0.2-0.7,0.2-1.3V209.5z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M266.9,191.7H244c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7c1-0.7,2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M320.1,209.5c0,1.7-0.2,3.3-0.7,4.7c-0.4,1.4-1,2.6-1.8,3.7c-0.7,1.1-1.6,2-2.5,2.7c-1,0.7-2,1.4-3,1.8 c-1.1,0.5-2.1,0.8-3.2,1c-1.1,0.2-2.1,0.3-3.1,0.3h-18.4c-1.4,0-2.9-0.2-4.6-0.7c-1.7-0.5-3.2-1.3-4.6-2.4c-1.4-1.1-2.6-2.6-3.6-4.4 c-1-1.8-1.4-4-1.4-6.7v-13.8c0-2.6,0.5-4.8,1.4-6.6c1-1.8,2.1-3.3,3.6-4.4c1.4-1.1,3-2,4.6-2.4c1.7-0.5,3.2-0.7,4.6-0.7h18.4 c2.6,0,4.8,0.5,6.7,1.4c1.8,0.9,3.3,2.1,4.4,3.5c1.1,1.4,1.9,3,2.4,4.6c0.5,1.7,0.8,3.2,0.8,4.7V209.5z M310,195.8 c0-1.4-0.4-2.5-1.1-3.1c-0.7-0.7-1.7-1-3.1-1h-18.3c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v13.8c0,1.3,0.4,2.3,1.1,3.1 c0.7,0.7,1.7,1.1,3.1,1.1h18.3c1.4,0,2.4-0.4,3.1-1.1c0.7-0.7,1-1.7,1-3.1V195.8z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M339.8,167.6h-10.2v2.5c3.4,0,6.8-0.1,10.2-0.2V167.6z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M329.6,170.1v53.7h10.2v-54.3C336.4,169.7,333,170,329.6,170.1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M379.1,181.4h-16.3l-18.6,15c-0.6,0.4-1,1-1.4,1.6c-0.3,0.6-0.5,1.3-0.6,2.1c-0.1,1.6,0.5,2.9,1.6,3.9 l20.5,19.8h14.7l-24-23.1L379.1,181.4z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M429.6,195.5c0,1.4-0.2,2.9-0.7,4.6c-0.5,1.6-1.3,3.1-2.4,4.5c-1.1,1.4-2.6,2.6-4.3,3.5c-1.8,0.9-4,1.4-6.5,1.4 h-18.4v-9.7h18.4c1.4,0,2.5-0.4,3.2-1.3c0.8-0.8,1.1-1.9,1.1-3.2c0-1.3-0.4-2.4-1.3-3.1c-0.8-0.8-1.9-1.1-3.1-1.1h-18.4 c-1.4,0-2.5,0.4-3.2,1.3c-0.8,0.8-1.1,1.9-1.1,3.2v14.2c0,1.4,0.4,2.4,1.3,3.2s1.9,1.1,3.2,1.1h18.3v9.7h-18.4 c-1.4,0-2.9-0.2-4.6-0.7c-1.6-0.5-3.1-1.3-4.5-2.4c-1.4-1.1-2.6-2.6-3.5-4.3c-0.9-1.8-1.4-4-1.4-6.5v-14.3c0-1.4,0.2-2.9,0.7-4.6 c0.5-1.6,1.3-3.1,2.4-4.5c1.1-1.4,2.6-2.6,4.3-3.5c1.8-0.9,4-1.4,6.5-1.4h18.4c1.4,0,2.9,0.2,4.6,0.7c1.6,0.5,3.1,1.3,4.5,2.4 c1.4,1.1,2.6,2.6,3.5,4.3C429.2,190.8,429.6,192.9,429.6,195.5z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M474.1,191.7h-22.9c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7s2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M126.3,168.8l0,10.8c11.4,3.5,18.9,13.9,18.9,26.4c0,15.4-12.6,27.9-28.1,27.9S89.1,221.4,89.1,206 c0-12.5,7.5-22.8,18.9-26.4v-10.8c-16.9,3.8-28.7,18.9-28.7,37.1c0,21.1,16.9,38.3,37.9,38.3S155,227.1,155,206 C155,187.8,143.2,172.6,126.3,168.8z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M117.2,178.1c1.9,0,3.8,0.2,5.7,0.6v-10.3c-1.9-0.3-3.8-0.4-5.7-0.4s-3.8,0.1-5.7,0.4v10.3 C113.3,178.3,115.2,178.1,117.2,178.1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M112,182c1.4-0.3,3.2-0.5,5.3-0.5c2.1,0,4,0.2,5.4,0.5c0,15.9,0,31.9,0,47.8c-3.6,0.8-7.1,0.8-10.7,0 C112,214,112,198,112,182z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLongLogo);\nexport default __webpack_public_path__ + \"static/media/longLogo.d88c527f6b93b57693fe78d036047c6b.svg\";\nexport { ForwardRef as ReactComponent };","import { Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport AppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\n\n// Icons\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\n\nimport ToggleThemeMenu from '../components/ToggleThemeMenu';\nimport WizardPasswordTab from '../components/Wizard/WizardPasswordTab';\nimport WizardLicenseTab from '../components/Wizard/WizardLicenseTab';\nimport WizardFinishImage from '../assets/wizard-finish.jpg';\nimport WizardWelcomeImage from '../assets/wizard-welcome.jpg';\nimport WizardSettingsTab from '../components/Wizard/WizardSettingsTab';\nimport WizardAuthSSLTab from '../components/Wizard/WizardAuthSSLTab';\nimport WizardPortForwarding from '../components/Wizard/WizardPortForwarding';\nimport Logo from '../assets/logo.png';\nimport LongLogo from '../assets/longLogo.svg';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles = theme => ({\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n },\n content: {\n textAlign: 'center',\n },\n tabPanel: {\n width: '100%',\n overflow: 'hidden',\n height: `calc(100% - 72px)`,\n },\n fullHeightWithoutToolbar: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'auto',\n },\n finishBackground: {\n backgroundImage: `url(${WizardFinishImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n welcomeBackground: {\n backgroundImage: `url(${WizardWelcomeImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n grow: {\n flexGrow: 1,\n },\n playIcon: {\n marginLeft: theme.spacing(1),\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n },\n logo: {\n width: 32,\n height: 32,\n borderRadius: '50%',\n background: 'white',\n marginRight: theme.spacing(1),\n verticalAlign: 'middle',\n },\n themeButton: {\n float: 'right',\n display: 'inline-block',\n marginTop: -1,\n marginRight: theme.spacing(1)\n },\n\n finalText: {\n fontSize: 48,\n marginTop: 80,\n color: '#265063',\n fontWeight: 'bold'\n },\n finalLongLogo: {\n width: 500,\n }\n});\n\nclass WizardDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n exitAvailable: false,\n activeStep: 0,\n auth: false,\n secure: false,\n };\n this.adminInstance = null;\n\n this.password = '';\n\n this.lastPage = 1;\n }\n\n componentDidMount() {\n this.props.socket.getCurrentInstance()\n .then(namespace =>\n this.props.socket.getObject('system.adapter.' + namespace)\n .then(obj => {\n this.adminInstance = obj;\n this.setState({ auth: obj.native.auth, secure: obj.native.secure });\n }));\n }\n\n renderWelcome() {\n // shutterstock Standard commercial license on ioBroker GmbH: https://www.shutterstock.com/de/image-vector/welcome-neon-text-vector-sign-design-1186433386\n return <div className={ clsx(this.props.classes.paper, this.props.classes.welcomeBackground) }>\n <div className={ this.props.classes.fullHeightWithoutToolbar }>\n\n </div>\n <Toolbar className={ this.props.classes.toolbar }>\n <div className={ this.props.classes.grow }/>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={ () =>\n this.props.socket.getCompactSystemConfig(true)\n .then(obj =>\n this.setState( { activeStep: this.state.activeStep + 1 + (obj.common.licenseConfirmed ? 0 : 0) }))\n }>\n {this.props.t('Start wizard')} <PlayArrowIcon className={ this.props.classes.playIcon }/></Button>\n <div className={this.props.classes.grow}/>\n </Toolbar>\n </div>;\n }\n\n renderLicense() {\n return <WizardLicenseTab\n t={this.props.t}\n socket={this.props.socket}\n themeName={ this.props.themeName}\n onDone={ settings => {\n this.props.socket.getSystemConfig(true)\n .then(obj => {\n obj.common.licenseConfirmed = true;\n if (settings?.lang) {\n obj.common.language = settings.lang;\n }\n return this.props.socket.setSystemConfig(obj);\n })\n .then(() => this.setState( { activeStep: this.state.activeStep + 1 }));\n } }\n />;\n }\n\n renderPassword() {\n return <WizardPasswordTab\n t={ this.props.t }\n socket={ this.props.socket }\n themeName={ this.props.themeName }\n onDone={ pass =>\n this.props.socket.changePassword('admin', pass)\n .then(() =>\n this.setState( {activeStep: this.state.activeStep + 1 }))}\n />;\n }\n\n renderSettings() {\n return <WizardSettingsTab\n t={ this.props.t }\n socket={ this.props.socket }\n themeName={ this.props.themeName }\n onDone={settings =>\n this.props.socket.getSystemConfig(true)\n .then(obj => {\n Object.assign(obj.common, settings);\n return this.props.socket.setSystemConfig(obj);\n })\n .then(() =>\n this.setState({activeStep: this.state.activeStep + 1}))\n }\n />;\n }\n\n renderAuthentication() {\n return <WizardAuthSSLTab\n t={ this.props.t }\n auth={this.state.auth}\n secure={this.state.secure}\n socket={ this.props.socket }\n themeName={ this.props.themeName }\n onDone={settings =>\n this.setState(settings, () => this.setState({ activeStep: this.state.activeStep + 1 }))}\n />;\n }\n\n renderPortForwarding() {\n return <WizardPortForwarding\n t={ this.props.t }\n socket={ this.props.socket }\n themeName={ this.props.themeName }\n auth={this.state.auth}\n secure={this.state.secure}\n onDone={() =>\n this.setState({ activeStep: this.state.activeStep + 1 })}\n />;\n }\n\n async onClose() {\n // read if discovery is available\n const discovery = await this.props.socket.getState('system.adapter.discovery.0.alive');\n\n if (this.adminInstance) {\n let certPublic;\n let certPrivate;\n if (this.adminInstance.native.secure !== this.state.secure || this.adminInstance.native.auth !== this.state.auth) {\n if (this.state.secure && (!this.adminInstance.certPublic || !!this.adminInstance.certPrivate)) {\n // get certificates\n try {\n const certs = await this.props.socket.getCertificates();\n certPublic = certs && certs.find(c => c.type === 'public');\n certPrivate = certs && certs.find(c => c.type === 'private');\n } catch (e) {\n window.alert('Cannot read certificates: ' + e);\n }\n }\n this.adminInstance.native.auth = this.state.auth;\n\n if (this.state.secure) {\n if (!(this.adminInstance.native.certPublic || certPublic) ||\n !(this.adminInstance.native.certPrivate || certPrivate))\n {\n window.alert(this.props.t('Cannot enable authentication as no certificates found!'));\n this.adminInstance.native.secure = false;\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n setTimeout(() => window.location = `http://${window.location.host}/#tab-adapters${discovery ? '/discovery' : ''}`, 1000);\n return this.props.onClose();\n } else {\n this.adminInstance.native.secure = this.state.secure;\n this.adminInstance.native.certPublic = this.adminInstance.native.certPublic || certPublic.name;\n this.adminInstance.native.certPrivate = this.adminInstance.native.certPrivate || certPrivate.name;\n }\n }\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n\n // redirect to https or http\n let redirect;\n if (this.adminInstance.native.secure) {\n redirect = `https://${window.location.host}/#tab-adapters${discovery ? '/discovery' : ''}`;\n } else {\n redirect = `http://${window.location.host}/#tab-adapters${discovery ? '/discovery' : ''}`;\n }\n\n this.props.onClose(redirect);\n } else {\n Router.doNavigate('tab-adapters', discovery ? 'discovery' : undefined);\n this.props.onClose();\n }\n } else {\n Router.doNavigate('tab-adapters', discovery ? 'discovery' : undefined);\n this.props.onClose();\n }\n }\n\n renderFinish() {\n // Free Image license: https://pixabay.com/illustrations/road-sky-mountains-clouds-black-908176/\n return <div className={ clsx(this.props.classes.paper, this.props.classes.finishBackground) }>\n <div className={ this.props.classes.fullHeightWithoutToolbar }>\n <div className={this.props.classes.finalText}>{this.props.t('Have fun automating your home with')}</div>\n <img src={LongLogo} alt=\"ioBroker\" className={this.props.classes.finalLongLogo}/>\n </div>\n <Toolbar className={this.props.classes.toolbar}>\n <div className={this.props.classes.grow}/>\n <Button variant=\"contained\" color=\"primary\" onClick={async () => await this.onClose()} startIcon={<CheckIcon/>}>{this.props.t('Finish')}</Button>\n <div className={this.props.classes.grow}/>\n </Toolbar>\n </div>;\n }\n\n render() {\n return <Dialog\n className={ this.props.classes.dialog }\n open={ true }\n onClose={ () => {} }\n fullWidth={ true }\n fullScreen={ true }\n aria-labelledby=\"wizard-dialog-title\"\n >\n <DialogTitle id=\"wizard-dialog-title\"><img src={Logo} className={this.props.classes.logo} alt=\"logo\"/>{ this.props.t('Initial ioBroker setup') } <ToggleThemeMenu className={this.props.classes.themeButton} t={this.props.t} toggleTheme={this.props.toggleTheme} themeName={this.props.themeName} size=\"small\"/></DialogTitle>\n <DialogContent className={ this.props.classes.content }>\n <AppBar position=\"static\">\n <Stepper activeStep={ this.state.activeStep }>\n <Step><StepLabel>{ this.props.t('Welcome') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('License agreement') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('Password') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('Authentication') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('Port forwarding') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('Settings') }</StepLabel></Step>\n <Step><StepLabel>{ this.props.t('Finish') }</StepLabel></Step>\n </Stepper>\n </AppBar>\n {this.state.activeStep === 0 ? <div className={ this.props.classes.tabPanel }>{ this.renderWelcome() }</div> : null }\n {this.state.activeStep === 1 ? <div className={ this.props.classes.tabPanel }>{ this.renderLicense() }</div> : null }\n {this.state.activeStep === 2 ? <div className={ this.props.classes.tabPanel }>{ this.renderPassword() }</div> : null }\n {this.state.activeStep === 3 ? <div className={ this.props.classes.tabPanel }>{ this.renderAuthentication() }</div> : null }\n {this.state.activeStep === 4 ? <div className={ this.props.classes.tabPanel }>{ this.renderPortForwarding() }</div> : null }\n {this.state.activeStep === 5 ? <div className={ this.props.classes.tabPanel }>{ this.renderSettings() }</div> : null }\n {this.state.activeStep === 6 ? <div className={ this.props.classes.tabPanel }>{ this.renderFinish() }</div> : null }\n </DialogContent>\n </Dialog>;\n }\n}\n\nWizardDialog.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n socket: PropTypes.object,\n onClose: PropTypes.func,\n toggleTheme: PropTypes.func,\n themeName: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(WizardDialog));\n","import { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MapContainer, TileLayer } from 'react-leaflet';\nimport { useMap } from 'react-leaflet/hooks';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport { withStyles } from '@mui/styles';\nimport Grid from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport { FormHelperText } from '@mui/material';\n\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport Utils from '../../Utils';\nimport countries from '../../assets/json/countries';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n formControl: {\n marginRight: theme.spacing(1),\n minWidth: '100%',\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n map: {\n borderRadius: 5\n }\n});\n\nfunction MyMapComponent(props) {\n const map = useMap();\n props.addMap && props.addMap(map);\n return null;\n}\n\nclass MainSettingsDialog extends Component {\n constructor(props) {\n super(props);\n this.state = {\n values: [],\n data: {},\n zoom: 14\n };\n }\n\n getSettings() {\n return [\n {\n id: 'language',\n title: 'System language:',\n translate: false,\n values: [\n {\n id: 'en',\n title: 'English'\n },\n {\n id: 'de',\n title: 'Deutsch'\n },\n {\n id: 'ru',\n title: 'русский'\n },\n {\n id: 'pt',\n title: 'Portugues'\n },\n {\n id: 'nl',\n title: 'Nederlands'\n },\n {\n id: 'fr',\n title: 'français'\n },\n {\n id: 'it',\n title: 'Italiano'\n },\n {\n id: 'es',\n title: 'Espanol'\n },\n {\n id: 'pl',\n title: 'Polski'\n },\n {\n id: 'zh-ch',\n title: '简体中文'\n }\n ]\n },\n {\n id: 'tempUnit',\n title: 'Temperature units',\n translate: false,\n values: [\n {\n id: '°C',\n title: '°C'\n },\n {\n id: '°F',\n title: '°F'\n }\n ]\n },\n {\n id: 'currency',\n title: 'Currency sign',\n translate: false,\n allowText: true,\n values: [\n {\n id: '€',\n title: '€'\n },\n {\n id: '$',\n title: '$'\n },\n {\n id: '₽',\n title: '₽'\n },\n {\n id: '₤',\n title: '₤'\n },\n {\n id: 'CHF',\n title: 'CHF'\n }\n ]\n },\n {\n id: 'dateFormat',\n title: 'Date format',\n translate: true,\n values: [\n {\n id: 'DD.MM.YYYY',\n title: 'DD.MM.YYYY'\n },\n {\n id: 'YYYY.MM.DD',\n title: 'YYYY.MM.DD'\n },\n {\n id: 'MM/DD/YYYY',\n title: 'MM/DD/YYYY'\n }\n ]\n },\n {\n id: 'isFloatComma',\n title: 'Float divider sign',\n translate: true,\n values: [\n {\n id: true,\n title: 'comma'\n },\n {\n id: false,\n title: 'point'\n }\n ]\n },\n {\n id: 'defaultHistory',\n title: 'Default History',\n values: [{ id: '', title: this.props.t('None') }, ...this.props.histories.map(history => {\n return {\n id: history,\n title: history\n }\n })]\n },\n {\n id: 'activeRepo',\n title: 'Default Repository',\n translate: false,\n values: Utils.objectMap(this.props.dataAux.native.repositories, (repo, name) =>\n ({\n id: name,\n title: name\n }))\n },\n {\n id: 'expertMode',\n title: 'Expert mode',\n values: [{ id: true, title: 'on' }, { id: false, title: 'off (default)' }]\n },\n {\n id: 'defaultLogLevel',\n title: 'Default log level',\n help: 'for new instances',\n translate: false,\n values: [{ id: 'debug', title: 'debug' }, { id: 'info', title: 'info' }, { id: 'warn', title: 'warn' }, { id: 'error', title: 'error' }]\n },\n {\n id: 'firstDayOfWeek',\n title: 'First day of week',\n translate: true,\n values: [{ id: 'monday', title: 'Monday' }, { id: 'sunday', title: 'Sunday' }]\n }\n ];\n }\n\n onMap = map => {\n if (!this.map || this.map !== map) {\n this.map = map;\n const center = [\n parseFloat(this.props.data.common.latitude !== undefined ? this.props.data.common.latitude : 50) || 0,\n parseFloat(this.props.data.common.longitude !== undefined ? this.props.data.common.longitude : 10) || 0\n ];\n\n this.marker = window.L.marker(\n center,\n {\n draggable: true,\n title: 'Resource location',\n alt: 'Resource Location',\n riseOnHover: true\n }\n )\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: evt => this.onMarkerDragend(evt) });\n }\n }\n\n getSelect(e, i) {\n const { classes } = this.props;\n let value = this.props.data.common[e.id];\n\n if (e.id === 'defaultLogLevel' && !value) {\n value = 'info';\n }\n\n if (e.id === 'activeRepo' && this.props.multipleRepos) {\n return null;\n }\n\n // if disabled by vendor settings\n if (this.props.adminGuiConfig.admin.settings && this.props.adminGuiConfig.admin.settings[e.id] === false) {\n return null;\n }\n\n // If value is not in known values, show text input\n if (e.allowText && value && !e.values.find(elem => elem.id === value)) {\n return <Grid item sm={6} xs={12} key={i}>\n <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id={e.id + '-label'}>\n {this.props.t(e.title)}\n </InputLabel>\n <TextField\n variant=\"standard\"\n id={e.id}\n value={value.toString()}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n onChange={evt => this.handleChange(evt, i)}\n helperText={e.help ? this.props.t(e.help) : ''}\n />\n </FormControl>\n </Grid>;\n }\n\n const items = e.values.map((elem, index) => <MenuItem value={elem.id} key={index}>\n {e.translate ? this.props.t(elem.title || elem.id) : elem.title || elem.id}\n </MenuItem>);\n\n return <Grid item sm={6} xs={12} key={i}>\n <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id={e.id + '-label'}>\n {this.props.t(e.title)}\n </InputLabel>\n <Select\n variant=\"standard\"\n className={classes.formControl}\n id={e.id}\n value={value === undefined ? false : value}\n onChange={evt => this.handleChange(evt, i)}\n displayEmpty\n >\n {items}\n </Select>\n {e.help ? <FormHelperText>{this.props.t(e.help)}</FormHelperText> : null}\n </FormControl>\n </Grid>;\n }\n\n renderConfirmDialog() {\n if (this.state.confirm) {\n return <ConfirmDialog\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.doChange('activeRepo', value);\n }\n });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCounters = () => {\n const { classes } = this.props;\n const items = countries.map((elem, index) => <MenuItem value={elem.name} key={index}>\n {this.props.t(elem.name)}\n </MenuItem>);\n\n return <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id={'country-label'}>\n {this.props.t('Country:')}\n </InputLabel>\n <Select\n variant=\"standard\"\n className={classes.formControl}\n id={'country'}\n value={this.props.data.common.country}\n onChange={this.handleChangeCountry}\n displayEmpty\n >\n {items}\n </Select>\n </FormControl>;\n }\n\n handleChangeCountry = evt => {\n const value = evt.target.value;\n const id = 'country';\n this.doChange(id, value);\n }\n\n onChangeText = (evt, id) => {\n const value = evt.target.value;\n this.onChangeInput(value, id);\n\n if (id === 'longitude' || id === 'latitude') {\n this.latLongTimer && clearTimeout(this.latLongTimer);\n this.latLongTimer = setTimeout(() => {\n this.latLongTimer = null;\n this.map.flyTo([this.props.data.common.latitude, this.props.data.common.longitude]);\n this.marker.setLatLng([this.props.data.common.latitude, this.props.data.common.longitude]);\n }, 500);\n }\n }\n\n onChangeInput = (value, id, cb) =>\n this.doChange(id, value, cb);\n\n onChangeCity = evt => {\n this.onChangeText(evt, 'city');\n\n this.cityTimer && clearTimeout(this.cityTimer);\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n provider.search({ query: evt.target.value })\n .then(results => {\n if (results[0]) {\n setTimeout(() =>\n this.onChangeInput(results[0].y, 'latitude', () =>\n this.onChangeInput(results[0].x, 'longitude', () =>\n this.onChangeInput(23, 'zoom', () => {\n this.map.flyTo([results[0].y, results[0].x]);\n this.marker.setLatLng([results[0].y, results[0].x]);\n })\n )\n ), 1200);\n }\n });\n }, 500);\n }\n\n handleChange = (evt, selectId) => {\n const value = evt.target.value;\n const id = this.getSettings()[selectId].id;\n\n if (id === 'activeRepo' && value !== 'stable' && value !== 'default') {\n this.setState({ confirm: true, confirmValue: value });\n } else {\n this.doChange(id, value);\n }\n }\n\n doChange = (name, value, cb) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.common[name] = value;\n this.props.onChange(newData, null, () =>\n cb && cb());\n }\n\n onMarkerDragend = evt => {\n const ll = JSON.parse(JSON.stringify(evt.target._latlng));\n this.doChange('latitude', ll.lat, () =>\n this.doChange('longitude', ll.lng));\n }\n\n render() {\n const { classes } = this.props;\n const selectors = this.getSettings().map((e, i) => this.getSelect(e, i));\n\n const center = [\n parseFloat(this.props.data.common.latitude !== undefined ? this.props.data.common.latitude : 50) || 0,\n parseFloat(this.props.data.common.longitude !== undefined ? this.props.data.common.longitude : 10) || 0\n ];\n\n const { zoom } = this.state;\n\n return <div className={classes.tabPanel}>\n {this.renderConfirmDialog()}\n <Grid container spacing={3}>\n <Grid item lg={6} md={12}>\n <Grid container spacing={3}>\n {selectors}\n </Grid>\n </Grid>\n <Grid item lg={6} md={12} style={{ width: '100%' }}>\n <MapContainer\n className={classes.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl={true}\n zoomControl={true}\n doubleClickZoom={true}\n scrollWheelZoom={true}\n dragging={true}\n animate={true}\n easeLinearity={0.35}\n >\n <TileLayer url=\"http://{s}.tile.osm.org/{z}/{x}/{y}.png\"/>\n <MyMapComponent addMap={map => this.onMap(map)}/>\n </MapContainer>\n </Grid>\n </Grid>\n <Grid container spacing={6}>\n <Grid item md={3} sm={6} xs={12}>\n {this.getCounters()}\n </Grid>\n <Grid item md={3} sm={6} xs={12}>\n <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id={'city-label'}>\n {this.props.t('City:')}\n </InputLabel>\n <TextField\n variant=\"standard\"\n id=\"city\"\n label={this.props.t('City:')}\n value={this.props.data.common.city}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n onChange={evt => this.onChangeCity(evt)}\n />\n </FormControl>\n </Grid>\n <Grid item md={3} sm={6} xs={12}>\n <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id=\"latitude-label\">\n {this.props.t('Latitude:')}\n </InputLabel>\n <TextField\n variant=\"standard\"\n id=\"latitude\"\n label={this.props.t('Latitude:')}\n value={this.props.data.common.latitude || 0}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n onChange={evt => this.onChangeText(evt, 'latitude')}\n />\n </FormControl>\n </Grid>\n <Grid item md={3} sm={6} xs={12}>\n <FormControl className={classes.formControl} variant=\"standard\">\n <InputLabel shrink id=\"longitude-label\">\n {this.props.t('Longitude:')}\n </InputLabel>\n <TextField\n variant=\"standard\"\n id=\"longitude\"\n label={this.props.t('Longitude:')}\n value={this.props.data.common.longitude || 0}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n onChange={evt => this.onChangeText(evt, 'longitude')}\n />\n </FormControl>\n </Grid>\n </Grid>\n </div>;\n }\n}\n\nMainSettingsDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n dataAux: PropTypes.object,\n adminGuiConfig: PropTypes.object,\n};\n\nexport default withWidth()(withStyles(styles)(MainSettingsDialog));\n","// RepositoriesDialog\nimport {Component} from 'react';\nimport clsx from 'clsx';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport {SortableContainer, SortableElement, SortableHandle} from 'react-sortable-hoc';\n\nimport Checkbox from '@mui/material/Checkbox';\nimport Fab from '@mui/material/Fab';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\nimport AddIcon from '@mui/icons-material/Add';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DragHandleIcon from '@mui/icons-material/Menu';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport Utils from '../../Utils';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex'\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center'\n },\n dragColumn: {\n width: 32\n },\n enableColumn: {\n width: 110\n },\n buttonColumn: {\n width: 80\n },\n nameRow: {\n width: 220\n },\n input: {\n width: '100%'\n },\n checkboxError: {\n '& span:first-child': {\n border: '2px solid #FF0000',\n borderRadius: 4\n }\n }\n});\n\nfunction repoToArray(repos) {\n return Utils.objectMap(repos, (repo, name) => {\n return {\n title: name,\n link: repo.link,\n }\n });\n}\n\nfunction arrayToRepo(array) {\n let result = {};\n for (let k in array) {\n result[array[k].title] = {link: array[k].link};\n }\n\n return result;\n}\n\nconst DragHandle = SortableHandle(({t}) => <DragHandleIcon style={{marginTop: 8, marginRight: 0, cursor: 'handle'}}/>);\n\nconst SortableItem = SortableElement(({\n item,\n classes,\n _index,\n repositories,\n multipleRepos,\n adminGuiConfig,\n error,\n t,\n dataAux,\n onDelete,\n onChangeText,\n onChangeActiveRepo\n}) => <TableRow className=\"float_row\">\n <TableCell className={clsx(classes.dragColumn, 'float_cell')} title={t('Drag and drop to reorder')}>\n <DragHandle t={t}/>\n </TableCell>\n <TableCell className={clsx(classes.enableColumn, 'float_cell')}>\n {_index + 1}\n {multipleRepos ? <Checkbox\n disabled={adminGuiConfig.admin.settings.activeRepo === false}\n className={error ? classes.checkboxError : ''}\n title={error ? I18n.t('At least one repo must be selected') : ''}\n checked={typeof dataAux.common.activeRepo === 'string' ? dataAux.common.activeRepo === item.title : dataAux.common.activeRepo.includes(item.title)}\n onChange={() => {\n let showWarning = false;\n let newData = JSON.parse(JSON.stringify(dataAux));\n if (typeof newData.common.activeRepo === 'string') {\n newData.common.activeRepo = [newData.common.activeRepo];\n }\n let pos = newData.common.activeRepo.indexOf(item.title);\n if (pos === -1) {\n newData.common.activeRepo.push(item.title);\n // newData.common.activeRepo.sort();\n // sort repos according to order of repos\n const arr = repoToArray(repositories);\n newData.common.activeRepo.sort((a, b) => {\n const indexA = arr.findIndex(item => item.title === a);\n const indexB = arr.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n\n showWarning = item.title === 'beta';\n } else {\n newData.common.activeRepo.splice(pos, 1);\n }\n if (item.title === 'beta' && newData.common.activeRepo.includes('stable')) {\n pos = newData.common.activeRepo.indexOf('stable');\n newData.common.activeRepo.splice(pos, 1);\n } else if (item.title === 'stable' && newData.common.activeRepo.includes('beta')) {\n pos = newData.common.activeRepo.indexOf('beta');\n newData.common.activeRepo.splice(pos, 1);\n }\n\n const error = !newData.common.activeRepo.length;\n onChangeActiveRepo(newData, error, showWarning);\n }}\n /> : null}\n </TableCell>\n <TableCell className={clsx(classes.nameRow, 'float_cell')}>\n <TextField\n variant=\"standard\"\n value={item.title}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n className={clsx(classes.input, 'xs-centered')}\n onChange={evt => onChangeText(evt, item.title, 'title')}\n />\n </TableCell>\n <TableCell className={clsx('grow_cell', 'float_cell')}>\n <TextField\n variant=\"standard\"\n id={'default_' + _index}\n value={item.link}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n className={clsx(classes.input, 'xs-centered')}\n onChange={evt => onChangeText(evt, item.title, 'link')}\n />\n </TableCell>\n <TableCell className={clsx(classes.buttonColumn, 'float_cell')}>\n <Fab\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => onDelete(item.title)}\n >\n <DeleteIcon/>\n </Fab>\n </TableCell>\n</TableRow>);\n\nconst SortableList = SortableContainer(({items, classes, multipleRepos, t, error, adminGuiConfig, dataAux, onDelete, onChangeText, onChangeActiveRepo, repositories}) => {\n return <Table className={classes.table}>\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell className={clsx(classes.dragColumn, 'float_cell')}/>\n <TableCell className={clsx(classes.enableColumn, 'float_cell')}>{multipleRepos ? I18n.t('Active') : ''}</TableCell>\n <TableCell className={clsx(classes.nameRow, 'float_cell')}>\n {t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n {t('link')}\n </TableCell>\n <TableCell className={clsx(classes.buttonColumn, 'float_cell')}> </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {items.map((item, index) =>\n <SortableItem\n key={`item-${index}`}\n index={index}\n _index={index}\n item={item}\n t={t}\n classes={classes}\n multipleRepos={multipleRepos}\n adminGuiConfig={adminGuiConfig}\n error={error}\n dataAux={dataAux}\n repositories={repositories}\n onDelete={onDelete}\n onChangeText={onChangeText}\n onChangeActiveRepo={onChangeActiveRepo}\n />)}\n </TableBody>\n </Table>;\n});\n\nclass RepositoriesDialog extends Component {\n constructor(props) {\n super(props);\n const repos = (typeof this.props.dataAux.common.activeRepo === 'string' ? [this.props.dataAux.common.activeRepo] : this.props.dataAux.common.activeRepo).filter(r => r);\n\n this.state = {\n error: !repos.length,\n confirm: false,\n confirmValue: null\n };\n }\n\n onChangeText = (evt, id, name) => {\n const value = evt.target.value;\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = repoToArray(newData.native.repositories);\n const item = array.find(element => element.title === id);\n const oldTitle = item.title;\n item[name] = value;\n newData.native.repositories = arrayToRepo(array);\n this.props.onChange(newData);\n if (((typeof this.props.dataAux.common.activeRepo === 'string' && this.props.dataAux.common.activeRepo === id) ||\n (typeof this.props.dataAux.common.activeRepo !== 'string' && this.props.dataAux.common.activeRepo.includes(id))) &&\n name === 'title') {\n this.props.onChange(newData, this.getUpdateDefaultRepo(value, newData, oldTitle, value));\n } else {\n this.props.onChange(newData);\n }\n };\n\n onDelete = id => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = repoToArray(newData.native.repositories);\n let index = array.findIndex(element => element.title === id);\n delete array[index];\n newData.native.repositories = arrayToRepo(array);\n if (this.props.dataAux.common.activeRepo === id) {\n if (Object.keys(newData.native.repositories).length) {\n // set first repo as active\n this.props.onChange(newData, this.getUpdateDefaultRepo(Object.keys(newData.native.repositories)[0]));\n } else {\n this.props.onChange(newData, this.getUpdateDefaultRepo(''));\n }\n } else {\n this.props.onChange(newData);\n }\n };\n\n onAdd = () => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = repoToArray(newData.native.repositories);\n array.push({\n title: '__',\n link: ''\n });\n newData.native.repositories = arrayToRepo(array);\n this.props.onChange(newData);\n };\n\n getUpdateDefaultRepo = (newRepo, newData, oldTitle, newTitle) => {\n let newConfig = JSON.parse(JSON.stringify(this.props.dataAux));\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = newRepo;\n return newConfig;\n } else {\n newData = newData || JSON.parse(JSON.stringify(this.props.data));\n if (oldTitle !== undefined) {\n const pos = newConfig.common.activeRepo.indexOf(oldTitle);\n if (pos !== -1) {\n newConfig.common.activeRepo[pos] = newTitle;\n }\n }\n\n if (typeof newConfig.common.activeRepo === 'string' && newConfig.common.activeRepo) {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n newConfig.common.activeRepo = newConfig.common.activeRepo || [];\n if (!newConfig.common.activeRepo.includes(newRepo)) {\n // sort activeRepo anew\n const items = repoToArray(newData.native.repositories);\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(item => item.title === a);\n const indexB = items.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n }\n\n return newConfig;\n }\n };\n\n onSortEnd = ({oldIndex, newIndex}) => {\n console.log(oldIndex, newIndex);\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let items = repoToArray(newData.native.repositories);\n const item = items[oldIndex];\n items.splice(oldIndex, 1);\n items.splice(newIndex, 0, item);\n newData.native.repositories = arrayToRepo(items);\n\n let newConfig = JSON.parse(JSON.stringify(this.props.dataAux));\n\n if (typeof newConfig.common.activeRepo === 'string') {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n\n // sort activeRepo anew\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(item => item.title === a);\n const indexB = items.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n\n this.props.onChange(newData, newConfig);\n };\n\n onChangeActiveRepo = (newData, error, showWarning) => {\n if (showWarning) {\n this.setState({ confirm: true, confirmValue: {newData, error}});\n } else {\n this.setState({error}, () => this.props.onChange(null, newData));\n }\n }\n\n renderConfirmDialog() {\n if (this.state.confirm) {\n return <ConfirmDialog\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.setState({error: value.error}, () => this.props.onChange(null, value.newData));\n }\n });\n }}\n />;\n } else {\n return null;\n }\n }\n\n render() {\n const {classes} = this.props;\n const items = repoToArray(this.props.data.native.repositories);\n\n return <div className={classes.tabPanel}>\n {this.renderConfirmDialog()}\n <div className={classes.buttonPanel}>\n <Fab\n size=\"small\"\n color=\"primary\"\n aria-label=\"add\"\n onClick={this.onAdd}\n className=\"small_size\"\n >\n <AddIcon/>\n </Fab>\n <Paper variant=\"outlined\" className={classes.descriptionPanel}/>\n </div>\n <TableContainer>\n <SortableList\n helperClass=\"draggable-item\"\n useDragHandle\n lockAxis=\"y\"\n items={items}\n onSortEnd={this.onSortEnd}\n error={this.state.error}\n classes={this.props.classes}\n multipleRepos={this.props.multipleRepos}\n t={this.props.t}\n adminGuiConfig={this.props.adminGuiConfig}\n dataAux={this.props.dataAux}\n repositories={this.props.data.native.repositories}\n onDelete={this.onDelete}\n onChangeText={this.onChangeText}\n onChangeActiveRepo={this.onChangeActiveRepo}\n />\n </TableContainer>\n </div>;\n }\n}\n\nRepositoriesDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n dataAux: PropTypes.object,\n multipleRepos: PropTypes.bool,\n};\n\nexport default withWidth()(withStyles(styles)(RepositoriesDialog));\n","// LicensesDialog\nimport {Component} from 'react';\nimport clsx from 'clsx';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TextField from '@mui/material/TextField';\n\nimport IconRefresh from '@mui/icons-material/Refresh';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n input: {\n width: 250,\n marginRight: 16\n },\n button: {\n marginTop: 16,\n },\n uuidGreen: {\n color: 'green'\n },\n uuidGrey: {\n color: 'grey'\n },\n tableName: {\n width: 200,\n },\n tableDate: {\n width: 150,\n textAlign: 'right',\n },\n tableUuid: {\n width: 300,\n },\n tableValid: {\n width: 100,\n },\n tableVersion: {\n width: 50,\n },\n tableUsedIn: {\n width: 100,\n },\n tableDiv: {\n overflow: 'auto',\n height: 'calc(100% - 75px)'\n }\n});\n\nclass LicensesDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n confirm: false,\n confirmValue: null,\n host: '',\n uuid: '',\n requesting: false,\n licenses: this.props.data.native.licenses || [],\n readTime: this.props.data.native.readTime || 0,\n };\n }\n\n onLicensesChanged = (id, obj) => {\n if (id === 'system.licenses') {\n obj = obj || {};\n obj.native = obj.native || {};\n obj.native.licenses = obj.native.licenses || [];\n if (JSON.stringify(obj.native.licenses) !== JSON.stringify(this.state.licenses)) {\n window.alert(this.props.t('New licenses were stored'));\n this.setState({licenses: obj.native.licenses, readTime: obj.native.licenses.readTime || 0});\n } else {\n window.alert(this.props.t('Licenses have not changed'));\n }\n }\n };\n\n componentDidMount() {\n this.props.socket.getObject('system.meta.uuid')\n .then(obj => {\n this.props.socket.subscribeObject('system.licenses', this.onLicensesChanged);\n this.setState({uuid: obj.native.uuid});\n });\n }\n\n componentWillUnmount() {\n this.props.socket.unsubscribeObject('system.licenses', this.onLicensesChanged);\n }\n\n doChange = (name, value) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.native[name] = value;\n this.props.onChange(newData);\n }\n\n static requestLicensesByHost(socket, host, login, password, t) {\n return new Promise((resolve, reject) => {\n socket.getRawSocket().emit('updateLicenses', login, password, (err, licenses) => {\n if (err === 'permissionError') {\n reject(t('May not trigger \"updateLicenses\"'));\n } else {\n if (err && err.error) {\n reject(t(err.error));\n } else if (err) {\n reject(t(err));\n } else {\n resolve(licenses);\n }\n }\n });\n });\n }\n\n requestLicenses() {\n this.setState({requesting: true});\n let password;\n return new Promise(resolve => {\n // if password was not changed\n if (this.props.data.native.password === '__SOME_PASSWORD__') {\n this.props.socket.getObject('system.licenses')\n .then(obj => {\n // if login was changed\n if (obj.native.login !== this.props.data.native.login) {\n return this.props.socket.decrypt(obj.native.password)\n .then(password => resolve(password));\n } else {\n resolve(null);\n }\n });\n } else {\n resolve(this.props.data.native.password);\n }\n })\n .then(_password => {\n password = _password;\n return LicensesDialog.requestLicensesByHost(this.props.socket, this.props.host, password ? this.props.data.native.login : null, password, this.props.t);\n })\n .then(licenses => {\n if (licenses !== null && licenses !== undefined) {\n this.setState({licenses, requesting: false});\n } else {\n this.setState({requesting: false});\n }\n\n if (password) {\n window.alert(this.props.t('Licenses were not stored. They will be stored after the settings will be saved'));\n }\n })\n .catch(error => {\n this.setState({requesting: false});\n if (error === 'Authentication required') {\n window.alert(this.props.t('Cannot update licenses: %s', this.props.t('Authentication required')));\n } else {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n });\n }\n\n renderLicenses() {\n return <div className={this.props.classes.tableDiv}>\n <TableContainer>\n <Table stickyHeader size=\"small\">\n <TableHead className={this.props.classes.tableName} >\n <TableRow>\n <TableCell className={this.props.classes.tableName}>{this.props.t('Product')}</TableCell>\n <TableCell className={this.props.classes.tableDate}>{this.props.t('Ordered at')}</TableCell>\n <TableCell className={this.props.classes.tableUuid}>{this.props.t('UUID')}</TableCell>\n <TableCell className={this.props.classes.tableValid}>{this.props.t('Valid till')}</TableCell>\n <TableCell className={this.props.classes.tableVersion}>{this.props.t('V')}</TableCell>\n <TableCell className={this.props.classes.tableUsedIn}>{this.props.t('Used by')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.licenses && this.state.licenses.map(license => <TableRow key={license.id}>\n <TableCell className={this.props.classes.tableName}>{license.product}</TableCell>\n <TableCell className={this.props.classes.tableDate}>{new Date(license.time).toLocaleDateString()}</TableCell>\n <TableCell className={clsx(this.props.classes.tableUuid, license.uuid && this.state.uuid === license.uuid ? this.props.classes.uuidGreen : (license.uuid ? this.props.classes.uuidGrey : ''))}>{license.uuid || ''}</TableCell>\n <TableCell className={this.props.classes.tableValid}>{license.validTill === '0000-00-00 00:00:00' ? '' : license.validTill || ''}</TableCell>\n <TableCell className={this.props.classes.tableVersion}>{license.version || ''}</TableCell>\n <TableCell className={this.props.classes.tableUsedIn}>{license.usedBy || ''}</TableCell>\n </TableRow>)}\n </TableBody>\n </Table>\n </TableContainer>\n </div>;\n }\n\n render() {\n const {classes} = this.props;\n\n return <div className={classes.tabPanel}>\n <TextField\n variant=\"standard\"\n className={this.props.classes.input}\n value={this.props.data.native.login}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Login/Email')}\n onChange={e => this.doChange('login', e.target.value)}\n inputProps={{\n autoComplete: 'new-password',\n form: {autoComplete: 'off'},\n }}\n />\n <TextField\n variant=\"standard\"\n className={this.props.classes.input}\n type=\"password\"\n value={this.props.data.native.password}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Password')}\n onChange={e => this.doChange('password', e.target.value)}\n inputProps={{\n autoComplete: 'new-password',\n form: {autoComplete: 'off'},\n }}\n />\n <Button\n variant=\"contained\"\n startIcon={<IconRefresh/>}\n disabled={\n this.state.requesting ||\n this.props.saving ||\n !this.props.host ||\n !this.props.data.native.password ||\n !this.props.data.native.login\n }\n onClick={() => this.requestLicenses()}\n className={this.props.classes.button}\n color=\"grey\"\n >{this.props.t('Check')}</Button>\n { this.renderLicenses() }\n </div>;\n }\n}\n\nLicensesDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n host: PropTypes.string,\n saving: PropTypes.bool,\n};\n\nexport default withWidth()(withStyles(styles)(LicensesDialog));\n","// CertificatesDialog.js\nimport { Component } from 'react';\nimport clsx from 'clsx';\nimport Dropzone from 'react-dropzone';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@mui/styles';\n\nimport Fab from '@mui/material/Fab';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TextField from '@mui/material/TextField';\n\nimport AddIcon from '@mui/icons-material/Add';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport Utils from '../../Utils';\n\n// icons\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n position: 'relative'\n },\n tableContainer: {\n zIndex: 100\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex'\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center'\n },\n littleRow: {\n width: 110\n },\n nameRow: {\n width: 220\n },\n input: {\n width: '100%'\n }\n});\n\nclass CertificatesDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n chClass: false\n };\n }\n\n certToArray(certs) {\n return Utils.objectMap(certs, (cert, name) => {\n return {\n title: name,\n data: cert\n }\n });\n }\n\n arrayToCert(array) {\n let result = {};\n for (let k in array) {\n result[array[k].title] = array[k].data\n }\n\n return result;\n }\n\n static detectType(name) {\n name = name.toLowerCase();\n\n if (name.includes('public') || name.includes('cert')) {\n return 'public';\n } else if (name.includes('priv') || name.includes('key')) {\n return 'private';\n } else if (name.includes('chain') || name.includes('ca')) {\n return 'chained';\n } else {\n return '';\n }\n }\n\n render() {\n const { classes } = this.props;\n const arr = this.certToArray(this.props.data.native.certificates);\n\n const rows = arr.map((e, i) => {\n const type = CertificatesDialog.detectType(e.title);\n\n return <TableRow key={i} className=\"float_row\">\n <TableCell className={this.props.classes.littleRow + ' float_cell'}>\n {i + 1}\n </TableCell>\n <TableCell className={this.props.classes.nameRow + ' float_cell'}>\n <TextField\n variant=\"standard\"\n value={e.title}\n InputLabelProps={{shrink: true}}\n InputProps={{readOnly: false}}\n className={this.props.classes.input + ' xs-centered'}\n onChange={evt => this.onChangeText(evt.target.value, e.title, 'title')}\n error={!type}\n helperText={type || I18n.t('Unknown type: use in name \"private\", \"public\" or \"chained\" to define the certificate type') }\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n variant=\"standard\"\n id={'default_' + i}\n value={e.data}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n className={this.props.classes.input + ' xs-centered'}\n onChange={evt => {\n let value = evt.target.value.replace(/\\r/g, '').replace(/\\n/g, '');\n if (value.startsWith('--')) {\n let parts = value.split('-----');\n parts[2] = parts[2].replace(/\\s/g, '');\n value = `-----${parts[1]}-----\\r\\n${parts[2]}\\r\\n-----${parts[3]}-----`;\n }\n\n this.onChangeText(value, e.title, 'data');\n }}\n />\n </TableCell>\n <TableCell className={this.props.classes.littleRow + ' float_cell'}>\n <Fab\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={evt => this.onDelete(e.title)}\n >\n <DeleteIcon/>\n </Fab>\n </TableCell>\n </TableRow>\n })\n return <div className={classes.tabPanel}>\n <Dropzone noClick>\n {({ getRootProps, getInputProps, acceptedFiles, fileRejections }) => (\n <div {...getRootProps({\n className: this.state.chClass ? 'drop-container drop-dop' : 'drop-container',\n onDragEnter: evt => this.setState({ chClass: true }),\n onDragLeave: evt => this.setState({ chClass: false }),\n onDrop: evt => {\n if (fileRejections.length) {\n let msg = [];\n // eslint-disable-next-line array-callback-return\n fileRejections.map((e => {\n let m = e.file.name + ': ';\n let mm = [];\n e.errors.forEach(ee => mm.push(ee.message));\n msg.push(m + mm.join(','));\n }));\n\n alert(msg.join(', '));\n }\n\n if (acceptedFiles.length) {\n // eslint-disable-next-line array-callback-return\n acceptedFiles.map(file => {\n const reader = new FileReader();\n reader.onload = async e =>\n this.onAdd(file.name, e.target.result);\n reader.readAsText(file);\n })\n } else if (!fileRejections.length) {\n alert(this.props.t('No files exists'));\n }\n\n this.setState({ chClass: false });\n }\n })}>\n <input {...getInputProps()} />\n </div>\n )}\n </Dropzone>\n <div className={classes.buttonPanel}>\n <Fab\n size=\"small\"\n className=\"small_size\"\n color=\"primary\"\n aria-label=\"add\"\n onClick={() => this.onAdd()}\n >\n <AddIcon/>\n </Fab>\n <Paper variant=\"outlined\" className={classes.descriptionPanel}>\n {this.props.t('certs_hint')}\n </Paper>\n </div>\n <TableContainer className={classes.tableContainer}>\n <Table className={classes.table} aria-label=\"customized table\">\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell className={clsx(this.props.classes.littleRow, 'float_cell')}> </TableCell>\n <TableCell className={clsx(this.props.classes.nameRow, 'float_cell')}>\n {this.props.t('name')}\n </TableCell>\n <TableCell className={clsx('grow_cell', 'float_cell')}>\n {this.props.t('Certificate')}\n </TableCell>\n <TableCell className={clsx(this.props.classes.littleRow, 'float_cell')}> </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {rows}\n </TableBody>\n </Table>\n </TableContainer>\n </div>;\n }\n\n onChangeText = (value, id, name) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = this.certToArray(newData.native.certificates);\n array.find(element => element.title === id)[name] = value;\n newData.native.certificates = this.arrayToCert(array);\n this.props.onChange(newData);\n }\n\n onDelete = id => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = this.certToArray(newData.native.certificates);\n let index = array.findIndex(element => element.title === id);\n delete array[index];\n newData.native.certificates = this.arrayToCert(array);\n this.props.onChange(newData);\n }\n\n onAdd = (title, data) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n let array = this.certToArray(newData.native.certificates);\n if (!title) {\n let i = 1;\n // eslint-disable-next-line\n while (array.find(item => item.title === this.props.t('certificate') + '_' + i)) {\n i++;\n }\n title = this.props.t('certificate') + '_' + i;\n }\n\n array.push({\n title: title || '__',\n data: data || ''\n });\n newData.native.certificates = this.arrayToCert(array);\n this.props.onChange(newData);\n }\n}\n\nCertificatesDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(CertificatesDialog));\n\n\n\n","// SSLDialog.js\nimport {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@mui/styles';\n\nimport Grid from '@mui/material/Grid';\nimport FormControl from '@mui/material/FormControl';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex'\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n '& a': {\n paddingLeft: 3,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n\n }\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: '100%',\n },\n});\n\nclass SSLDialog extends Component {\n render() {\n const {classes, data} = this.props;\n const {letsEncrypt} = data.native || {};\n return <div className={classes.tabPanel}>\n <div className={classes.buttonPanel}>\n <Paper\n variant=\"outlined\"\n className={classes.descriptionPanel}\n dangerouslySetInnerHTML={{__html: this.props.t('letsnecrypt_help')}}\n />\n </div>\n <Grid container spacing={6}>\n <Grid item md={3} xs={12}>\n <FormControl variant=\"standard\" className={classes.formControl}>\n <TextField\n variant=\"standard\"\n id=\"email\"\n label={this.props.t('Email for account:')}\n value={letsEncrypt ? letsEncrypt.email : ''}\n InputLabelProps={{\n readOnly: false,\n shrink: true,\n }}\n onChange={evt => this.onChangeText(evt, 'email')}\n />\n </FormControl>\n </Grid>\n <Grid item md={3} xs={12}>\n <FormControl variant=\"standard\" className={classes.formControl}>\n <TextField\n variant=\"standard\"\n id=\"domains\"\n label={this.props.t('Domains:')}\n value={letsEncrypt ? letsEncrypt.domains : ''}\n InputLabelProps={{\n readOnly: false,\n shrink: true,\n }}\n onChange={evt => this.onChangeText(evt, 'domains')}\n />\n </FormControl>\n </Grid>\n <Grid item md={3} xs={12}>\n <FormControl variant=\"standard\" className={classes.formControl}>\n <TextField\n variant=\"standard\"\n id=\"path\"\n label={this.props.t('Path to storage:')}\n value={letsEncrypt ? letsEncrypt.path : ''}\n InputLabelProps={{\n readOnly: false,\n shrink: true,\n }}\n onChange={evt => this.onChangeText(evt, 'path')}\n />\n </FormControl>\n </Grid>\n </Grid>\n </div>;\n }\n\n onChangeText = (evt, id) => {\n const value = evt.target.value;\n this.doChange(id, value);\n }\n\n doChange = (name, value) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.native.letsEncrypt = newData.native.letsEncrypt || {};\n newData.native.letsEncrypt[name] = value;\n this.props.onChange(newData);\n }\n}\n\nSSLDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(SSLDialog));\n\n\n\n","// ACLDialog.js\n\nimport React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@mui/styles';\nimport {Grid, Typography, FormControl, Checkbox} from '@mui/material';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex'\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: '100%',\n },\n tableCell: {\n textAlign: 'center',\n border: '1px solid #AAA',\n paddingLeft: 0,\n paddingRight: 0\n }\n});\n\nclass ACLDialog extends Component {\n permBits = [[0x400, 0x200], [0x40, 0x20], [0x4, 0x2]];\n\n getTypes() {\n return [\n {\n type: 'object',\n title: 'Object rights'\n },\n {\n type: 'state',\n title: 'States rights'\n },\n {\n type: 'file',\n title: 'File rights'\n }\n ];\n }\n\n getRights(type) {\n const rts = this.props.data.common.defaultNewAcl[type];\n return this.permBits.map(bitGroup => bitGroup.map(bit => rts & bit));\n }\n\n getTable(owner) {\n const checks = this.getRights(owner);\n const {classes} = this.props;\n const checkboxes = checks.map((elem, index) =>\n <Fragment key={index}>\n <TableCell className={classes.tableCell}>\n <Checkbox\n checked={!!elem[0]}\n color=\"primary\"\n onChange={evt => this.handleCheck(evt, owner, index, 0)}\n />\n </TableCell>\n <TableCell className={classes.tableCell}>\n <Checkbox\n checked={!!elem[1]}\n color=\"primary\"\n onChange={evt => this.handleCheck(evt, owner, index, 1)}\n />\n </TableCell>\n </Fragment>);\n\n return <TableContainer>\n <Table className={classes.table} aria-label=\"customized table\">\n <TableHead>\n <TableRow>\n <TableCell colSpan={2} className={classes.tableCell}>\n {this.props.t('Owner')}\n </TableCell>\n <TableCell colSpan={2} className={classes.tableCell}>\n {this.props.t('Group')}\n </TableCell>\n <TableCell colSpan={2} className={classes.tableCell}>\n {this.props.t('Everyone')}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell className={classes.tableCell}>\n {this.props.t('read')}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {this.props.t('write')}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {this.props.t('read')}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {this.props.t('write')}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {this.props.t('read')}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {this.props.t('write')}\n </TableCell>\n </TableRow>\n <TableRow>\n {checkboxes}\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>;\n }\n\n doChange = (name, value) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.common.defaultNewAcl[name] = value;\n this.props.onChange(newData);\n }\n\n handleCheck = (evt, ownerType, elemNum, num) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.common.defaultNewAcl[ownerType] ^= this.permBits[elemNum][num];\n this.props.onChange(newData);\n }\n\n handleChange = (evt, id) => this.doChange(id, evt.target.value);\n\n render() {\n const lang = I18n.getLanguage();\n const {classes} = this.props;\n const users = this.props.users.map((elem, index) =>\n <MenuItem value={elem._id} key={index}>\n {typeof elem.common.name === 'object' ? elem.common.name[lang] || elem.common.name.en : elem.common.name}\n </MenuItem>);\n\n const groups = this.props.groups.map((elem, index) =>\n <MenuItem value={elem._id} key={index}>\n {typeof elem.common.name === 'object' ? elem.common.name[lang] || elem.common.name.en : elem.common.name}\n </MenuItem>);\n\n const objectRights = this.getTypes().map((ee, ii) =>\n <Grid item lg={4} xs={12} md={6} key={ii}>\n <Typography variant=\"h6\" component=\"div\">\n {this.props.t(ee.title)}\n </Typography>\n {this.getTable(ee.type)}\n </Grid>);\n\n return <div className={classes.tabPanel}>\n <Typography variant=\"h5\" component=\"div\">\n {this.props.t('Access control list')}\n </Typography>\n <Grid container spacing={3}>\n <Grid item lg={3} md={6} xs={12}>\n <FormControl variant=\"standard\" className={classes.formControl}>\n <InputLabel shrink id=\"owner-label\">\n {this.props.t('Owner user')}\n </InputLabel>\n <Select\n variant=\"standard\"\n className={classes.formControl}\n id={'owner'}\n value={this.props.data.common.defaultNewAcl.owner}\n onChange={evt => this.handleChange(evt, 'owner')}\n displayEmpty\n inputProps={{'aria-label': 'users'}}\n >\n {users}\n </Select>\n </FormControl>\n </Grid>\n <Grid item lg={3} md={6} xs={12}>\n <FormControl variant=\"standard\" className={classes.formControl}>\n <InputLabel shrink id={'ownerGroup-label'}>\n {this.props.t('Owner group')}\n </InputLabel>\n <Select\n variant=\"standard\"\n className={classes.formControl}\n id={'ownerGroup'}\n value={this.props.data.common.defaultNewAcl.ownerGroup}\n onChange={evt => this.handleChange(evt, 'ownerGroup')}\n displayEmpty\n inputProps={{'aria-label': 'ownerGroup'}}\n >\n {groups}\n </Select>\n </FormControl>\n </Grid>\n </Grid>\n <Grid container spacing={3}>\n {objectRights}\n </Grid>\n </div>;\n }\n}\n\nACLDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n users: PropTypes.array,\n onChange: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(ACLDialog));\n\n","// StatisticsDialog.js\n\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/webpack-resolver';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-noconflict/theme-chrome';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\nimport {Grid, Paper, Card, Typography, MenuItem, FormControl, Select, InputLabel} from '@mui/material';\n\nimport blueGrey from '@mui/material/colors/blueGrey';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n padding: 15,\n //backgroundColor: blueGrey[ 50 ]\n },\n note: {\n padding: 15,\n backgroundColor: blueGrey[500],\n color: '#FFF',\n overflow: 'auto',\n flex: 'none'\n },\n sentData: {\n padding: 15\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: '100%',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n border: 'none',\n overflow: 'auto'\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n});\n\nclass StatisticsDialog extends Component {\n getTypes() {\n return [\n {\n id: 'none',\n title: 'none'\n },\n {\n id: 'normal',\n title: 'normal'\n },\n {\n id: 'no-city',\n title: 'no-city'\n },\n {\n id: 'extended',\n title: 'extended'\n }\n ];\n }\n\n getTypesSelector = () => {\n const {classes} = this.props;\n const {common} = this.props.data;\n const items = this.getTypes().map((elem, index) =>\n <MenuItem value={elem.title} key={index}>\n {this.props.t(elem.title)}\n </MenuItem>);\n\n return <FormControl variant=\"standard\" className={classes.formControl}>\n <InputLabel shrink id={\"statistics-label\"}>\n {this.props.t('Statistics')}\n </InputLabel>\n <Select\n variant=\"standard\"\n className={classes.formControl}\n id=\"statistics\"\n value={common.diag}\n displayEmpty\n onChange={this.handleChangeType}\n >\n {items}\n </Select>\n </FormControl>;\n }\n\n doChange = (name, value) => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.common[name] = value;\n this.props.onChange(newData);\n }\n\n handleChangeType = evt => {\n this.doChange('diag', evt.target.value);\n if (this.props.handle) {\n this.props.handle(evt.target.value);\n }\n }\n\n render() {\n const {classes} = this.props;\n return <div className={classes.tabPanel} style={{height: '100%'}}>\n <Grid container spacing={3} className=\"sendData-grid\" style={{height: '100%'}}>\n <Grid item lg={4} md={4} xs={12} style={{display: 'flex', flexDirection: 'column'}}>\n <Card className={classes.note}>\n <Typography gutterBottom variant=\"h6\" component=\"div\">\n {this.props.t('Note:')}\n </Typography>\n <Typography\n paragraph\n variant=\"body2\"\n component=\"div\"\n dangerouslySetInnerHTML={{__html: this.props.t('diag-note')}}\n />\n </Card>\n {this.getTypesSelector()}\n {this.props.dataAux ? <Paper\n variant=\"outlined\"\n className={classes.descriptionPanel}>\n <ul>\n {Object.keys(this.props.dataAux).map(key => <li key={key}>{key}</li>)}\n </ul>\n </Paper> : null}\n </Grid>\n <Grid item lg={8} md={4} xs={12} className=\"sendData-grid\"\n style={{height: '100%', display: 'flex', flexDirection: 'column'}}>\n <Paper className={classes.sentData}>\n <Typography gutterBottom variant=\"h6\" component=\"div\">\n {this.props.t('Sent data:')}\n </Typography>\n </Paper>\n <AceEditor\n mode=\"json\"\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={JSON.stringify(this.props.dataAux, null, 2)}\n onChange={newValue => this.onChange(newValue)}\n name=\"UNIQUE_ID_OF_DIV\"\n fontSize={14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n showLineNumbers: true,\n tabSize: 2,\n }}\n editorProps={{$blockScrolling: true}}\n />\n </Grid>\n </Grid>\n </div>;\n }\n}\n\nStatisticsDialog.propTypes = {\n t: PropTypes.func,\n data: PropTypes.object,\n dataAux: PropTypes.object,\n themeType: PropTypes.string,\n handle: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(StatisticsDialog));\n\n","// extracted by mini-css-extract-plugin\nexport default {};","import { withStyles } from '@mui/styles';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport AppBar from '@mui/material/AppBar';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport IconButton from '@mui/material/IconButton';\n\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport MainSettingsDialog from './SystemSettingsTabs/MainSettingsDialog';\nimport RepositoriesDialog from './SystemSettingsTabs/RepositoriesDialog';\nimport LicensesDialog from './SystemSettingsTabs/LicensesDialog';\nimport CertificatesDialog from './SystemSettingsTabs/CertificatesDialog';\nimport SSLDialog from './SystemSettingsTabs/SSLDialog';\nimport ACLDialog from './SystemSettingsTabs/ACLDialog';\nimport StatisticsDialog from './SystemSettingsTabs/StatisticsDialog';\n\n// icons\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\n//style\nimport '../assets/css/style.css';\n\nconst SOME_PASSWORD = '__SOME_PASSWORD__';\n\nconst styles = theme => ({\n tabPanel: {\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'hidden'\n },\n tab: {\n // backgroundColor:'#FFF',\n // color:lightBlue[500]\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 0 0 20px',\n },\n dialog: {\n width: '100%',\n height: '100%',\n maxWidth: '100%'\n },\n content: {\n padding: '0 !important'\n },\n selected: {\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }\n});\n\nclass SystemSettingsDialog extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n confirmExit: false,\n systemConfig: null,\n systemCertificates: null,\n systemRepositories: null,\n systemLicenses: null,\n multipleRepos: false,\n licenseManager: false,\n host: '',\n };\n this.getSettings(this.state.currentHost);\n }\n\n componentDidMount() {\n this.props.socket.checkFeatureSupported('CONTROLLER_MULTI_REPO')\n .then(multipleRepos => this.props.socket.checkFeatureSupported('CONTROLLER_LICENSE_MANAGER')\n .then(licenseManager => {\n return this.props.socket.getCurrentInstance()\n .then(namespace => this.props.socket.getObject('system.adapter.' + namespace))\n .then(obj => this.setState({host: obj.common.host, multipleRepos, licenseManager}));\n }));\n }\n\n getSettings() {\n const newState = { loading: false };\n return this.props.socket.getObject('system.repositories')\n .then(systemRepositories => {\n systemRepositories = JSON.parse(JSON.stringify(systemRepositories));\n systemRepositories = systemRepositories || {};\n systemRepositories.native = systemRepositories.native || {};\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n\n Object.keys(systemRepositories.native.repositories).forEach(repo => {\n if (systemRepositories.native.repositories[repo] &&\n systemRepositories.native.repositories[repo].json) {\n delete systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo] &&\n systemRepositories.native.repositories[repo].hash) {\n delete systemRepositories.native.repositories[repo].hash;\n }\n });\n\n this.originalRepositories = JSON.stringify(systemRepositories);\n newState.systemRepositories = systemRepositories;\n return this.props.socket.getSystemConfig(true);\n })\n .then(systemConfig => {\n this.originalConfig = JSON.stringify(systemConfig || {});\n newState.systemConfig = systemConfig || {};\n systemConfig.common = systemConfig.common || {};\n systemConfig.native = systemConfig.native || {};\n\n systemConfig.common.defaultNewAcl = systemConfig.common.defaultNewAcl || {\n object: 1636,\n state: 1636,\n file: 1632,\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator'\n };\n\n systemConfig.common.firstDayOfWeek = systemConfig.common.firstDayOfWeek || 'monday';\n\n return this.props.socket.getDiagData(this.props.currentHost, systemConfig.common.diag);\n })\n /**/\n .then(diagData => {\n newState.diagData = diagData;\n return this.props.socket.getUsers()\n })\n .then(users => {\n newState.users = users;\n return this.props.socket.getGroups();\n })\n .then(groups => {\n newState.groups = groups;\n return this.props.socket.getAdapterInstances(true);\n })\n .then(instances => {\n newState.histories = Object.values(instances)\n .filter(instance => instance.common.getHistory)\n .map(instance => {\n let id = instance._id.split('.');\n return id[id.length - 2] + '.' + id[id.length - 1];\n });\n\n return this.props.socket.getObject('system.certificates');\n })\n .then(systemCertificates => {\n this.originalCertificates = JSON.stringify(systemCertificates);\n newState.systemCertificates = systemCertificates;\n return this.props.socket.getObject('system.licenses');\n })\n .then(systemLicenses => {\n systemLicenses = systemLicenses || {\n common: {\n name: 'Licenses from iobroker.net'\n },\n native: {\n login: '',\n password: '',\n licenses: [],\n },\n type: 'config'\n };\n if (systemLicenses.native.password) {\n systemLicenses.native.password = SOME_PASSWORD;\n }\n\n this.originalLicenses = JSON.stringify({login: systemLicenses.native.login, password: systemLicenses.native.password});\n newState.systemLicenses = systemLicenses;\n this.setState(newState);\n })\n .catch(e => window.alert('Cannot read settings: ' + e));\n }\n\n renderConfirmDialog() {\n if (this.state.confirmExit) {\n return <ConfirmDialog\n text={this.props.t('Discard unsaved changes?')}\n onClose={result =>\n this.setState({ confirmExit: false }, () =>\n result && this.props.onClose())}\n />;\n } else {\n return null;\n }\n }\n\n onSave() {\n this.setState({saving: true}, () =>\n this.props.socket.getSystemConfig(true)\n .then(systemConfig => {\n systemConfig = systemConfig || {};\n if (JSON.stringify(systemConfig.common) !== JSON.stringify(this.state.systemConfig.common)) {\n return this.props.socket.setSystemConfig(this.state.systemConfig);\n } else {\n return Promise.resolve();\n }\n })\n .then(() => this.props.socket.setObject('system.certificates', this.state.systemCertificates))\n .then(() => this.props.socket.getObject('system.repositories'))\n .then(systemRepositories => {\n systemRepositories = systemRepositories || {};\n systemRepositories.native = systemRepositories.native || {};\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n const newRepo = JSON.parse(JSON.stringify(this.state.systemRepositories.native.repositories));\n\n // merge new and existing info\n Object.keys(newRepo).forEach(repo => {\n if (systemRepositories.native.repositories[repo] && systemRepositories.native.repositories[repo].json) {\n newRepo[repo].json = systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo] && systemRepositories.native.repositories[repo].hash) {\n newRepo[repo].hash = systemRepositories.native.repositories[repo].hash;\n }\n });\n systemRepositories.native.repositories = newRepo;\n return this.props.socket.setObject('system.repositories', systemRepositories);\n })\n .then(() => this.props.socket.getObject('system.licenses'))\n .then(systemLicenses => {\n systemLicenses = systemLicenses || {};\n systemLicenses.type = systemLicenses.type || 'config';\n systemLicenses.name = systemLicenses.name || 'Licenses from iobroker.net';\n systemLicenses.common = systemLicenses.common || {};\n systemLicenses.native = systemLicenses.native || {};\n systemLicenses.native.licenses = systemLicenses.native.licenses || [];\n systemLicenses.native.password = systemLicenses.native.password || '';\n systemLicenses.native.login = systemLicenses.native.login || '';\n\n const currentPassword = systemLicenses.native.password ? SOME_PASSWORD : '';\n\n if (this.state.systemLicenses.native.password !== currentPassword ||\n systemLicenses.native.login !== this.state.systemLicenses.native.login\n ) {\n systemLicenses.native.login = this.state.systemLicenses.native.login;\n\n if (this.state.systemLicenses.native.password !== SOME_PASSWORD && this.state.systemLicenses.native.password) {\n // encode it\n return this.props.socket.encrypt(this.state.systemLicenses.native.password)\n .then(password => {\n systemLicenses.native.password = password;\n return this.props.socket.setObject('system.licenses', systemLicenses)\n .then(() => LicensesDialog.requestLicensesByHost(this.props.socket, this.props.host, null, null, this.props.t))\n .catch(error => window.alert(this.props.t('Cannot update licenses: %s', error)));\n\n });\n } else {\n if (!this.state.systemLicenses.native.password) {\n systemLicenses.native.password = '';\n }\n return this.props.socket.setObject('system.licenses', systemLicenses)\n .then(() => LicensesDialog.requestLicensesByHost(this.props.socket, this.props.host, null, null, this.props.t))\n .catch(error => window.alert(this.props.t('Cannot update licenses: %s', error)));\n }\n } else {\n return Promise.resolve();\n }\n })\n .then(() => {\n // this.getSettings();\n alert(this.props.t('Settings saved'));\n this.props.onClose();\n if (this.state.systemConfig.common.expertMode !== JSON.parse(this.originalConfig).common.expertMode) {\n this.props.expertModeFunc(this.state.systemConfig.common.expertMode);\n }\n if (this.state.systemConfig.common.language !== JSON.parse(this.originalConfig).common.language ||\n JSON.stringify(this.state.systemConfig.common.activeRepo) !== JSON.stringify(JSON.parse(this.originalConfig).common.activeRepo)) {\n window.location.reload(false);\n }\n })\n .then(() => this.setState({ saving: false }))\n .catch(e =>\n window.alert(`Cannot save system configuration: ${e}`))\n );\n }\n\n getTabs() {\n return [\n {\n id: 0,\n title: 'System settings',\n component: MainSettingsDialog,\n data: 'systemConfig',\n name: 'tabConfig',\n dataAux: 'systemRepositories',\n handle: null\n },\n {\n id: 1,\n title: 'Repositories',\n component: RepositoriesDialog,\n data: 'systemRepositories',\n name: 'tabRepositories',\n dataAux: 'systemConfig',\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 2,\n title: 'Licenses',\n component: LicensesDialog,\n data: 'systemLicenses',\n name: 'tabLicenses',\n dataAux: null,\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 3,\n title: 'Certificates',\n component: CertificatesDialog,\n data: 'systemCertificates',\n name: 'tabCertificates',\n dataAux: {},\n handle: null\n },\n {\n id: 4,\n title: 'Let\\'s encrypt SSL',\n component: SSLDialog,\n data: 'systemCertificates',\n name: 'tabLetsEncrypt',\n dataAux: {},\n handle: null\n },\n {\n id: 5,\n title: 'Default ACL',\n component: ACLDialog,\n data: 'systemConfig',\n name: 'tabDefaultACL',\n dataAux: {},\n handle: null\n },\n {\n id: 6,\n title: 'Statistics',\n component: StatisticsDialog,\n data: 'systemConfig',\n dataAux: 'diagData',\n name: 'tabStatistics',\n handle: type => this.onChangeDiagType(type)\n }\n ];\n }\n\n onChangeDiagType = type => {\n this.props.socket.getDiagData(this.props.currentHost, type)\n .then(diagData =>\n this.setState({\n diagData,\n systemConfig: {\n ...this.state.systemConfig,\n common: {\n ...this.state.systemConfig.common,\n diag: type\n }\n }\n }));\n }\n\n getDialogContent(tabsList) {\n if (this.state.loading) {\n return <LinearProgress />;\n }\n\n const tab = tabsList.find(tab => tab.name === this.props.currentTab.id) || tabsList[0];\n\n const MyComponent = tab.component;\n const { groups, users, histories } = this.state;\n return <div className={this.props.classes.tabPanel}>\n <MyComponent\n adminGuiConfig={this.props.adminGuiConfig}\n onChange={(data, dataAux, cb) => this.onChangedTab(tab.data, data, tab.dataAux, dataAux, cb)}\n data={this.state[tab.data]}\n dataAux={this.state[tab.dataAux]}\n handle={tab.handle}\n users={users}\n groups={groups}\n multipleRepos={this.state.multipleRepos}\n activeRepo={this.state.systemConfig.common.activeRepo}\n histories={histories}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n host={this.state.host}\n t={this.props.t}\n socket={this.props.socket}\n saving={this.state.saving}\n />\n </div>;\n }\n\n onTabChanged = (event, newTab) => {\n Router.doNavigate(null, 'system', newTab);\n }\n\n onChangedTab(id, data, idAux, dataAux, cb) {\n let state = { ...this.state };\n if (data) {\n state[id] = data;\n }\n if (dataAux) {\n state[idAux] = dataAux;\n }\n this.setState(state, () => cb && cb());\n }\n\n render() {\n const changed = !(JSON.stringify(this.state.systemRepositories) === this.originalRepositories &&\n JSON.stringify(this.state.systemConfig) === this.originalConfig &&\n JSON.stringify(this.state.systemCertificates) === this.originalCertificates &&\n JSON.stringify({login: this.state.systemLicenses.native.login, password: this.state.systemLicenses.native.password}) === this.originalLicenses);\n\n const tabsList = this.getTabs().filter(tab => {\n if (!this.state.licenseManager && tab.name === 'tabLicenses') {\n return false;\n }\n return this.props.adminGuiConfig.admin.settings[tab.name] !== false\n });\n\n const tabs = tabsList\n .map(tab => <Tab\n key={tab.title}\n label={this.props.t(tab.title)}\n value={tab.name}\n classes={{ selected: this.props.classes.selected }}\n />);\n\n return <Dialog\n className={this.props.classes.dialog}\n classes={{\n root: this.props.classes.dialog,\n paper: 'dialog-setting'\n }}\n open={true}\n onClose={(e, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n if (changed) {\n this.setState({confirmExit: true});\n } else {\n this.props.onClose();\n }\n }\n }}\n fullWidth={false}\n fullScreen={false}\n aria-labelledby=\"system-settings-dialog-title\"\n >\n <DialogContent className={this.props.classes.content}>\n <AppBar position=\"static\" color=\"default\">\n <div className={this.props.classes.dialogTitle}>\n {this.props.width !== 'xs' && this.props.width !== 'sm' && <Typography className=\"dialogName\">\n {this.props.t('Base settings')}\n </Typography>}\n <Tabs\n className={this.props.classes.tab}\n indicatorColor=\"secondary\"\n value={this.props.currentTab.id || 'tabConfig'}\n onChange={(event, newTab) => this.onTabChanged(event, newTab)}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {tabs}\n </Tabs>\n <IconButton size=\"large\"\n disabled={this.state.saving}\n edge=\"start\"\n color=\"inherit\"\n onClick={() => changed ? this.setState({ confirmExit: true }) : this.props.onClose()}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </div>\n </AppBar>\n {this.getDialogContent(tabsList)}\n {this.renderConfirmDialog()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!changed || this.state.saving}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {this.props.t('Save & Close')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={this.state.saving}\n onClick={() => changed ? this.setState({ confirmExit: true }) : this.props.onClose()}\n startIcon={<CloseIcon/>}\n color=\"grey\"\n >\n {changed ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nSystemSettingsDialog.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n currentTab: PropTypes.object,\n width: PropTypes.string,\n adminGuiConfig: PropTypes.object,\n instance: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(SystemSettingsDialog));\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`nav-tabpanel-${index}`}\n aria-labelledby={`nav-tab-${index}`}\n {...other}\n >\n {value === index && <Box p={3}>\n <Typography>{children}</Typography>\n </Box>}\n </div>;\n}\n\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Avatar from '@mui/material/Avatar';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Grid from '@mui/material/Grid';\nimport Link from '@mui/material/Link';\nimport Paper from '@mui/material/Paper';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst boxShadow = '0 4px 7px 5px rgb(0 0 0 / 14%), 0 3px 1px 1px rgb(0 0 0 / 12%), 0 1px 5px 0 rgb(0 0 0 / 20%)';\n\nconst styles = theme => ({\n root: {\n padding: 10,\n margin: 'auto',\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n borderRadius: 0,\n justifyContent: 'center',\n },\n paper: {\n background: theme.palette.background.paper + (theme.palette.background.paper.length < 7 ? 'd' : 'dd'),\n padding: theme.spacing(3),\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxHeight: 500,\n maxWidth: 380,\n boxShadow\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: '#fff',\n width: 100,\n height: 100,\n },\n avatarImg: {\n width: 'calc(100% - 4px)',\n height: 'calc(100% - 4px)',\n padding: 2\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(1),\n },\n alert: {\n marginTop: theme.spacing(2),\n backgroundColor: '#f44336',\n padding: 8,\n color: '#fff',\n borderRadius: 4,\n fontSize: 16,\n },\n ioBrokerLink: {\n textTransform: 'inherit'\n },\n marginTop: {\n marginTop: 'auto'\n },\n progress: {\n textAlign: 'center'\n }\n});\n\nclass Login extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n inProcess: false,\n };\n\n this.formRef = React.createRef();\n\n // apply image\n const body = window.document.body;\n body.style.backgroundColor = window.loginBackgroundColor;\n body.style.backgroundImage = window.loginBackgroundImage;\n body.style.backgroundSize = 'cover';\n }\n\n render() {\n const classes = this.props.classes;\n const action = `${window.location.port === '3000' ? `${window.location.protocol}//${window.location.hostname}:8081/` : ''}login?${window.location.port === '3000' ? 'dev&' : ''}href=${window.location.hash}`;\n\n const link = window.loginLink && window.loginLink !== '@@loginLink@@' ? window.loginLink : 'https://www.iobroker.net/';\n const motto = window.loginMotto && window.loginMotto !== '@@loginMotto@@' ? window.loginMotto : ('Discover awesome. ');\n\n if (window.login !== 'true') {\n debugger;\n window.location = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n }\n const style = (window.loginBackgroundColor && window.loginBackgroundColor !== 'inherit') || window.loginBackgroundImage ? { background: '#00000000' } : {};\n\n return <Paper component=\"main\" className={classes.root} style={style}>\n <Paper className={classes.paper}>\n <Grid\n container\n direction=\"column\"\n alignItems=\"center\"\n >\n {window.loginLogo && window.loginLogo !== '@@loginLogo@@' ?\n <div style={{\n height: 50,\n withWidth: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5}}\n ><img src={window.loginLogo} alt=\"logo\"\n style={{maxWidth: '100%', maxHeight: '100%'}}/></div>\n :\n window.loginHideLogo === 'false' &&\n <Avatar className={classes.avatar} src=\"img/logo.png\" classes={{img: classes.avatarImg}} />}\n <Typography component=\"h1\" variant=\"h5\">\n {window.loginTitle && window.loginTitle !== '@@loginTitle@@' ? window.loginTitle : this.props.t('loginTitle')}\n </Typography>\n {window.location.search.includes('error') &&\n <div className={classes.alert}>\n {this.props.t('wrongPassword')}\n </div>\n }\n <form\n ref={this.formRef}\n className={classes.form}\n action={action}\n method=\"post\"\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n id=\"username\"\n label={this.props.t('enterLogin')}\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n name=\"password\"\n label={this.props.t('enterPassword')}\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n />\n <FormControlLabel\n control={<Checkbox\n id=\"stayloggedin\"\n name=\"stayloggedin\"\n value=\"on\"\n color=\"primary\"\n disabled={this.state.inProcess}\n />}\n label={this.props.t('Stay signed in')}\n />\n <input id=\"origin\" type=\"hidden\" name=\"origin\" value={window.location.pathname + window.location.search.replace('&error', '')} />\n {<Button\n type=\"submit\"\n disabled={this.state.inProcess}\n onClick={() => {\n this.formRef.current.submit();\n // give time to firefox to send the data\n setTimeout(() =>\n this.setState({ inProcess: true }), 50);\n }}\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n >\n {this.state.inProcess ? <CircularProgress size={24}/> : this.props.t('login')}\n </Button>}\n </form>\n </Grid>\n <Box className={classes.marginTop}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n align=\"center\"\n >\n {window.loginLink && window.loginLink !== '@@loginLink@@' ?\n <Link\n className={classes.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {motto}\n </Link> : null\n }\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? motto : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? <Link\n className={classes.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n ioBroker\n </Link> : null}\n </Typography>\n </Box>\n </Paper>\n </Paper>;\n }\n}\n\nLogin.propTypes = {\n t: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(Login));\n\n","import React, { useState } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport BuildIcon from '@mui/icons-material/Build';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Grid from '@mui/material/Grid';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport { DialogTitle, IconButton, Typography } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport ExpertIcon from '@iobroker/adapter-react-v5/icons/IconExpert';\nimport CheckIcon from '@mui/icons-material/Check';\n\nlet node = null;\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n fontSize: 16,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n },\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n },\n text: {\n fontSize: 16\n },\n textBold: {\n fontSize: 16,\n fontWeight: 'bold'\n },\n width100: {\n width: '100%'\n }\n}));\n\nconst ExpertModeDialog = ({ boolSettings, func, buttonIcon }) => {\n const classes = useStyles();\n const [open, setOpen] = useState(true);\n const [doNotShow, setDoNotShow] = useState(false);\n\n const onClose = () => {\n if (doNotShow) {\n (window._sessionStorage || window.sessionStorage).setItem('App.doNotShowExpertDialog', 'true');\n }\n\n setOpen(false);\n func();\n try {\n node && window.document.body.removeChild(node);\n } catch (e) {\n // ignore\n }\n\n node = null;\n };\n\n return <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <DialogTitle><ExpertIcon style={{marginRight: 8}}/>{I18n.t('Expert mode')}</DialogTitle>\n <DialogContent className={classes.overflowHidden} dividers>\n <Grid container>\n <Grid item className={classes.width100}>\n <div className={classes.root}>\n <div className={classes.pre}>\n <Typography\n className={classes.text}\n variant=\"body2\"\n component=\"p\">\n {boolSettings ? I18n.t('Now the expert mode will be deactivated only during this browser session.') : I18n.t('Now the expert mode will be active only during this browser session.')}\n </Typography>\n {!boolSettings ? <Typography\n className={classes.textBold}\n variant=\"body2\"\n component=\"p\">\n {I18n.t('The expert mode allows you to view and edit system internal details.')}\n </Typography> : null}\n {!boolSettings ? <Typography\n className={classes.textBold}\n variant=\"body2\"\n component=\"p\">\n {I18n.t('Please make sure you know what you are doing!')}\n </Typography> : null}\n <Typography\n className={classes.text}\n variant=\"body2\"\n component=\"p\">\n {I18n.t('If you need to save the mode all the time, you can do this in the system settings.')}\n </Typography>\n {I18n.t('Use this button:')}\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n onClose();\n buttonIcon();\n }}>\n <BuildIcon />\n </IconButton>\n </div>\n </div>\n </Grid>\n <Grid item>\n <FormControlLabel\n control={<Checkbox checked={doNotShow} onChange={e => setDoNotShow(e.target.checked)} />}\n label={I18n.t('Do not show this dialog in this browser session any more')}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n autoFocus\n onClick={onClose}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nexport const expertModeDialogFunc = (boolSettings, themeType, theme, func, buttonIcon) => {\n if (!node) {\n node = document.createElement('div');\n node.id = 'renderModal';\n document.body.appendChild(node);\n }\n const root = createRoot(node);\n console.log('Create expert')\n\n return root.render(<StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <ExpertModeDialog\n themeType={themeType}\n buttonIcon={buttonIcon}\n boolSettings={boolSettings}\n func={func}\n />\n </ThemeProvider>\n </StyledEngineProvider>);\n}","import React, { useEffect, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport semver from 'semver';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport { CardMedia, DialogTitle, Typography } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport CheckIcon from '@mui/icons-material/Check';\nimport WorldIcon from '@mui/icons-material/Public';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nlet node = null;\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4\n },\n paper: {\n maxWidth: 1000,\n width: '100%'\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n '& p': {\n fontSize: 18,\n }\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver'\n },\n img: {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n img2: {\n width: 70,\n height: 70,\n margin: '10px 0',\n borderRadius: 4,\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n link:{\n margin: '10px 0',\n }\n}));\n\nconst Status = ({ name, ...props }) => {\n switch (name) {\n case 'warning':\n return <WarningIcon style={{ color: '#ffca00' }} {...props} />;\n case 'info':\n return <InfoIcon style={{ color: '#007cff' }} {...props} />;\n case 'danger':\n return <CancelIcon style={{ color: '#ff2f2f' }} {...props} />;\n default:\n return <InfoIcon style={{ color: '#007cff' }} {...props} />;\n }\n}\n\nfunction checkActive(adapterName, instances) {\n return !!Object.keys(instances).filter(id => id.startsWith('adapter.system.' + adapterName + '.')).find(id => instances[id].enabled);\n}\n\nfunction checkConditions(condition, installedVersion) {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n } else if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch (e) {\n return false;\n }\n } else if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch (e) {\n return false;\n }\n } else if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gt(vers1, installedVersion) && semver.gt(vers2, installedVersion);\n } catch (e) {\n return false;\n }\n } else {\n return true;\n }\n}\n\n/*const context = {\n adapters,\n instances,\n nodeVersion,\n npmVersion,\n os,\n activeRepo\n uuid,\n lang\n}*/\n\nexport const checkMessages = function (messages, lastMessageId, context) {\n const messagesToShow = [];\n\n try {\n const today = Date.now();\n for (let m = 0; m < messages.length; m++) {\n const message = messages[m];\n if (!message) {\n continue;\n }\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n Object.keys(message.conditions).forEach(key => {\n if (showIt) {\n const adapter = context.adapters[key];\n const condition = message.conditions[key];\n\n if (!adapter && condition !== '!installed') {\n showIt = false;\n } else if (adapter && condition === '!installed') {\n showIt = false;\n } else if (adapter && condition === 'active') {\n showIt = checkActive(key, context.instances);\n } else if (adapter && condition === '!active') {\n showIt = !checkActive(key, context.instances);\n } else if (adapter) {\n showIt = checkConditions(condition, adapter.v);\n }\n }\n });\n }\n\n if (showIt && message['node-version'] && context.nodeVersion) {\n showIt = checkConditions(message['node-version'], context.nodeVersion);\n }\n if (showIt && message['npm-version'] && context.npmVersion) {\n showIt = checkConditions(message['npm-version'], context.npmVersion);\n }\n if (showIt && message['os'] && context.os) {\n showIt = context.os === message['os'];\n }\n if (showIt && message['repo']) {\n // If multi-repo\n if (Array.isArray(context.activeRepo)) {\n showIt = context.activeRepo.includes(message['repo']);\n } else {\n showIt = context.activeRepo === message['repo'];\n }\n }\n if (showIt && message['uuid']) {\n if (Array.isArray(message['uuid'])) {\n showIt = context.uuid && message['uuid'].find(uuid => context.uuid === uuid);\n } else {\n showIt = context.uuid && context.uuid === message['uuid'];\n }\n }\n\n if (showIt) {\n messagesToShow.push({\n id: message.id,\n title: message.title[context.lang] || message.title.en,\n content: message.content[context.lang] || message.content.en,\n 'class': message.class,\n icon: message.icon,\n created: message.created,\n link: message.link\n });\n }\n }\n } catch (err) {\n\n }\n\n return messagesToShow;\n}\n\nconst NewsAdminDialog = ({ newsArr, current, callback, themeType, theme }) => {\n const classes = useStyles();\n const [open, setOpen] = useState(true);\n const [id, setId] = useState(current);\n const [last, setLast] = useState(false);\n const [indexArr, setIndexArr] = useState(0);\n\n useEffect(() => {\n const item = newsArr.find(el => el.id === id);\n if (item) {\n const index = newsArr.indexOf(item);\n if (index + 1 < newsArr.length) {\n const newId = newsArr[index + 1].id;\n if (newId) {\n setId(newId);\n setIndexArr(index + 1);\n }\n } else {\n setOpen(false);\n try {\n node && window.document.body.removeChild(node);\n } catch (e) {\n // ignore\n }\n node = null;\n }\n } else {\n setId(newsArr[0].id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [last]);\n\n const onClose = () => {\n // setOpen(false);\n setLast(!last)\n callback(id);\n };\n\n const lang = I18n.getLanguage();\n let text = newsArr[indexArr].content;\n if (typeof text === 'object') {\n text = (text[lang] || text.en).replace(/='([^']*)'/g, '=\"$1\"');\n }\n let title = newsArr[indexArr].title;\n if (typeof title === 'object') {\n title = title[lang] || title.en;\n }\n\n const link = newsArr[indexArr].link;\n let linkTitle = newsArr[indexArr].linktTitle;\n if (linkTitle && typeof linkTitle === 'object') {\n linkTitle = linkTitle[lang] || linkTitle.en;\n }\n return <ThemeProvider theme={theme}>\n <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <div className={classes.blockInfo}>\n {new Date(newsArr[indexArr].created).toLocaleDateString(lang)}\n <Status className={classes.img} name={newsArr[indexArr].class} />\n </div>\n <DialogTitle>{I18n.t('You have unread news!')}</DialogTitle>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent className={classes.overflowHidden} dividers>\n <div className={classes.root}>\n <div className={classes.pre}>\n {newsArr[indexArr]?.img &&\n <CardMedia className={classes.img2} component=\"img\" image={newsArr[indexArr].img} />}\n <Typography\n style={themeType === 'dark' ? { color: 'black' } : null}\n variant=\"body2\"\n component=\"p\">\n {Utils.renderTextWithA(text)}\n </Typography>\n {newsArr[indexArr]?.link &&\n <Button\n variant=\"contained\"\n className={classes.link}\n onClick={() => window.open(newsArr[indexArr].link, '_blank')}\n color=\"primary\"\n >\n {newsArr[indexArr].linkTitle ? newsArr[indexArr].linkTitle[lang] ? newsArr[indexArr].linkTitle[lang] : newsArr[indexArr].linkTitle : I18n.t('Link')}\n </Button>}\n </div>\n </div>\n </DialogContent>\n <DialogActions>\n {\n link ? <Button\n variant=\"contained\"\n onClick={() => {\n const frame = window.open(link, '_blank');\n frame && frame.focus();\n }}\n color=\"secondary\"\n startIcon={<WorldIcon/>}\n >\n {linkTitle || I18n.t('Show more info')}\n </Button> : null\n }\n <Button\n variant=\"contained\"\n autoFocus\n onClick={onClose}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {I18n.t('Acknowledge')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>;\n}\n\nexport const newsAdminDialogFunc = (newsArr, current, themeName, themeType, theme, callback) => {\n if (!node) {\n node = document.createElement('div');\n node.id = 'renderModal';\n document.body.appendChild(node);\n }\n const root = createRoot(node);\n\n return root.render(<StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <NewsAdminDialog\n newsArr={newsArr}\n themeName={themeName}\n themeType={themeType}\n current={current}\n callback={callback}\n theme={theme}\n />\n </ThemeProvider>\n </StyledEngineProvider>);\n}\n","import React, { useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport clsx from 'clsx';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport { Accordion, AccordionDetails, AccordionSummary, AppBar, Box, CardMedia, Tab, Tabs, Typography } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport UpdateIcon from '@mui/icons-material/Update';\nimport SettingsRemoteIcon from '@mui/icons-material/SettingsRemote';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport PermDeviceInformationIcon from '@mui/icons-material/PermDeviceInformation';\nimport ImportExportIcon from '@mui/icons-material/ImportExport';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport CancelPresentationIcon from '@mui/icons-material/CancelPresentation';\nimport MemoryIcon from '@mui/icons-material/Memory';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nlet node = null;\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column'\n },\n paper: {\n maxWidth: 1000,\n width: '100%'\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden'\n },\n overflowAuto: {\n overflowY: 'auto'\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n '& p': {\n fontSize: 18,\n }\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver'\n },\n img: {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center'\n },\n column: {\n flexDirection: 'column'\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n },\n descriptionHeaderText: {\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n },\n silver: {\n color: 'silver'\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n marginLeft: 20\n },\n img2: {\n width: 25,\n height: 25,\n marginRight: 10,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden'\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n padding: 24\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n content: {\n overflow: 'hidden'\n },\n buttonStyle: {\n margin: 3\n },\n '@media screen and (max-width: 550px)': {\n classNameBox: {\n padding: 10\n },\n message: {\n flexWrap: 'wrap'\n },\n textStyle: {\n fontSize: '2.9vw'\n },\n terminal: {\n fontSize: '2.9vw',\n marginLeft: 0\n },\n silver: {\n fontSize: '2.9vw',\n },\n buttonStyle: {\n fontSize: '2.9vw',\n },\n },\n}));\n\nconst Status = ({ name, ...props }) => {\n switch (name) {\n case 'restartLoop':\n return <UpdateIcon style={{ color: '#ffca00' }} {...props} />;\n case 'memIssues':\n return <MemoryIcon style={{ color: '#ffca00' }} {...props} />;\n case 'fsIoErrors':\n return <ImportExportIcon style={{ color: '#ffca00' }} {...props} />;\n case 'noDiskSpace':\n return <PermDeviceInformationIcon style={{ color: '#ffca00' }} {...props} />;\n case 'accessErrors':\n return <CancelPresentationIcon style={{ color: '#ffca00' }} {...props} />;\n case 'nonExistingFileErrors':\n return <CancelIcon style={{ color: '#ffca00' }} {...props} />;\n case 'remoteHostErrors':\n return <SettingsRemoteIcon style={{ color: '#ffca00' }} {...props} />;\n case 'heading':\n return <WarningIcon style={{\n color: '#ffca00',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10\n }} {...props} />;\n\n default:\n return <WarningIcon style={{ color: '#ffca00' }} {...props} />;\n }\n}\n\nconst a11yProps = (index) => {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\nconst TabPanel = ({ children, value, index, classNameBox, ...other }) => {\n return <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n {...other}\n >\n { value === index &&\n <Box className={classNameBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n }\n </div>;\n}\n\nconst HostWarningDialog = ({ message, ackCallback, dateFormat, themeType, instances, theme }) => {\n const classes = useStyles();\n\n const [open, setOpen] = useState(true);\n const [value, setValue] = useState(0);\n const [disabled, setDisabled] = useState([]);\n const [expanded, setExpanded] = useState(false);\n\n const onClose = () => {\n setOpen(false);\n if (node) {\n try {\n window.document.body.removeChild(node);\n } catch (e) {\n // ignore\n }\n node = null;\n }\n }\n\n const handleChange = (event, newValue) =>\n setValue(newValue);\n\n const handleChangeAccordion = panel => (event, isExpanded) =>\n setExpanded(isExpanded ? panel : false);\n\n const black = themeType === 'dark';\n\n return <ThemeProvider theme={theme}>\n <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <h2 className={classes.headingTop}><Status name=\"heading\" />{I18n.t('Adapter warnings')}</h2>\n <DialogContent className={clsx(classes.flex, classes.overflowHidden)} dividers>\n <div className={classes.root}>\n <AppBar position=\"static\" color=\"default\">\n <Tabs\n value={value}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons=\"on\"\n indicatorColor={black ? 'primary' : 'secondary'}\n textColor=\"primary\"\n >\n {Object.keys(message).map((name, idx) => <Tab\n style={black ? null : { color: 'white' }}\n disabled={disabled.includes(name)}\n key={name} label={I18n.t(name)}\n icon={<Status name={name} />}\n {...a11yProps(idx)} />\n )}\n </Tabs>\n </AppBar>\n {Object.keys(message).map((name, idx) => <TabPanel\n className={classes.overflowAuto}\n classNameBox={classes.classNameBox}\n key={`tabPanel-${name}`}\n style={black ? { color: 'black' } : null}\n value={value}\n index={idx}>\n <div className={classes.headerText} style={{ fontWeight: 'bold' }}>\n {message[name].name[I18n.getLanguage()]}\n </div>\n <div className={classes.descriptionHeaderText}>\n {message[name].description[I18n.getLanguage()]}\n </div>\n <div>\n {message[name].instances ? Object.keys(message[name].instances).map(nameInst => {\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n return <Accordion\n style={black ? null : { background: '#c0c0c052' }}\n key={nameInst} expanded={expanded === `${name}-${nameInst}`}\n onChange={handleChangeAccordion(`${name}-${nameInst}`)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n classes={{ content: classes.content }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography className={classes.heading}>\n <CardMedia className={classes.img2} component=\"img\" image={icon} />\n <div className={classes.textStyle}>\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </div>\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.column}>\n {message[name].instances[nameInst].messages.map(msg =>\n <Typography key={msg.ts} component=\"div\" className={classes.message}>\n <div className={classes.terminal}>{msg.message}</div>\n <div className={classes.silver}>{Utils.formatDate(new Date(msg.ts), dateFormat)}</div>\n </Typography>)}\n </AccordionDetails>\n </Accordion>\n }) : null}\n </div>\n <div className={classes.button}>\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(message).length !== 1}\n disabled={disabled.includes(name)}\n style={disabled.includes(name) ? { background: 'silver' } : null}\n className={classes.buttonStyle}\n onClick={() => {\n ackCallback(name);\n setDisabled([...disabled, name]);\n }}\n color={Object.keys(message).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n {Object.keys(message).length === 1 && <Button\n variant=\"contained\"\n disabled={disabled.includes(name)}\n className={classes.buttonStyle}\n style={disabled.includes(name) ? { background: 'silver' } : null}\n onClick={() => {\n ackCallback(name);\n setDisabled([...disabled, name]);\n onClose();\n }}\n startIcon={<><CheckIcon /><CloseIcon /></>}\n color=\"primary\">\n {I18n.t('Acknowledge & close')}\n </Button>}\n </div>\n </TabPanel>\n )}\n </div>\n </DialogContent >\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={onClose}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog >\n </ThemeProvider >;\n}\n\nexport const hostWarningDialogFunc = (message, dateFormat, themeType, themeName, instances, theme, ackCallback) => {\n if (!node) {\n node = document.createElement('div');\n node.id = 'renderModal';\n document.body.appendChild(node);\n }\n const root = createRoot(node);\n\n return root.render(<StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <HostWarningDialog\n instances={instances}\n message={message}\n themeName={themeName}\n theme={theme}\n themeType={themeType}\n dateFormat={dateFormat}\n ackCallback={ackCallback}\n />\n </ThemeProvider>\n </StyledEngineProvider>);\n}","import Utils from '../Utils';\n\nclass LogsWorker {\n constructor(socket, maxLogs) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n this.errorCountHandlers = [];\n this.warningCountHandlers = [];\n this.countErrors = true;\n this.countWarnings = true;\n this.errors = 0;\n this.warnings = 0;\n this.currentHost = '';\n this.connected = this.socket.isConnected();\n this.maxLogs = maxLogs || 1000;\n this.logs = null;\n this.isSafari = navigator.vendor && navigator.vendor.includes('Apple') &&\n navigator.userAgent && !navigator.userAgent.includes('CriOS') && !navigator.userAgent.includes('FxiOS');\n\n socket.registerLogHandler(this.logHandler);\n socket.registerConnectionHandler(this.connectionHandler);\n }\n\n setCurrentHost(currentHost) {\n if (currentHost !== this.currentHost) {\n this.currentHost = currentHost;\n this.getLogs(true);\n }\n }\n\n enableCountErrors(isEnabled) {\n if (this.countErrors !== isEnabled) {\n this.countErrors = isEnabled;\n if (!this.countErrors) {\n const errors = this.errors;\n this.error = 0;\n errors && this.errorCountHandlers.forEach(handler => handler && handler(errors));\n }\n }\n }\n\n enableCountWarnings(isEnabled) {\n if (this.countWarnings !== isEnabled) {\n this.countWarnings = isEnabled;\n if (!this.countWarnings) {\n const warnings = this.warnings;\n this.warnings = 0;\n if (warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(warnings));\n }\n }\n }\n }\n\n resetErrors() {\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n }\n\n resetWarnings() {\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n\n logHandler = line => {\n const obj = this._processLine(line);\n\n if (obj) {\n const errors = this.errors;\n const warnings = this.warnings;\n\n this.newLogs = this.newLogs || [];\n this.newLogs.push(obj);\n\n if (!this.logTimeout) {\n this.logTimeout = setTimeout(() => {\n this.logTimeout = null;\n const newLogs = this.newLogs;\n this.newLogs = null;\n\n this.handlers.forEach(handler =>\n handler && handler(newLogs, JSON.stringify(line).length - 65));\n }, 200);\n }\n\n if (errors !== this.errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n\n if (warnings !== this.warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n }\n\n connectionHandler = isConnected => {\n if (isConnected && !this.connected) {\n this.connected = true;\n this.getLogs(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n }\n\n registerHandler(cb) {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n }\n }\n\n unregisterHandler(cb) {\n const pos = this.handlers.indexOf(cb);\n\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n }\n\n registerErrorCountHandler(cb) {\n if (!this.errorCountHandlers.includes(cb)) {\n this.errorCountHandlers.push(cb);\n }\n }\n\n unregisterErrorCountHandler(cb) {\n const pos = this.errorCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.errorCountHandlers.splice(pos, 1);\n }\n }\n\n registerWarningCountHandler(cb) {\n if (!this.warningCountHandlers.includes(cb)) {\n this.warningCountHandlers.push(cb);\n }\n }\n\n unregisterWarningCountHandler(cb) {\n const pos = this.warningCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.warningCountHandlers.splice(pos, 1);\n }\n }\n\n _processLine(line, lastKey) {\n // do not update logs before the first logs from host received\n if (!this.logs) {\n return;\n }\n if (!line) {\n return;\n }\n /* const line = {\n \"severity\": \"error\",\n \"ts\": 1588162801514,\n \"message\": \"host.DESKTOP-PLLTPO1 Invalid request getLogs. \\\"callback\\\" or \\\"from\\\" is null\",\n \"from\": \"host.DESKTOP-PLLTPO1\",\n \"_id\": 48358425\n };*/\n\n let obj;\n let isNew = true;\n const length = this.logs.length;\n lastKey = lastKey || (length && this.logs[this.logs.length - 1].key) || 0;\n\n if (typeof line === 'object') {\n if (lastKey && lastKey <= line.ts) {\n line.key = lastKey + 1;\n } else {\n line.key = line.ts;\n }\n\n obj = line;\n } else {\n const time = line.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}/);\n\n if (time && time.length > 0) {\n let ts;\n // Safari sucks. It is very idiotic browser and because of it, we must parse every number apart\n if (this.isSafari) {\n // parse every number\n const tt = line.match(/^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})/);\n ts = new Date(parseInt(tt[1], 10), parseInt(tt[2], 10) - 1, parseInt(tt[3], 10), parseInt(tt[4], 10), parseInt(tt[5], 10), parseInt(tt[6], 10), parseInt(tt[7], 10)).getTime();\n } else {\n const tt = time[0].split(' ');\n ts = new Date(tt[0] + 'T' + tt[1]).getTime();\n }\n let key = ts;\n\n if (lastKey && lastKey <= ts) {\n key = lastKey + 1;\n }\n\n // detect from\n const from = line.match(/: (host\\..+? |[-\\w]+\\.\\d+ \\()/);\n\n obj = {\n key,\n from: from ? from[0].replace(/[ :(]/g, '') : '',\n message: line.split(/\\[\\d+m: /)[1],\n severity: line.match(/\\d+m(silly|debug|info|warn|error)/)[0].replace(/[\\dm]/g, ''),\n ts\n };\n } else {\n isNew = false;\n // if no time found\n if (length) {\n obj = this.logs[length - 1];\n if (obj) {\n if (typeof obj.message === 'object') {\n obj.message = Utils.parseColorMessage(obj.message.original + line);\n } else {\n obj.message += line;\n }\n }\n }\n }\n }\n\n if (!obj) {\n return;\n }\n\n if (typeof obj.message !== 'object') {\n obj.message = Utils.parseColorMessage(obj.message);\n }\n\n if (isNew) {\n // if new message time is less than last message in log\n if (length && this.logs[length - 1].key > obj.key) {\n let i;\n // find place\n for (i = length - 1; i >= 0; i--) {\n if (this.logs[i].key < obj.key) {\n break;\n }\n }\n if (i === -1) {\n this.logs.unshift(obj);\n } else {\n this.logs.splice(i + 1, 0, obj);\n }\n } else {\n this.logs.push(obj);\n }\n\n if (length + 1 === this.maxLogs) {\n this.logs.shift();\n }\n\n if (isNew && obj.severity === 'error' && this.countErrors) {\n this.errors++;\n }\n\n if (isNew && obj.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n }\n }\n\n return obj;\n }\n\n getLogs(update) {\n if (!this.currentHost) {\n return Promise.resolve({logs: [], logSize: 0});\n }\n\n if (!update && this.promise) {\n return this.promise;\n }\n\n this.errors = 0;\n this.warnings = 0;\n\n this.promise = this.socket.getLogs(this.currentHost, 200)\n .then(lines => {\n if (lines === 'permissionError') {\n this.logs = [];\n\n window.alert('Cannot get logs: no permission');\n\n return {logs: this.logs, logSize: 0};\n }\n const logSize = lines ? lines.pop() : null;\n\n this.logs = [];\n let lastKey;\n\n lines.forEach(line => {\n const obj = this._processLine(line, lastKey);\n if (obj) {\n lastKey = obj.key;\n }\n });\n\n if (lines && lines.length && lines[0].ts) {\n lines.sort((a, b) => a.ts > b.ts ? 1 : (a.ts < b.ts ? -1 : 0));\n }\n\n this.logSize = logSize;\n\n // inform subscribes about each line\n this.handlers.forEach(cb => cb && cb(this.logs, logSize));\n\n this.errors && this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n this.warnings && this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n\n return {logs: this.logs, logSize};\n })\n .catch(e => {\n window.alert('Cannot get logs: ' + e);\n });\n\n return this.promise;\n }\n\n clearLines() {\n this.logs = [];\n this.logSize = 0;\n\n if (this.errors) {\n const errors = this.errors;\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(errors));\n }\n\n if (this.warnings) {\n const warnings = this.warnings;\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(warnings));\n }\n }\n}\n\nexport default LogsWorker;","import Utils from '../Utils';\n\nclass InstancesWorker {\n constructor(socket) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n this.forceUpdate = false;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id, obj) => {\n this.objects = this.objects || {};\n // if instance\n if (id.match(/^system\\.adapter\\.[^.]+\\.\\d+$/)) {\n let type;\n let oldObj;\n if (obj) {\n if (obj.type !== 'instance') {\n return;\n }\n\n Utils.fixAdminUI(obj);\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else {\n if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n }\n\n this.promise = null;\n this.socket.getAdapterInstancesResetCache('');\n this.forceUpdate = true;\n\n this.handlers.forEach(cb => cb([{ id, obj, type, oldObj }]));\n }\n };\n\n isForceUpdate() {\n return this.forceUpdate;\n }\n\n // be careful with this object. Do not change them.\n getInstances(update) {\n if (!update && this.promise) {\n return this.promise;\n }\n\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n this.promise = this.socket.getAdapterInstances(update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => this.objects[obj._id] = obj);\n return this.objects;\n })\n .catch(e => window.alert('Cannot get adapter instances: ' + e));\n\n return this.promise;\n }\n\n connectionHandler = isConnected => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket.subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n this.getInstances(true)\n .then(instances => instances && Object.keys(instances)\n .forEach(id => this.objectChangeHandler(id, instances[id])));\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n }\n\n registerHandler(cb, doNotRequestAdapters) {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket.subscribeObject('system.adapter.*', this.objectChangeHandler)\n .then(() => !doNotRequestAdapters && this.getInstances())\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb) {\n const pos = this.handlers.indexOf(cb);\n pos !== -1 && this.handlers.splice(pos, 1);\n\n if (!this.handlers.length && this.connected) {\n this.socket.unsubscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n}\n\nexport default InstancesWorker;\n","class HostsWorker {\n constructor(socket) {\n this.socket = socket;\n this.handlers = [];\n this.aliveHandlers = [];\n this.notificationsHandlers = [];\n this.promise = null;\n this.notificationPromises = {};\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n console.log('Connected: ' + this.connected);\n this.objects = {};\n this.aliveStates = {};\n if (this.connected) {\n this.connectionHandler(true);\n }\n }\n\n objectChangeHandler = (id, obj) => {\n // if host\n if (id.startsWith('system.host.')) {\n let type;\n let oldObj;\n if (obj) {\n if (obj.type !== 'host') {\n return;\n }\n\n if (this.objects[id]) {\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else {\n if (this.objects[id]) {\n type = 'deleted';\n oldObj = this.objects[id];\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n }\n\n this.handlers.forEach(cb => cb([{id, obj, type, oldObj}]));\n }\n }\n\n aliveChangeHandler = (id, state) => {\n // if instance\n if (id.startsWith('system.host.') && id.endsWith('.alive')) {\n let type;\n id = id.replace(/\\.alive$/, '');\n if (state) {\n if (this.aliveStates[id] !== undefined) {\n if ((!!this.aliveStates[id]) !== (!!state?.val)) {\n type = 'changed';\n this.aliveStates[id] = !!state?.val;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.aliveStates[id] = !!state?.val;\n }\n } else {\n if (this.aliveStates[id]) {\n type = 'deleted';\n delete this.aliveStates[id];\n } else {\n // deleted unknown instance\n return;\n }\n }\n this.aliveHandlers.forEach(cb => cb([{id, alive: this.aliveStates[id], type}]));\n }\n }\n\n getHosts(update) {\n if (!update && this.promise) {\n return this.promise;\n }\n\n this.promise = this.socket.getHosts(update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => this.objects[obj._id] = obj);\n return this.objects;\n })\n .catch(e => window.alert('Cannot get hosts: ' + e));\n\n return this.promise;\n }\n\n connectionHandler = isConnected => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket.subscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n // read all hosts anew and inform about it\n this.getHosts(true)\n .then(hosts => hosts && Object.keys(hosts)\n .forEach(id => this.objectChangeHandler(id, hosts[id])));\n }\n if (this.aliveHandlers.length) {\n this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n Object.keys(this.aliveStates)\n .forEach(id => this.aliveHandlers[id] = false);\n }\n }\n\n registerHandler(cb) {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket.subscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb) {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n if (!this.handlers.length && this.connected) {\n this.socket.unsubscribeObject('system.host.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n registerAliveHandler(cb) {\n if (!this.aliveHandlers.includes(cb)) {\n this.aliveHandlers.push(cb);\n\n if (this.aliveHandlers.length === 1 && this.connected) {\n this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n unregisterAliveHandler(cb) {\n const pos = this.aliveHandlers.indexOf(cb);\n if (pos !== -1) {\n this.aliveHandlers.splice(pos, 1);\n if (!this.aliveHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n onNotificationHandler = (id, state) => {\n const host = id.replace(/\\.notifications\\..+$/, '');\n\n // ignore subscribe events\n if (!this.subscribeTs || Date.now() - this.subscribeTs > 500) {\n this.notificationTimer && clearTimeout(this.notificationTimer);\n\n this.notificationTimer = setTimeout(host => {\n this.notificationTimer = null;\n this.notificationPromises[host] = this._getNotificationsFromHots(host, true);\n\n this.notificationPromises[host].then(notifications =>\n this.notificationsHandlers.forEach(cb => cb(notifications)));\n }, 300, host);\n }\n };\n\n _getNotificationsFromHots(hostId, update) {\n if (!update && this.notificationPromises[hostId]) {\n return this.notificationPromises[hostId];\n }\n\n this.notificationPromises[hostId] = this.socket.getState(hostId + '.alive')\n .then(state => {\n if (state && state.val) {\n return this.socket.getNotifications(hostId)\n .then(notifications => ({[hostId]: notifications}))\n .catch(e => {\n console.warn(`Cannot read notifications from \"${hostId}\": ${e}`);\n return {[hostId]: null};\n });\n } else {\n return {[hostId]: null};\n }\n });\n\n return this.notificationPromises[hostId];\n }\n\n getNotifications(hostId, update) {\n if (hostId) {\n return this._getNotificationsFromHots(hostId, update);\n } else {\n return this.socket.getCompactHosts(update)\n .then(hosts => {\n const promises = hosts\n .map(host => this._getNotificationsFromHots(host._id, update));\n\n return Promise.all(promises)\n .then(pResults => {\n const result = {};\n pResults.forEach(r => Object.assign(result, r));\n return result;\n });\n });\n }\n }\n\n registerNotificationHandler(cb) {\n if (!this.notificationsHandlers.includes(cb)) {\n this.notificationsHandlers.push(cb);\n\n if (this.notificationsHandlers.length === 1 && this.connected) {\n this.subscribeTs = Date.now();\n this.socket.subscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n\n unregisterNotificationHandler(cb) {\n const pos = this.notificationsHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.notificationsHandlers.splice(pos, 1);\n if (!this.notificationsHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n}\n\nexport default HostsWorker;\n","import Utils from '../Utils';\n\nclass AdaptersWorker {\n constructor(socket) {\n this.socket = socket;\n this.handlers = [];\n this.repositoryHandlers = [];\n this.promise = null;\n this.forceUpdate = false;\n\n socket.registerConnectionHandler(this.connectionHandler);\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id, obj) => {\n this.objects = this.objects || {};\n // if instance\n if (id.match(/^system\\.adapter\\.[^.]+$/)) {\n let type;\n let oldObj;\n\n if (obj) {\n if (obj.type !== 'adapter') {\n return;\n }\n\n Utils.fixAdminUI(obj);\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else {\n if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n return;\n }\n }\n\n this.socket.getAdaptersResetCache();\n this.socket.getInstalledResetCache();\n this.forceUpdate = true;\n this.promise = null;\n\n this.handlers.forEach(cb => cb([{ id, obj, type, oldObj }]));\n }\n };\n\n isForceUpdate() {\n return this.forceUpdate;\n }\n\n // be careful with this object. Do not change them.\n getAdapters(update) {\n if (!update && this.promise) {\n return this.promise;\n }\n\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n this.promise = this.socket.getAdapters(update)\n .then(objects => {\n this.objects = {};\n objects.forEach(obj => this.objects[obj._id] = obj);\n return this.objects;\n })\n .catch(e => window.alert('Cannot get adapters: ' + e));\n\n return this.promise;\n }\n\n connectionHandler = isConnected => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket.subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n\n this.getAdapters(true)\n .then(adapters => adapters && Object.keys(adapters)\n .forEach(id => this.objectChangeHandler(id, adapters[id])));\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n }\n\n registerHandler(cb) {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket.subscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb) {\n const pos = this.handlers.indexOf(cb);\n pos !== -1 && this.handlers.splice(pos, 1);\n\n if (!this.handlers.length && this.connected) {\n this.socket.unsubscribeObject('system.adapter.*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n\n repoChangeHandler = (id, obj) => {\n this.repoTimer && clearTimeout(this.repoTimer);\n this.repoTimer = setTimeout(() => {\n this.repoTimer = null;\n this.repositoryHandlers.forEach(cb => cb());\n }, 500);\n };\n\n registerRepositoryHandler(cb) {\n if (!this.repositoryHandlers.includes(cb)) {\n this.repositoryHandlers.push(cb);\n\n if (this.repositoryHandlers.length === 1 && this.connected) {\n this.socket.subscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterRepositoryHandler(cb) {\n const pos = this.repositoryHandlers.indexOf(cb);\n pos !== -1 && this.repositoryHandlers.splice(pos, 1);\n\n if (!this.repositoryHandlers.length && this.connected) {\n this.socket.unsubscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n\nexport default AdaptersWorker;\n","import Utils from '../Utils';\n\nclass ObjectsWorker {\n constructor(socket) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id, obj) => {\n this.objects = this.objects || {};\n // if instance\n let oldObj;\n let type;\n\n if (obj) {\n if (obj.type === 'instance' || obj.type === 'adapter') {\n Utils.fixAdminUI(obj);\n }\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n type = 'changed';\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else {\n if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n type = 'deleted';\n }\n }\n\n this.handlers.forEach(cb => cb([{ id, obj, type, oldObj }]));\n };\n\n // be careful with this object. Do not change them.\n getObjects(update) {\n if (!update && this.promise) {\n return this.promise;\n }\n\n this.promise = this.socket.getObjects(update, true)\n .then(objects => {\n this.objects = objects;\n return this.objects;\n })\n .catch(e => window.alert('Cannot get objects: ' + e));\n\n return this.promise;\n }\n\n connectionHandler = isConnected => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket.subscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on objects: ${e}`));\n\n this.getObjects(true)\n .then(instances => instances && Object.keys(instances)\n .forEach(id => this.objectChangeHandler(id, instances[id])));\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n }\n\n registerHandler(cb) {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket.subscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb, doNotUnsubscribe) {\n const pos = this.handlers.indexOf(cb);\n pos !== -1 && this.handlers.splice(pos, 1);\n\n if (!this.handlers.length && this.connected && !doNotUnsubscribe) {\n this.socket.unsubscribeObject('*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n\nexport default ObjectsWorker;\n","import React, { useEffect, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport clsx from 'clsx';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport { AppBar, Box, Paper, Typography } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigPanel from '../components/JsonConfigComponent/ConfigPanel';\nimport CheckIcon from '@mui/icons-material/Check';\n\nlet node = null;\n\nconst useStyles = makeStyles(theme => ({\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column'\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden'\n },\n overflowAuto: {\n overflowY: 'auto'\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n '& p': {\n fontSize: 18,\n }\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver'\n },\n img: {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center'\n },\n column: {\n flexDirection: 'column'\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 15\n },\n descriptionHeaderText: {\n margin: '10px 0'\n },\n silver: {\n color: 'silver'\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n marginLeft: 20\n },\n img2: {\n width: 25,\n height: 25,\n marginRight: 10,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n heading: {\n display: 'flex',\n alignItems: 'center'\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16\n },\n headerBlockDisplay: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n display: 'flex'\n },\n headerBlockDisplayItem: {\n padding: 13,\n fontSize: 16,\n display: 'flex'\n },\n width200: {\n width: 200\n },\n table: {\n // '& *': {\n // color: 'black'\n // }\n },\n paperTable: {\n width: '100%',\n marginBottom: theme.spacing(2),\n }\n}));\n\nconst TabPanel = ({ classes, children, value, index, title, custom, ...props }) => {\n if (custom) {\n return <div\n {...props}\n >{value === index && children}</div>\n }\n\n return (\n <div\n {...props}\n >{value === index &&\n <>\n <AppBar position=\"static\" color=\"default\">\n <div className={classes.headerBlock}>\n {title}\n </div>\n </AppBar>\n <Box p={3}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </>\n }\n </div>\n );\n}\n\nconst types = {\n \"password\": \"password\",\n \"checkbox\": \"checkbox\",\n \"select\": \"select\",\n \"link\": \"staticLink\",\n \"comment\": \"staticText\",\n \"text\": \"text\",\n \"name\": \"staticText\",\n \"title\": \"staticText\",\n};\n\nconst generateObj = (obj, path, value) => {\n path = path.split('.');\n path.forEach((element, idx) => {\n if (idx === path.length - 1) {\n if (!obj[path[idx - 1]]) {\n obj[path[idx - 1]] = {};\n }\n obj[path[idx - 1]][element] = value;\n }\n });\n return obj;\n}\nconst GenerateInputsModal = ({ themeType, themeName, socket, newInstances, onApplyModal, onCloseModal, theme }) => {\n const classes = useStyles();\n\n const [open, setOpen] = useState(true);\n const [error, setError] = useState({});\n\n const onClose = () => {\n setOpen(false);\n if (node) {\n try {\n window.document.body.removeChild(node);\n } catch (e) {\n // ignore\n }\n node = null;\n }\n }\n\n const isError = () => Object.keys(error).find(attr => error[attr]);\n\n // const black = themeType === 'dark';\n\n const [schema, setSchema] = useState({\n items: {}\n });\n\n const [schemaData, setSchemaData] = useState({});\n\n useEffect(() => {\n const obj = {};\n let objValue = {};\n if (newInstances) {\n newInstances.comment.add.forEach((text, idx) =>\n obj[idx] = { type: 'header', text });\n\n newInstances.comment.inputs.forEach((el, idx) => {\n obj[idx + 1] = {\n ...el, type: types[el.type], label: el.title, text: el.def, href: el.def,\n 'sm': 6,\n 'newLine': true,\n };\n\n if (el.type === 'link') {\n obj[idx + 1].button = true;\n obj[idx + 1].variant = \"contained\";\n obj[idx + 1].href = el.def;\n obj[idx + 1].text = el.title;\n obj[idx + 1].icon = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L3N2Zz4='\n }\n\n if (el.type === 'password') {\n obj[idx + 1].repeat = true;\n }\n\n if (el.def !== undefined) {\n objValue[idx + 1] = '';\n }\n\n if (el.type === 'checkbox') {\n objValue[idx + 1] = false;\n }\n });\n setSchemaData(objValue);\n setSchema({ items: obj });\n }\n }, [newInstances]);\n\n return <ThemeProvider theme={theme}>\n <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <h2 className={classes.heading}>\n <SettingsIcon style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10\n }} />\n {I18n.t('Instance parameters for %s', newInstances._id.replace('system.adapter.', ''))}</h2>\n <DialogContent className={clsx(classes.flex, classes.overflowHidden)} dividers>\n <div className={classes.root}>\n <TabPanel\n value={1}\n index={1}\n custom\n title={I18n.t('Test')}\n >\n <Paper className={classes.paperTable}>\n <ConfigPanel\n data={schemaData}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n onChange={setSchemaData}\n schema={schema}\n onError={(attr, _error) => setError({...error, [attr]: _error})}\n />\n </Paper>\n </TabPanel>\n </div>\n </DialogContent >\n <DialogActions>\n <Button\n variant=\"contained\"\n autoFocus\n disabled= {isError()}\n onClick={() => {\n let obj = {};\n let error = false;\n Object.keys(schema.items).forEach(key => {\n if (schema.items[key].required) {\n if (!schemaData[key] && schema.items[key].type !== \"checkbox\") {\n error = true;\n alert(`no data ${schema.items[key].label}`);\n } else {\n obj = generateObj(obj, schema.items[key].name, schemaData[key]);\n }\n } else if (schema.items[key].name) {\n error = false;\n obj = generateObj(obj, schema.items[key].name, schemaData[key]);\n }\n })\n if (!error) {\n onApplyModal(obj);\n onClose();\n }\n }}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {I18n.t('Apply')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => {\n onClose();\n setTimeout(() => onCloseModal(), 0);\n }}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog >\n </ThemeProvider >;\n}\n\nexport const generateInputsFunc = (themeType, themeName, socket, newInstances, theme, onCloseModal, onApplyModal) => {\n if (!node) {\n node = document.createElement('div');\n node.id = 'renderDiscoveryModal';\n document.body.appendChild(node);\n }\n const root = createRoot(node);\n\n return root.render(<StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <GenerateInputsModal onCloseModal={onCloseModal} newInstances={newInstances} onApplyModal={onApplyModal} themeName={themeName} themeType={themeType} theme={theme} socket={socket} />\n </ThemeProvider>\n </StyledEngineProvider>);\n}\n","import * as React from 'react';\n\nexport function useStateLocal(defaultValue, key) {\n const data = (window._localStorage || window.localStorage).getItem(key);\n if (data) {\n try {\n defaultValue = JSON.parse(data);\n } catch (error) {\n\n }\n }\n\n const [state, setState] = React.useState(defaultValue);\n\n const eventsToInstall = newValue => {\n (window._localStorage || window.localStorage).setItem(key, JSON.stringify(newValue));\n setState(newValue);\n };\n\n return [state, eventsToInstall, !!(window._localStorage || window.localStorage).getItem(key)];\n}","import React, { useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport { Tooltip, AppBar, Avatar, Box, Checkbox, CircularProgress, LinearProgress, Paper, Step, StepLabel, Stepper, Switch, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TableSortLabel, Typography, } from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport NavigateNextIcon from '@mui/icons-material/NavigateNext';\nimport NavigateBeforeIcon from '@mui/icons-material/NavigateBefore';\nimport SearchIcon from '@mui/icons-material/Search';\nimport CloseIcon from '@mui/icons-material/Close';\nimport LibraryAddIcon from '@mui/icons-material/LibraryAdd';\nimport AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn';\nimport ReportProblemIcon from '@mui/icons-material/ReportProblem';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport Command from '../components/Command';\nimport SelectWithIcon from '@iobroker/adapter-react-v5/Components/SelectWithIcon';\nimport { licenseDialogFunc } from './LicenseDialog';\nimport { generateInputsFunc } from './GenereteInputsModal';\nimport { useStateLocal } from '../helpers/hooks/useStateLocal';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column'\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden'\n },\n overflowAuto: {\n overflowY: 'auto'\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n '& p': {\n fontSize: 18,\n }\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver'\n },\n img: {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center'\n },\n column: {\n flexDirection: 'column'\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 15\n },\n descriptionHeaderText: {\n margin: '10px 0'\n },\n silver: {\n color: 'silver'\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n marginLeft: 20\n },\n img2: {\n width: 25,\n height: 25,\n marginRight: 10,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n heading: {\n display: 'flex',\n alignItems: 'center'\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16\n },\n headerBlockDisplay: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n display: 'flex'\n },\n headerBlockDisplayItem: {\n padding: 5,\n fontSize: 16,\n display: 'flex',\n margin: 2,\n border: '1px solid #c0c0c045',\n borderRadius: 4,\n alignItems: 'center',\n transition: 'background .5s, color .5s'\n },\n activeBlock: {\n background: '#c0c0c021',\n border: '1px solid #4dabf5'\n },\n pointer: {\n cursor: 'pointer'\n },\n hover: {\n '&:hover': {\n background: '#c0c0c021',\n }\n },\n installSuccess: {\n opacity: 0.7,\n color: '#5ef05e'\n },\n installError: {\n opacity: 0.7,\n color: '#ffc14f'\n },\n width200: {\n width: 200\n },\n table: {\n // '& *': {\n // color: 'black'\n // }\n },\n paperTable: {\n width: '100%',\n marginBottom: theme.spacing(2),\n },\n wrapperSwitch: {\n display: 'flex',\n margin: 10,\n marginTop: 0\n },\n divSwitch: {\n display: 'flex',\n // margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver'\n },\n marginLeft: {\n marginLeft: 40\n },\n stepper: {\n padding: 0,\n background: 'inherit'\n },\n instanceIcon: {\n width: 30,\n height: 30,\n margin: 3\n },\n instanceId: {\n marginLeft: 10\n },\n instanceWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n\nconst TabPanel = ({ classes, children, value, index, title, custom, boxHeight, black, ...props }) => {\n if (custom) {\n return <div\n {...props}\n >{value === index && children}</div>\n }\n if (value === index) {\n return <div {...props}>\n <AppBar position=\"static\" color=\"default\">\n <div style={!black ? { color: 'white' } : null} className={classes.headerBlock}>\n {title}\n </div>\n </AppBar>\n <Box style={boxHeight ? { height: 'calc(100% - 45px)' } : null} p={3}>\n <Typography style={boxHeight ? { height: '100%' } : null} component=\"div\">\n {children}\n </Typography>\n </Box>\n </div>;\n }\n return null;\n}\n\nconst headCells = [\n { id: 'instance', numeric: false, disablePadding: true, label: 'Instance' },\n { id: 'host', numeric: false, disablePadding: false, label: 'Host' },\n { id: 'description', numeric: false, disablePadding: false, label: 'Description' },\n { id: 'ignore', numeric: true, disablePadding: false, label: 'Ignore' },\n];\n\nfunction EnhancedTableHead(props) {\n const { numSelected, rowCount, onSelectAllClick } = props;\n const createSortHandler = property => event => {\n // onRequestSort(event, property);\n };\n\n return <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\">\n <Checkbox\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n {headCells.map((headCell) => (\n <TableCell\n key={headCell.id}\n align={headCell.numeric ? 'right' : 'left'}\n padding={headCell.disablePadding ? 'none' : 'normal'}\n >\n <TableSortLabel\n onClick={createSortHandler(headCell.id)}\n >\n {headCell.label}\n </TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>;\n}\n\nconst buildComment = (comment, t) => {\n if (!comment) {\n return 'new';\n }\n if (typeof comment === 'string') {\n return comment;\n }\n let text = '';\n\n if (comment.add) {\n text += t('new');\n if (Array.isArray(comment.add) && comment.add.length) {\n text += ': ';\n if (comment.add.length <= 5) {\n text += comment.add.join(', ');\n } else {\n text += t('%s devices', comment.add.length);\n }\n } else if (typeof comment.add === 'string' || typeof comment.add === 'number') {\n text += ': ';\n text += comment.add;\n }\n }\n\n if (comment.changed) {\n text += (text ? ', ' : '') + t('changed');\n if (Array.isArray(comment.changed === 'object') && comment.changed.length) {\n text += ': ';\n if (comment.changed.length <= 5) {\n text += comment.changed.join(', ');\n } else {\n text += t('%s devices', comment.changed.length);\n }\n } else if (typeof comment.changed === 'string' || typeof comment.changed === 'number') {\n text += ': ';\n text += comment.changed;\n }\n }\n\n if (comment.extended) {\n text += (text ? ', ' : '') + t('extended');\n if (Array.isArray(comment.extended) && comment.extended.length) {\n text += ': ';\n if (comment.extended.length <= 5) {\n text += comment.extended.join(', ');\n } else {\n text += t('%s devices', comment.extended.length);\n }\n } else if (typeof comment.extended === 'string' || typeof comment.extended === 'number') {\n text += ': ';\n text += comment.extended;\n }\n }\n\n if (comment.text) {\n text += (text ? ', ' : '') + comment.text;\n }\n return text;\n}\n\nconst DiscoveryDialog = ({ themeType, themeName, socket, dateFormat, currentHost, defaultLogLevel, repository, hosts, onClose, theme }) => {\n const classes = useStyles();\n\n const [step, setStep] = useState(0);\n const [listMethods, setListMethods] = useState({});\n const [checkboxChecked, setCheckboxChecked] = useState({});\n const [disableScanner, setDisableScanner] = useState(false);\n const [discoveryData, setDiscoveryData] = useState({});\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n async function fetchData() {\n const resultList = await socket.sendTo('system.adapter.discovery.0', 'listMethods', null);\n let listChecked = {};\n let lastSelection = (window._localStorage || window.localStorage).getItem('App.discoveryLastSelection') || null;\n if (lastSelection) {\n try {\n lastSelection = JSON.parse(lastSelection);\n } catch (e) {\n lastSelection = null;\n }\n }\n\n Object.keys(resultList).forEach(key => {\n if (lastSelection) {\n listChecked[key] = lastSelection[key];\n } else {\n listChecked[key] = key !== 'serial';\n }\n });\n\n setCheckboxChecked(listChecked);\n setListMethods(resultList);\n }\n\n fetchData();\n }, [socket]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n async function readOldData() {\n const dataDiscovery = await socket.getObject('system.discovery');\n dataDiscovery !== undefined && setDiscoveryData(dataDiscovery);\n }\n\n readOldData();\n }, [socket]);\n\n const [aliveHosts, setAliveHosts] = useState({});\n const [checkSelectHosts, setCheckSelectHosts] = useState(false);\n const [hostInstances, setHostInstances] = useState({});\n\n useEffect(() => {\n hosts.forEach(async ({ _id }) => {\n let aliveValue = await socket.getState(`${_id}.alive`);\n setAliveHosts(prev => ({ ...prev, [_id]: !aliveValue || aliveValue.val === null ? false : !!aliveValue.val }));\n });\n\n if (Object.keys(aliveHosts).filter(key => aliveHosts[key]).length > 1) {\n setCheckSelectHosts(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hosts, socket]);\n\n const [devicesFound, setDevicesFound] = useState(0);\n const [devicesProgress, setDevicesProgress] = useState(0);\n const [instancesFound, setInstancesFound] = useState(0);\n const [scanRunning, setScanRunning] = useState(false);\n const [servicesProgress, setServicesProgress] = useState(0);\n const [selected, setSelected] = useState([]);\n\n const handlerInstall = (name, value) => {\n if (!value) {\n return;\n }\n switch (name) {\n case 'discovery.0.devicesFound':\n return setDevicesFound(value.val);\n case 'discovery.0.devicesProgress':\n return setDevicesProgress(value.val);\n case 'discovery.0.instancesFound':\n return setInstancesFound(value.val);\n case 'discovery.0.scanRunning':\n return setScanRunning(value.val);\n case 'discovery.0.servicesProgress':\n return setServicesProgress(value.val);\n case 'system.discovery':\n return setDiscoveryData(value);\n default:\n return;\n }\n };\n\n useEffect(() => {\n socket.subscribeObject('system.discovery', handlerInstall);\n socket.subscribeState('discovery.0.devicesFound', handlerInstall);\n socket.subscribeState('discovery.0.devicesProgress', handlerInstall);\n socket.subscribeState('discovery.0.instancesFound', handlerInstall);\n socket.subscribeState('discovery.0.scanRunning', handlerInstall);\n socket.subscribeState('discovery.0.servicesProgress', handlerInstall);\n\n return () => {\n socket.unsubscribeObject('system.discovery', handlerInstall);\n socket.unsubscribeState('discovery.0.devicesFound', handlerInstall);\n socket.unsubscribeState('discovery.0.devicesProgress', handlerInstall);\n socket.unsubscribeState('discovery.0.instancesFound', handlerInstall);\n socket.unsubscribeState('discovery.0.scanRunning', handlerInstall);\n socket.unsubscribeState('discovery.0.servicesProgress', handlerInstall);\n }\n }, [socket]);\n\n const stepUp = () => setStep(step + 1);\n\n const stepDown = () => setStep(step - 1);\n\n const extendObject = (id, data) =>\n socket.extendObject(id, data)\n .catch(error => window.alert(error));\n\n const discoverScanner = async () => {\n setDisableScanner(true);\n let dataArray = Object.keys(checkboxChecked).filter(key => checkboxChecked[key]);\n const resultList = await socket.sendTo('system.adapter.discovery.0', 'browse', dataArray);\n setDisableScanner(false);\n if (resultList.error) {\n window.alert(resultList.error)\n } else {\n setStep(1);\n }\n };\n\n const handleSelectAllClick = event => {\n if (event.target.checked) {\n const newSelected = discoveryData?.native?.newInstances?.map(n => n._id);\n setSelected(newSelected);\n return;\n }\n setSelected([]);\n };\n\n const isSelected = (name, arr) => arr.includes(name);\n\n const handleClick = (event, name, arr, func) => {\n const selectedIndex = arr.indexOf(name);\n let newSelected = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(arr, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(arr.slice(1));\n } else if (selectedIndex === arr.length - 1) {\n newSelected = newSelected.concat(arr.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n arr.slice(0, selectedIndex),\n arr.slice(selectedIndex + 1),\n );\n }\n\n func(newSelected);\n };\n\n const checkLicenseAndInputs = (objName, cb) => {\n const obj = JSON.parse(JSON.stringify(discoveryData?.native?.newInstances.find(obj => obj._id === objName)));\n let license = true;\n if (obj && obj.comment && obj.comment.license && obj.comment.license !== 'MIT') {\n license = false;\n if (!obj.common.licenseUrl) {\n obj.common.licenseUrl = `https://raw.githubusercontent.com/ioBroker/ioBroker.${obj.common.name}/master/LICENSE`\n }\n if (typeof obj.common.licenseUrl === 'object') {\n obj.common.licenseUrl = obj.common.licenseUrl[I18n.getLanguage()] || obj.common.licenseUrl.en;\n }\n if (obj.common.licenseUrl.includes('github.com')) {\n obj.common.licenseUrl = obj.common.licenseUrl.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\n }\n }\n\n licenseDialogFunc(license, theme, result => {\n if (!result) {\n // license not accepted, go to the next instance\n const index = selected.indexOf(obj._id) + 1;\n setInstallStatus(status => Object.assign({ ...status }, { [index]: 'error' }));\n\n setLogs(logsEl => Object.assign({ ...logsEl }, { [selected[index - 1]]: [I18n.t('Error: license not accepted')] }));\n\n if (selected.length > index) {\n setTimeout(() =>\n checkLicenseAndInputs(selected[index], () => {\n setCurrentInstall(index + 1);\n setCmdName('install');\n setInstallProgress(true);\n })\n , 100);\n } else {\n setFinishInstall(true);\n }\n } else\n if (obj.comment?.inputs) {\n generateInputsFunc(themeType, themeName, socket, obj, theme, () => {\n const index = selected.indexOf(obj._id) + 1;\n setInstallStatus(status => Object.assign({ ...status }, { [index]: 'error' }));\n\n setLogs(logsEl => Object.assign({ ...logsEl }, { [selected[index - 1]]: [I18n.t('Error: configuration dialog canceled')] }));\n\n if (selected.length > index) {\n setTimeout(() =>\n checkLicenseAndInputs(selected[index], () => {\n setCurrentInstall(index + 1);\n setCmdName('install');\n setInstallProgress(true);\n })\n , 100);\n } else {\n setFinishInstall(true);\n }\n }, params => {\n setInstancesInputsParams(params);\n cb();\n })\n } else {\n cb();\n }\n }, obj?.common?.licenseUrl);\n };\n\n const [installProgress, setInstallProgress] = useState(false);\n const [currentInstall, setCurrentInstall] = useState(1);\n const [installStatus, setInstallStatus] = useState({});\n const [cmdName, setCmdName] = useState('install');\n\n const resetStateBack = () => {\n setSelected([]);\n setInstallProgress(false);\n setFinishInstall(false);\n setCurrentInstall(1);\n setCmdName('install');\n setInstallStatus({});\n };\n\n const checkInstall = () => {\n checkLicenseAndInputs(selected[0], () => {\n setCurrentInstall(1);\n setInstallProgress(true);\n });\n };\n\n const [suggested, setSuggested] = useStateLocal(true, 'discovery.suggested');\n const [showAll, setShowAll] = useStateLocal(true, 'discovery.showAll');\n\n const black = themeType === 'dark';\n\n const [instancesInputsParams, setInstancesInputsParams] = useState({});\n const steps = ['Select methods', 'Create instances', 'Installation process'];\n const [logs, setLogs] = useState({});\n const [finishInstall, setFinishInstall] = useState(false);\n const [selectLogsIndex, setSelectLogsIndex] = useState(1);\n\n return <ThemeProvider theme={theme}>\n <Dialog\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n onClose();\n }\n }}\n open\n classes={{ paper: classes.paper }}\n >\n <h2 className={classes.heading}>\n <VisibilityIcon style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10\n }} />\n {I18n.t('Find devices and services')}\n </h2>\n <Stepper className={classes.stepper} alternativeLabel activeStep={step}>\n {steps.map((label) => (\n <Step key={label}>\n <StepLabel>{I18n.t(label)}</StepLabel>\n </Step>\n ))}\n </Stepper>\n <DialogContent className={clsx(classes.flex, classes.overflowHidden)} dividers>\n <div className={classes.root}>\n <TabPanel\n className={classes.overflowAuto}\n style={black ? { color: 'white' } : null}\n value={step}\n index={0}\n black={black}\n classes={classes}\n title={I18n.t('Discover all possible devices')}\n >\n {!disableScanner ? <> <div className={classes.headerText}>\n {I18n.t(`press_discover`)}\n </div>\n {discoveryData?.native?.lastScan && <div className={classes.descriptionHeaderText}>\n {I18n.t('Last scan on %s', Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat))}\n </div>}\n <div\n style={!black ? { color: 'white' } : null}\n className={classes.headerBlock}>\n {I18n.t('Use following methods:')}\n\n </div>\n {Object.keys(listMethods).map(key => <div key={key}><Checkbox\n checked={checkboxChecked[key]}\n disabled={disableScanner}\n onChange={(_, value) => {\n const newCheckboxChecked = JSON.parse(JSON.stringify(checkboxChecked));\n newCheckboxChecked[key] = value;\n (window._localStorage || window.localStorage).setItem('App.discoveryLastSelection', JSON.stringify(newCheckboxChecked));\n setCheckboxChecked(newCheckboxChecked)\n }}\n />{key}</div>)}</>\n : (scanRunning && <div>\n {devicesProgress >= 99 ? `Lookup services - ${servicesProgress}%` : `Lookup devices - ${devicesProgress}%`}\n {disableScanner && <LinearProgress variant=\"determinate\" value={devicesProgress >= 99 ? servicesProgress : devicesProgress} />}\n {devicesProgress >= 99 ? `${instancesFound} service(s) found` : `${devicesFound} device(s) found`}\n </div>)\n }\n </TabPanel>\n <TabPanel\n className={classes.overflowAuto}\n value={step}\n index={1}\n classes={classes}\n title={discoveryData?.native?.lastScan ?\n I18n.t('Create instances automatically - Last scan on %s', Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat))\n : I18n.t('Create instances automatically')\n }\n >\n <div className={classes.wrapperSwitch}>\n <div className={classes.divSwitch}>\n <div style={!showAll ? { color: 'green' } : null}>{I18n.t('hide ignored')}</div>\n <Switch\n checked={showAll}\n onChange={e => setShowAll(e.target.checked)}\n color=\"primary\"\n />\n <div style={showAll ? { color: 'green' } : null}>{I18n.t('show ignored')}</div>\n </div>\n <div className={clsx(classes.divSwitch, classes.marginLeft)}>\n <div style={!suggested ? { color: 'green' } : null}>{I18n.t('hide suggested')}</div>\n <Switch\n checked={suggested}\n onChange={e => setSuggested(e.target.checked)}\n color=\"primary\"\n />\n <div style={suggested ? { color: 'green' } : null}>{I18n.t('show suggested')}</div>\n </div>\n </div>\n <Paper className={classes.paperTable}>\n <TableContainer>\n <Table\n className={classes.table}\n size=\"small\"\n >\n <EnhancedTableHead\n classes={classes}\n numSelected={selected.length}\n onSelectAllClick={handleSelectAllClick}\n rowCount={discoveryData?.native?.newInstances?.length || 0}\n />\n <TableBody>\n {discoveryData?.native?.newInstances?.filter(el => {\n if (!suggested) {\n return !el.comment?.advice;\n }\n if (!showAll) {\n return !el?.comment?.ack;\n }\n return true;\n }).map((obj, idx) => <TableRow\n hover\n role=\"checkbox\"\n key={obj._id}\n selected={obj.comment?.advice}\n >\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected(obj._id, selected)}\n onClick={e => handleClick(e, obj._id, selected, setSelected)}\n />\n </TableCell>\n <TableCell component=\"th\" scope=\"row\" padding=\"none\">\n <div className={classes.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={obj._id.replace('system.adapter.', '')}\n src={repository[obj.common.name]?.icon}\n className={classes.instanceIcon}\n />\n <div className={classes.instanceId}>\n {obj._id.replace('system.adapter.', '')}\n </div>\n </div>\n </TableCell>\n <TableCell align=\"left\">{checkSelectHosts ?\n <SelectWithIcon\n fullWidth\n lang={I18n.getLanguage()}\n list={hosts}\n t={I18n.t}\n value={hostInstances[obj._id] || currentHost}\n themeType={themeType}\n onChange={val =>\n setHostInstances(Object.assign({ ...hostInstances }, { [obj._id]: val }))}\n />\n :\n '_'}</TableCell>\n <TableCell align=\"left\">{buildComment(obj.comment, I18n.t)}</TableCell>\n <TableCell align=\"right\" padding=\"checkbox\">\n <Checkbox\n checked={!!obj?.comment?.ack}\n onClick={e => {\n const newInstances = JSON.parse(JSON.stringify(discoveryData?.native.newInstances));\n newInstances[idx].comment = { ...newInstances[idx].comment, ack: !newInstances[idx].comment.ack };\n extendObject('system.discovery', { native: { newInstances } });\n }}\n />\n </TableCell>\n </TableRow>)}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </TabPanel>\n <TabPanel\n className={classes.overflowAuto}\n value={step}\n index={2}\n style={{ height: '100%' }}\n boxHeight\n classes={classes}\n title={I18n.t('Install adapters')}\n >\n <div style={{ display: 'flex', height: '100%' }}>\n <div>\n {selected.map((el, idx) => <div\n key={el}\n onClick={finishInstall ? () => setSelectLogsIndex(idx) : null}\n className={clsx(classes.headerBlockDisplayItem,\n finishInstall && classes.pointer,\n finishInstall && classes.hover,\n finishInstall && selectLogsIndex === idx && classes.activeBlock)}>\n <div className={classes.width200}>\n <div className={classes.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={el.replace('system.adapter.', '')}\n src={repository[el.replace('system.adapter.', '').split('.')[0]]?.icon}\n className={classes.instanceIcon}\n />\n <div className={classes.instanceId}>\n {el.replace('system.adapter.', '')}\n </div>\n </div></div>\n {currentInstall === idx + 1 && !installStatus[idx + 1] && <CircularProgress size={20} />}\n {installStatus[idx + 1] === 'error' ? <ReportProblemIcon className={classes.installError} /> : installStatus[idx + 1] === 'success' ? <AssignmentTurnedInIcon className={classes.installSuccess} /> : null}\n </div>)}\n </div>\n {currentInstall && (installProgress || finishInstall) && <div style={{ overflow: 'hidden', width: 'calc(100% - 260px)' }}>\n <Command\n noSpacing\n key={`${currentInstall}-${cmdName}`}\n ready\n host={currentHost}\n logsRead={finishInstall ? logs[selected[selectLogsIndex]] || ['skipped'] : null}\n showElement={!finishInstall}\n socket={socket}\n t={I18n.t}\n cmd={finishInstall ? '' : `${cmdName} ${selected[currentInstall - 1].replace('system.adapter.', '').split('.')[0]}`}\n onFinished={(_, logsSuccess) => {\n let data = JSON.parse(JSON.stringify(discoveryData?.native.newInstances.find(obj =>\n obj._id === selected[currentInstall - 1])));\n delete data.comment;\n\n let adapterId = data._id.split('.');\n adapterId.pop();\n adapterId = adapterId.join('.');\n socket.getObject(adapterId)\n .then(obj => {\n data = Object.assign({}, obj, data);\n data.common = Object.assign(obj.common, data.common);\n data.native = Object.assign(obj.native, data.native);\n data.type = 'instance';\n\n // set log level\n if (defaultLogLevel) {\n data.common.logLevel = defaultLogLevel;\n }\n data.common.logLevel = data.common.logLevel || 'info';\n\n if (instancesInputsParams.native && Object.keys(instancesInputsParams.native).length) {\n Object.assign(data.native, instancesInputsParams.native);\n setInstancesInputsParams({});\n }\n if (checkSelectHosts && hostInstances[data._id]) {\n data.common.host = hostInstances[data._id];\n }\n\n // write created instance\n extendObject(data._id, data)\n .then(() => {\n if (currentInstall < selected.length) {\n // install next\n checkLicenseAndInputs(selected[currentInstall], () => {\n setCurrentInstall(currentInstall + 1);\n setCmdName('install');\n });\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsSuccess });\n setInstallStatus(Object.assign({ ...installStatus }, { [currentInstall]: 'success' }));\n } else {\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsSuccess });\n setInstallStatus(Object.assign({ ...installStatus }, { [currentInstall]: 'success' }));\n setSelectLogsIndex(currentInstall - 1);\n let dataDiscovery = JSON.parse(JSON.stringify(discoveryData));\n if (dataDiscovery) {\n dataDiscovery.native.newInstances = dataDiscovery.native.newInstances.filter(({ _id }) => {\n const find = selected.find(el => el === _id);\n if (!find) {\n return true;\n }\n return installStatus[selected.indexOf(find) + 1] !== 'success';\n });\n socket.setObject('system.discovery', dataDiscovery);\n }\n setFinishInstall(true);\n window.alert(I18n.t('Finished'));\n }\n });\n });\n }}\n errorFunc={(el, logsError) => {\n if (el === 51 && cmdName === 'install') {\n return setCmdName('upload');\n }\n if (selected.length > currentInstall && cmdName === 'upload') {\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1));\n setInstallStatus(Object.assign({ ...installStatus }, { [currentInstall]: 'error' }));\n } else {\n if (selected.length > currentInstall) {\n setInstallStatus(Object.assign({ ...installStatus }, { [currentInstall]: 'error' }));\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1));\n setCmdName('install');\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n } else {\n setInstallStatus(Object.assign({ ...installStatus }, { [currentInstall]: 'error' }));\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n setFinishInstall(true);\n setSelectLogsIndex(currentInstall - 1);\n let dataDiscovery = JSON.parse(JSON.stringify(discoveryData));\n if (dataDiscovery) {\n dataDiscovery.native.newInstances = dataDiscovery.native.newInstances.filter(({ _id }) => {\n const find = selected.find(el => el === _id);\n if (!find) {\n return true;\n }\n return installStatus[selected.indexOf(find) + 1] !== 'success';\n });\n socket.setObject('system.discovery', dataDiscovery);\n }\n }\n window.alert(`error ${selected[currentInstall - 1]}`);\n }\n }}\n />\n </div>}\n </div>\n </TabPanel>\n </div>\n </DialogContent >\n <DialogActions>\n {step > 0 && step !== 4 && <Button\n variant=\"contained\"\n disabled={step === 0}\n onClick={() => {\n if (step === 2) {\n resetStateBack();\n }\n stepDown();\n }}\n color=\"grey\"\n startIcon={<NavigateBeforeIcon />}\n >\n {I18n.t('Back')}\n </Button>\n }\n {step === 0 && <Button\n variant=\"contained\"\n autoFocus\n disabled={disableScanner}\n onClick={discoverScanner}\n color=\"primary\"\n startIcon={<SearchIcon />}\n >\n {I18n.t('Discover')}\n </Button>}\n {step !== 2 && step !== 4 &&\n <Tooltip title={step === 0 ? I18n.t('Skip discovery process and go to install with last scan results') : ''}>\n <span style={{ marginLeft: 8 }}>\n <Button\n variant=\"contained\"\n disabled={!discoveryData || !discoveryData?.native?.lastScan || step === 2 || disableScanner || (step === 1 && !selected.length)}\n onClick={() => {\n stepUp();\n if (step === 1) {\n checkInstall();\n }\n }}\n color={step === 1 ? 'primary' : 'grey'}\n startIcon={step === 1 ? <LibraryAddIcon /> : <NavigateNextIcon />}\n >\n {I18n.t(step === 1 ? 'Create instances' : 'Use last scan')}\n </Button>\n </span>\n </Tooltip>\n }\n <Button\n variant=\"contained\"\n disabled={disableScanner}\n onClick={() => onClose()}\n color={step === 2 ? 'primary' : 'grey'}\n startIcon={<CloseIcon />}\n >\n {I18n.t(step === 2 ? 'Finish' : 'Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>;\n}\n\nexport default DiscoveryDialog;\n","import React, { Suspense } from 'react';\nimport { withStyles, StylesProvider, createGenerateClassName } from '@mui/styles';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\nimport clsx from 'clsx';\n\n// @mui/material\nimport AppBar from '@mui/material/AppBar';\nimport Avatar from '@mui/material/Avatar';\nimport Grid from '@mui/material/Grid';\nimport IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Snackbar from '@mui/material/Snackbar';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport { Hidden, Tooltip } from '@mui/material';\nimport Badge from '@mui/material/Badge';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Button from '@mui/material/Button';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\n\n// @material-ui/icons\nimport MenuIcon from '@mui/icons-material/Menu';\nimport BuildIcon from '@mui/icons-material/Build';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport PictureInPictureAltIcon from '@mui/icons-material/PictureInPictureAlt';\nimport UserIcon from '@mui/icons-material/Person';\nimport SyncIcon from '@mui/icons-material/CloudSync';\nimport SyncIconDisabled from '@mui/icons-material/SyncDisabled';\nimport CancelIcon from '@mui/icons-material/Close';\n\nimport ExpertIcon from '@iobroker/adapter-react-v5/icons/IconExpert';\n\nimport { AdminConnection as Connection, PROGRESS } from '@iobroker/socket-client';\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader';\nimport LoaderPT from '@iobroker/adapter-react-v5/Components/Loaders/PT';\nimport LoaderVendor from '@iobroker/adapter-react-v5/Components/Loaders/Vendor';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\nimport Utils from './components/Utils';//adapter-react/Components/Utils';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport theme from '@iobroker/adapter-react-v5/Theme';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport CommandDialog from './dialogs/CommandDialog';\nimport Drawer from './components/Drawer';\nimport { STATES as DrawerStates } from './components/Drawer';\nimport { DRAWER_FULL_WIDTH, DRAWER_COMPACT_WIDTH } from './components/Drawer';\nimport Connecting from './components/Connecting';\n\nimport WizardDialog from './dialogs/WizardDialog';\nimport SystemSettingsDialog from './dialogs/SystemSettingsDialog';\nimport Login from './login/Login';\nimport HostSelectors from './components/HostSelectors';\nimport { expertModeDialogFunc } from './dialogs/ExpertModeDialog';\nimport { checkMessages, newsAdminDialogFunc } from './dialogs/NewsAdminDialog';\nimport { hostWarningDialogFunc } from './dialogs/HostWarningDialog';\nimport ToggleThemeMenu from './components/ToggleThemeMenu';\nimport LogsWorker from './Workers/LogsWorker';\nimport InstancesWorker from './Workers/InstancesWorker';\nimport HostsWorker from './Workers/HostsWorker';\nimport AdaptersWorker from './Workers/AdaptersWorker';\nimport ObjectsWorker from './Workers/ObjectsWorker';\nimport DiscoveryDialog from './dialogs/DiscoveryDialog';\nimport SlowConnectionWarningDialog from './dialogs/SlowConnectionWarningDialog';\nimport IsVisible from './components/IsVisible';\n\n// Tabs\nconst Adapters = React.lazy(() => import('./tabs/Adapters'));\nconst Instances = React.lazy(() => import('./tabs/Instances'));\nconst Intro = React.lazy(() => import('./tabs/Intro'));\nconst Logs = React.lazy(() => import('./tabs/Logs'));\nconst Files = React.lazy(() => import('./tabs/Files'));\nconst Objects = React.lazy(() => import('./tabs/Objects'));\nconst Users = React.lazy(() => import('./tabs/Users'));\nconst Enums = React.lazy(() => import('./tabs/Enums'));\nconst CustomTab = React.lazy(() => import('./tabs/CustomTab'));\nconst Hosts = React.lazy(() => import('./tabs/Hosts'));\nconst EasyMode = React.lazy(() => import('./tabs/EasyMode'));\n\nconst query = {};\n(window.location.search || '').replace(/^\\?/, '').split('&').forEach(attr => {\n const parts = attr.split('=');\n if (!parts[0]) {\n return;\n }\n query[parts[0]] = parts[1] === undefined ? true : decodeURIComponent(parts[1]);\n});\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'iob',\n});\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n height: '100%',\n },\n appBar: {\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n logoWhite: {\n background: '#FFFFFF'\n },\n appBarShift: {\n width: `calc(100% - ${DRAWER_FULL_WIDTH}px)`,\n marginLeft: DRAWER_FULL_WIDTH,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n appBarShiftCompact: {\n width: `calc(100% - ${DRAWER_COMPACT_WIDTH}px)`,\n marginLeft: DRAWER_COMPACT_WIDTH,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n hide: {\n display: 'none'\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(1),\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowY: 'auto',\n marginTop: theme.mixins.toolbar?.minHeight,\n '@media (min-width:0px) and (orientation: landscape)': {\n marginTop: theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)']?.minHeight\n },\n '@media (min-width:600px)': {\n marginTop: theme.mixins.toolbar['@media (min-width:600px)']?.minHeight\n }\n },\n contentMargin: {\n marginLeft: -DRAWER_FULL_WIDTH,\n },\n contentMarginCompact: {\n marginLeft: -DRAWER_COMPACT_WIDTH,\n },\n contentShift: {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: 0\n },\n expertIcon: {\n width: 22,\n height: 22,\n //color: theme.palette.text ? theme.palette.text.disabled : 'grey'\n },\n expertIconActive: {\n //color: theme.palette.action.active\n },\n baseSettingsButton: {\n color: 'red',\n },\n alert_info: {\n\n },\n alert_error: {\n backgroundColor: '#f44336'\n },\n alert_success: {\n backgroundColor: '#4caf50'\n },\n avatarNotVisible: {\n opacity: 0,\n marginLeft: 5,\n transition: 'opacity 0.3s',\n width: 'initial'\n },\n avatarVisible: {\n opacity: 1\n },\n cmd: {\n animation: '1s linear infinite alternate $myEffect',\n opacity: 0.2,\n },\n '@keyframes myEffect': {\n '0%': {\n opacity: 0.2,\n transform: 'translateY(0)'\n },\n '100%': {\n opacity: 1,\n transform: 'translateY(-10%)'\n }\n },\n errorCmd: {\n color: '#a90000',\n animation: '0.2s linear infinite alternate $myEffect2',\n },\n performed: {\n color: theme.palette.mode === 'light' ? '#3bfd44' : '#388e3c',\n animation: '0.2s linear infinite alternate $myEffect2',\n },\n wrapperButtons: {\n display: 'flex',\n marginRight: 'auto',\n overflowY: 'auto'\n },\n '@keyframes myEffect2': {\n '0%': {\n opacity: 1,\n transform: 'translateX(0)'\n },\n '100%': {\n opacity: 0.7,\n transform: 'translateX(-2%)'\n }\n },\n\n flexGrow: {\n flexGrow: 2,\n },\n userBadge: {\n lineHeight: '48px'\n },\n userIcon: {\n borderRadius: 4,\n width: 48,\n height: 48,\n verticalAlign: 'middle',\n },\n userText: {\n verticalAlign: 'middle',\n fontSize: 16,\n maxWidth: 100,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'inline-block'\n },\n userBackground: {\n borderRadius: 4,\n backgroundColor: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n padding: 3,\n },\n styleVersion: {\n fontSize: 10,\n },\n wrapperName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: 10\n },\n expertBadge: {\n marginTop: 11,\n marginRight: 11,\n }\n});\n\nclass App extends Router {\n constructor(props) {\n super(props);\n\n window.alert = message => {\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n // init translations\n this.translations = {\n 'en': require('@iobroker/adapter-react-v5/i18n/en'),\n 'de': require('@iobroker/adapter-react-v5/i18n/de'),\n 'ru': require('@iobroker/adapter-react-v5/i18n/ru'),\n 'pt': require('@iobroker/adapter-react-v5/i18n/pt'),\n 'nl': require('@iobroker/adapter-react-v5/i18n/nl'),\n 'fr': require('@iobroker/adapter-react-v5/i18n/fr'),\n 'it': require('@iobroker/adapter-react-v5/i18n/it'),\n 'es': require('@iobroker/adapter-react-v5/i18n/es'),\n 'pl': require('@iobroker/adapter-react-v5/i18n/pl'),\n 'zh-cn': require('@iobroker/adapter-react-v5/i18n/zh-cn'),\n };\n\n const translations = {\n 'en': require('./i18n/en'),\n 'de': require('./i18n/de'),\n 'ru': require('./i18n/ru'),\n 'pt': require('./i18n/pt'),\n 'nl': require('./i18n/nl'),\n 'fr': require('./i18n/fr'),\n 'it': require('./i18n/it'),\n 'es': require('./i18n/es'),\n 'pl': require('./i18n/pl'),\n 'zh-cn': require('./i18n/zh-cn'),\n };\n // merge together\n Object.keys(translations).forEach(lang => this.translations[lang] = Object.assign(this.translations[lang], translations[lang]));\n\n // init translations\n I18n.setTranslations(this.translations);\n I18n.setLanguage((navigator.language || navigator.userLanguage || 'en').substring(0, 2).toLowerCase());\n\n this.refConfigIframe = null;\n this.refUser = React.createRef();\n this.refUserDiv = React.createRef();\n this.expireInSec = null;\n this.expireInSecInterval = null;\n this.expireText = I18n.t('Session expire in %s', '%s');\n this.adminGuiConfig = { admin: {menu: {}, settings: {}, adapters: {}, login: {} } };\n\n if (!query.login) {\n let drawerState = (window._localStorage || window.localStorage).getItem('App.drawerState');\n if (drawerState) {\n drawerState = parseInt(drawerState, 10);\n } else {\n drawerState = this.props.width === 'xs' ? DrawerStates.closed : DrawerStates.opened;\n }\n\n const theme = this.createTheme();\n\n // install setter for configNotSaved (used in javascript)\n Object.defineProperty(window,'configNotSaved',{\n get: () => this.state.configNotSaved,\n set: configNotSaved => {\n const allStored = !configNotSaved;\n if (allStored !== this.state.allStored) {\n this.setState({ allStored });\n }\n },\n configurable: true,\n });\n\n this.state = {\n connected: false,\n progress: 0,\n ready: false,\n lang: 'en',\n\n //Finished\n protocol: this.getProtocol(),\n hostname: window.location.hostname,\n port: this.getPort(),\n //---------\n\n allTabs: null,\n\n expertMode: false,\n\n states: {},\n hosts: [],\n currentHost: '',\n currentHostName: '',\n currentTab: Router.getLocation(),\n currentDialog: null,\n currentUser: '',\n subscribesStates: {},\n subscribesObjects: {},\n subscribesLogs: 0,\n systemConfig: null,\n user: null, // Logged in user\n\n repository: {},\n installed: {},\n\n objects: {},\n\n waitForRestart: false,\n tabs: null,\n config: {},\n\n stateChanged: false,\n\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme),\n\n alert: false,\n alertType: 'info',\n alertMessage: '',\n drawerState,\n\n tab: null,\n allStored: true,\n dataNotStoredDialog: false,\n dataNotStoredTab: '',\n\n baseSettingsOpened: false,\n unsavedDataInDialog: false,\n systemSettingsOpened: false,\n\n cmd: null,\n cmdDialog: false,\n commandHost: null,\n commandError: false,\n commandRunning: false,\n\n wizard: true,\n performed: false,\n\n discoveryAlive: false,\n\n readTimeoutMs: SlowConnectionWarningDialog.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n\n expireInSec: null,\n\n versionAdmin: '',\n\n forceUpdateAdapters: 0,\n\n noTranslation: (window._localStorage || window.localStorage).getItem('App.noTranslation') === 'true',\n\n cloudNotConnected: false,\n cloudReconnect: 0,\n\n showRedirect: false,\n redirectCountDown: 0,\n };\n this.logsWorker = null;\n this.instancesWorker = null;\n this.hostsWorker = null;\n } else {\n const theme = this.createTheme();\n this.state = {\n login: true,\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme)\n };\n }\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasGlobalError: error };\n }\n\n componentDidCatch(error, info) {\n this.setState({hasGlobalError: error, hasGlobalErrorInfo: info});\n }\n\n setUnsavedData(hasUnsavedData) {\n if (hasUnsavedData !== this.state.unsavedDataInDialog) {\n this.setState({ unsavedDataInDialog: hasUnsavedData });\n }\n }\n\n // If the background color must be inverted. Depends on current theme.\n mustInvertBackground(color) {\n if (!color) {\n return false;\n } else {\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && this.state.themeType === 'dark') {\n return true;\n }\n\n return invertedColor === '#000000' && this.state.themeType === 'light';\n }\n }\n\n localStorageGetItem = name => this.guiSettings.native.localStorage[name];\n\n localStorageSetItem = (name, value) => {\n if (value === null) {\n value = 'null';\n } else\n if (value === undefined) {\n return this.localStorageRemoveItem(name);\n }\n this.guiSettings.native.localStorage[name] = value.toString();\n this.localStorageSave();\n };\n\n localStorageRemoveItem = name => {\n if (this.guiSettings.native.localStorage.hasOwnProperty(name)) {\n delete this.guiSettings.native.localStorage[name];\n this.localStorageSave();\n }\n };\n\n sessionStorageGetItem = name => this.guiSettings.native.sessionStorage[name];\n\n sessionStorageSetItem = (name, value) => {\n if (value === null) {\n value = 'null';\n } else\n if (value === undefined) {\n return this.sessionStorageRemoveItem(name);\n }\n this.guiSettings.native.sessionStorage[name] = value.toString();\n this.localStorageSave();\n };\n\n sessionStorageRemoveItem = name => {\n if (this.guiSettings.native.sessionStorage.hasOwnProperty(name)) {\n delete this.guiSettings.native.sessionStorage[name];\n this.localStorageSave();\n }\n };\n\n localStorageSave() {\n this.localStorageTimer && clearTimeout(this.localStorageTimer);\n this.localStorageTimer = setTimeout(async () => {\n this.localStorageTimer = null;\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n }, 200);\n }\n\n toggleTranslation = () => {\n (window._localStorage || window.localStorage).setItem('App.noTranslation', this.state.noTranslation ? 'false' : 'true');\n this.setState({ noTranslation: !this.state.noTranslation })\n };\n\n getGUISettings() {\n return this.socket.getState(`system.adapter.${this.adminInstance}.guiSettings`)\n .catch(() => ({ val: false }))\n .then(state => {\n if (state && state.val) {\n return this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`)\n .then(obj => {\n this.guiSettings = obj || {type: 'state', common: {type: 'boolean', read: true, write: false, role: 'state'}};\n this.guiSettings.native = this.guiSettings.native || { localStorage: {}, sessionStorage: {} };\n if (!this.guiSettings.native.localStorage) {\n this.guiSettings.native = { localStorage: this.guiSettings.native, sessionStorage: {} };\n }\n\n window._localStorage = {\n getItem: this.localStorageGetItem,\n setItem: this.localStorageSetItem,\n removeItem: this.localStorageRemoveItem,\n };\n window._sessionStorage = {\n getItem: this.sessionStorageGetItem,\n setItem: this.sessionStorageSetItem,\n removeItem: this.sessionStorageRemoveItem,\n };\n\n // this is only settings, that initialized before connection established\n let drawerState = this.guiSettings.native['App.drawerState'];\n if (drawerState) {\n drawerState = parseInt(drawerState, 10);\n } else {\n drawerState = this.props.width === 'xs' ? DrawerStates.closed : DrawerStates.opened;\n }\n const noTranslation = (window._localStorage || window.localStorage).getItem('App.noTranslation') === 'true';\n\n this.setState({ guiSettings: true, drawerState, noTranslation }, () => {\n if (Utils.getThemeName() !== this.state.theme.name) {\n this.toggleTheme(Utils.getThemeName());\n }\n });\n });\n } else if (this.state.guiSettings) {\n window._localStorage = null;\n window._sessionStorage = null;\n\n this.setState({ guiSettings: false });\n }\n });\n }\n\n enableGuiSettings(enabled, ownSettings) {\n if (enabled && !this.guiSettings) {\n return this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`)\n .then(async obj => {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, { val: true, ack: true });\n\n this.guiSettings = obj || {type: 'state', common: {type: 'boolean', read: true, write: false, role: 'state'}};\n\n if (ownSettings || !this.guiSettings.native || !Object.keys(this.guiSettings.native).length) {\n this.guiSettings.native = { localStorage: {}, sessionStorage: {} };\n Object.keys(window.localStorage).forEach(name => {\n if (name !== 'getItem' && name !== 'setItem' && name !== 'removeItem' && name !== 'clear' && name !== 'key' && name !== 'length') {\n this.guiSettings.native.localStorage[name] = window.localStorage.getItem(name);\n }\n });\n Object.keys(window.sessionStorage).forEach(name => {\n if (name !== 'getItem' && name !== 'setItem' && name !== 'removeItem' && name !== 'clear' && name !== 'key' && name !== 'length') {\n this.guiSettings.native.sessionStorage[name] = window.sessionStorage.getItem(name);\n }\n });\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n } else {\n window.location.reload();\n }\n\n await this.getGUISettings();\n });\n } else if (!enabled && this.guiSettings) {\n window._localStorage = null;\n window._sessionStorage = null;\n\n // clear localStorage\n Object.keys(window.localStorage).forEach(key => window.localStorage.removeItem(key));\n Object.keys(window.sessionStorage).forEach(key => window.sessionStorage.removeItem(key));\n\n Object.keys(this.guiSettings.native.localStorage).forEach(name => window.localStorage.setItem(name, this.guiSettings.native.localStorage[name]));\n Object.keys(this.guiSettings.native.sessionStorage).forEach(name => window.sessionStorage.setItem(name, this.guiSettings.native.sessionStorage[name]));\n\n this.guiSettings = null;\n\n return this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, { val: false, ack: true })\n .catch(e => window.alert('Cannot disable settings'))\n .then(() => this.setState({ guiSettings: false }));\n }\n }\n\n componentDidMount() {\n if (!this.state.login) {\n window.addEventListener('hashchange', this.onHashChanged, false);\n\n if (!this.state.currentTab.tab) {\n this.handleNavigation('tab-intro');\n } else {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n this.socket = new Connection({\n name: 'admin',\n admin5only: true,\n port: this.getPort(),\n autoSubscribes: ['system.adapter.*'], // do not subscribe on '*' and really we don't need a 'system.adapter.*' too. Every tab must subscribe itself on everything that it needs\n autoSubscribeLog: true,\n onProgress: progress => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({\n connected: false\n });\n } else if (progress === PROGRESS.READY) {\n // BF: (2022.05.09) here must be this.socket.getVersion(true), but I have no Idea, why it does not work :(\n this.socket._socket.emit('getVersion', async (err, version) => {\n if (err) {\n console.error(`Cannot read version: ${err}`);\n if (err === 'ioBroker is not connected') {\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1000);\n\n return this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n } else if (!version) {\n return window.alert(err);\n }\n }\n\n console.log(`Stored version: ${this.state.versionAdmin}, new version: ${version}`);\n if (this.state.versionAdmin && this.state.versionAdmin !== version) {\n window.alert('New adapter version detected. Reloading...');\n setTimeout(() => window.location.reload(), 500);\n }\n\n // read settings anew\n await this.getGUISettings();\n\n const newState = {\n connected: true,\n progress: 100,\n versionAdmin: version\n };\n\n if (this.state.cmd && this.state.cmd.match(/ admin(@[-.\\w]+)?$/)) {\n // close command dialog after reconnect (maybe admin was restarted and update is now finished)\n newState.commandRunning = false;\n newState.forceUpdateAdapters = this.state.forceUpdateAdapters + 1;\n\n this.closeCmdDialog(() => {\n this.setState(newState);\n window.location.reload();\n });\n } else {\n try {\n const adminObj = await this.socket.getObject('system.adapter.' + this.adminInstance);\n // use instance language\n if (adminObj?.native?.language) {\n if (adminObj.native.language !== I18n.getLanguage()) {\n console.log('Language changed to ' + adminObj.native.language);\n I18n.setLanguage(adminObj.native.language);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } else if (this.socket.systemLang !== I18n.getLanguage()) {\n console.log('Language changed to ' + this.socket.systemLang);\n I18n.setLanguage(this.socket.systemLang);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } catch (e) {\n console.error('Cannot read admin settings: ' + e);\n }\n\n this.setState(newState);\n }\n });\n } else {\n this.setState({\n connected: true,\n progress: Math.round(PROGRESS.READY / progress * 100)\n });\n }\n },\n onReady: async objects => {\n // Combine adminGuiConfig with user settings\n this.adminGuiConfig = Object.assign({admin: {menu: {}, settings: {}, adapters: {}, login: {}}}, this.socket.systemConfig.native?.vendor);\n this.adminGuiConfig.admin.menu = this.adminGuiConfig.admin.menu || {};\n this.adminGuiConfig.admin.settings = this.adminGuiConfig.admin.settings || {};\n this.adminGuiConfig.admin.adapters = this.adminGuiConfig.admin.adapters || {};\n this.adminGuiConfig.admin.login = this.adminGuiConfig.admin.login || {};\n\n this.socket.getCurrentInstance()\n .then(adminInstance => {\n this.adminInstance = adminInstance;\n return this.socket.getObject('system.adapter.' + adminInstance);\n })\n .then(adminObj => {\n // use instance language\n if (adminObj?.native?.language) {\n I18n.setLanguage(adminObj.native.language);\n } else {\n I18n.setLanguage(this.socket.systemLang);\n }\n this.languageSet = true;\n return this.socket.getIsEasyModeStrict();\n })\n .then(async isStrict => {\n await this.getGUISettings();\n\n if (isStrict) {\n return this.socket.getEasyMode()\n .then(config => {\n this.setState({\n lang: this.socket.systemLang,\n ready: true,\n strictEasyMode: true,\n easyModeConfigs: config.configs,\n objects,\n });\n });\n } else {\n // create Workers\n this.logsWorker = this.logsWorker || new LogsWorker(this.socket, 1000);\n this.instancesWorker = this.instancesWorker || new InstancesWorker(this.socket);\n this.hostsWorker = this.hostsWorker || new HostsWorker(this.socket);\n this.adaptersWorker = this.adaptersWorker || new AdaptersWorker(this.socket);\n this.objectsWorker = this.objectsWorker || new ObjectsWorker(this.socket);\n\n const newState = {\n lang: this.socket.systemLang,\n ready: true,\n objects,\n };\n\n try {\n newState.systemConfig = await this.socket.getCompactSystemConfig();\n newState.wizard = !newState.systemConfig.common.licenseConfirmed;\n await this.findCurrentHost(newState);\n await this.readRepoAndInstalledInfo(newState.currentHost, newState.hosts);\n } catch (error) {\n console.log(error);\n }\n\n this.adaptersWorker.registerRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker.registerHandler(this.adaptersChangeHandler);\n this.hostsWorker.registerHandler(this.updateHosts);\n\n this.subscribeOnHostsStatus();\n\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem('App.expertMode');\n newState.expertMode = storedExpertMode ? storedExpertMode === 'true' : !!newState.systemConfig.common.expertMode;\n\n // Read user and show him\n if (this.socket.isSecure || this.socket.systemConfig.native?.vendor) {\n this.socket.getCurrentUser()\n .then(user => {\n this.socket.getObject('system.user.' + user)\n .then(userObj => {\n if (userObj.native?.vendor) {\n Object.assign(this.adminGuiConfig, userObj.native.vendor);\n }\n\n if (this.socket.isSecure) {\n this.setState({\n user: {\n id: userObj._id,\n name: Utils.getObjectNameFromObj(userObj, this.socket.systemLang),\n color: userObj.common.color,\n icon: userObj.common.icon,\n invertBackground: this.mustInvertBackground(userObj.common.color)\n }\n });\n\n // start ping interval\n this.makePingAuth();\n }\n })\n })\n .catch(error => {\n console.error(error);\n this.showAlert(error, 'error');\n });\n }\n\n this.setState(newState, () =>\n this.setCurrentTabTitle());\n\n this.socket.subscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n // Give some time for communication\n setTimeout(() =>\n this.logsWorkerChanged(this.state.currentHost), 1000);\n\n setTimeout(() =>\n this.findNewsInstance()\n .then(instance => this.socket.subscribeState(`admin.${instance}.info.newsFeed`, this.getNews(instance))),\n 5000);\n\n setTimeout(() =>\n this.hostsWorker.getNotifications(newState.currentHost)\n .then(notifications => this.showAdaptersWarning(notifications, this.socket, newState.currentHost)),\n 3000);\n }\n })\n .catch(error => {\n console.error(error);\n this.showAlert(error, 'error');\n });\n },\n //onObjectChange: (objects, scripts) => this.onObjectChange(objects, scripts),\n onError: error => {\n console.error(error);\n error = error.message || error.toString();\n if (error === 'ioBroker is not connected') {\n if (!this.state.cloudNotConnected) {\n this.showAlert(I18n.t(error), 'error');\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1000);\n\n return this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n } else {\n this.showAlert(error, 'error');\n }\n }\n });\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('hashchange', this.onHashChanged, false);\n this.socket && this.socket.unsubscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n this.adaptersWorker && this.adaptersWorker.unregisterRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker && this.adaptersWorker.unregisterHandler(this.adaptersChangeHandler);\n this.hostsWorker && this.hostsWorker.unregisterHandler(this.updateHosts);\n\n this.pingAuth && clearTimeout(this.pingAuth);\n this.pingAuth = null;\n this.expireInSecInterval && clearInterval(this.expireInSecInterval);\n this.expireInSecInterval = null;\n this.unsubscribeOnHostsStatus();\n\n // restore localstorage\n if (this._localStorage) {\n window._localStorage = null;\n window._sessionStorage = null;\n }\n }\n\n updateHosts = (hostId, obj) => {\n const hosts = JSON.parse(JSON.stringify(this.state.hosts));\n\n if (!Array.isArray(hostId)) {\n hostId = { id: hostId, obj, type: obj ? 'changed' : 'delete' };\n }\n\n Promise.all(hostId.map(async event => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n // new\n hosts.push(event.obj);\n }\n }))\n .then(() => {\n const newState = { hosts };\n this.setState(newState);\n });\n };\n\n repoChangeHandler = () => {\n this.readRepoAndInstalledInfo(this.state.currentHost, null, true)\n .then(() => console.log('Repo updated!'));\n }\n\n adaptersChangeHandler = events => {\n // update installed\n //\n const installed = JSON.parse(JSON.stringify(this.state.installed));\n let changed = false;\n events.forEach(event => {\n const parts = event.id.split('.');\n const adapter = parts[2];\n if (event.type === 'delete' || !event.obj) {\n if (installed[adapter]) {\n changed = true;\n delete installed[adapter];\n }\n } else {\n if (installed[adapter]) {\n Object.keys(installed[adapter])\n .forEach(attr => {\n if (installed[adapter][attr] !== event.obj.common[attr]) {\n installed[adapter][attr] = event.obj.common[attr];\n changed = true;\n }\n });\n } else {\n installed[adapter] = {version: event.obj.common.version};\n changed = true;\n }\n }\n });\n\n changed && this.setState({installed});\n }\n\n async findCurrentHost(newState) {\n newState.hosts = await this.socket.getCompactHosts();\n\n if (!this.state.currentHost) {\n const currentHost = (window._localStorage || window.localStorage).getItem('App.currentHost');\n\n const itemHost = newState.hosts.find(host => host._id === currentHost);\n\n if (currentHost && itemHost) {\n newState.currentHost = itemHost._id;\n newState.currentHostName = itemHost.common?.name || itemHost._id.replace('system.host.', '');\n } else {\n newState.currentHost = newState.hosts[0]._id;\n newState.currentHostName = newState.hosts[0].common?.name || newState.hosts[0]._id.replace('system.host.', '');\n }\n }\n\n // Check that host is alive\n let alive;\n try {\n alive = await this.socket.getState(newState.currentHost + '.alive');\n } catch (e) {\n alive = null;\n console.warn(`Cannot get state ${newState.currentHost}.alive: ${e}`);\n }\n\n if (!alive || !alive.val) {\n // find first alive host\n for (let h = 0; h < newState.hosts.length; h++) {\n alive = await this.socket.getState(newState.hosts[h]._id + '.alive');\n if (alive && alive.val) {\n newState.currentHost = newState.hosts[h]._id;\n newState.currentHostName = newState.hosts[h].common.name;\n }\n }\n }\n }\n\n updateExpireIn() {\n const now = Date.now();\n this.expireInSec -= (now - this.lastExecution) / 1000;\n const time = Utils.formatTime(this.expireInSec);\n if (this.refUser.current) {\n this.refUser.current.title = this.expireText.replace('%s', time);\n }\n if (this.expireInSec < 120 && this.refUserDiv.current) {\n this.refUserDiv.current.innerHTML = time;\n this.refUserDiv.current.style.color = '#F44';\n }\n\n if (this.expireInSec <= 0) {\n window.alert('Session expired');\n // reconnect\n setTimeout(() =>\n window.location.reload(false), 1000);\n }\n\n this.lastExecution = now;\n }\n\n makePingAuth() {\n this.pingAuth && clearTimeout(this.pingAuth);\n this.pingAuth = null;\n\n this.socket.getCurrentSession()\n .then(data => {\n if (data) {\n if (!this.expireInSecInterval) {\n this.expireInSecInterval = setInterval(() => this.updateExpireIn(), 1000);\n }\n this.expireInSec = data.expireInSec;\n this.lastExecution = Date.now();\n this.updateExpireIn();\n }\n\n /*this.pingAuth = setTimeout(() => {\n this.pingAuth = null;\n this.makePingAuth();\n }, 30000);*/\n })\n .catch(e => {\n window.alert('Session timeout: ' + e);\n // reconnect\n setTimeout(() =>\n window.location.reload(false), 1000);\n })\n }\n\n onDiscoveryAlive = (name, value) => {\n if (!!(value && !!value.val) !== this.state.discoveryAlive) {\n this.setState({ discoveryAlive: !!(value && !!value.val) });\n }\n }\n\n getDiscoveryModal = () => {\n return <DiscoveryDialog\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n currentHost={this.state.currentHost}\n defaultLogLevel={this.state.systemConfig.common.defaultLogLevel}\n repository={this.state.repository}\n hosts={this.state.hosts}\n onClose={() => Router.doNavigate(null)}\n />;\n }\n\n findNewsInstance = () => {\n const maxCount = 200;\n return new Promise(async resolve => {\n for (let instance = 0; instance < maxCount; instance++) {\n try {\n let adminAlive = await this.socket.getState(`system.adapter.admin.${instance}.alive`);\n if (adminAlive && adminAlive.val) {\n resolve(instance);\n break;\n }\n } catch (error) {\n console.error(error);\n this.showAlert(error, 'error');\n }\n }\n resolve(0);\n });\n }\n\n showAdaptersWarning = (notifications, socket, host) => {\n if (!notifications || !notifications[host] || !notifications[host].result) {\n return Promise.resolve();\n }\n\n const result = notifications[host].result;\n\n if (result && result.system && Object.keys(result.system.categories).length) {\n return this.instancesWorker.getInstances()\n .then(instances => {\n hostWarningDialogFunc(\n result.system.categories,\n this.state.systemConfig.common.dateFormat,\n this.state.themeType,\n this.state.themeName,\n instances,\n this.state.theme,\n name => socket.clearNotifications(host, name)\n );\n });\n } else {\n return Promise.resolve();\n }\n }\n\n getNews = instance => async (name, newsFeed) => {\n try {\n const lastNewsId = await this.socket.getState(`admin.${instance}.info.newsLastId`);\n if (newsFeed && newsFeed.val) {\n let news = null;\n try {\n news = JSON.parse(newsFeed?.val);\n } catch (error) {\n console.error('Cannot parse news: ' + newsFeed?.val);\n }\n\n if (news && news.length && news[0].id !== lastNewsId?.val) {\n this.socket.getUuid()\n .then(uuid => this.socket.getHostInfo(this.state.currentHost)\n .catch(() => null)\n .then(info => this.socket.getCompactInstances()\n .catch(() => null)\n .then(instances => {\n const checkNews = checkMessages(news, lastNewsId?.val, {\n lang: I18n.getLanguage(),\n adapters: this.state.adapters,\n instances: instances || [],\n nodeVersion: info ? info['Node.js'] || '?' : '?',\n npmVersion: info ? info.NPM || '?' : '?',\n os: info ? info.os || '?' : '?',\n activeRepo: this.state.systemConfig.common.activeRepo,\n uuid\n });\n\n if (checkNews && checkNews.length) {\n newsAdminDialogFunc(checkNews, lastNewsId?.val, this.state.themeName, this.state.themeType, this.state.theme, id =>\n this.socket.setState(`admin.${instance}.info.newsLastId`, { val: id, ack: true }));\n }\n })));\n }\n }\n\n } catch (error) {\n console.error(error);\n this.showAlert(error, 'error');\n }\n }\n\n renderSlowConnectionWarning() {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n } else {\n return <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={I18n.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({showSlowConnectionWarning: false, readTimeoutMs}, () =>\n this.readRepoAndInstalledInfo(this.state.currentHost));\n } else {\n this.setState({showSlowConnectionWarning: false});\n }\n }}\n />;\n }\n }\n\n readRepoAndInstalledInfo = async (currentHost, hosts, update) => {\n hosts = hosts || this.state.hosts;\n let repository;\n let installed;\n\n return this.socket.getCompactRepository(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert('Cannot getRepositoryCompact: ' + e);\n e.toString().includes('timeout') && this.setState({showSlowConnectionWarning: true});\n return {};\n })\n .then(_repository => {\n repository = _repository;\n return this.socket.getCompactInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert('Cannot getInstalled: ' + e);\n e.toString().includes('timeout') && this.setState({showSlowConnectionWarning: true});\n return {};\n });\n })\n .then(_installed => {\n installed = _installed;\n return this.socket.getCompactAdapters(update)\n .catch(e => window.alert('Cannot read adapters: ' + e));\n })\n .then(adapters => {\n installed && adapters && Object.keys(adapters).forEach(id => {\n if (installed[id] && adapters[id].iv) {\n installed[id].ignoreVersion = adapters[id].iv;\n }\n });\n\n this.setState({ repository, installed, hosts, adapters });\n });\n }\n\n logsWorkerChanged = currentHost => {\n this.logsWorker && this.logsWorker.setCurrentHost(currentHost);\n }\n\n onHostStatusChanged = (id, state) => {\n const host = this.state.hosts.find(_id => id + '.alive' === id);\n if (host) {\n // TODO!! => update hostSelector\n console.log(`Current status ${id}: ${state?.val}`);\n }\n };\n\n subscribeOnHostsStatus(hosts) {\n hosts = hosts || this.state.hosts;\n hosts.forEach(item =>\n this.socket.subscribeState(item._id + '.alive', this.onHostStatusChanged));\n }\n\n unsubscribeOnHostsStatus() {\n this.state.hosts && this.socket && this.state.hosts.forEach(item =>\n this.socket.unsubscribeState(item._id + '.alive', this.onHostStatusChanged));\n }\n\n /**\n * Updates the current currentTab in the states\n */\n onHashChanged = el => {\n this.setState({\n currentTab: Router.getLocation()\n }, () => this.setCurrentTabTitle());\n }\n\n /**\n * Get the used port\n */\n getPort() {\n let port = parseInt(window.location.port, 10);\n\n if (isNaN(port)) {\n switch (this.getProtocol()) {\n case 'https:':\n port = 443;\n break;\n case 'http:':\n port = 80;\n break;\n default:\n break;\n }\n }\n\n if (!port || port === 3000) {\n port = 8081;\n }\n\n return port;\n }\n\n /**\n * Get the used protocol\n */\n getProtocol() {\n return window.location.protocol;\n }\n\n /**\n * Get a theme\n * @param {string} name Theme name\n * @returns {Theme}\n */\n createTheme(name) {\n return theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n * @param {Theme} theme Theme\n * @returns {string} Theme name\n */\n getThemeName(theme) {\n return theme.name;\n }\n\n /**\n * Get the theme type\n * @param {Theme} theme Theme\n * @returns {string} Theme type\n */\n getThemeType(theme) {\n return theme.palette.mode;\n }\n\n /**\n * Changes the current theme\n */\n toggleTheme = currentThemeName => {\n const themeName = this.state.themeName;\n\n const newThemeName = currentThemeName || Utils.toggleTheme(themeName);\n\n const theme = this.createTheme(newThemeName);\n\n this.setState({\n theme: theme,\n themeName: newThemeName,\n themeType: this.getThemeType(theme)\n }, () => {\n this.refConfigIframe?.contentWindow?.postMessage('updateTheme', '*');\n });\n }\n\n async onObjectChange(id, obj) {\n console.log('OBJECT: ' + id);\n if (obj) {\n this.setState(prevState => {\n const objects = prevState.objects;\n objects[id] = obj;\n\n return { objects };\n });\n } else {\n this.setState(prevState => {\n const objects = prevState.objects;\n delete objects[id];\n\n return { objects };\n });\n }\n }\n\n setCurrentTabTitle() {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n setTitle(title) {\n document.title = title + ' - ' + (this.state.currentHostName || 'ioBroker');\n }\n\n getCurrentTab() {\n if (this.state && this.state.currentTab && this.state.currentTab.tab) {\n if (this.state.currentTab.tab === 'tab-adapters') {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n const compact = !small && (this.state.drawerState === DrawerStates.compact);\n const opened = !small && (this.state.drawerState === DrawerStates.opened);\n const closed = small || (this.state.drawerState === DrawerStates.closed);\n\n return <Suspense fallback={<Connecting />}>\n <Adapters\n key={`adapters`}\n forceUpdateAdapters={this.state.forceUpdateAdapters}\n theme={this.state.theme}\n themeName={this.state.themeName}\n adaptersWorker={this.adaptersWorker}\n instancesWorker={this.instancesWorker}\n themeType={this.state.themeType}\n systemConfig={this.state.systemConfig}\n socket={this.socket}\n hosts={this.state.hosts}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n lang={I18n.getLanguage()}\n expertMode={this.state.expertMode}\n executeCommand={(cmd, host, cb) => this.executeCommand(cmd, host, cb)}\n commandRunning={this.state.commandRunning}\n onSetCommandRunning={commandRunning => this.setState({ commandRunning })}\n menuOpened={opened}\n menuClosed={closed}\n menuCompact={compact}\n adminGuiConfig={this.adminGuiConfig}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-instances') {\n return <Suspense fallback={<Connecting />}>\n <Instances\n key=\"instances\"\n menuPadding={this.state.drawerState === DrawerStates.closed ? 0 : (this.state.drawerState === DrawerStates.opened ? DRAWER_FULL_WIDTH : DRAWER_COMPACT_WIDTH)}\n socket={this.socket}\n instancesWorker={this.instancesWorker}\n lang={I18n.getLanguage()}\n\n protocol={this.state.protocol}\n hostname={this.state.hostname}\n port={this.state.port}\n adminInstance={this.adminInstance}\n repository={this.state.repository}\n\n hosts={this.state.hosts}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n currentHostName={this.state.currentHostName}\n t={I18n.t}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n width={this.props.width}\n configStored={value => this.allStored(value)}\n executeCommand={(cmd, host, cb) => this.executeCommand(cmd, host, cb)}\n inBackgroundCommand={this.state.commandError || this.state.performed}\n\n onRegisterIframeRef={ref => this.refConfigIframe = ref}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-intro') {\n return <Suspense fallback={<Connecting />}>\n <Intro\n key=\"intro\"\n\n protocol={this.state.protocol}\n hostname={this.state.hostname}\n port={this.state.port}\n adminInstance={this.adminInstance}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n\n showAlert={(message, type) => this.showAlert(message, type)}\n socket={this.socket}\n t={I18n.t}\n lang={I18n.getLanguage()}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-logs') {\n return <Suspense fallback={<Connecting />}>\n <Logs\n key=\"logs\"\n t={I18n.t}\n lang={this.state.lang}\n socket={this.socket}\n themeType={this.state.themeType}\n ready={this.state.ready}\n logsWorker={this.logsWorker}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n hostsWorker={this.hostsWorker}\n clearErrors={cb => this.clearLogErrors(cb)}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-files') {\n return <Suspense fallback={<Connecting />}>\n <Files\n key=\"files\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-users') {\n return <Suspense fallback={<Connecting />}>\n <Users\n key=\"users\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-enums') {\n return <Suspense fallback={<Connecting />}>\n <Enums\n key=\"enums\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-objects') {\n return <Suspense fallback={<Connecting />}>\n <Objects\n key=\"objects\"\n t={I18n.t}\n theme={this.state.theme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n objectsWorker={this.objectsWorker}\n lang={I18n.getLanguage()}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n />\n </Suspense>;\n } else if (this.state.currentTab.tab === 'tab-hosts') {\n return <Suspense fallback={<Connecting />}>\n <Hosts\n socket={this.socket}\n lang={I18n.getLanguage()}\n\n hostsWorker={this.hostsWorker}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n\n themeName={this.state.themeName}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n t={I18n.t}\n navigate={Router.doNavigate}\n currentHost={this.state.currentHost}\n executeCommand={(cmd, host, cb) => this.executeCommand(cmd, host, cb)}\n systemConfig={this.state.systemConfig}\n showAdaptersWarning={this.showAdaptersWarning}\n />\n </Suspense>;\n } else {\n const m = this.state.currentTab.tab.match(/^tab-([-\\w\\d]+)(-\\d+)?$/);\n if (m) {\n /*const adapter = m[1];\n const instance = m[2] ? parseInt(m[2], 10) : null;\n\n let link = tab.common.adminTab.link || '/adapter/' + tab.common.name + '/tab.html';\n if (tab.common.materializeTab) {\n link = tab.common.adminTab.link || '/adapter/' + tab.common.name + '/tab_m.html';\n }*/\n\n // /adapter/javascript/tab.html\n return <Suspense fallback={<Connecting />}>\n <CustomTab\n key={this.state.currentTab.tab}\n t={I18n.t}\n\n protocol={this.state.protocol}\n hostname={this.state.hostname}\n port={this.state.port}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n\n instancesWorker={this.instancesWorker}\n tab={this.state.currentTab.tab}\n themeName={this.state.themeName}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={ref => this.refConfigIframe = ref}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>;\n }\n }\n }\n\n return null;\n }\n\n clearLogErrors = async () => {\n this.logsWorker.resetErrors();\n this.logsWorker.resetWarnings();\n }\n\n getCurrentDialog() {\n if (this.state && this.state.currentTab && this.state.currentTab.dialog) {\n if (this.state.currentTab.dialog === 'system') {\n return this.getSystemSettingsDialog();\n } else if (this.state.currentTab.dialog === 'discovery') {\n return this.getDiscoveryModal();\n }\n }\n return null;\n }\n\n getSystemSettingsDialog() {\n return <SystemSettingsDialog\n adminGuiConfig={this.adminGuiConfig}\n width={this.props.width}\n currentHost={this.state.currentHost}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n key=\"systemSettings\"\n onClose={() => Router.doNavigate(null)}\n lang={this.state.lang}\n showAlert={(message, type) => this.showAlert(message, type)}\n socket={this.socket}\n currentTab={this.state.currentTab}\n instance={this.state.instance}\n expertModeFunc={value => {\n (window._sessionStorage || window.sessionStorage).removeItem('App.expertMode');\n const systemConfig = JSON.parse(JSON.stringify(this.state.systemConfig));\n systemConfig.common.expertMode = value;\n this.setState({ expertMode: value, systemConfig });\n }}\n t={I18n.t}\n />;\n }\n\n handleAlertClose(event, reason) {\n if (reason === 'clickaway') {\n return;\n }\n\n this.setState({ alert: false });\n }\n\n showAlert(message, type) {\n if (type !== 'error' && type !== 'warning' && type !== 'info' && type !== 'success') {\n type = 'info';\n }\n\n this.setState({\n alert: true,\n alertType: type,\n alertMessage: message\n });\n }\n\n handleDrawerState(state) {\n (window._localStorage || window.localStorage).setItem('App.drawerState', state);\n this.setState({\n drawerState: state\n });\n }\n\n logout() {\n if (window.location.port === '3000') {\n window.location = `${window.location.protocol}//${window.location.hostname}:8081/logout?dev`;\n } else {\n window.location = `./logout?origin=${window.location.pathname}`;\n }\n }\n\n handleNavigation(tab) {\n if (tab) {\n if (this.state.allStored) {\n\n Router.doNavigate(tab);\n\n this.setState({ currentTab: Router.getLocation() });\n } else {\n this.setState({\n dataNotStoredDialog: true,\n dataNotStoredTab: tab\n });\n }\n }\n\n if (this.props.width === 'xs' || this.props.width === 'sm') {\n this.handleDrawerState(DrawerStates.closed);\n }\n\n tab = tab || (this.state.currentTab && this.state.currentTab.tab) || '';\n\n this.setTitle(tab.replace('tab-', ''));\n }\n\n allStored(value) {\n this.setState({\n allStored: value\n });\n };\n\n closeDataNotStoredDialog() {\n this.setState({ dataNotStoredDialog: false });\n }\n\n confirmDataNotStored() {\n this.setState({\n dataNotStoredDialog: false,\n allStored: true\n }, () =>\n this.handleNavigation(this.state.dataNotStoredTab));\n }\n\n executeCommand(cmd, host, callback) {\n if (typeof host === 'boolean') {\n callback = host;\n host = null;\n }\n\n if (this.state.performed || this.state.commandError) {\n return this.setState({\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: false,\n commandHost: null,\n }, () =>\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n }));\n } else {\n console.log('Execute: ' + cmd);\n\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n commandHost: host || this.state.currentHost,\n });\n }\n }\n\n closeCmdDialog(cb) {\n this.setState({\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: false,\n commandHost: null,\n }, () => cb && cb());\n }\n\n renderWizardDialog() {\n if (this.state.wizard) {\n return <WizardDialog\n socket={this.socket}\n themeName={this.state.themeName}\n toggleTheme={this.toggleTheme}\n t={I18n.t}\n lang={I18n.getLanguage()}\n onClose={redirect => {\n this.setState({ wizard: false, showRedirect: redirect, redirectCountDown: 10 }, () => {\n if (this.state.showRedirect) {\n setInterval(() => {\n if (this.state.redirectCountDown > 0) {\n this.setState({ redirectCountDown: this.state.redirectCountDown - 1 });\n } else {\n window.location = this.state.showRedirect;\n }\n }, 1000);\n }\n })\n }}\n />;\n }\n }\n\n showRedirectDialog() {\n if (this.state.showRedirect) {\n return <Dialog\n open={true}\n onClose={() => {}}\n >\n <DialogTitle>{I18n.t('Waiting for admin restart...')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {I18n.t('Redirect in %s second(s)', this.state.redirectCountDown)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {window.sidebar || (window.opera && window.print) || (document.all && window.external?.AddFavorite) ? <Button onClick={() => {\n if (window.sidebar) {\n // Firefox\n window.sidebar.addPanel('ioBroker.admin', this.state.showRedirect, '');\n } else if (window.opera && window.print) {\n // Opera\n var elem = document.createElement('a');\n elem.setAttribute('href', this.state.showRedirect);\n elem.setAttribute('title', 'ioBroker.admin');\n elem.setAttribute('rel', 'sidebar');\n elem.click(); //this.title=document.title;\n } else if (document.all) {\n // ie\n window.external.AddFavorite(this.state.showRedirect, 'ioBroker.admin');\n }\n }}>{I18n.t('Bookmark admin')}</Button> : null}\n {this.state.redirectCountDown ? <Button variant=\"contained\" onClick={() => window.location = this.state.showRedirect}>{I18n.t('Go to admin now')}</Button> : null}\n </DialogActions>\n </Dialog>\n } else {\n return null;\n }\n }\n\n renderCommandDialog() {\n return this.state.cmd ?\n <CommandDialog\n onSetCommandRunning={commandRunning => this.setState({ commandRunning })}\n onClose={() =>\n this.closeCmdDialog(() =>\n this.setState({ commandRunning: false }))}\n visible={this.state.cmdDialog}\n callback={this.state.callback}\n header={I18n.t('Command')}\n onInBackground={() => this.setState({ cmdDialog: false })}\n cmd={this.state.cmd}\n errorFunc={() => this.setState({ commandError: true })}\n performed={() => this.setState({ performed: true })}\n inBackground={this.state.commandError || this.state.performed}\n commandError={this.state.commandError}\n socket={this.socket}\n host={this.state.commandHost || this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n /> : null;\n }\n\n renderLoggedUser() {\n if (this.state.user && this.props.width !== 'xs' && this.props.width !== 'sm') {\n return <div title={this.state.user.id} className={clsx(this.props.classes.userBadge, this.state.user.invertBackground && this.props.classes.userBackground)} ref={this.refUser}>\n {this.state.user.icon ?\n <Icon src={this.state.user.icon} className={this.props.classes.userIcon} />\n :\n <UserIcon className={this.props.classes.userIcon} />}\n <div ref={this.refUserDiv} style={{ color: this.state.user.color || undefined }} className={this.props.classes.userText}>{this.state.user.name}</div>\n </div>\n } else {\n return null;\n }\n }\n\n renderAlertSnackbar() {\n return <Snackbar\n className={this.props.classes['alert_' + this.state.alertType]}\n open={this.state.alert}\n autoHideDuration={6000}\n onClose={() => this.handleAlertClose()}\n message={this.state.alertMessage}\n />\n }\n\n renderConfirmDialog() {\n /*return <ConfirmDialog\n onClose={() => this.closeDataNotStoredDialog()}\n open={this.state.dataNotStoredDialog}\n header={I18n.t('Please confirm')}\n onConfirm={() => this.confirmDataNotStored()}\n confirmText={I18n.t('Ok')}\n >\n {I18n.t('Some data are not stored. Discard?')}\n </ConfirmDialog>;*/\n return this.state.dataNotStoredDialog && <ConfirmDialog\n title={I18n.t('Please confirm')}\n text={I18n.t('Some data are not stored. Discard?')}\n ok={I18n.t('Ok')}\n cancel={I18n.t('Cancel')}\n onClose={isYes =>\n isYes ? this.confirmDataNotStored() : this.closeDataNotStoredDialog()}\n />;\n }\n\n render() {\n const { classes } = this.props;\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n\n if (this.state.cloudNotConnected) {\n return <StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div style={{\n width: '100%',\n height: '100%',\n textAlign: 'center',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: this.state.themeType === 'dark' ? '#1a1a1a' : '#fafafa',\n color: this.state.themeType === 'dark' ? '#fafafa' : '#1a1a1a',\n }}>\n <div style={{ width: 300, height: 100 }}>\n <CircularProgress />\n <div style={{ fontSize: 16 }}>{I18n.t('Waiting for connection of ioBroker...')} <span style={{ fontSize: 18 }}>{this.state.cloudReconnect}</span></div>\n </div>\n </div>\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>;\n }\n\n if (this.state.hasGlobalError) {\n const message = this.state.hasGlobalError.message;\n const stack = this.state.hasGlobalError.stack;\n\n return <div style={{textAlign: 'center', fontSize: 22, marginTop: 50, height: 'calc(100% - 50px)', overflow: 'auto'}}>\n <h1 style={{color: '#F00'}}>Error in GUI!</h1>\n Please open the browser console (F12), copy error text from there and create the issue on <a href=\"https://github.com/ioBroker/ioBroker.admin/issues\" target=\"_blank\" rel=\"noreferrer\">github</a><br/>\n Without this information it is not possible to analyse the error.<br/>\n It should looks like <br/>\n <img src=\"img/browserError.png\" alt=\"error\"/><br/>\n If in the second line you will see <code style={{style: '#888', fontFamily: 'monospace', fontSize: 16}}>at :3000/static/js/main.chunk.js:36903</code> and not the normal file name,<br/>\n please try to reproduce an error with opened browser console. In this case the special \"map\" files will be loaded and the developers can see the real name of functions and files.\n\n <div style={{color: '#F88', fontSize: 14, marginTop: 20}}>{message}</div>\n <pre style={{color: '#F88', fontSize: 12, fontFamily: 'monospace', textAlign: 'left', marginTop: 20, padding: 20}}>{(stack || '').split('\\n').join((line, i) => <div key={i}>{line}<br/></div>)}</pre>\n </div>;\n }\n\n if (this.state.login) {\n return <StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Login t={I18n.t} />\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>;\n } else\n if (!this.state.ready) {\n return <StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n {window.vendorPrefix === 'PT' ? <LoaderPT theme={this.state.themeType}/> :null}\n {window.vendorPrefix && window.vendorPrefix !== 'PT' && window.vendorPrefix !== '@@vendorPrefix@@' ? <LoaderVendor theme={this.state.themeType}/> :null}\n {!window.vendorPrefix || window.vendorPrefix === '@@vendorPrefix@@' ? <Loader theme={this.state.themeType} /> : null}\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>;\n } else if (this.state.strictEasyMode || this.state.currentTab.tab === 'easy') {\n return <StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div>\n {!this.state.connected && <Connecting />}\n <Suspense fallback={<Connecting />}>\n <EasyMode\n navigate={Router.doNavigate}\n getLocation={Router.getLocation}\n location={this.state.currentTab}\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n width={this.props.width}\n configs={this.state.easyModeConfigs}\n socket={this.socket}\n configStored={value => this.allStored(value)}\n isFloatComma={this.state.systemConfig?.common.isFloatComma}\n dateFormat={this.state.systemConfig?.common.dateFormat}\n systemConfig={this.state.systemConfig}\n t={I18n.t}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={ref => this.refConfigIframe = ref}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n </div>\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>;\n }\n\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem('App.expertMode');\n const expertModePermanent = !storedExpertMode || (storedExpertMode === 'true') === !!this.state.systemConfig.common.expertMode;\n\n return <StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Paper elevation={0} className={classes.root}>\n <AppBar\n color=\"default\"\n position=\"fixed\"\n className={clsx(\n classes.appBar,\n { [classes.appBarShift]: !small && this.state.drawerState === DrawerStates.opened },\n { [classes.appBarShiftCompact]: !small && this.state.drawerState === DrawerStates.compact }\n )}\n >\n <Toolbar>\n <IconButton size=\"large\"\n edge=\"start\"\n className={clsx(classes.menuButton, !small && this.state.drawerState !== DrawerStates.closed && classes.hide)}\n onClick={() => this.handleDrawerState(DrawerStates.opened)}\n >\n <MenuIcon />\n </IconButton>\n <div className={classes.wrapperButtons}>\n <IsVisible name=\"admin.appBar.discovery\" config={this.adminGuiConfig}>\n {this.state.discoveryAlive && <Tooltip title={I18n.t('Discovery devices')}>\n <IconButton size=\"large\" onClick={() => Router.doNavigate(null, 'discovery')}>\n <VisibilityIcon />\n </IconButton>\n </Tooltip>}\n </IsVisible>\n <IsVisible name=\"admin.appBar.systemSettings\" config={this.adminGuiConfig}>\n <Tooltip title={I18n.t('System settings')}>\n <IconButton size=\"large\" onClick={() => Router.doNavigate(null, 'system')}>\n <BuildIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n <IsVisible name=\"admin.appBar.toggleTheme\" config={this.adminGuiConfig}>\n <ToggleThemeMenu\n size=\"large\"\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName}\n t={I18n.t} />\n </IsVisible>\n <IsVisible name=\"admin.appBar.expertMode\" config={this.adminGuiConfig}>\n <Tooltip\n title={`${I18n.t('Toggle expert mode')} ${expertModePermanent ? '' : ' (' + I18n.t('only in this browser session') + ')'}`}\n >\n <Badge\n color=\"secondary\"\n variant=\"dot\"\n classes={{badge: this.props.classes.expertBadge}}\n invisible={expertModePermanent}\n >\n <IconButton size=\"large\"\n onClick={() => {\n if (!!this.state.systemConfig.common.expertMode === !this.state.expertMode) {\n (window._sessionStorage || window.sessionStorage).setItem('App.expertMode', !this.state.expertMode);\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else {\n if ((window._sessionStorage || window.sessionStorage).getItem('App.doNotShowExpertDialog') === 'true') {\n (window._sessionStorage || window.sessionStorage).setItem('App.expertMode', !this.state.expertMode);\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else {\n expertModeDialogFunc(this.state.expertMode, this.state.themeType, this.state.theme, () => {\n (window._sessionStorage || window.sessionStorage).setItem('App.expertMode', !this.state.expertMode);\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n }, () => Router.doNavigate(null, 'system'));\n }\n }\n }}\n style={{ color: this.state.expertMode ? this.state.theme.palette.expert : undefined }}\n color=\"default\"\n >\n <ExpertIcon\n title={I18n.t('Toggle expert mode')}\n glowColor={this.state.theme.palette.secondary.main}\n active={this.state.expertMode}\n className={clsx(classes.expertIcon, this.state.expertMode && classes.expertIconActive)}\n />\n </IconButton>\n </Badge>\n </Tooltip>\n </IsVisible>\n {this.state.expertMode ? <Tooltip title={I18n.t('Synchronize admin settings between all opened browser windows')}>\n <IconButton\n size=\"large\"\n onClick={e => this.state.guiSettings ? this.enableGuiSettings(false) : this.setState({ showGuiSettings: e.target })}\n style={{ color: this.state.guiSettings ? this.state.theme.palette.expert : undefined }}\n >\n { this.state.guiSettings ? <SyncIcon /> : <SyncIconDisabled /> }\n </IconButton>\n </Tooltip> : null }\n <IsVisible name=\"admin.appBar.hostSelector\" config={this.adminGuiConfig}>\n <HostSelectors\n tooltip={this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs' ? I18n.t('You can change host on Instances, Adapters or Logs pages') : undefined}\n expertMode={this.state.expertMode}\n socket={this.socket}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n setCurrentHost={(hostName, host) => {\n this.setState({\n currentHostName: hostName,\n currentHost: host\n }, () => {\n this.logsWorkerChanged(host);\n (window._localStorage || window.localStorage).setItem('App.currentHost', host);\n\n this.readRepoAndInstalledInfo(host, this.state.hosts)\n .then(() =>\n // read notifications from host\n this.hostsWorker.getNotifications(host)\n .then(notifications => this.showAdaptersWarning(notifications, this.socket, host)));\n });\n }}\n disabled={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n }\n />\n </IsVisible>\n <div className={classes.flexGrow} />\n {this.state.cmd && !this.state.cmdDialog && <IconButton size=\"large\" onClick={() => this.setState({ cmdDialog: true })}>\n <PictureInPictureAltIcon className={this.state.commandError ? classes.errorCmd : this.state.performed ? classes.performed : classes.cmd} />\n </IconButton>}\n </div>\n\n {this.renderLoggedUser()}\n\n {this.state.drawerState !== 0 && !this.state.expertMode && window.innerWidth > 400 &&\n <Grid container className={clsx(this.state.drawerState !== 0 && classes.avatarVisible, classes.avatarNotVisible)} spacing={1} alignItems=\"center\">\n {(!this.state.user || this.props.width === 'xs' || this.props.width === 'sm') &&\n <Hidden xsDown>\n <div className={classes.wrapperName}>\n <Typography>admin</Typography>\n {!this.adminGuiConfig.icon && this.state.versionAdmin &&\n <Typography className={classes.styleVersion} style={{ color: this.state.themeType === 'dark' ? '#ffffff80' : '#00000080' }}>\n v{this.state.versionAdmin}\n </Typography>}\n </div>\n </Hidden>\n }\n <Grid item>\n <a href=\"/#easy\" onClick={event => event.preventDefault()} style={{ color: 'inherit', textDecoration: 'none' }}>\n {this.adminGuiConfig.icon ?\n <div style={{\n height: 50,\n withWidth: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5}}\n ><img src={this.adminGuiConfig.icon} alt=\"logo\"\n style={{maxWidth: '100%', maxHeight: '100%'}}/></div>\n :\n <Avatar\n onClick={() => this.handleNavigation('easy')}\n className={clsx((this.state.themeName === 'colored' || this.state.themeName === 'blue') && classes.logoWhite)}\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n }\n </a>\n </Grid>\n </Grid>\n }\n </Toolbar>\n </AppBar>\n <DndProvider backend={!small ? HTML5Backend : TouchBackend}>\n <Drawer\n adminGuiConfig={this.adminGuiConfig}\n state={this.state.drawerState}\n systemConfig={this.state.systemConfig}\n handleNavigation={name => this.handleNavigation(name)}\n onStateChange={state => this.handleDrawerState(state)}\n onLogout={() => this.logout()}\n currentTab={this.state.currentTab && this.state.currentTab.tab}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n logsWorker={this.logsWorker}\n logoutTitle={I18n.t('Logout')}\n isSecure={this.socket.isSecure}\n versionAdmin={this.state.versionAdmin}\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n expertMode={this.state.expertMode}\n ready={this.state.ready}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n\n protocol={this.state.protocol}\n hostname={this.state.hostname}\n port={this.state.port}\n adminInstance={this.adminInstance}\n\n hosts={this.state.hosts}\n repository={this.state.repository}\n installed={this.state.installed}\n />\n </DndProvider>\n <Paper\n elevation={0}\n square\n className={\n clsx(classes.content, {\n [classes.contentMargin]: !small && this.state.drawerState !== DrawerStates.compact,\n [classes.contentMarginCompact]: !small && this.state.drawerState !== DrawerStates.opened,\n [classes.contentShift]: !small && this.state.drawerState !== DrawerStates.closed\n })\n }\n >\n {this.getCurrentTab()}\n </Paper>\n {this.renderAlertSnackbar()}\n </Paper>\n {this.getCurrentDialog()}\n {this.renderConfirmDialog()}\n {this.renderCommandDialog()}\n {this.renderWizardDialog()}\n {this.showRedirectDialog()}\n {this.renderSlowConnectionWarning()}\n {!this.state.connected && !this.state.redirectCountDown ? <Connecting /> : null}\n {this.state.showGuiSettings ? <Menu\n anchorEl={this.state.showGuiSettings}\n open={true}\n onClose={() => this.setState({ showGuiSettings: null })}\n >\n <MenuItem onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true)\n }}>{I18n.t('Use settings of other browsers')}</MenuItem>\n <MenuItem onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true, true);\n }}>{I18n.t('Use settings of this browser')}</MenuItem>\n <MenuItem onClick={() => this.setState({ showGuiSettings: null })}>\n <ListItemIcon><CancelIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{I18n.t('Cancel')}</ListItemText>\n </MenuItem>\n </Menu> : null}\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>;\n }\n}\n\nexport default withWidth()(withStyles(styles)(App));\n","// extracted by mini-css-extract-plugin\nexport default {};","import { createRoot } from 'react-dom/client';\nimport pack from '../package.json';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport * as Sentry from '@sentry/browser';\nimport * as SentryIntegrations from '@sentry/integrations';\n\nimport theme from '@iobroker/adapter-react-v5/Theme';\n// import Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport { Utils } from '@iobroker/adapter-react-v5';\nimport App from './App';\n\nimport './index.css';\nimport { ContextWrapperProvider } from './components/ContextWrapper';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\n\nwindow.adapterName = 'admin';\n\nconsole.log('iobroker.' + window.adapterName + '@' + pack.version);\nlet themeName = Utils.getThemeName();\n\nfunction build() {\n const container = document.getElementById('root');\n const root = createRoot(container);\n return root.render(\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme(themeName)}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ContextWrapperProvider>\n <App onThemeChange={_themeName => {\n themeName = _themeName;\n build();\n }}/>\n </ContextWrapperProvider>\n </LocalizationProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n}\n\nconst versionChanged = [\n 'ChunkLoadError', // version was changed\n 'removeChild', // version was changed\n 'DOMException', // version was changed\n];\n\nconst ignoreErrors = [\n 'removeChild', // ignore errors that happen by changing the version\n 'getWidth', // echarts error\n 'safari-extension', // ignore safari extension errors\n 'this.animation', // echarts error\n 'No connection', // Ignore no connection errors\n 'notConnectedError', // Ignore no connection errors\n 'has no target', // Alias has no target\n 'ResizeObserver', // echarts error\n 'WorkerGlobalScope', // worker error\n 'generateKey', // ignore safari extension errors\n 'The operation is insecure.', // http => https access\n 'SyntaxError: An invalid or illegal string was specified', // No stack and no possibility to detect\n 'Can\\'t find variable: servConn', // Error from info adapter\n 'LPContentScriptFeatures', // ignore safari extension errors\n 'window.webkit.messageHandlers', // ignore safari extension errors\n];\n\nif (!window.disableDataReporting && window.location.port !== '3000') {\n Sentry.init({\n dsn: 'https://43643152dab3481db69950ba866ee9d6@sentry.iobroker.net/58',\n release: 'iobroker.' + window.adapterName + '@' + pack.version,\n integrations: [\n new SentryIntegrations.Dedupe()\n ],\n beforeSend(event) {\n // Modify the event here\n if (event && event.culprit &&\n versionChanged.find(error => event.culprit.includes(error))) {\n window.reload();\n } else if (event && event.culprit &&\n ignoreErrors.find(error => event.culprit.includes(error))) {\n return null;\n }\n return event;\n }\n });\n} else {\n window.onerror = function (error) {\n const errText = error.toString();\n if (errText && versionChanged.find(e => errText.includes(e))) {\n const message = error.message;\n const stack = error.stack;\n console.error('Try to detect admin version change:');\n console.error(message);\n console.error(JSON.stringify(stack, null, 2));\n window.reload();\n return;\n }\n throw error;\n }\n window.onunhandledrejection = function (error) {\n const errText = error.toString();\n if (errText && versionChanged.find(e => errText.includes(e))) {\n const message = error.message;\n const stack = error.stack;\n console.error('Try to detect admin version change:');\n console.error(message);\n console.error(JSON.stringify(stack, null, 2));\n window.reload();\n return;\n }\n throw error;\n }\n}\n\nbuild();\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { amber, blue, red } from '@mui/material/colors';\n\nimport { Grid, LinearProgress, Paper, Switch, Typography } from '@mui/material';\n\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\n\nimport Utils from '../Utils';\n\nconst styles = theme => ({\n log: {\n height: 400,\n width: 860,\n padding: theme.spacing(1),\n overflowY: 'auto'\n },\n logNoSpacing: {\n height: '100%',\n width: 'calc(100% - 8px)',\n marginLeft: 8,\n padding: theme.spacing(1),\n overflowY: 'auto'\n },\n error: {\n color: red[500]\n },\n info: {\n color: blue[500]\n },\n warn: {\n color: amber[500]\n }\n});\n\nclass Command extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n log: [`$ iobroker ${props.cmd || ''}`],\n init: false,\n max: null,\n value: null,\n progressText: '',\n moreChecked: true,\n stopped: false,\n };\n\n this.logRef = React.createRef();\n\n this.t = props.t;\n const pattern = ['error', 'warn', 'info'];\n this.regExp = new RegExp(pattern.join('|'), 'i');\n }\n\n componentDidMount() {\n if (this.props.ready && this.props.cmd) {\n console.log('STARTED: ' + this.props.cmd);\n this.executeCommand();\n }\n try {\n const closeOnReady = JSON.parse((window._localStorage || window.localStorage).getItem('CommandDialog.closeOnReady')) || false;\n this.setState({ closeOnReady });\n } catch (error) {\n this.setState({ closeOnReady: false });\n }\n }\n\n componentDidUpdate() {\n if (!this.state.init && this.props.ready && this.props.cmd) {\n this.executeCommand();\n }\n if (this.props.logsRead && JSON.stringify(this.props.logsRead) !== JSON.stringify(this.state.log)) {\n this.setState({ log: this.props.logsRead });\n }\n this.logRef.current?.scrollIntoView();\n }\n\n executeCommand() {\n this.setState({ init: true }, () => this.props.onSetCommandRunning(true));\n\n this.props.socket.registerCmdStdoutHandler(this.cmdStdoutHandler.bind(this));\n this.props.socket.registerCmdStderrHandler(this.cmdStderrHandler.bind(this));\n this.props.socket.registerCmdExitHandler(this.cmdExitHandler.bind(this));\n\n const activeCmdId = Math.floor(Math.random() * 0xFFFFFFE) + 1;\n\n this.setState({ activeCmdId });\n\n this.props.socket.cmdExec(this.props.host.startsWith('system.host.') ? this.props.host : ('system.host.' + this.props.host), this.props.cmd, activeCmdId)\n .catch(error =>\n console.log(error));\n }\n\n cmdStdoutHandler(id, text) {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n\n const log = this.state.log.slice();\n log.push(text);\n\n const upload = text.match(/^upload \\[(\\d+)]/);\n const gotAdmin = !upload ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/admin$/) : null;\n const gotWww = !gotAdmin ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/www$/) : null;\n\n let max = this.state.max;\n let value = null;\n let progressText = '';\n\n if (upload) {\n max = max || parseInt(upload[1], 10);\n value = parseInt(upload[1], 10);\n } else if (gotAdmin) {\n // upload of admin\n progressText = this.t('Upload admin started');\n max = null;\n } else if (gotWww) {\n // upload of www\n progressText = this.t('Upload www started');\n max = null;\n }\n\n this.setState({\n log,\n max,\n value,\n progressText\n });\n\n console.log('cmdStdout');\n }\n }\n\n cmdStderrHandler(id, text) {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n\n const log = this.state.log.slice();\n log.push(text);\n\n this.setState({ log });\n\n console.log('cmdStderr');\n console.log(id);\n console.log(text);\n }\n }\n\n cmdExitHandler(id, exitCode) {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n if (!window.document.hidden && exitCode === 0 && log.length && log[log.length - 1].endsWith('created') && this.props.callback) {\n const newArr = log[log.length - 1].split(' ');\n const adapter = newArr.find(el => el.startsWith('system'));\n if (adapter) {\n // it takes some time to creat the object\n setTimeout(_adapter => {\n this.props.socket.getObject(_adapter)\n .then(obj => {\n Utils.fixAdminUI(obj);\n obj && obj.common?.adminUI?.config !== 'none' && Router.doNavigate('tab-instances', 'config', _adapter);\n });\n }, 1000, adapter);\n }\n }\n log.push(`${exitCode !== 0 ? 'ERROR: ' : ''}Process exited with code ${exitCode}`);\n\n this.setState({ log, stopped: true }, () => {\n this.props.onSetCommandRunning(false);\n if (exitCode !== 0) {\n this.props.errorFunc && this.props.errorFunc(exitCode, this.state.log);\n } else {\n this.props.performed && this.props.performed();\n this.props.onFinished(exitCode, this.state.log);\n }\n console.log('cmdExit');\n console.log(id);\n console.log(exitCode);\n });\n }\n }\n\n colorize(text, maxLength) {\n if (maxLength !== undefined) {\n text = text.substring(0, maxLength);\n }\n\n if (text.search(this.regExp)) {\n const result = [];\n const { classes } = this.props;\n\n while (text.search(this.regExp) >= 0) {\n const [match] = text.match(this.regExp);\n const pos = text.search(this.regExp);\n\n if (pos > 0) {\n const part = text.substring(0, pos);\n const message = Utils.parseColorMessage(part);\n result.push(<span key={result.length}>{typeof message === 'object' ? message.parts.map((item, i) => <span key={i} style={item.style}>{item.text}</span>): message}</span>);\n text = text.replace(part, '');\n }\n\n const part = text.substr(0, match.length);\n if (part) {\n const message = Utils.parseColorMessage(part);\n result.push(<span key={result.length} className={classes[match.toLowerCase()]}>{typeof message === 'object' ? message.parts.map((item, i) => <span key={i} style={item.style}>{item.text}</span>): message}</span>);\n text = text.replace(part, '');\n }\n }\n\n if (text) {\n const message = Utils.parseColorMessage(text);\n result.push(<span key={result.length}>{typeof message === 'object' ? message.parts.map((item, i) => <span key={i} style={item.style}>{item.text}</span>): message}</span>);\n }\n\n return result;\n }\n\n return text;\n }\n\n getLog() {\n return this.state.log.map((value, index) => <Typography\n ref={index === this.state.log.length - 1 ? this.logRef : undefined}\n key={index}\n component=\"p\"\n variant=\"body2\"\n >\n {this.colorize(value)}\n </Typography>);\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Grid\n style={this.props.noSpacing ? { height: '100%', width: '100%' } : {}}\n container\n direction=\"column\"\n spacing={this.props.noSpacing ? 0 : 2}\n >\n {this.props.showElement && <Grid item>\n {!this.state.stopped && <LinearProgress\n style={this.props.commandError ? { backgroundColor: '#f44336' } : null}\n variant={this.props.inBackground ? 'determinate' : 'indeterminate'}\n value={this.state.max && this.state.value ? 100 - Math.round((this.state.value / this.state.max) * 100) : this.props.commandError ? 0 : 100}\n />}\n </Grid>}\n <div style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: this.props.inBackground ? 'space-between' : 'flex-end'\n }}>\n <Typography\n style={this.props.inBackground ? {\n width: 'calc(100% - 180px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n } : { display: 'none' }}\n component=\"div\"\n >\n {this.colorize(this.state.log[this.state.log.length - 1])}\n </Typography>\n {this.props.showElement && <Typography component=\"div\" style={{ width: 250 }}>\n <Grid component=\"label\" container alignItems=\"center\" spacing={1}>\n <Grid item>{this.props.t('less')}</Grid>\n <Grid item>\n <Switch\n checked={this.state.moreChecked}\n onChange={(event) => this.setState({ moreChecked: event.target.checked })}\n color=\"primary\"\n />\n </Grid>\n <Grid item>{this.props.t('more')}</Grid>\n </Grid>\n </Typography>}\n </div>\n <Grid item style={this.props.noSpacing ? { height: 'calc(100% - 45px)', width: '100%' } : {}}>\n {this.state.moreChecked && <Paper className={this.props.noSpacing ? classes.logNoSpacing : classes.log}>\n {this.getLog()}\n </Paper>}\n </Grid>\n </Grid>;\n }\n}\n\nCommand.defaultProps = {\n onSetCommandRunning: () => { },\n showElement: true\n};\n\nCommand.propTypes = {\n noSpacing: PropTypes.bool,\n host: PropTypes.string.isRequired,\n callback: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n onFinished: PropTypes.func.isRequired,\n ready: PropTypes.bool.isRequired,\n t: PropTypes.func.isRequired,\n inBackground: PropTypes.bool,\n commandError: PropTypes.bool,\n errorFunc: PropTypes.func,\n performed: PropTypes.func,\n cmd: PropTypes.string.isRequired,\n onSetCommandRunning: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(Command);","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport Button from '@mui/material/Button';\nimport {Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField} from '@mui/material';\nimport { withStyles } from '@mui/styles';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\nimport LanguageIcon from '@mui/icons-material/Language';\n\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden'\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1)\n },\n languageButtonActive: {\n color: theme.palette.primary.main\n },\n});\n\nconst CustomModal = ({ toggleTranslation, noTranslation, title, fullWidth, help, maxWidth, progress, icon, applyDisabled, applyButton, classes, open, onClose, children, titleButtonApply, titleButtonClose, onApply, textInput, defaultValue, overflowHidden }) => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon = null;\n\n if (icon) {\n Icon = icon;\n }\n\n return <Dialog\n open={open}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n classes={{ paper: classes.modalDialog, /*paper: classes.background*/ }}\n >\n {title && <DialogTitle>\n {icon ? <Icon className={classes.titleIcon}/> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? <IconButton\n size=\"large\"\n className={Utils.clsx(classes.languageButton, noTranslation && classes.languageButtonActive)}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton> : null}\n </DialogTitle>}\n <DialogContent className={clsx(overflowHidden ? classes.overflowHidden : null, classes.content)} style={{ paddingTop: 8 }}>\n {textInput && <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"outlined\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={(e) => setValue(e.target.value)}\n // customValue\n />}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {applyButton && <Button\n startIcon={<CheckIcon/>}\n disabled={progress || (applyDisabled && defaultValue === value)}\n onClick={() => onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply)}\n </Button>}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon/>}\n >\n {I18n.t(titleButtonClose)}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nCustomModal.defaultProps = {\n open: false,\n onApply: () => { },\n onClose: () => { },\n applyButton: true,\n applyDisabled: false,\n titleButtonClose: 'Cancel',\n titleButtonApply: 'Ok',\n overflowHidden: false,\n help: ''\n};\n\nCustomModal.propTypes = {\n icon: PropTypes.object,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n children: PropTypes.any,\n titleButtonClose: PropTypes.string,\n titleButtonApply: PropTypes.string,\n onApply: PropTypes.func,\n fullWidth: PropTypes.bool,\n maxWidth: PropTypes.string,\n help: PropTypes.string,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n};\n\nexport default withStyles(styles)(CustomModal);\n","import { Button, Menu, MenuItem, Tooltip } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport React, { useState, } from 'react';\n\nimport MaterialDynamicIcon from '../helpers/MaterialDynamicIcon';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n marginLeft: 10,\n marginRight: 10\n },\n icon: {\n marginRight: 5\n }\n}));\n\nconst CustomSelectButton = ({ arrayItem, title, onClick, value, contained, buttonIcon, icons, t, translateSuffix, noTranslation }) => {\n const [anchorEl, setAnchorEl] = useState(null);\n translateSuffix = translateSuffix || '';\n const classes = useStyles();\n\n return <>\n <Tooltip title={title || ''}>\n <Button\n className={classes.button}\n variant={contained ? 'contained' : 'outlined'}\n color=\"primary\"\n onClick={e => setAnchorEl(e.currentTarget)}\n >\n {buttonIcon || (icons && <MaterialDynamicIcon objIconBool iconName={value} className={classes.icon} />)}{typeof value === 'number' ? value : (noTranslation ? value : t(value + translateSuffix))}\n </Button>\n </Tooltip>\n <Menu\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n >\n {arrayItem.map(({ name }, idx) => {\n return <MenuItem\n key={name}\n selected={value ? name === value : value === 0 ? name === value : idx === 0}\n disabled={value ? name === value : value === 0 ? name === value : idx === 0}\n className={'tag-card-' + name}\n style={{ placeContent: 'space-between' }}\n value={name}\n onClick={e => {\n onClick(name);\n setAnchorEl(null);\n }}>\n {icons && <MaterialDynamicIcon objIconBool iconName={name} className={classes.icon} />}{typeof name === 'number' ? name : (noTranslation ? name : t(name + translateSuffix))}\n </MenuItem>\n })}\n </Menu>\n </>\n}\n\nCustomSelectButton.defaultProps = {\n icons: false,\n translateSuffix: '',\n};\n\nexport default CustomSelectButton;","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Tooltip } from '@mui/material';\nimport { withStyles } from '@mui/styles';\nimport Button from '@mui/material/Button';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nconst styles = theme => ({\n img: {\n width: 30,\n height: 30,\n margin: 'auto 0',\n position: 'relative',\n marginRight: 10,\n borderRadius: 3,\n background: '#FFFFFF',\n padding: 2,\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n notAlive: {\n opacity: 0.3\n },\n button: {\n maxWidth: 300,\n },\n name: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n width: {\n width: '100%'\n },\n selector: {\n width: 15,\n display: 'inline-block'\n },\n '@media screen and (max-width: 710px)': {\n name: {\n display: 'none'\n },\n width: {\n width: 'auto'\n },\n imgButton: {\n marginRight: 0,\n }\n },\n tooltip: {\n pointerEvents: 'none',\n },\n});\n\nclass HostSelectors extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n anchorEl: null,\n alive: {},\n hosts: [],\n };\n }\n\n componentDidMount() {\n this.props.socket.getCompactHosts()\n .then(hosts => {\n this.setState({ hosts }, async () => {\n // request for all host the alive status\n const alive = {}\n for (let h = 0; h < hosts.length; h++) {\n alive[hosts[h]._id] = await this.props.socket.getState(hosts[h]._id + '.alive');\n if (alive[hosts[h]._id]) {\n alive[hosts[h]._id] = !!alive[hosts[h]._id].val;\n } else {\n alive[hosts[h]._id] = false;\n }\n }\n this.setState({alive}, () => {\n this.props.hostsWorker.registerHandler(this.onHostsObjectChange);\n this.props.hostsWorker.registerAliveHandler(this.onAliveChanged);\n });\n });\n })\n .catch(e => {\n window.alert('Cannot get hosts: ' + e);\n });\n }\n\n componentWillUnmount() {\n this.props.hostsWorker.unregisterHandler(this.onHostsObjectChange);\n this.props.hostsWorker.unregisterAliveHandler(this.onAliveChanged);\n }\n\n onAliveChanged = events => {\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n events.forEach(event => {\n if (event.type === 'delete') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if ((!!alive[event.id]) !== (!!event.alive)) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(obj => obj._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(obj.common?.name || aliveHost.replace('system.host.', ''), aliveHost);\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n };\n\n onHostsObjectChange = events => {\n const hosts = JSON.parse(JSON.stringify(this.state.hosts));\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n Promise.all(events.map(async event => {\n const host = hosts.find(it => it._id === event.id);\n\n if (event.type === 'delete' || !event.obj) {\n if (host) {\n const pos = hosts.indexOf(host);\n if (pos !== -1) {\n delete alive[host];\n hosts.splice(pos);\n changed = true;\n }\n }\n } else {\n if (host) {\n if (host.common.name !== event.obj.common?.name) {\n host.common.name = event.obj.common?.name || '';\n changed = true;\n }\n if (host.common.color !== event.obj.common?.color) {\n host.common.color = event.obj.common?.color || '';\n changed = true;\n }\n if (host.common.icon !== event.obj.common?.icon) {\n host.common.icon = event.obj.common?.icon || '';\n changed = true;\n }\n } else {\n changed = true;\n hosts.push({\n _id: event.id,\n common: {\n name: event.obj.common?.name || '',\n color: event.obj.common?.color || '',\n icon: event.obj.common?.icon || '',\n }\n });\n const state = await this.props.socket.getState(event.id + '.alive');\n alive[event.id] = state ? state.val : false;\n }\n }\n }))\n .then(() => {\n if (changed) {\n this.setState({ hosts, alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(obj => obj._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(obj.common?.name || aliveHost.replace('system.host.', ''), aliveHost);\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n });\n };\n\n render() {\n if (!this.props.expertMode && this.state.hosts.length < 2) {\n return null;\n }\n let selectedHostObj;\n if (this.state.hosts.length) {\n selectedHostObj = this.state.hosts.find(host => host._id === this.props.currentHost || host._id === 'system.host.' + this.props.currentHost);\n }\n\n return <div>\n <Tooltip title={this.props.tooltip || I18n.t('Change current host')} classes={{ popper: this.props.classes.tooltip }}>\n <span>\n <Button\n //color=\"grey\"\n className={this.props.classes.button}\n style={{\n background: selectedHostObj?.common?.color || 'none',\n borderColor: selectedHostObj?.common?.color ? Utils.invertColor(selectedHostObj.common.color) : 'none'\n }}\n variant={this.props.disabled || this.state.hosts.length < 2 ? 'text' : 'outlined'}\n disabled={this.props.disabled || this.state.hosts.length < 2}\n aria-haspopup=\"true\"\n onClick={e => this.setState({anchorEl: e.currentTarget})}\n >\n <div\n className={clsx(this.props.classes.width, !this.state.alive[this.props.currentHost] && this.props.classes.notAlive)}\n style={{\n display: 'flex',\n color: selectedHostObj?.common?.color ? Utils.invertColor(selectedHostObj.common.color, true) : 'none',\n alignItems: 'center',\n }}>\n <Icon\n className={clsx(this.props.classes.img, this.props.classes.imgButton)}\n src={selectedHostObj?.common?.icon || 'img/no-image.png'}\n />\n <div className={this.props.classes.name}>{selectedHostObj?.common?.name}</div>\n </div>\n </Button>\n </span>\n </Tooltip>\n <Menu\n anchorEl={this.state.anchorEl}\n keepMounted\n open={!!this.state.anchorEl}\n onClose={() => this.setState({ anchorEl: null })}\n >\n {this.state.hosts.map(({ _id, common: { name, icon, color } }, idx) =>\n <MenuItem\n key={_id}\n // button\n disabled={!this.state.alive[_id]}\n selected={_id === this.props.currentHost}\n style={{ background: color || 'inherit' }}\n onClick={() => {\n if (this.props.currentHost !== this.state.hosts[idx]._id) {\n this.props.setCurrentHost(this.state.hosts[idx].common.name, this.state.hosts[idx]._id);\n }\n this.setState({ anchorEl: null });\n }}>\n <div style={{\n display: 'flex',\n color: (color && Utils.invertColor(color, true)) || 'inherit',\n alignItems: 'center',\n }}>\n <div className={this.props.classes.selector}>{_id === this.props.currentHost ? 'ᐅ' : ''}</div>\n <Icon className={this.props.classes.img} src={icon || 'img/no-image.png'} />\n {name}\n </div>\n </MenuItem>\n )}\n </Menu>\n </div>;\n }\n}\n\nHostSelectors.propTypes = {\n disabled: PropTypes.bool,\n socket: PropTypes.object,\n currentHost: PropTypes.string.isRequired,\n hostsWorker: PropTypes.object,\n expertMode: PropTypes.bool,\n setCurrentHost: PropTypes.func.isRequired,\n tooltip: PropTypes.string,\n};\n\nexport default withStyles(styles)(HostSelectors);","import PropTypes from 'prop-types';\n\nfunction getAttr(obj, attr) {\n if (!obj) {\n return null;\n }\n if (typeof attr !== 'object') {\n attr = attr.split('.');\n }\n const att = attr.shift();\n let val = obj[att];\n if (!attr.length) {\n return val;\n } else if (typeof val === 'object') {\n return getAttr(val, attr);\n } else {\n return null;\n }\n}\n\nfunction IsVisible(props) {\n const { config, children, name, value } = props;\n\n if (value !== undefined) {\n return value === false ? null : children;\n } else\n if (!config) {\n return children;\n } else if (getAttr(config, name) !== false) {\n return children;\n } else {\n return null;\n }\n}\n\nIsVisible.propTypes = {\n name: PropTypes.string,\n config: PropTypes.object,\n value: PropTypes.bool,\n};\n\nexport default IsVisible;","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@mui/material/Grid';\nimport Button from '@mui/material/Button';\n\nimport IconInfo from '@mui/icons-material/Info';\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\n\nclass ConfigGeneric extends Component {\n static DIFFERENT_VALUE = '__different__';\n static DIFFERENT_LABEL = 'ra___different__';\n static NONE_VALUE = '';\n static NONE_LABEL = 'ra_none';\n static AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;\n\n constructor(props) {\n super(props);\n\n this.state = {\n confirmDialog: false,\n confirmNewValue: null,\n confirmAttr: null,\n confirmData: null,\n };\n\n this.isError = {};\n\n if (this.props.schema) {\n if (this.props.custom) {\n this.defaultValue = this.props.schema.defaultFunc ? this.executeCustom(this.props.schema.defaultFunc, this.props.schema.default, this.props.data, this.props.instanceObj, this.props.arrayIndex, this.props.globalData) : this.props.schema.default;\n } else {\n this.defaultValue = this.props.schema.defaultFunc ? this.execute(this.props.schema.defaultFunc, this.props.schema.default, this.props.data, this.props.arrayIndex, this.props.globalData) : this.props.schema.default;\n }\n }\n\n this.lang = I18n.getLanguage();\n }\n\n componentDidMount() {\n this.props.registerOnForceUpdate && this.props.registerOnForceUpdate(this.props.attr, this.onUpdate);\n const LIKE_SELECT = ['select', 'autocomplete', 'autocompleteSendTo'];\n // init default value\n if (this.defaultValue !== undefined) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (value === undefined || (LIKE_SELECT.includes(this.props.schema.type) && (value === '' || value === null))) {\n setTimeout(() => {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, this.defaultValue, () =>\n this.props.forceUpdate([this.props.attr], this.props.data));\n //this.onChange(this.props.attr, this.defaultValue);\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, this.defaultValue);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.forceUpdate([this.props.attr], this.props.data));\n }\n }, 100);\n }\n } else if (this.props.schema.defaultSendTo) {\n this.sendTo();\n }\n }\n\n sendTo() {\n if (this.props.alive) {\n this.defaultSendToDone = true;\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n data = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Cannot parse json data: ' + data);\n }\n } else {\n data = {\n attr: this.props.attr,\n value: ConfigGeneric.getValue(this.props.data, this.props.attr),\n };\n }\n\n if (data === undefined) {\n data = null;\n }\n\n this.props.socket.sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.defaultSendTo, data)\n .then(value => {\n if (value !== null && value !== undefined) {\n if (this.props.custom) {\n this.props.onChange(this.props.attr, value, () =>\n this.props.forceUpdate([this.props.attr], this.props.data));\n //this.onChange(this.props.attr, this.defaultValue);\n } else {\n ConfigGeneric.setValue(this.props.data, this.props.attr, value);\n this.props.onChange(this.props.data, undefined, () =>\n this.props.forceUpdate([this.props.attr], this.props.data));\n }\n }\n });\n } else {\n this.defaultSendToDone = false;\n // show error, that instance does not started\n this.onError(this.props.attr, I18n.t('ra_Instance %s is not alive', this.props.instance));\n }\n }\n\n componentWillUnmount() {\n this.props.registerOnForceUpdate && this.props.registerOnForceUpdate(this.props.attr)\n if (this.sendToTimeout) {\n clearTimeout(this.sendToTimeout);\n this.sendToTimeout = null;\n }\n }\n\n onUpdate = data => {\n const value = ConfigGeneric.getValue(data || this.props.data, this.props.attr) || '';\n if (this.state.value !== value) {\n this.setState({ value });\n } else {\n this.forceUpdate();\n }\n }\n\n static getValue(data, attr) {\n if (typeof attr === 'string') {\n return ConfigGeneric.getValue(data, attr.split('.'));\n } else {\n if (attr.length === 1) {\n return data[attr[0]];\n } else {\n const part = attr.shift();\n if (typeof data[part] === 'object') {\n return ConfigGeneric.getValue(data[part], attr);\n } else {\n return null;\n }\n }\n }\n }\n\n static setValue(data, attr, value) {\n if (typeof attr === 'string') {\n return ConfigGeneric.setValue(data, attr.split('.'), value);\n } else {\n if (attr.length === 1) {\n if (value === null) {\n delete data[attr[0]];\n } else {\n data[attr[0]] = value;\n }\n } else {\n const part = attr.shift();\n if (!data[part] || typeof data[part] === 'object') {\n data[part] = data[part] || {};\n }\n return ConfigGeneric.setValue(data[part], attr, value);\n }\n }\n }\n\n getText(text, noTranslation) {\n if (!text) {\n return '';\n }\n\n if (typeof text === 'string') {\n text = noTranslation ? text : I18n.t(text);\n if (text.includes('${')) {\n return this.getPattern(text);\n } else {\n return text;\n }\n } else if (text && typeof text === 'object') {\n if (text.func) {\n // calculate pattern\n if (typeof text.func === 'object') {\n return this.getPattern(text.func[this.lang] || text.func.en || '');\n } else {\n this.getPattern(text.func);\n }\n } else {\n return text[this.lang] || text.en || '';\n }\n }\n }\n\n renderConfirmDialog() {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return <ConfirmDialog\n title={ this.getText(confirm.title) || I18n.t('ra_Please confirm') }\n text={ this.getText(confirm.text) }\n ok={ this.getText(confirm.ok) || I18n.t('ra_Ok') }\n cancel={ this.getText(confirm.cancel) || I18n.t('ra_Cancel') }\n icon={icon}\n onClose={isOk =>\n this.setState({ confirmDialog: false}, () => {\n if (isOk) {\n const data = JSON.parse(JSON.stringify(this.props.data));\n if (this.state.confirmDepAttr) {\n ConfigGeneric.setValue(data, this.state.confirmDepAttr, this.state.confirmDepNewValue);\n }\n\n ConfigGeneric.setValue(data, this.state.confirmAttr, this.state.confirmNewValue);\n this.setState({confirmDialog: false, confirmDepAttr: null, confirmDepNewValue: null, confirmNewValue: null, confirmAttr: null, confirmOldValue: null, confirmData: null}, () =>\n this.props.onChange(data));\n } else {\n this.setState({confirmDialog: false, confirmDepAttr: null, confirmDepNewValue: null, confirmNewValue: null, confirmAttr: null, confirmOldValue: null, confirmData: null});\n }\n })\n }\n />;\n }\n\n onChange(attr, newValue) {\n const data = JSON.parse(JSON.stringify(this.props.data));\n ConfigGeneric.setValue(data, attr, newValue);\n\n if (this.props.schema.confirm && this.execute(this.props.schema.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)) {\n return this.setState({\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmData: null,\n });\n } else {\n // find any inputs with confirmation\n if (this.props.schema.confirmDependsOn) {\n for (let z = 0; z < this.props.schema.confirmDependsOn.length; z++) {\n const dep = this.props.schema.confirmDependsOn[z];\n if (dep.confirm) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n if (this.execute(dep.confirm.condition, false, data, this.props.arrayIndex, this.props.globalData)) {\n return this.setState({\n confirmDialog: true,\n confirmNewValue: newValue,\n confirmAttr: attr,\n confirmDepNewValue: val,\n confirmDepAttr: dep.attr,\n confirmData: dep.confirm,\n });\n }\n }\n }\n }\n\n const changed = [];\n if (this.props.schema.onChangeDependsOn) {\n for (let z = 0; z < this.props.schema.onChangeDependsOn.length; z++) {\n const dep = this.props.schema.onChangeDependsOn[z];\n if (dep.onChange) {\n const val = ConfigGeneric.getValue(data, dep.attr);\n\n const newValue = this.props.custom ?\n this.executeCustom(dep.onChange.calculateFunc, data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData)\n :\n this.execute(dep.onChange.calculateFunc, val, data, this.props.arrayIndex, this.props.globalData);\n\n if (newValue !== val) {\n ConfigGeneric.setValue(data, dep.attr, newValue);\n changed.push(dep.attr);\n }\n }\n }\n }\n\n if (this.props.schema.hiddenDependsOn) {\n for (let z = 0; z < this.props.schema.hiddenDependsOn.length; z++) {\n const dep = this.props.schema.hiddenDependsOn[z];\n dep.hidden && changed.push(dep.attr);\n }\n }\n\n if (this.props.schema.labelDependsOn) {\n for (let z = 0; z < this.props.schema.labelDependsOn.length; z++) {\n const dep = this.props.schema.labelDependsOn[z];\n dep.hidden && changed.push(dep.attr);\n }\n }\n\n if (this.props.schema.helpDependsOn) {\n for (let z = 0; z < this.props.schema.helpDependsOn.length; z++) {\n const dep = this.props.schema.helpDependsOn[z];\n dep.hidden && changed.push(dep.attr);\n }\n }\n\n if (this.props.schema.onChange && !this.props.schema.onChange.ignoreOwnChanges) {\n const val = ConfigGeneric.getValue(data, this.props.attr);\n\n const newValue = this.props.custom ?\n this.executeCustom(this.props.schema.onChange.calculateFunc, data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData)\n :\n this.execute(this.props.schema.onChange.calculateFunc, val, data, this.props.arrayIndex, this.props.globalData);\n if (newValue !== val) {\n ConfigGeneric.setValue(data, this.props.attr, newValue);\n }\n }\n\n if (this.props.custom) {\n this.props.onChange(attr, newValue);\n\n changed && changed.length && changed.forEach((_attr, i) =>\n setTimeout(() => this.props.onChange(_attr, ConfigGeneric.getValue(data, attr)), i * 50));\n } else {\n this.props.onChange(data, undefined, () =>\n changed.length && this.props.forceUpdate(changed, data));\n }\n }\n }\n\n execute(func, defaultValue, data, arrayIndex, globalData) {\n if (func && typeof func === 'object') {\n func = func.func;\n }\n\n if (!func) {\n return defaultValue;\n } else {\n try {\n // eslint-disable-next-line no-new-func\n const f = new Function('data', 'originalData', '_system', '_alive', '_common', '_socket', '_instance', 'arrayIndex', 'globalData', func.includes('return') ? func : 'return ' + func);\n const result = f(data || this.props.data, this.props.originalData, this.props.systemConfig, this.props.alive, this.props.common, this.props.socket, this.props.instance, arrayIndex, globalData);\n // console.log(result);\n return result;\n } catch (e) {\n console.error(`Cannot execute ${func}: ${e}`);\n return defaultValue;\n }\n }\n }\n\n executeCustom(func, data, customObj, instanceObj, arrayIndex, globalData) {\n if (func && typeof func === 'object') {\n func = func.func;\n }\n\n if (!func) {\n return null;\n } else {\n try {\n // eslint-disable-next-line no-new-func\n const f = new Function('data', 'originalData', '_system', 'instanceObj', 'customObj', '_socket', 'arrayIndex', 'globalData', func.includes('return') ? func : 'return ' + func);\n const result = f(data || this.props.data, this.props.originalData, this.props.systemConfig, instanceObj, customObj, this.props.socket, arrayIndex, globalData);\n console.log(result);\n return result;\n } catch (e) {\n console.error(`Cannot execute ${func}: ${e}`);\n return null;\n }\n }\n }\n\n calculate(schema) {\n let error;\n let disabled;\n let hidden;\n let defaultValue;\n\n if (this.props.custom) {\n error = schema.validator ? !this.executeCustom(schema.validator, this.props.data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData) : false;\n disabled = schema.disabled ? this.executeCustom(schema.disabled, this.props.data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData) : false;\n hidden = schema.hidden ? this.executeCustom(schema.hidden, this.props.data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData) : false;\n defaultValue = schema.defaultFunc ? this.executeCustom(schema.defaultFunc, this.props.data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData) : schema.default;\n } else {\n error = schema.validator ? !this.execute(schema.validator, false, this.props.data, this.props.arrayIndex, this.props.globalData) : false;\n disabled = schema.disabled ? this.execute(schema.disabled, false, this.props.data, this.props.arrayIndex, this.props.globalData) : false;\n hidden = schema.hidden ? this.execute(schema.hidden, false, this.props.data, this.props.arrayIndex, this.props.globalData) : false;\n defaultValue = schema.defaultFunc ? this.execute(schema.defaultFunc, schema.default, this.props.data, this.props.arrayIndex, this.props.globalData) : schema.default;\n }\n\n return { error, disabled, hidden, defaultValue };\n }\n\n onError(attr, error) {\n if (!error) {\n delete this.isError[attr];\n } else {\n this.isError[attr] = error;\n }\n\n this.props.onError && this.props.onError(attr, error);\n }\n\n renderItem(error, disabled, defaultValue) {\n return this.getText(this.props.schema.label) || this.getText(this.props.schema.text)\n }\n\n renderHelp(text, link, noTranslation) {\n if (!link) {\n text = this.getText(text, noTranslation) || '';\n if (text && text.includes('<a ')) {\n return Utils.renderTextWithA(text);\n } else {\n return text;\n }\n } else {\n return <a\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{color: this.props.themeType === 'dark' ? '#eee' : '#111'}}\n >{this.getText(text, noTranslation)}</a>;\n }\n }\n\n getPattern(pattern) {\n if (!pattern) {\n return '';\n } else {\n if (typeof pattern === 'object') {\n pattern = pattern.func;\n }\n\n try {\n if (this.props.custom) {\n // eslint-disable-next-line no-new-func\n const f = new Function('data', 'originalData', 'arrayIndex', 'globalData', '_system', 'instanceObj', 'customObj', '_socket', 'return `' + pattern.replace(/`/g, '\\\\`') + '`');\n const result = f(this.props.data, this.props.originalData, this.props.arrayIndex, this.props.globalData, this.props.systemConfig, this.props.instanceObj, this.props.customObj, this.props.socket, this.props.arrayIndex, this.props.globalData);\n return result;\n } else {\n // eslint-disable-next-line no-new-func\n const f = new Function('data', 'originalData', 'arrayIndex', 'globalData', '_system', '_alive', '_common', '_socket', 'return `' + pattern.replace(/`/g, '\\\\`') + '`');\n return f(this.props.data, this.props.originalData, this.props.arrayIndex, this.props.globalData, this.props.systemConfig, this.props.alive, this.props.common, this.props.socket);\n }\n } catch (e) {\n console.error(`Cannot execute ${pattern}: ${e}`);\n return pattern;\n }\n }\n }\n\n render() {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n if (this.props.alive && this.defaultSendToDone === false) {\n this.sendToTimeout = setTimeout(() => {this.sendToTimeout = null; this.sendTo();}, 200);\n }\n\n const { error, disabled, hidden, defaultValue } = this.calculate(schema);\n\n if (hidden) {\n // Remove all errors if element is hidden\n if (Object.keys(this.isError).length) {\n setTimeout(isError =>\n Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100, JSON.parse(JSON.stringify(this.isError)));\n this.isError = {};\n }\n\n if (schema.hideOnlyControl) {\n const item = <Grid\n item\n xs={schema.xs || undefined}\n lg={schema.lg || undefined}\n md={schema.md || undefined}\n sm={schema.sm || undefined}\n style={Object.assign(\n {},\n {marginBottom: 0, /*marginRight: 8, */textAlign: 'left'},\n schema.style,\n this.props.themeType === 'dark' ? schema.darkStyle : {}\n )}\n />;\n\n if (schema.newLine) {\n return <>\n <div style={{flexBasis: '100%', height: 0}} />\n {item}\n </>;\n } else {\n return item;\n }\n } else {\n return null;\n }\n } else {\n // Add error\n if (schema.validatorNoSaveOnError) {\n if (error && !Object.keys(this.isError).length) {\n this.isError = {[this.props.attr]: schema.validatorErrorText ? I18n.t(schema.validatorErrorText) : true};\n setTimeout(isError =>\n Object.keys(isError).forEach(attr => this.props.onError(attr, isError[attr])),\n 100, JSON.parse(JSON.stringify(this.isError)));\n } else if (!error && Object.keys(this.isError).length) {\n setTimeout(isError =>\n Object.keys(isError).forEach(attr => this.props.onError(attr)),\n 100, JSON.parse(JSON.stringify(this.isError)));\n this.isError = {};\n }\n }\n\n const renderedItem = this.renderItem(error, disabled || this.props.commandRunning || this.props.disabled, defaultValue);\n\n const item = <Grid\n item\n title={this.getText(schema.tooltip)}\n xs={schema.xs || undefined}\n lg={schema.lg || undefined}\n md={schema.md || undefined}\n sm={schema.sm || undefined}\n style={Object.assign({}, {\n marginBottom: 0,\n // marginRight: 8,\n textAlign: 'left',\n width: schema.type === 'divider' || schema.type === 'header' ? schema.width || '100%' : undefined\n }, schema.style, this.props.themeType === 'dark' ? schema.darkStyle : {})}>\n { this.props.schema.defaultSendTo && this.props.schema.button ? <Grid container style={{ width: '100%' }}>\n <Grid item flex={1}>{renderedItem}</Grid>\n <Grid item><Button\n variant=\"outlined\"\n onClick={() => this.sendTo()}\n title={this.props.schema.buttonTooltip ? this.getText(this.props.schema.buttonTooltip, this.props.schema.buttonTooltipNoTranslation) : I18n.t('ra_Request data by instance')}\n >{this.getText(this.props.schema.button)}</Button></Grid>\n </Grid>\n :\n renderedItem\n }\n </Grid>;\n\n if (schema.newLine) {\n return <>\n <div style={{flexBasis: '100%', height: 0}} />\n {this.renderConfirmDialog()}\n {item}\n </>;\n } else {\n if (this.state.confirmDialog) {\n return <>\n {this.renderConfirmDialog()}\n {item}\n </>;\n } else {\n return item;\n }\n }\n }\n }\n}\n\nConfigGeneric.propTypes = {\n socket: PropTypes.object.isRequired,\n data: PropTypes.object,\n originalData: PropTypes.object,\n schema: PropTypes.object,\n attr: PropTypes.string,\n value: PropTypes.any,\n themeName: PropTypes.string,\n style: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n customs: PropTypes.object,\n forceUpdate: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n\n systemConfig: PropTypes.object,\n alive: PropTypes.bool,\n common: PropTypes.object,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n\n customObj: PropTypes.object,\n instanceObj: PropTypes.object,\n custom: PropTypes.bool,\n};\n\nexport default ConfigGeneric;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n },\n notAlive: {\n color: '#a30000'\n },\n});\n\nclass ConfigAlive extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n\n const instance = this.getInstance();\n\n this.props.socket.getState(instance + '.alive')\n .then(state => this.setState({alive: !!(state && state.val), instance}));\n }\n\n getInstance() {\n let instance = this.props.schema.instance || (this.props.adapterName + '.' + this.props.instance);\n if (instance.includes('${')) {\n instance = this.getPattern(instance);\n }\n if (instance && !instance.startsWith('system.adapter.')) {\n instance = 'system.adapter.' + instance;\n }\n return instance;\n }\n\n renderItem() {\n if (this.getInstance() !== this.state.instance) {\n setTimeout(() => {\n const instance = this.getInstance();\n if (instance) {\n this.props.socket.getState(instance + '.alive')\n .then(state => this.setState({alive: !!(state && state.val), instance}));\n } else {\n this.setState({alive: null, instance})\n }\n }, 200);\n }\n\n if (this.state.alive !== false && this.state.alive !== true) {\n return null;\n }\n\n const instance = this.state.instance.replace(/^system.adapter./, '');\n return <div className={Utils.clsx(this.props.classes.root, !this.state.alive && this.props.classes.notAlive)}>\n {this.state.alive ?\n this.props.schema.textAlive !== undefined ? (this.props.schema.textAlive ? I18n.t(this.props.schema.textAlive, instance) : '') : I18n.t('ra_Instance %s is alive', instance)\n :\n this.props.schema.textNotAlive !== undefined ? (this.props.schema.textNotAlive ? I18n.t(this.props.schema.textNotAlive, instance) : '') : I18n.t('ra_Instance %s is not alive', instance)\n }\n </div>;\n }\n}\n\nConfigAlive.propTypes = {\n socket: PropTypes.object.isRequired,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n};\n\nexport default withStyles(styles)(ConfigAlive);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigAutocomplete extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions = this.props.schema.options.map(item => typeof item === 'string' ? {label: item, value: item} : JSON.parse(JSON.stringify(item)));\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE});\n this.setState({value: ConfigGeneric.DIFFERENT_VALUE, selectOptions});\n } else {\n this.setState({value, selectOptions});\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n let item;\n let options = JSON.parse(JSON.stringify(this.state.selectOptions));\n let isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find(it => it.value === val))\n .forEach(item => options.push({label: item.toString(), value: item}));\n\n item = {label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE};\n options.unshift(item);\n } else {\n // eslint-disable-next-line\n item = this.state.value !== null && this.state.value !== undefined && options.find(item => item.value == this.state.value); // let \"==\" be and not ===\n if (this.state.value !== null && this.state.value !== undefined && !item) {\n item = {value: this.state.value, label: this.state.value};\n options.push(item);\n }\n }\n\n return <Autocomplete\n className={this.props.classes.indeterminate}\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n value={item}\n // autoComplete\n onInputChange={e => {\n if (e) {\n const val = e.target.value;\n if (val !== this.state.value) {\n this.setState({value: val}, () => this.onChange(this.props.attr, val));\n }\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({value: val}, () => this.onChange(this.props.attr, val));\n }\n }}\n options={options}\n getOptionLabel={option => (option && option.label) || ''}\n renderInput={params => <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n disabled={!!disabled}\n />}\n />;\n }\n}\n\nConfigAutocomplete.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigAutocomplete);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigAutocompleteSendTo extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n\n this.askInstance();\n }\n\n askInstance() {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const selectOptions = this.props.schema.options ?\n this.props.schema.options.map(item => typeof item === 'string' ? {label: item, value: item} : JSON.parse(JSON.stringify(item)))\n :\n [];\n\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n data = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Cannot parse json data: ' + data);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n this.props.socket.sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(list => {\n if (list && Array.isArray(list)) {\n list.forEach(item =>\n selectOptions.push(typeof item === 'string' ? {label: item, value: item} : JSON.parse(JSON.stringify(item))));\n }\n\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE});\n this.setState({value: ConfigGeneric.DIFFERENT_VALUE, selectOptions, context: this.getContext()});\n } else {\n this.setState({value, selectOptions, context: this.getContext()});\n }\n });\n } else {\n // if __different\n if (Array.isArray(value)) {\n selectOptions.unshift({label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE});\n this.setState({value: ConfigGeneric.DIFFERENT_VALUE, selectOptions});\n } else {\n this.setState({value, selectOptions});\n }\n }\n }\n\n getContext() {\n const context = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(attr =>\n context[attr] = ConfigGeneric.getValue(this.props.data, attr));\n }\n return JSON.stringify(context);\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this.state.context) {\n setTimeout(() => this.askInstance(), 300);\n }\n }\n\n let item;\n let options = JSON.parse(JSON.stringify(this.state.selectOptions));\n let isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_LABEL;\n\n if (isIndeterminate) {\n [...this.state.value]\n .filter(val => !options.find(it => it.value === val))\n .forEach(item => options.push({label: item.toString(), value: item}));\n\n item = {label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE};\n options.unshift(item);\n } else {\n item = this.state.value !== null && this.state.value !== undefined &&\n //eslint-disable-next-line\n options.find(item => item.value == this.state.value); // let \"==\" be and not ===\n\n if (this.state.value !== null && this.state.value !== undefined && !item) {\n item = {value: this.state.value, label: this.state.value};\n options.push(item);\n }\n item = item || null;\n }\n\n if (!options.length) {\n return <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n onChange={e => {\n const value = e.target.value;\n this.setState({value}, () =>\n this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n } else {\n return <Autocomplete\n value={item}\n fullWidth\n freeSolo={!!this.props.schema.freeSolo}\n options={options}\n // autoComplete\n getOptionLabel={option => (option && option.label) || ''}\n className={this.props.classes.indeterminate}\n onInputChange={e => {\n if (e) {\n const val = e.target.value;\n if (val !== this.state.value) {\n this.setState({value: val}, () => this.onChange(this.props.attr, val));\n }\n }\n }}\n onChange={(_, value) => {\n const val = typeof value === 'object' ? (value ? value.value : '') : value;\n if (val !== this.state.value) {\n this.setState({value: val}, () => this.onChange(this.props.attr, val));\n }\n }}\n renderInput={(params) =>\n <TextField\n variant=\"standard\"\n {...params}\n // inputProps are important and will be given in params\n // inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n disabled={!!disabled}\n />}\n />;\n }\n }\n}\n\nConfigAutocompleteSendTo.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigAutocompleteSendTo);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport { Button, TextField } from '@mui/material';\n\nimport DialogCron from '@iobroker/adapter-react-v5/Dialogs/Cron';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n flex: {\n display: 'flex'\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n }\n});\n\nclass ConfigCRON extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value});\n }\n\n renderItem(error, disabled, defaultValue) {\n const { classes, schema, attr } = this.props;\n const { value, showDialog } = this.state;\n\n return <FormControl className={classes.fullWidth} variant=\"standard\">\n <InputLabel shrink>{this.getText(schema.label)}</InputLabel>\n <div className={classes.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(attr, value))\n }}\n />\n <Button\n color=\"grey\"\n className={this.props.classes.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showDialog: true })}\n >...</Button>\n </div>\n {showDialog ? <DialogCron\n title={I18n.t('ra_Define schedule')}\n simple={schema.simple}\n complex={schema.complex}\n cron={value}\n language={I18n.getLanguage()}\n onClose={() => this.setState({ showDialog: false })}\n cancel={I18n.t('ra_Cancel')}\n ok={I18n.t('ra_Ok')}\n onOk={value =>\n this.setState({ showDialog: false, value }, () =>\n this.onChange(attr, value))}\n /> : null}\n </FormControl>;\n }\n}\n\nConfigCRON.propTypes = {\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n};\n\nexport default withStyles(styles)(ConfigCRON);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigCertificateSelect extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n let selectOptions = await this.props.socket.getCertificates();\n\n selectOptions = selectOptions\n .filter(el => {\n const name = this.props.attr.toLowerCase();\n\n if (name.includes(el.type)) {\n return true;\n } else if (el.type === 'public' && name.includes('cert')) {\n return true;\n } else if (el.type === 'private' && (name.includes('priv') || name.includes('key'))) {\n return true;\n } else if (el.type === 'chained' && (name.includes('chain') || name.includes('ca'))) {\n return true;\n }\n\n return false;\n })\n .map(el => ({label: el.name, value: el.name}));\n\n selectOptions.unshift({label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE});\n\n this.setState({value, selectOptions});\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n // eslint-disable-next-line\n const item = this.state.selectOptions?.find(item => item.value === this.state.value);\n\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={val => this.getText(item?.label, this.props.schema.noTranslation !== false)}\n onChange={e =>\n this.setState({ value: e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value))}\n >\n {this.state.selectOptions?.map(item =>\n <MenuItem\n key={item.value}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}>{\n this.getText(item.label, this.props.schema.noTranslation !== false)\n }</MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigCertificateSelect.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigCertificateSelect);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n error: {\n color: 'red'\n }\n});\n\nclass ConfigCheckbox extends ConfigGeneric {\n renderItem(error, disabled) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n let isIndeterminate = Array.isArray(value);\n\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <FormControlLabel\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.onChange(this.props.attr, !value);\n }}\n control={<Checkbox\n indeterminate={isIndeterminate}\n checked={!!value}\n onChange={e => {\n if (isIndeterminate) {\n this.onChange(this.props.attr, true);\n } else {\n this.onChange(this.props.attr, e.target.checked);\n }\n }}\n disabled={!!disabled}\n />}\n label={this.getText(this.props.schema.label)}\n />\n <FormHelperText className={this.props.classes.error}>{\n error ? (this.props.schema.validatorErrorText ? I18n.t(this.props.schema.validatorErrorText) : I18n.t('ra_Error')) :\n null}</FormHelperText>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>\n }\n}\n\nConfigCheckbox.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigCheckbox);","/**\n * Notice: Some code was adapted from Material-UI's text field.\n * Copyright (c) 2014 Call-Em-All (https://github.com/callemall/material-ui)\n */\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport PropTypes from 'prop-types'\nimport Input from '@mui/material/Input'\nimport FilledInput from '@mui/material/FilledInput/FilledInput'\nimport OutlinedInput from '@mui/material/OutlinedInput'\nimport InputLabel from '@mui/material/InputLabel'\nimport Chip from '@mui/material/Chip'\nimport withStyles from '@mui/styles/withStyles'\nimport blue from '@mui/material/colors/blue'\nimport FormControl from '@mui/material/FormControl'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport Utils from '../Utils';\n\nconst variantComponent = {\n standard: Input,\n filled: FilledInput,\n outlined: OutlinedInput,\n};\n\nconst styles = (theme) => {\n const light = theme.palette.type === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n return {\n root: {},\n inputRoot: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n flex: 1,\n marginTop: 0,\n minWidth: 70,\n '&$outlined,&$filled': {\n boxSizing: 'border-box',\n },\n '&$outlined': {\n paddingTop: 14,\n },\n '&$filled': {\n paddingTop: 28,\n }\n },\n input: {\n display: 'inline-block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n appearance: 'none', // Remove border in Safari, doesn't seem to break anything in other browsers\n WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated style).\n float: 'left',\n flex: 1,\n },\n chipContainer: {\n display: 'flex',\n flexFlow: 'row wrap',\n cursor: 'text',\n marginBottom: -2,\n minHeight: 40,\n '&$labeled&$standard': {\n marginTop: 18,\n },\n },\n outlined: {\n '& input': {\n height: 16,\n paddingTop: 4,\n paddingBottom: 12,\n marginTop: 4,\n marginBottom: 4,\n },\n },\n standard: {},\n filled: {\n '& input': {\n height: 22,\n marginBottom: 4,\n marginTop: 4,\n paddingTop: 0,\n },\n '$marginDense & input': {\n height: 26,\n },\n },\n labeled: {},\n label: {\n top: 4,\n '&$outlined&:not($labelShrink)': {\n top: 2,\n '$marginDense &': {\n top: 5,\n }\n },\n '&$filled&:not($labelShrink)': {\n top: 15,\n '$marginDense &': {\n top: 20,\n },\n },\n },\n labelShrink: {\n top: 0,\n },\n helperText: {\n marginBottom: -20,\n },\n focused: {},\n disabled: {},\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary[light ? 'dark' : 'light']}`,\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&$focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: `2px solid ${theme.palette.text.primary}`,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: `1px solid ${bottomLineColor}`,\n }\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n }\n },\n error: {\n '&:after': {\n backgroundColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n }\n },\n chip: {\n margin: '0 8px 8px 0',\n float: 'left',\n },\n marginDense: {},\n }\n}\n\nconst keyCodes = {\n BACKSPACE: 8,\n DELETE: 46,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39,\n};\n\nclass ChipInput extends React.Component {\n state = {\n chips: [],\n errorText: undefined,\n focusedChip: null,\n inputValue: '',\n isClean: true,\n isFocused: false,\n chipsUpdated: false,\n prevPropsValue: [],\n };\n\n constructor(props) {\n super(props);\n if (props.defaultValue) {\n this.state.chips = props.defaultValue;\n }\n this.labelRef = React.createRef();\n this.input = React.createRef();\n }\n\n componentDidMount() {\n if (this.props.variant === 'outlined') {\n this.labelNode = ReactDOM.findDOMNode(this.labelRef.current);\n this.forceUpdate();\n }\n }\n\n componentWillUnmount() {\n clearTimeout(this.inputBlurTimeout);\n }\n\n static getDerivedStateFromProps(props, state) {\n let newState = null;\n\n if (props.value && props.value.length !== state.prevPropsValue.length) {\n newState = {prevPropsValue: props.value};\n if (props.clearInputValueOnChange) {\n newState.inputValue = '';\n }\n }\n\n // if change detection is only needed for clearInputValueOnChange\n if (props.clearInputValueOnChange && props.value && props.value.length !== state.prevPropsValue.length) {\n newState = {prevPropsValue: props.value, inputValue: ''};\n }\n\n if (props.disabled) {\n newState = {...newState, focusedChip: null};\n }\n\n if (!state.chipsUpdated && props.defaultValue) {\n newState = {...newState, chips: props.defaultValue};\n }\n\n return newState;\n }\n\n /**\n * Blurs this component.\n * @public\n */\n blur() {\n if (this.input) {\n this.actualInput.blur();\n }\n }\n\n /**\n * Focuses this component.\n * @public\n */\n focus = () => {\n this.actualInput.focus();\n if (this.state.focusedChip) {\n this.setState({focusedChip: null});\n }\n }\n\n handleInputBlur = event => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n this.setState({ isFocused: false });\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n const value = event.target.value;\n let addChipOptions;\n switch (this.props.blurBehavior) {\n case 'add-or-clear':\n addChipOptions = { clearInputOnFail: true };\n // falls through\n case 'add':\n if (this.props.delayBeforeAdd) {\n // Let's assume that we only want to add the existing content as chip, when\n // another event has not added a chip within 200ms .\n // e.g. onSelection Callback in Autocomplete case\n const numChipsBefore = (this.props.value || this.state.chips).length;\n this.inputBlurTimeout = setTimeout(() => {\n const numChipsAfter = (this.props.value || this.state.chips).length;\n if (numChipsBefore === numChipsAfter) {\n this.handleAddChip(value, addChipOptions);\n } else {\n this.clearInput();\n }\n }, 150);\n } else {\n this.handleAddChip(value, addChipOptions);\n }\n break;\n\n case 'clear':\n this.clearInput();\n break;\n\n default:\n break;\n }\n }\n\n handleInputFocus = event => {\n this.setState({ isFocused: true });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n }\n\n handleKeyDown = event => {\n const { focusedChip } = this.state;\n this._keyPressed = false;\n this._preventChipCreation = false;\n\n if (this.props.onKeyDown) {\n // Needed for arrow controls on menu in autocomplete scenario\n this.props.onKeyDown(event);\n // Check if the callback marked the event as isDefaultPrevented() and skip further actions\n // enter key for example should not always add the current value of the inputField\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n const chips = this.props.value || this.state.chips;\n if (this.props.newChipKeyCodes.includes(event.keyCode) || this.props.newChipKeys.includes(event.key)) {\n const result = this.handleAddChip(event.target.value);\n if (result !== false) {\n event.preventDefault();\n }\n return;\n }\n\n switch (event.keyCode) {\n case keyCodes.BACKSPACE:\n if (event.target.value === '') {\n if (focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip) {\n this.setState({focusedChip: focusedChip - 1});\n }\n } else {\n this.setState({focusedChip: chips.length - 1});\n }\n }\n break;\n case keyCodes.DELETE:\n if (event.target.value === '' && focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip <= chips.length - 1) {\n this.setState({ focusedChip });\n }\n }\n break;\n case keyCodes.LEFT_ARROW:\n if (focusedChip == null && event.target.value === '' && chips.length) {\n this.setState({ focusedChip: chips.length - 1 });\n } else if (focusedChip != null && focusedChip > 0) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n break;\n case keyCodes.RIGHT_ARROW:\n if (focusedChip != null && focusedChip < chips.length - 1) {\n this.setState({ focusedChip: focusedChip + 1 });\n } else {\n this.setState({ focusedChip: null });\n }\n break;\n default:\n this.setState({ focusedChip: null });\n break;\n }\n }\n\n handleKeyUp = event => {\n if (!this._preventChipCreation && (this.props.newChipKeyCodes.indexOf(event.keyCode) >= 0 || this.props.newChipKeys.indexOf(event.key) >= 0) && this._keyPressed) {\n this.clearInput();\n } else {\n this.updateInput(event.target.value);\n }\n if (this.props.onKeyUp) {\n this.props.onKeyUp(event);\n }\n }\n\n handleKeyPress = event => {\n this._keyPressed = true;\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n }\n\n handleUpdateInput = e => {\n if (this.props.inputValue == null) {\n this.updateInput(e.target.value);\n }\n\n if (this.props.onUpdateInput) {\n this.props.onUpdateInput(e);\n }\n }\n\n /**\n * Handles adding a chip.\n * @param {string|object} chip Value of the chip, either a string or an object (if dataSourceConfig is set)\n * @param {object=} options Additional options\n * @param {boolean=} options.clearInputOnFail If `true`, and `onBeforeAdd` returns `false`, clear the input\n * @returns True if the chip was added (or at least `onAdd` was called), false if adding the chip was prevented\n */\n handleAddChip(chip, options) {\n if (this.props.onBeforeAdd && !this.props.onBeforeAdd(chip)) {\n this._preventChipCreation = true;\n if (options && options.clearInputOnFail) {\n this.clearInput();\n }\n return false;\n }\n this.clearInput();\n const chips = this.props.value || this.state.chips;\n\n if (this.props.dataSourceConfig) {\n if (typeof chip === 'string') {\n chip = {\n [this.props.dataSourceConfig.text]: chip,\n [this.props.dataSourceConfig.value]: chip\n };\n }\n\n if (this.props.allowDuplicates || !chips.some(c => c[this.props.dataSourceConfig.value] === chip[this.props.dataSourceConfig.value])) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n\n if (chip.trim().length > 0) {\n if (this.props.allowDuplicates || !chips.includes(chip)) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n return false;\n }\n\n handleDeleteChip(chip, i) {\n if (!this.props.value) {\n const chips = this.state.chips.slice();\n const changed = chips.splice(i, 1); // remove the chip at index i\n if (changed) {\n let focusedChip = this.state.focusedChip;\n if (this.state.focusedChip === i) {\n focusedChip = null;\n } else if (this.state.focusedChip > i) {\n focusedChip = this.state.focusedChip - 1;\n }\n this.updateChips(chips, { focusedChip });\n }\n } else if (this.props.onDelete) {\n this.props.onDelete(chip, i);\n }\n }\n\n updateChips(chips, additionalUpdates = {}) {\n this.setState({ chips, chipsUpdated: true, ...additionalUpdates });\n if (this.props.onChange) {\n this.props.onChange(chips);\n }\n }\n\n /**\n * Clears the text field for adding new chips.\n * This only works in uncontrolled input mode, i.e. if the inputValue prop is not used.\n * @public\n */\n clearInput() {\n this.updateInput('');\n }\n\n updateInput(value) {\n this.setState({ inputValue: value });\n }\n\n /**\n * Set the reference to the actual input, that is the input of the Input.\n * @param {object} ref - The reference\n */\n setActualInputRef = ref => {\n this.actualInput = ref;\n this.props.inputRef && this.props.inputRef(ref);\n }\n\n render() {\n const {\n allowDuplicates,\n alwaysShowPlaceholder,\n blurBehavior,\n children,\n chipRenderer = defaultChipRenderer,\n classes,\n className,\n clearInputValueOnChange,\n dataSource,\n dataSourceConfig,\n defaultValue,\n delayBeforeAdd,\n disabled,\n disableUnderline,\n error,\n filter,\n FormHelperTextProps,\n fullWidth,\n fullWidthInput,\n helperText,\n id,\n InputProps = {},\n inputRef,\n InputLabelProps = {},\n inputValue,\n label,\n newChipKeyCodes,\n newChipKeys,\n onBeforeAdd,\n onAdd,\n onBlur,\n onDelete,\n onChange,\n onFocus,\n onKeyDown,\n onKeyPress,\n onKeyUp,\n onUpdateInput,\n placeholder,\n readOnly,\n required,\n rootRef,\n value,\n variant,\n ...other\n } = this.props;\n\n const chips = value || this.state.chips || [];\n const actualInputValue = inputValue != null ? inputValue : this.state.inputValue;\n\n const hasInput = (this.props.value || actualInputValue).length || actualInputValue.length;\n const shrinkFloatingLabel = InputLabelProps.shrink != null\n ? InputLabelProps.shrink\n : (label != null && (hasInput || this.state.isFocused || chips.length));\n\n const chipComponents = chips.map((chip, i) => {\n const value = dataSourceConfig ? chip[dataSourceConfig.value] : chip;\n return chipRenderer(\n {\n value,\n text: dataSourceConfig ? chip[dataSourceConfig.text] : chip,\n chip,\n isDisabled: !!disabled,\n isReadOnly: readOnly,\n isFocused: this.state.focusedChip === i,\n handleClick: () => this.setState({focusedChip: i}),\n handleDelete: () => this.handleDeleteChip(chip, i),\n className: classes.chip\n },\n i\n );\n });\n\n const InputMore = {}\n if (variant === 'outlined') {\n InputMore.notched = shrinkFloatingLabel;\n InputMore.labelWidth =\n (shrinkFloatingLabel && this.labelNode && this.labelNode.offsetWidth) ||\n 0;\n }\n\n if (variant !== 'standard') {\n InputMore.startAdornment = <React.Fragment>{chipComponents}</React.Fragment>;\n } else {\n InputProps.disableUnderline = true;\n }\n\n const InputComponent = variantComponent[variant];\n\n return <FormControl\n ref={rootRef}\n fullWidth={fullWidth}\n className={Utils.clsx(className, classes.root, other.margin === 'dense' && classes.marginDense)}\n error={error}\n required={chips.length > 0 ? undefined : required}\n onClick={this.focus}\n disabled={disabled}\n variant={variant}\n {...other}\n >\n {label && <InputLabel\n htmlFor={id}\n classes={{root: Utils.clsx(classes[variant], classes.label), shrink: classes.labelShrink}}\n shrink={shrinkFloatingLabel}\n focused={this.state.isFocused}\n variant={variant}\n ref={this.labelRef}\n required={required}\n {...InputLabelProps}\n >\n {label}\n </InputLabel>}\n <div\n className={Utils.clsx(\n classes[variant],\n classes.chipContainer,\n this.state.isFocused && classes.focused,\n !disableUnderline && variant === 'standard' && classes.underline,\n disabled && classes.disabled,\n label && classes.labeled,\n error && classes.error\n )}\n >\n {variant === 'standard' && chipComponents}\n <InputComponent\n ref={this.input}\n classes={{\n input: Utils.clsx(classes.input, classes[variant]),\n root: Utils.clsx(classes.inputRoot, classes[variant])\n }}\n id={id}\n value={actualInputValue}\n onChange={this.handleUpdateInput}\n onKeyDown={this.handleKeyDown}\n onKeyPress={this.handleKeyPress}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n inputRef={this.setActualInputRef}\n disabled={disabled}\n fullWidth={fullWidthInput}\n placeholder={(!hasInput && (shrinkFloatingLabel || label == null)) || alwaysShowPlaceholder ? placeholder : null}\n readOnly={readOnly}\n {...InputProps}\n {...InputMore}\n />\n </div>\n {helperText && <FormHelperText\n {...FormHelperTextProps}\n className={FormHelperTextProps ? Utils.clsx(FormHelperTextProps.className, classes.helperText) : classes.helperText}\n >\n {helperText}\n </FormHelperText>}\n </FormControl>;\n }\n}\n\nChipInput.propTypes = {\n /** Allows duplicate chips if set to true. */\n allowDuplicates: PropTypes.bool,\n /** If true, the placeholder will always be visible. */\n alwaysShowPlaceholder: PropTypes.bool,\n /** Behavior when the chip input is blurred: `'clear'` clears the input, `'add'` creates a chip and `'ignore'` keeps the input. */\n blurBehavior: PropTypes.oneOf(['clear', 'add', 'add-or-clear', 'ignore']),\n /** A function of the type `({ value, text, chip, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, className }, key) => node` that returns a chip based on the given properties. This can be used to customize chip styles. Each item in the `dataSource` array will be passed to `chipRenderer` as arguments `chip`, `value` and `text`. If `dataSource` is an array of objects and `dataSourceConfig` is present, then `value` and `text` will instead correspond to the object values defined in `dataSourceConfig`. If `dataSourceConfig` is not set and `dataSource` is an array of objects, then a custom `chipRenderer` must be set. `chip` is always the raw value from `dataSource`, either an object or a string. */\n chipRenderer: PropTypes.func,\n /** Whether the input value should be cleared if the `value` prop is changed. */\n clearInputValueOnChange: PropTypes.bool,\n /** Data source for auto complete. This should be an array of strings or objects. */\n dataSource: PropTypes.array,\n /** Config for objects list dataSource, e.g. `{ text: 'text', value: 'value' }`. If not specified, the `dataSource` must be a flat array of strings or a custom `chipRenderer` must be set to handle the objects. */\n dataSourceConfig: PropTypes.shape({\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n }),\n /** The chips to display by default (for uncontrolled mode). */\n defaultValue: PropTypes.array,\n /** Whether to use `setTimeout` to delay adding chips in case other input events like `onSelection` need to fire first */\n delayBeforeAdd: PropTypes.bool,\n /** Disables the chip input if set to true. */\n disabled: PropTypes.bool,\n /** Disable the input underline. Only valid for 'standard' variant */\n disableUnderline: PropTypes.bool,\n /** Props to pass through to the `FormHelperText` component. */\n FormHelperTextProps: PropTypes.object,\n /** If true, the chip input will fill the available width. */\n fullWidth: PropTypes.bool,\n /** If true, the input field will always be below the chips and fill the available space. By default, it will try to be beside the chips. */\n fullWidthInput: PropTypes.bool,\n /** Helper text that is displayed below the input. */\n helperText: PropTypes.node,\n /** Props to pass through to the `InputLabel`. */\n InputLabelProps: PropTypes.object,\n /** Props to pass through to the `Input`. */\n InputProps: PropTypes.object,\n /** Use this property to pass a ref callback to the native input component. */\n inputRef: PropTypes.func,\n /** The input value (enables controlled mode for the text input if set). */\n inputValue: PropTypes.string,\n /* The content of the floating label. */\n label: PropTypes.node,\n /** The key codes (`KeyboardEvent.keyCode`) used to determine when to create a new chip. */\n newChipKeyCodes: PropTypes.arrayOf(PropTypes.number),\n /** The keys (`KeyboardEvent.key`) used to determine when to create a new chip. */\n newChipKeys: PropTypes.arrayOf(PropTypes.string),\n /** Callback function that is called when a new chip was added (in controlled mode). */\n onAdd: PropTypes.func,\n /** Callback function that is called with the chip to be added and should return true to add the chip or false to prevent the chip from being added without clearing the text input. */\n onBeforeAdd: PropTypes.func,\n /** Callback function that is called when the chips change (in uncontrolled mode). */\n onChange: PropTypes.func,\n /** Callback function that is called when a new chip was removed (in controlled mode). */\n onDelete: PropTypes.func,\n /** Callback function that is called when the input changes. */\n onUpdateInput: PropTypes.func,\n /** A placeholder that is displayed if the input has no values. */\n placeholder: PropTypes.string,\n /** Makes the chip input read-only if set to true. */\n readOnly: PropTypes.bool,\n /** The chips to display (enables controlled mode if set). */\n value: PropTypes.array,\n /** The variant of the Input component */\n variant: PropTypes.oneOf(['outlined', 'standard', 'filled'])\n}\n\nChipInput.defaultProps = {\n allowDuplicates: false,\n blurBehavior: 'clear',\n clearInputValueOnChange: false,\n delayBeforeAdd: false,\n disableUnderline: false,\n newChipKeyCodes: [13],\n newChipKeys: ['Enter'],\n variant: 'standard'\n};\n\nexport default withStyles(styles, {name: 'WAMuiChipInput'})(ChipInput);\n\nexport const defaultChipRenderer = ({\n value,\n text,\n isFocused,\n isDisabled,\n isReadOnly,\n handleClick,\n handleDelete,\n className\n}, key) =>\n <Chip\n key={key}\n className={className}\n style={{\n pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,\n backgroundColor: isFocused ? blue[300] : undefined\n }}\n onClick={handleClick}\n onDelete={handleDelete}\n label={text}\n />;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ChipInput from './ChipInput';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigLanguage extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr);\n if (this.props.schema.delimiter && typeof value === 'string') {\n const parts = value.split(this.props.schema.delimiter).map(a => a.trim()).filter(a => a);\n this.setState({ value: parts });\n } else {\n this.setState({ value: value || [] });\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n const { attr,schema } = this.props;\n const { value } = this.state;\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <ChipInput\n value={value}\n disabled={!!disabled}\n label={this.getText(schema.label)}\n error={!!error}\n onAdd={chip => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.push(chip);\n this.setState({ value: newValue, prevValue: '' }, () => {\n if (this.props.schema.delimiter) {\n this.onChange(attr, newValue.join(this.props.schema.delimiter + ' '));\n } else {\n this.onChange(attr, newValue);\n }\n });\n }}\n onDelete={(chip, index) => {\n const newValue = JSON.parse(JSON.stringify(value));\n newValue.splice(index, 1);\n this.setState({ value: newValue, prevValue: '' }, () => {\n if (this.props.schema.delimiter) {\n this.onChange(attr, newValue.join(this.props.schema.delimiter + ' '));\n } else {\n this.onChange(attr, newValue);\n }\n });\n }}\n />\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigLanguage.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigLanguage);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@mui/styles';\nimport { ChromePicker } from 'react-color';\n\nimport IconButton from '@mui/material/IconButton';\nimport TextField from '@mui/material/TextField';\nimport Dialog from '@mui/material/Dialog';\n\nimport ClearIcon from '@mui/icons-material/Close';\n\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport ColorPicker from '@iobroker/adapter-react-v5/Components/ColorPicker';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({});\n\nclass ConfigColor extends ConfigGeneric {\n renderColorDialog() {\n return !!this.state.showColorDialog && <Dialog\n onClose={() => this.setState({showColorDialog: false})}\n open={this.state.showColorDialog}>\n <ChromePicker\n color={this.state.colorDialogValue}\n onChange={value => {\n this.setState({colorDialogValue: value}, () =>\n this.onChange(this.props.attr, ColorPicker.getColor(this.state.colorDialogValue, true)));\n }}\n />\n </Dialog>;\n }\n\n renderItem(error, disabled, defaultValue) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n let textColor = Utils.isUseBright(value, null);\n if (textColor === null) {\n textColor = undefined;\n }\n return <>\n { this.renderColorDialog() }\n <TextField\n variant=\"standard\"\n disabled={!!disabled}\n style={{minWidth: 100, width: 'calc(100% - 8px)'}}\n label={this.getText(this.props.schema.label)}\n value={value || ''}\n onClick={() => this.setState({showColorDialog: true, colorDialogValue: value})}\n onChange={e => {\n const color = e.target.value;\n this.onChange(this.props.attr, color);\n }}\n inputProps={{\n style: {\n //paddingLeft: noPadding ? 0 : 8,\n backgroundColor: value,\n color: textColor ? '#FFF' : '#000'\n }\n }}\n InputProps={{\n endAdornment: value ?\n <IconButton\n disabled={!!this.props.onPaste}\n size=\"small\"\n onClick={e => {\n e.stopPropagation();\n this.onChange(this.props.attr, '');\n }}>\n <ClearIcon/>\n </IconButton>\n : undefined,\n }}\n InputLabelProps={{shrink: true}}\n />\n </>;\n }\n}\n\nConfigColor.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigColor);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport TextField from '@mui/material/TextField';\nimport Fab from '@mui/material/Fab';\n\nimport IconGpsFixed from '@mui/icons-material/GpsFixed';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n width: {\n width: 'calc(100% - 40px)',\n }\n});\n\nclass ConfigCoordinates extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n }\n\n getSystemCoordinates() {\n return this.props.socket.getSystemConfig()\n .then(obj => {\n if (obj && obj.common && (obj.common.longitude || obj.common.latitude)) {\n window.alert(I18n.t('ra_Used system settings'));\n this.setState({ value: obj.common.latitude + (this.props.schema.divider || ',') + obj.common.longitude });\n } else {\n window.alert(I18n.t('ra_Cannot determine position: System settings are empty and GPS detection is disabled in browser'));\n }\n });\n }\n\n getCoordinates() {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(\n position => {\n if (position && position.coords) {\n this.setState({value: position.coords.latitude + (this.props.schema.divider || ',') + position.coords.longitude});\n } else {\n this.getSystemCoordinates();\n }\n },\n error => {\n this.getSystemCoordinates();\n }\n );\n } else {\n this.getSystemCoordinates();\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n return <>\n <TextField\n variant=\"standard\"\n className={this.props.classes.width}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n onChange={e => {\n const value = e.target.value;\n this.setState({value}, () =>\n this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n <Fab size=\"small\" onClick={() => this.getCoordinates()}><IconGpsFixed /></Fab>\n </>;\n }\n}\n\nConfigCoordinates.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigCoordinates);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Grid from '@mui/material/Grid';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst getOrLoadRemote = (remote, shareScope, remoteFallbackUrl = undefined) =>\n new Promise((resolve, reject) => {\n // check if remote exists on window\n if (!window[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote = document.querySelector(`script[data-webpack=\"${remote}\"]`);\n // when remote is loaded.\n const onload = async () => {\n // check if it was initialized\n if (window[remote]) {\n if (!window[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use default share scope object passed in manually\n await window[remote].init(shareScope.default);\n } else {\n // otherwise, init share scope as usual\n // eslint-disable-next-line\n await window[remote].init(__webpack_share_scopes__[shareScope]);\n }\n // mark remote as initialized\n window[remote].__initialized = true;\n }\n } else {\n console.error('Cannot load ' + remote);\n return reject('Cannot load ' + remote);\n }\n // resolve promise so marking remote as loaded\n resolve(window[remote]);\n };\n\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(`Cannot Find Remote ${remote} to inject`);\n }\n } else {\n // remote already instantiated, resolve\n resolve(window[remote]);\n }\n });\n\nconst loadComponent = (remote, sharedScope, module, url) => async () => {\n const container = await getOrLoadRemote(remote, sharedScope, url);\n const factory = await container.get(module);\n const Module = factory();\n return Module;\n};\n\nclass ConfigCustom extends Component {\n constructor(props) {\n super(props);\n // schema.url - location of Widget\n // schema.name - Component name\n // schema.i18n - i18n\n\n this.state = {\n Component: null,\n error: '',\n };\n }\n\n // load component dynamically\n async componentDidMount() {\n if (!this.props.schema.url) {\n console.error('URL is empty. Cannot load custom component!');\n this.setState({ error: 'URL is empty. Cannot load custom component!' });\n return;\n }\n\n let url;\n /*if (this.props.schema.url.startsWith('http:') || this.props.schema.url.startsWith('https:')) {\n url = this.props.schema.url;\n } else */\n if (this.props.schema.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${this.props.schema.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${this.props.adapterName}/${this.props.schema.url}`;\n }\n\n if (this.props.schema.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n await fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => console.log(`Cannot load i18n \"${file}\": ${error}`));\n } else if (this.props.schema.i18n && typeof this.props.schema.i18n === 'object') {\n try {\n I18n.extendTranslations(this.props.schema.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n\n try {\n const [uniqueName, fileToLoad, ...componentName] = this.props.schema.name.split('/');\n console.log(uniqueName, fileToLoad, componentName.join('/'));\n // const component = await window.importFederation(uniqueName, {url, format: 'esm', from: 'vite'}, fileToLoad);\n const component = (await loadComponent(uniqueName, 'default', `./${fileToLoad}`, url)()).default;\n\n if (!component || !component || !component[componentName.join('/')]) {\n const keys = Object.keys(component || {});\n console.error('URL is empty. Cannot load custom component!');\n this.setState({ error: `Component ${this.props.schema.name} not found in ${this.props.schema.url}. Found: ${keys.join(', ')}` });\n } else {\n this.setState({ Component: component[componentName.join('/')] });\n }\n } catch (error) {\n this.setState({ error: `Cannot import from ${this.props.schema.url}: ${error}` });\n }\n }\n\n render() {\n const Component = this.state.Component;\n\n // render temporary placeholder\n if (!Component) {\n if (this.state.error) {\n return;\n } else {\n const schema = this.props.schema || {};\n\n const item = <Grid\n item\n xs={schema.xs || undefined}\n lg={schema.lg || undefined}\n md={schema.md || undefined}\n sm={schema.sm || undefined}\n style={Object.assign({}, {\n marginBottom: 0,\n //marginRight: 8,\n textAlign: 'left',\n width: schema.type === 'divider' || schema.type === 'header' ? schema.width || '100%' : undefined\n }, schema.style, this.props.themeType === 'dark' ? schema.darkStyle : {})}>\n {this.state.error ? <div>{this.state.error}</div> : <LinearProgress />}\n </Grid>;\n\n if (schema.newLine) {\n return <>\n <div style={{ flexBasis: '100%', height: 0 }} />\n {item}\n </>;\n } else {\n return item;\n }\n }\n }\n\n return <Component {...this.props} />;\n }\n}\n\nConfigCustom.propTypes = {\n socket: PropTypes.object,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n attr: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object.isRequired,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default ConfigCustom;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { DatePicker } from '@mui/x-date-pickers';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n indeterminate: {\n opacity: 0.5\n }\n});\n\nclass ConfigDatePicker extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(error, disabled, defaultValue) {\n return <DatePicker\n fullWidth\n margin=\"normal\"\n format={this.props.systemConfig.dateFormat.toLowerCase().replace('mm','MM')}\n error={!!error}\n disabled={!!disabled}\n value={this.state.value === null || this.state.value === undefined ? new Date() : this.state.value}\n KeyboardButtonProps={{\n 'aria-label': 'change date',\n }}\n inputProps={{ maxLength: this.props.schema.maxLength || this.props.schema.max || undefined }}\n onChange={value => {\n this.setState({ value }, () =>\n this.onChange(this.props.attr, value));\n }}\n InputLabelProps={{\n shrink: true,\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n }\n}\n\nConfigDatePicker.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigDatePicker);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport Dropzone from 'react-dropzone';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\n\nimport IconRefresh from '@mui/icons-material/Refresh';\nimport IconUpload from '@mui/icons-material/UploadFile';\nimport IconDelete from '@mui/icons-material/Delete';\nimport IconPlay from '@mui/icons-material/PlayArrow';\nimport IconAudio from '@mui/icons-material/MusicNote';\nimport IconVideo from '@mui/icons-material/Videocam';\nimport IconText from '@mui/icons-material/Article';\nimport IconCode from '@mui/icons-material/Code';\nimport { FaFileUpload as UploadIcon } from 'react-icons/fa';\n\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 42px)'\n },\n fullWidthTwoButtons: {\n width: 'calc(100% - 84px)'\n },\n fullWidthThreeButtons: {\n width: 'calc(100% - 126x)'\n },\n dropZone: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n },\n dropZoneEmpty: {\n\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n\n uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)'\n },\n\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex'\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default'\n },\n error: {\n border: '2px solid red'\n },\n deleteButton: {\n\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n }\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFileSelector extends ConfigGeneric {\n constructor(props) {\n super(props);\n this.dropzoneRef = React.createRef();\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.objectID = (this.props.schema.objectID || '0_userdata.0').replace('%INSTANCE%', this.props.instance);\n this.path = this.props.schema.upload;\n if (this.path) {\n if (this.path === '/') {\n this.path = '';\n } else {\n if (!this.path.endsWith('/')) {\n this.path = this.path + '/';\n }\n }\n }\n\n // read files\n this.updateFiles()\n .then(() => {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n });\n }\n\n updateFiles() {\n return this.readFiles(this.props.schema.pattern)\n .then(files => this.setState({ files }));\n }\n\n async readFolder(folderName, files, filter) {\n try {\n const dirFiles = await this.props.socket.readDir(this.objectID, folderName.replace(/^\\//, '') || null);\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n if (file.isDir) {\n // read it\n await this.readFolder(`${folderName + file.file}/`, files, filter);\n } else {\n let ok = false;\n if (filter === '*.*' && file.file.includes('.')) {\n ok = true;\n } else if (!filter || filter === '*') {\n ok = true;\n } else if (filter === '.*' && file.file.startsWith('.')) {\n ok = true;\n } else {\n const regExp = new RegExp('^' + filter.replace(/\\./g, '\\\\.').replace(/\\*/g,'.*') + '$');\n ok = regExp.test(file.file);\n }\n\n ok && files.push({ name: folderName + file.file, size: file.stats ? Utils.formatBytes(file.stats.size) : '--' })\n }\n }\n } catch (e) {\n console.error(`Cannot read \"${folderName}\": ${e}`);\n }\n\n return files;\n }\n\n async readFiles(pattern) {\n const files = [];\n pattern = pattern || this.props.schema.pattern;\n if (!pattern) {\n pattern = '**/*.*';\n }\n let filter;\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n filter = pattern;\n } else {\n filter = pattern.substring(pos + 1);\n }\n\n if (pattern.startsWith('**')) {\n // read all folders\n await this.readFolder('/', files, filter);\n } else {\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n await this.readFolder('/', files, filter);\n } else {\n const folder = pattern.substring(0, pos + 1);\n await this.readFolder(folder, files, filter);\n }\n }\n\n return files;\n }\n\n onDrop(acceptedFiles) {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n const maxSize = this.props.schema.maxSize || (2 * 1024 * 1024);\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = 'image/' + file.name.split('.').pop().toLowerCase();\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n return window.alert(I18n.t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result)\n .reduce((data, byte) => data + String.fromCharCode(byte), ''))}`;\n\n this.props.socket.writeFile64(this.objectID, this.path + file.name, base64)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot upload file: ' + e));\n };\n reader.readAsArrayBuffer(file);\n }\n\n renderDeleteDialog() {\n if (!this.state.deleteFile) {\n return null;\n }\n return <ConfirmDialog\n title={ I18n.t('ra_Are you sure?') }\n text={ I18n.t('ra_File will be deleted') }\n ok={ I18n.t('ra_Delete') }\n cancel={ I18n.t('ra_Cancel') }\n onClose={isOk => {\n const deleteFile = this.state.deleteFile;\n this.setState({deleteFile: false}, () => {\n if (isOk) {\n this.props.socket.deleteFile(this.objectID, deleteFile)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot delete file: ' + e));\n }\n });\n }}\n />;\n }\n\n static base64ToArrayBuffer(base64) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n loadFile() {\n return this.props.socket.readFile(this.objectID, this.state.value, true);\n }\n\n play() {\n this.loadFile()\n .then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n context.decodeAudioData(buf, buffer => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n }, err => window.alert('Cannot play: ' + err));\n }\n });\n }\n\n getIcon(item) {\n if (!item || !item.extension) {\n return null;\n }\n if (IMAGE_EXT.includes(item.extension)) {\n return <div className={this.props.classes.selectedImage} style={{\n backgroundImage: `url(${this.imagePrefix}/${this.objectID}/${item.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }} />;\n } else if (AUDIO_EXT.includes(item.extension)) {\n return <IconAudio />;\n } else if (DOC_EXT.includes(item.extension)) {\n return <IconText />;\n } else if (VIDEO_EXT.includes(item.extension)) {\n return <IconVideo />;\n } else if (JS_EXT.includes(item.extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.files) {\n return null;\n }\n let folders = [];\n if (!this.props.schema.withFolder) {\n this.state.files.forEach(file => {\n const pos = file.name.lastIndexOf('/');\n if (pos === -1) {\n if (!folders.includes('/')) {\n folders.push('/');\n }\n } else {\n const folder = file.name.substring(0, pos + 1);\n if (!folders.includes(folder)) {\n folders.push(folder);\n }\n }\n });\n }\n\n const selectOptions = this.state.files\n .map(file => ({\n value: file.name,\n label: !this.props.schema.withFolder && folders.length === 1 ? `${file.name.substring(folders[0].length)}` : `${file.name}` + (this.props.schema.noSize ? '' : `(${file.size})`),\n extension: file.name.toLowerCase().split('.').pop(),\n }));\n\n if (!this.props.schema.noNone) {\n selectOptions.unshift({label: I18n.t('ra_none'), value: ''});\n }\n\n // eslint-disable-next-line\n const item = selectOptions.find(item => item.value === this.state.value);\n\n let buttons = 0;\n\n if (this.props.schema.upload) {\n buttons++;\n }\n if (this.props.schema.refresh) {\n buttons++;\n }\n let play = this.state.value && (this.state.value.endsWith('.mp3') || this.state.value.endsWith('.ogg') || this.state.value.endsWith('.wav'));\n // show play button\n if (play) {\n buttons++;\n }\n\n const element = <div className={this.props.classes.fullWidth}>\n <FormControl variant=\"standard\" style={{width: `calc(100% - ${buttons * 42}px)`}}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => {\n return <>{this.getIcon(item)}<span>{item?.label || ''}</span></>\n }}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () =>\n this.onChange(this.props.attr, this.state.value));\n }}\n >\n {selectOptions.map(item => {\n return <MenuItem key={item.value} value={item.value}>\n <ListItemIcon>{this.getIcon(item)}</ListItemIcon>\n <ListItemText>{item.label}</ListItemText>\n {this.props.schema.delete && item.value ?\n <IconButton className={this.props.classes.deleteButton} size=\"small\"\n onClick={() => this.setState({deleteFile: item.value})}><IconDelete/></IconButton> : null}\n </MenuItem>;\n })}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>\n { this.props.schema.refresh && <IconButton onClick={() => this.updateFiles()}><IconRefresh /></IconButton> }\n { this.props.schema.upload && <IconButton onClick={() => this.dropzoneRef.current?.open()}><IconUpload /></IconButton> }\n { play && <IconButton style={{ color: '#00FF00' }} onClick={() => this.play()}><IconPlay /></IconButton> }\n </div>;\n\n if (!this.props.schema.upload) {\n return <>{element}{this.renderDeleteDialog()}</>;\n } else {\n let accept = {'*/*': []};\n if (this.props.schema.pattern) {\n const last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\\./, '');\n if (last === 'png' || last === 'jpg' || last === 'svg') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg']\n };\n } else if (last === 'mp3' || last === 'ogg' || last === 'wav') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'ics') {\n accept = {\n 'text/calendar': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'txt') {\n accept = {\n 'text/plain': ['.txt']\n };\n } else if (last === 'pem') {\n accept = {\n 'text/plain': ['.pem']\n };\n } else if (last === 'pem') {\n accept = {\n '*/*': ['.' + last]\n };\n }\n }\n\n return <Dropzone\n ref={this.dropzoneRef}\n multiple={false}\n accept={accept}\n noKeyboard\n noClick\n maxSize={this.props.schema.maxSize || 2 * 1024 * 1024}\n onDragEnter={() => {\n this.setState({ uploadFile: 'dragging' });\n }}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert((errors && errors[0] && errors[0].errors && errors[0].errors[0] && errors[0].errors[0].message) || I18n.t('Cannot upload'));\n } else {\n return this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => <div\n className={Utils.clsx(\n this.props.classes.uploadDiv,\n this.state.uploadFile === 'dragging' && this.props.classes.uploadDivDragging,\n disabled && this.props.classes.disabledOpacity,\n )}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n {this.state.uploadFile === 'dragging' ? <div className={Utils.clsx(this.props.classes.uploadCenterDiv, this.state.uploadError && this.props.classes.error)}>\n <div className={this.props.classes.uploadCenterTextAndIcon}>\n <UploadIcon className={this.props.classes.uploadCenterIcon} />\n <div className={this.props.classes.uploadCenterText}>{\n this.state.uploadFile === 'dragging' ? I18n.t('ra_Drop file here') :\n I18n.t('ra_Place your files here or click here to open the browse dialog')}</div>\n </div>\n </div> : null}\n {element}\n {this.renderDeleteDialog()}\n </div>}\n </Dropzone>;\n }\n }\n}\n\nConfigFileSelector.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFileSelector);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconText from '@mui/icons-material/Article';\nimport IconVideo from '@mui/icons-material/Videocam';\nimport IconCode from '@mui/icons-material/Code';\nimport IconPlay from '@mui/icons-material/PlayArrow';\n\nimport FileSelectDialog from '@iobroker/adapter-react-v5/Dialogs/FileSelect';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfigFileSelector from './ConfigFileSelector';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 69px)',\n marginRight: 4,\n },\n fullWidthIcon: {\n width: 'calc(100% - 119px)',\n marginRight: 4,\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n }\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFile extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n this.setState({ value });\n }\n\n static getDerivedStateFromProps(props, state) {\n const value = ConfigGeneric.getValue(props.data, props.attr);\n if (value === null || value === undefined || value.toString().trim() !== (state.value || '').toString().trim()) {\n return { value };\n } else {\n return null;\n }\n }\n\n loadFile() {\n const pos = this.state.value.indexOf('/');\n if (pos !== -1) {\n const adapter = this.state.value.substring(0, pos);\n const path = this.state.value.substring(pos + 1);\n return this.props.socket.readFile(adapter, path, true);\n }\n }\n\n play() {\n this.loadFile()\n .then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n context.decodeAudioData(buf, buffer => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n }, err => window.alert('Cannot play: ' + err));\n }\n });\n }\n\n getIcon() {\n const extension = this.state.value.split('.').pop().toLowerCase();\n if (IMAGE_EXT.includes(extension)) {\n return <div className={this.props.classes.selectedImage} style={{\n backgroundImage: `url(${this.imagePrefix}/${this.state.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }} />;\n } else if (AUDIO_EXT.includes(extension)) {\n return <IconButton style={{ color: '#00FF00' }} onClick={() => this.play()}><IconPlay /></IconButton>;\n } else if (DOC_EXT.includes(extension)) {\n return <IconText />;\n } else if (VIDEO_EXT.includes(extension)) {\n return <IconVideo />;\n } else if (JS_EXT.includes(extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderFileBrowser() {\n if (!this.state.showFileBrowser) {\n return null;\n } else {\n return <FileSelectDialog\n imagePrefix={this.props.imagePrefix}\n socket={this.props.socket}\n selected={this.state.value}\n onClose={() => this.setState({ showFileBrowser: false})}\n onOk={value => {\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n selectOnlyFolders={this.props.schema.selectOnlyFolders}\n allowUpload={this.props.schema.allowUpload}\n allowDownload={this.props.schema.allowDownload}\n allowCreateFolder={this.props.schema.allowCreateFolder}\n allowView={this.props.schema.allowView}\n showToolbar={this.props.schema.showToolbar}\n limitPath={this.props.schema.limitPath}\n />;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n const icon = this.getIcon();\n\n return <div className={this.props.classes.fullWidth}>\n {icon}\n <TextField\n variant=\"standard\"\n className={icon ? this.props.classes.fullWidthIcon : this.props.classes.fullWidthOneButton}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: !!this.props.schema.disableEdit\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n <Button variant=\"outlined\" onClick={() => this.setState({ showFileBrowser: true })}>...</Button>\n {this.renderFileBrowser()}\n </div>;\n }\n}\n\nConfigFile.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFile);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport TextWithIcon from '@iobroker/adapter-react-v5/Components/TextWithIcon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigFunc extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n this.props.socket.getEnums('functions')\n .then(enums => {\n const selectOptions = Object.keys(enums)\n .map(id => ({ value: this.props.schema.short ? id.replace('enum.functions.', '') : id, label: this.getText(enums[id].common.name), obj: enums[id]}));\n this.setState({ value, selectOptions });\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(item => item.value === this.state.value);\n\n return <FormControl\n variant=\"standard\"\n className={this.props.classes.fullWidth}\n >\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => item ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()}/> : ''}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () =>\n this.onChange(this.props.attr, this.state.value));\n }}\n >\n {this.state.selectOptions.map(item =>\n <MenuItem key={item.value} value={item.value} style={item.value === ConfigGeneric.DIFFERENT_VALUE ? {opacity: 0.5} : {}}>\n <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()}/>\n </MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigFunc.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFunc);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigIP extends ConfigGeneric {\n\n componentDidMount() {\n super.componentDidMount();\n this.props.socket.getHostByIp(this.props.common.host)\n .then(ips => {\n // [{name, address, family}]\n if (!this.props.schema.listenOnAllPorts) {\n ips = ips.filter(item => item.address !== '0.0.0.0' && item.address !== '::');\n }\n if (this.props.schema.onlyIp4) {\n ips = ips.filter(item => item.family === 'ipv4');\n } else\n if (this.props.schema.onlyIp6) {\n ips = ips.filter(item => item.family === 'ipv6');\n }\n ips.forEach(item => {\n if (item.address === '0.0.0.0') {\n item.name = '[IPv4] 0.0.0.0 - ' + I18n.t('ra_Listen on all IPs');\n } else\n if (item.address === '::') {\n item.name = '[IPv6] :: - ' + I18n.t('ra_Listen on all IPs');\n }\n });\n this.setState({ips});\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const item = this.state.ips?.find(item => item.address === value);\n\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => item?.name || val}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.ips?.map((item, i) =>\n <MenuItem key={i} value={item.address}>{item.name}</MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigIP.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigIP);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\n\nimport UploadImage from '@iobroker/adapter-react-v5/Components/UploadImage';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n image: {\n width: 100\n }\n});\n\nclass ConfigImageUpload extends ConfigGeneric {\n constructor(props) {\n super(props);\n this.imageRef = React.createRef();\n this.index = Date.now();\n }\n async componentDidMount() {\n super.componentDidMount();\n\n if (this.props.schema.base64) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n } else {\n this.props.socket.fileExists(this.props.adapterName + '.' + this.props.instance, this.props.attr)\n .then(exist => {\n if (exist && this.imageRef.current) {\n this.imageRef.current.src = this._getUrl();\n this.imageRef.current.style.display = 'block';\n }\n });\n }\n }\n\n _getUrl(update) {\n if (update) {\n this.index = Date.now();\n }\n let url = `files/${this.props.adapterName}.${this.props.instance}/${this.props.attr}?t=${this.index}`;\n if (window.location.port === '3000') {\n url = `${window.location.protocol}//${window.location.hostname}:8081/${url}`;\n }\n\n return url;\n }\n\n renderItem(error, disabled, defaultValue) {\n // eslint-disable-next-line\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel>\n <UploadImage\n error={!!error}\n disabled={disabled}\n accept={this.props.schema.accept}\n crop={this.props.schema.crop}\n maxSize={this.props.schema.maxSize || 256 * 1024}\n icon={this.state.value || undefined}\n removeIconFunc={() => {\n if (this.props.schema.base64) {\n this.setState({ value: null }, () =>\n this.onChange(this.props.attr, this.state.value));\n } else {\n // delete file to /instance/attr\n this.props.socket.deleteFile(this.props.adapterName + '.' + this.props.instance, this.props.attr);\n // update image\n if (this.imageRef.current) {\n this.imageRef.current.style.display = 'none';\n this.imageRef.current.src = '';\n }\n }\n }}\n onChange={base64 => {\n if (this.props.schema.base64) {\n this.setState({ value: base64 }, () =>\n this.onChange(this.props.attr, this.state.value));\n } else {\n if (base64.startsWith('data')) {\n base64 = base64.split(',')[1];\n }\n // upload file to /instance/attr\n this.props.socket.writeFile64(this.props.adapterName + '.' + this.props.instance, this.props.attr, base64)\n .then(() => {\n if (this.imageRef.current) {\n this.imageRef.current.style.display = 'block';\n this.imageRef.current.src = this._getUrl(true);\n }\n });\n }\n }}\n t={I18n.t}\n />\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n {this.props.schema.base64 ? null : <img\n src={this._getUrl()}\n ref={this.imageRef}\n className={this.props.classes.image}\n style={{display: 'none'}}\n alt=\"Background\"\n />}\n </FormControl>;\n }\n}\n\nConfigImageUpload.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigImageUpload);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n});\n\nclass ConfigInstanceSelect extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n let adapter = this.props.schema.adapter;\n if (adapter === '_dataSources') {\n adapter = undefined;\n }\n\n this.props.socket.getAdapterInstances(adapter, true)\n .then(async instances => {\n let selectOptions;\n if (this.props.schema.adapter === '_dataSources') {\n // get only \"data-sources\", like history, sql, influx\n instances = instances.filter(instance => instance && instance.common && instance.common.getHistory);\n } else if (this.props.schema.adapter) {\n instances = instances.filter(instance => instance && instance._id.startsWith('system.adapter.' + this.props.schema.adapter + '.'));\n }\n\n selectOptions = instances.map(instance => ({\n value: this.props.schema.long ? instance._id :\n (this.props.schema.short ? instance._id.split('.').pop() : instance._id.replace(/^system\\.adapter\\./, '')),\n label: `${instance.common.name} [${instance._id.replace(/^system\\.adapter\\./, '')}]`\n }));\n\n selectOptions.sort((a, b) => {\n if (a.value > b.value) {\n return 1;\n } else if (a.value < b.value) {\n return -1;\n } else {\n return 0;\n }\n });\n\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n if (this.props.schema.all) {\n selectOptions.unshift({ label: I18n.t('sch_all'), value: '*' });\n }\n\n this.setState({ value: value || '', selectOptions });\n\n await this.props.socket.subscribeObject(`system.adapter.${adapter ? adapter + '.' : ''}*`, this.onInstancesUpdate);\n });\n }\n\n componentWillUnmount() {\n this.props.socket.unsubscribeObject('system.adapter.*', this.onInstancesUpdate)\n .then(() => {});\n super.componentWillUnmount();\n }\n\n onInstancesUpdate = (id, obj) => {\n if (!id.match(/^system\\.adapter\\.[-_a-z\\d]+\\.\\d+$/)) {\n return;\n }\n const _id = this.props.schema.long ? id : (this.props.schema.short ? id.split('.').pop() : id.replace(/^system\\.adapter\\./, ''));\n const index = this.state.selectOptions.findIndex(item => item.value === _id);\n if (!obj) {\n // deleted\n if (index !== -1) {\n const selectOptions = JSON.parse(JSON.stringify(this.state.selectOptions));\n\n const newState = {};\n if (this.state.value === selectOptions[index].value) {\n newState.value = ConfigGeneric.NONE_VALUE;\n }\n selectOptions.splice(index, 1);\n newState.selectOptions = selectOptions;\n\n this.setState(newState);\n }\n } else {\n if (this.props.schema.adapter === '_dataSources' && (!obj.common || !obj.common.getHistory)) {\n return;\n }\n\n if (index === -1) {\n const selectOptions = JSON.parse(JSON.stringify(this.state.selectOptions));\n selectOptions.push({\n value: this.props.schema.long ? obj._id :\n (this.props.schema.short ? obj._id.split('.').pop() : obj._id.replace(/^system\\.adapter\\./, '')),\n label: `${obj.common.name} [${obj._id.replace(/^system\\.adapter\\./, '')}]`\n });\n selectOptions.sort((a, b) => a.label > b.label ? 1 : (a.label < b.label ? -1 : 0));\n this.setState({ selectOptions });\n }\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(item => item.value === this.state.value);\n\n return <FormControl className={this.props.classes.fullWidth} key={this.props.attr} variant=\"standard\">\n {this.props.schema.label ? <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel> : null }\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={this.state.value}\n renderValue={val => this.getText(item?.label, true)}\n onChange={e =>\n this.setState({ value: e.target.value }, () =>\n this.onChange(this.props.attr, this.state.value))}\n >\n {this.state.selectOptions.map(item =>\n <MenuItem key={item.value} value={item.value} style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}>{\n this.getText(item.label, true)\n }</MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigInstanceSelect.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigInstanceSelect);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport { Button } from '@mui/material';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport CustomModal from '../CustomModal';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/webpack-resolver';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-noconflict/theme-chrome';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n flex: {\n display: 'flex'\n },\n button: {\n height: 48,\n // marginLeft: 4,\n minWidth: 48,\n },\n wrapper: {\n width: 'calc(100vw - 40px)',\n height: 'calc(100vh - 188px)',\n }\n});\n\nclass ConfigJsonEditor extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || {};\n this.setState({ value, initialized: true });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.initialized) {\n return null;\n }\n const { classes, schema, data, attr } = this.props;\n const { value, showSelectId } = this.state;\n return <FormControl className={classes.fullWidth} variant=\"standard\">\n <div className={classes.flex}>\n <Button\n color=\"grey\"\n className={classes.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >{I18n.t('ra_JSON editor')}</Button>\n </div>\n {showSelectId ? <CustomModal\n title={this.getText(schema.label)}\n open={showSelectId}\n overflowHidden\n onClose={() => this.setState({ showSelectId: false, value: ConfigGeneric.getValue(data, attr) || {} })}\n onApply={() => this.setState({ showSelectId: false }, () => this.onChange(attr, value))}\n >\n <div className={classes.wrapper}>\n <AceEditor\n mode=\"json\"\n theme={this.props.themeName === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={value}\n width=\"100%\"\n height=\"100%\"\n onChange={newValue => this.setState({ value: newValue })}\n name=\"ConfigJsonEditor\"\n fontSize={14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true\n }}\n editorProps={{ $blockScrolling: true }}\n />\n </div>\n </CustomModal> : null}\n {schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigJsonEditor.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigJsonEditor);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nconst LANGUAGES =[\n {\n value: 'en',\n label: 'English'\n },\n {\n value: 'de',\n label: 'Deutsch'\n },\n {\n value: 'ru',\n label: 'русский'\n },\n {\n value: 'pt',\n label: 'Portugues'\n },\n {\n value: 'nl',\n label: 'Nederlands'\n },\n {\n value: 'fr',\n label: 'français'\n },\n {\n value: 'it',\n label: 'Italiano'\n },\n {\n value: 'es',\n label: 'Espanol'\n },\n {\n value: 'pl',\n label: 'Polski'\n },\n {\n value: 'zh-ch',\n label: '简体中文'\n }\n];\n\nclass ConfigLanguage extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n const languages = [...LANGUAGES];\n if (this.props.schema.system) {\n languages.unshift({value: '', label: I18n.t('ra_System language')});\n }\n\n this.setState({value: value || I18n.getLanguage(), selectOptions: languages});\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions?.find(item => item.value === this.state.value || (!item.value && !this.state.value));\n\n return <FormControl className={this.props.classes.fullWidth} variant=\"standard\">\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n const value = e.target.value === '_' ? '' : e.target.value;\n this.setState({ value }, () => {\n this.onChange(this.props.attr, value);\n if (this.props.schema.changeGuiLanguage) {\n if (value) {\n if (value === I18n.getLanguage()) {\n return;\n }\n I18n.setLanguage(value);\n this.props.changeLanguage && this.props.changeLanguage();\n } else {\n this.props.socket.getSystemConfig()\n .then(systemConfig => {\n if (systemConfig.common.language === I18n.getLanguage()) {\n return;\n }\n if (systemConfig.common.language) {\n I18n.setLanguage(systemConfig.common.language);\n this.props.changeLanguage && this.props.changeLanguage();\n }\n });\n }\n }\n });\n }}\n >\n {this.state.selectOptions?.map(item =>\n <MenuItem key={item.value} value={item.value}>{item.label}</MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigLanguage.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigLanguage);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Autocomplete, TextField, FormControl } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\n indeterminate: {\n opacity: 0.5\n },\n control: {\n flexDirection: 'row',\n width: '100%'\n },\n textWithArrows: {\n width: 'calc(100% - 12px)',\n },\n arrows: {\n width: 12,\n display: 'inline'\n },\n arrowUp: {\n fontSize: 10,\n userSelect: 'none',\n cursor: 'pointer',\n },\n arrowDown: {\n fontSize: 10,\n userSelect: 'none',\n cursor: 'pointer',\n }\n});\n\nclass ConfigNumber extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n // this.props.registerOnForceUpdate(this.props.attr, this.onUpdate);\n }\n\n static getDerivedStateFromProps(props, state) {\n if ((props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (_value === null || _value === undefined ||\n state.oldValue === null || state.oldValue === undefined ||\n (_value.toString() !== parseFloat(state._value).toString() &&\n _value.toString() !== state.oldValue.toString())\n ) {\n return { _value };\n } else {\n return null;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n let isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n this.updateTimeout && clearTimeout(this.updateTimeout);\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const arr = [...this.state.value].map(item => ({ label: item.toString(), value: item }));\n arr.unshift({label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE});\n\n return <Autocomplete\n className={this.props.classes.indeterminate}\n fullWidth\n value={arr[0]}\n getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) =>\n this.onChange(this.props.attr, value ? parseFloat(value.value) : this.props.schema.min || 0)}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n disabled={!!disabled}\n />}\n />;\n } else {\n if (!error && this.state._value !== null && this.state._value !== undefined) {\n if (this.props.schema.min !== undefined && this.state._value < this.props.schema.min) {\n error = I18n.t('ra_Too small');\n }\n if (this.props.schema.max !== undefined && this.state._value > this.props.schema.max) {\n error = I18n.t('ra_Too big');\n }\n }\n\n let type = 'number';\n if ((this.props.schema.min !== undefined && this.props.schema.min < 0) ||\n (this.props.schema.max !== undefined && this.props.schema.max < 0)\n ) {\n type = 'text';\n }\n\n const isNumber = this.state._value !== null &&\n this.state._value !== undefined &&\n (typeof this.state._value === 'number' ||\n (typeof this.state._value === 'string' &&\n this.state._value.trim() === parseFloat(this.state._value).toString())\n );\n\n return <FormControl variant=\"standard\" className={this.props.classes.control}>\n <TextField\n variant=\"standard\"\n type={type}\n fullWidth\n inputProps={{ min: this.props.schema.min, max: this.props.schema.max, step: this.props.schema.step }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n className={Utils.clsx(type === 'text' && isNumber && this.props.classes.textWithArrows)}\n onChange={e => {\n const _value = e.target.value;\n if (isFinite(_value)) {\n if (this.props.schema.min !== undefined && parseFloat(_value) < this.props.schema.min) {\n this.onError(this.props.attr, I18n.t('ra_Too small'));\n } else if (this.props.schema.max !== undefined && parseFloat(_value) > this.props.schema.max) {\n this.onError(this.props.attr, I18n.t('ra_Too big'));\n } else if (_value === '-' || isNaN(parseFloat(_value))) {\n this.onError(this.props.attr, I18n.t('ra_Not a number'));\n } else {\n this.onError(this.props.attr); // clear error\n }\n } else if (_value !== '') {\n this.onError(this.props.attr, I18n.t('ra_Not a number'));\n } else {\n this.onError(this.props.attr); // clear error\n }\n\n if (this.state._value !== _value) {\n this.setState({ _value, oldValue: this.state._value }, () => {\n if (_value.trim() === parseFloat(_value).toString()) {\n this.onChange(this.props.attr, parseFloat(_value) || 0);\n }\n });\n }\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={error && typeof error === 'string' ? error : this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n {type === 'text' && isNumber ? <div className={this.props.classes.arrows}>\n <div\n className={this.props.classes.arrowUp}\n onClick={() => {\n let _value = parseFloat(this.state._value) + 1;\n if (this.props.schema.max !== undefined && _value <= this.props.schema.max) {\n this.setState({ _value });\n }\n }}\n >▲</div>\n <div\n className={this.props.classes.arrowDown}\n onClick={() => {\n let _value = parseFloat(this.state._value) - 1;\n if (this.props.schema.min !== undefined && _value >= this.props.schema.min) {\n this.setState({ _value });\n }\n }}\n >▼</div>\n </div> : null}\n </FormControl>;\n }\n }\n}\n\nConfigNumber.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigNumber);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport { Button, TextField } from '@mui/material';\n\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n flex: {\n display: 'flex'\n },\n button: {\n height: 48,\n marginLeft: 4,\n minWidth: 48,\n }\n});\n\nclass ConfigObjectId extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const { data, attr } = this.props;\n const value = ConfigGeneric.getValue(data, attr) || '';\n this.setState({ value, initialized: true});\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.initialized) {\n return null;\n }\n const { classes, schema, socket, attr } = this.props;\n const { value, showSelectId } = this.state;\n\n return <FormControl className={classes.fullWidth} variant=\"standard\">\n <InputLabel shrink>{this.getText(schema.label)}</InputLabel>\n <div className={classes.flex}>\n <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(schema.placeholder)}\n label={this.getText(schema.label)}\n helperText={this.renderHelp(schema.help, schema.helpLink, schema.noTranslation)}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(attr, value))\n }}\n />\n <Button\n color=\"grey\"\n className={this.props.classes.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={() => this.setState({ showSelectId: true })}\n >...</Button>\n </div>\n {showSelectId ? <DialogSelectID\n imagePrefix={this.props.imagePrefix === undefined ? '../..' : this.props.imagePrefix}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n dialogName={'admin.' + this.props.adapterName}\n themeType={this.props.themeType}\n socket={socket}\n statesOnly={schema.all === undefined ? true : schema.all}\n selected={value}\n onClose={() => this.setState({ showSelectId: false })}\n onOk={value =>\n this.setState({ showSelectId: false, value }, () =>\n this.onChange(attr, value))}\n /> : null}\n </FormControl>;\n }\n}\n\nConfigObjectId.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n imagePrefix: PropTypes.string,\n};\n\nexport default withStyles(styles)(ConfigObjectId);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport TextField from '@mui/material/TextField';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\n\nimport Visibility from '@mui/icons-material/Visibility';\nimport VisibilityOff from '@mui/icons-material/VisibilityOff';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%',\n display: 'inline-block'\n },\n halfWidth1: {\n width: `calc(50% - ${theme.spacing(0.5)})`,\n display: 'inline-block',\n marginRight: theme.spacing(1),\n },\n halfWidth2: {\n width: `calc(50% - ${theme.spacing(0.5)})`,\n display: 'inline-block'\n }\n});\n\nconst PASSWORD_PLACEHOLDER = '____ppp____';\n\nclass ConfigPassword extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({\n _repeat: value ? PASSWORD_PLACEHOLDER : '',\n _visible: false,\n value: value ? PASSWORD_PLACEHOLDER : '',\n _notEqual: false\n });\n }\n\n onChangePassword(password, repeatPassword) {\n if (password === undefined) {\n password = this.state.value;\n }\n if (repeatPassword === undefined) {\n repeatPassword = this.state._repeat;\n }\n const _notEqual = !!this.props.schema.repeat && repeatPassword !== password;\n this.setState({value: password, _repeat: repeatPassword, _notEqual}, () => {\n if (_notEqual) {\n this.onError(this.props.attr, I18n.t('ra_Passwords are not equal!'));\n } else {\n this.onError(this.props.attr); // clear error\n this.onChange(this.props.attr, password);\n }\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (this.state._notEqual === undefined) {\n return null;\n }\n\n const password = <TextField\n variant=\"standard\"\n fullWidth\n type={this.state._visible && this.state.value !== PASSWORD_PLACEHOLDER ? 'text' : 'password'}\n value={this.state.value}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(e.target.value)}\n label={this.getText(this.props.schema.label)}\n inputProps={{\n autoComplete: 'new-password',\n form: {autoComplete: 'off'},\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined\n }}\n helperText={this.state._notEqual ? I18n.t('ra_Passwords are not equal!') : this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n InputProps={{endAdornment: this.state.value && this.state.value !== PASSWORD_PLACEHOLDER && this.props.schema.visible ? <InputAdornment position='end'>\n <IconButton size=\"large\"\n tabIndex={-1}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({_visible: !this.state._visible});\n }}\n edge='end'\n >\n {this.state._visible ? <VisibilityOff/> : <Visibility/>}\n </IconButton>\n </InputAdornment> : undefined\n }}\n />;\n\n if (this.props.schema.repeat) {\n const passwordRepeat = <TextField\n variant=\"standard\"\n fullWidth\n type={this.state._visible && this.state._repeat !== PASSWORD_PLACEHOLDER ? 'text' : 'password'}\n value={this.state._repeat}\n error={!!error || this.state._notEqual}\n disabled={!!disabled}\n onChange={e => this.onChangePassword(undefined, e.target.value)}\n label={`${this.getText(this.props.schema.label)} (${I18n.t('ra_repeat')})`}\n inputProps={{\n autoComplete: 'new-password',\n form: {autoComplete: 'off'},\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined\n }}\n helperText={this.state._notEqual ? I18n.t('ra_Passwords are not equal!') : this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n InputProps={{endAdornment: this.state._repeat && this.state._repeat !== PASSWORD_PLACEHOLDER ? <InputAdornment position='end'>\n <IconButton size=\"large\"\n tabIndex={-1}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({_visible: !this.state._visible});\n }}\n edge='end'\n >\n {this.state._visible ? <VisibilityOff/> : <Visibility/>}\n </IconButton>\n </InputAdornment> : undefined\n }}\n />;\n\n return <div className={this.props.classes.fullWidth}>\n <div className={this.props.classes.halfWidth1}>{password}</div>\n <div className={this.props.classes.halfWidth2}>{passwordRepeat}</div>\n </div>;\n } else {\n return password;\n }\n }\n}\n\nConfigPassword.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigPassword);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport TextField from '@mui/material/TextField';\n\nimport IconButton from '@mui/material/IconButton';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nimport copy from '@iobroker/adapter-react-v5/Components/copy-to-clipboard';\nimport CopyIcon from '@iobroker/adapter-react-v5/icons/IconCopy';\n\nconst styles = theme => ({\n});\n\nclass ConfigPattern extends ConfigGeneric {\n renderItem(error, disabled) {\n return <TextField\n variant=\"standard\"\n fullWidth\n disabled={!!disabled}\n InputProps={{\n endAdornment: this.props.schema.copyToClipboard ?\n <IconButton\n size=\"small\"\n onClick={e => {\n copy(this.getPattern(this.props.schema.pattern));\n window.alert('Copied');\n }}>\n <CopyIcon/>\n </IconButton>\n : undefined,\n }}\n value={this.getPattern(this.props.schema.pattern)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n }\n}\n\nConfigPattern.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigPattern);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport TextWithIcon from '@iobroker/adapter-react-v5/Components/TextWithIcon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigFunc extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n this.props.socket.getEnums('rooms')\n .then(enums => {\n const selectOptions = Object.keys(enums)\n .map(id => ({ value: this.props.schema.short ? id.replace('enum.rooms.', '') : id, label: this.getText(enums[id].common.name), obj: enums[id]}));\n this.setState({ value, selectOptions });\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const item = this.state.selectOptions.find(item => item.value === this.state.value);\n\n return <FormControl\n variant=\"standard\"\n className={this.props.classes.fullWidth}\n >\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => item ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()}/> : ''}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () =>\n this.onChange(this.props.attr, this.state.value));\n }}\n >\n {this.state.selectOptions.map(item =>\n <MenuItem key={item.value} value={item.value} style={item.value === ConfigGeneric.DIFFERENT_VALUE ? {opacity: 0.5} : {}}>\n <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()}/>\n </MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigFunc.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFunc);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigSelect extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n const selectOptions = JSON.parse(JSON.stringify(this.props.schema.options));\n\n // if __different\n if (Array.isArray(value)) {\n this.initialValue = [...value];\n selectOptions.unshift({label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE});\n this.setState({value: ConfigGeneric.DIFFERENT_VALUE, selectOptions});\n } else {\n this.setState({value, selectOptions});\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.selectOptions) {\n return null;\n }\n\n const selectOptions = (this.state.selectOptions || []).filter(item => {\n if (!item.hidden) {\n return true;\n } else if (this.props.custom) {\n return !this.executeCustom(item.hidden, this.props.data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData);\n } else {\n return !this.execute(item.hidden, this.props.schema.default, this.props.data, this.props.arrayIndex, this.props.globalData);\n }\n });\n\n // eslint-disable-next-line\n const item = selectOptions.find(item => item.value == this.state.value); // let \"==\" be and not ===\n\n return <FormControl variant=\"standard\" className={this.props.classes.fullWidth} id={`jsonSelect_${this.props.schema.attr}_${this.props.index || this.props.index === 0 ? this.props.index : ''}`}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => this.getText(item?.label, this.props.schema.noTranslation)}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () => {\n if (this.state.value === ConfigGeneric.DIFFERENT_VALUE) {\n this.onChange(this.props.attr, this.initialValue);\n } else {\n this.onChange(this.props.attr, this.state.value);\n }\n });\n }}\n >\n {selectOptions.map(item =>\n <MenuItem key={item.value} value={item.value} style={item.value === ConfigGeneric.DIFFERENT_VALUE ? {opacity: 0.5} : {}}>{this.getText(item.label, this.props.schema.noTranslation)}</MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigSelect.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigSelect);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport ListItemText from '@mui/material/ListItemText';\nimport Checkbox from '@mui/material/Checkbox';\nimport Chip from '@mui/material/Chip';\nimport Box from '@mui/material/Box';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n menuPaper: {\n maxHeight: 800\n },\n});\n\n/*\nto use this option, your adapter must implement listUart message\n\nadapter.on('message', obj => {\n if (obj) {\n switch (obj.command) {\n case 'command':\n if (obj.callback) {\n try {\n const serialport = require('serialport');\n if (serialport) {\n // read all found serial ports\n serialport.list()\n .then(ports => {\n adapter.log.info('List of port: ' + JSON.stringify(ports));\n adapter.sendTo(obj.from, obj.command, ports.map(item =>\n ({label: item.path, value: item.path})), obj.callback);\n })\n .catch(e => {\n adapter.sendTo(obj.from, obj.command, [], obj.callback);\n adapter.log.error(e)\n });\n } else {\n adapter.log.warn('Module serialport is not available');\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n } catch (e) {\n adapter.sendTo(obj.from, obj.command, [{label: 'Not available', value: ''}], obj.callback);\n }\n }\n\n break;\n }\n }\n});\n */\n\nclass ConfigSelectSendTo extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n\n this.askInstance();\n }\n\n askInstance(){\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n data = this.getPattern(this.props.schema.jsonData, {}, this.props.data);\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Cannot parse json data: ' + data);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n this.props.socket.sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(list =>\n this.setState({list, context: this.getContext()}));\n } else {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n this.setState({ value });\n }\n }\n\n getContext() {\n const context = {};\n\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(attr =>\n context[attr] = ConfigGeneric.getValue(this.props.data, attr));\n }\n\n return JSON.stringify(context);\n }\n\n _getValue() {\n let value = this.state.value === null || this.state.value === undefined ? ConfigGeneric.getValue(this.props.data, this.props.attr) : this.state.value;\n\n if (this.props.schema.multiple) {\n if (typeof value === 'string') {\n value = [value];\n } else if (value === null || value === undefined) {\n value = [];\n }\n }\n\n return value;\n }\n\n renderItem(error, disabled, defaultValue) {\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this.state.context) {\n setTimeout(() => this.askInstance(), 300);\n }\n }\n\n let value = this._getValue();\n\n if (!this.props.alive) {\n if (this.props.schema.multiple || this.props.schema.manual === false) {\n return I18n.t('ra_Cannot retrieve options, as instance is offline');\n } else {\n return <TextField\n variant=\"standard\"\n fullWidth\n value={value}\n error={!!error}\n disabled={!!disabled}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n }\n } else\n if (!this.state.list) {\n return <CircularProgress size=\"small\"/>;\n } else {\n const selectOptions = (this.state.list || [])\n .filter(item => {\n if (!item.hidden) {\n return true;\n } else if (this.props.custom) {\n return !this.executeCustom(item.hidden, this.props.schema.default, this.props.data, this.props.instanceObj, this.props.arrayIndex, this.props.globalData);\n } else {\n return !this.execute(item.hidden, this.props.schema.default, this.props.data, this.props.arrayIndex, this.props.globalData);\n }\n });\n\n const item = selectOptions.find(item => item.value === value);\n\n return <FormControl variant=\"standard\" className={this.props.classes.fullWidth}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n multiple={this.props.schema.multiple}\n disabled={!!disabled}\n value={value}\n MenuProps={this.props.schema.multiple ? { classes: { paper: this.props.classes.menuPaper } } : undefined}\n renderValue={val =>\n this.props.schema.multiple ?\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {val.map(v => {\n const item = selectOptions.find(_item => _item.value === v);\n if (item || this.props.schema.showAllValues !== false) {\n const label = item?.label || v;\n return <Chip key={v} label={label}/* onDelete={e => {\n e.stopPropagation();\n e.preventDefault ();\n let _value = JSON.parse(JSON.stringify(this._getValue()));\n const pos = value.indexOf(v);\n if (pos !== -1) {\n _value.splice(pos, 1);\n this.setState({ value: _value }, () => this.onChange(this.props.attr, _value));\n }\n }}*/ />;\n } else {\n return null;\n }\n })}\n </Box>\n :\n (item?.label || val)\n }\n onChange={e => {\n this.onChange(this.props.attr, e.target.value);\n }}\n >\n {selectOptions.map((item, i) =>\n <MenuItem key={i} value={item.value}>\n { this.props.schema.multiple ? <Checkbox\n checked={value.includes(item.value)}\n onClick={() => {\n let _value = JSON.parse(JSON.stringify(this._getValue()));\n const pos = value.indexOf(item.value);\n if (pos !== -1) {\n _value.splice(pos, 1);\n } else {\n _value.push(item.value);\n _value.sort();\n }\n this.setState({ value: _value }, () => this.onChange(this.props.attr, _value));\n }}/> : null }\n <ListItemText primary={item.label} />\n </MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n }\n}\n\nConfigSelectSendTo.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n adapterName: PropTypes.string,\n alive: PropTypes.bool,\n instance: PropTypes.number,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigSelectSendTo);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport DialogError from '@iobroker/adapter-react-v5/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport ConfigGeneric from './ConfigGeneric';\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\nimport IconInfo from '@mui/icons-material/Info';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4\n }\n});\n\nfunction ip2int(ip) {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\n// copied from iobroker.admin/src-rx/src/Utils.js\nfunction findNetworkAddressOfHost(obj, localIp) {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n Object.keys(networkInterfaces).forEach(inter =>\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n } else if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n } else if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) { // if DNS name\n hostIp = ip.address;\n } else {\n if (ip.family === 'IPv4' && localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }));\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n } else if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n } else if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) { // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n });\n });\n }\n\n if (!hostIp) {\n Object.keys(networkInterfaces).forEach(inter => {\n networkInterfaces[inter].forEach(ip => {\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n });\n });\n }\n\n return hostIp;\n}\n\n\nclass ConfigSendto extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n\n let hostname = window.location.hostname;\n if (this.props.schema.openUrl) {\n // read admin host\n const adminInstance = await this.props.socket.getCurrentInstance();\n const instanceObj = await this.props.socket.getObject(`system.adapter.${adminInstance}`);\n const hostObj = await this.props.socket.getObject(`system.host.${instanceObj.common.host}`);\n\n const ip = findNetworkAddressOfHost(hostObj, window.location.hostname);\n if (ip) {\n hostname = ip + ':' + window.location.port;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n }\n this.setState( { _error: '', _message: '', hostname });\n }\n\n renderErrorDialog() {\n if (this.state._error) {\n return <DialogError text={this.state._error} classes={undefined} onClose={() => this.setState({_error: ''})} />;\n } else {\n return null;\n }\n }\n\n renderMessageDialog() {\n if (this.state._message) {\n return <DialogMessage text={this.state._message} classes={undefined} onClose={() => this.setState({_error: ''})} />;\n } else {\n return null;\n }\n }\n\n _onClick() {\n this.props.onCommandRunning(true);\n\n const _origin = `${window.location.protocol}//${this.state.hostname}${window.location.pathname.replace(/\\/index\\.html$/, '')}`\n\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n data = this.getPattern(this.props.schema.jsonData, {}, {\n _origin,\n ...this.props.data\n });\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Cannot parse json data: ' + data);\n }\n }\n if (data === undefined) {\n data = null;\n }\n if (this.props.schema.openUrl && !data) {\n data = { _origin: `${window.location.protocol}//${this.state.hostname}${window.location.pathname.replace(/\\/index\\.html$/, '')}` };\n }\n\n this.props.socket.sendTo(\n `${this.props.adapterName}.${this.props.instance}`,\n this.props.schema.command || 'send',\n data\n )\n .then(response => {\n if (response?.error) {\n if (this.props.schema.error && this.props.schema.error[response.error]) {\n let error = this.getText(this.props.schema.error[response.error]);\n if (response.args) {\n response.args.forEach(arg => error = error.replace('%s', arg));\n }\n this.setState({_error: error});\n } else {\n this.setState({_error: response.error ? I18n.t(response.error) : I18n.t('ra_Error')});\n }\n } else {\n if (response?.openUrl && this.props.schema.openUrl) {\n window.open(response.openUrl, response.window || this.props.schema.window || '_blank');\n } else\n if (response?.result && this.props.schema.result && this.props.schema.result[response.result]) {\n let text = this.getText(this.props.schema.result[response.result]);\n if (response.args) {\n response.args.forEach(arg => text = text.replace('%s', arg));\n }\n window.alert(text);\n } else {\n if (response?.result) {\n window.alert(typeof response.result === 'object' ? JSON.stringify(response.result) : response.result);\n } else {\n window.alert(I18n.t('ra_Ok'));\n }\n }\n\n if (response?.saveConfig) {\n this.props.onChange(null, null, null, true);\n }\n }\n })\n .catch(e => {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n this.setState({_error: this.getText(this.props.schema.error[e.toString()])});\n } else {\n this.setState({_error: I18n.t(e.toString()) || I18n.t('ra_Error')});\n }\n })\n .then(() => this.props.onCommandRunning(false))\n }\n\n renderConfirmDialog() {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return <ConfirmDialog\n title={ this.getText(confirm.title) || I18n.t('ra_Please confirm') }\n text={ this.getText(confirm.text) }\n ok={ this.getText(confirm.ok) || I18n.t('ra_Ok') }\n cancel={ this.getText(confirm.cancel) || I18n.t('ra_Cancel') }\n icon={icon}\n onClose={isOk =>\n this.setState({ confirmDialog: false}, () =>\n isOk && this._onClick())\n }\n />;\n }\n\n renderItem(error, disabled, defaultValue) {\n return <div className={this.props.classes.fullWidth}>\n <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n className={this.props.classes.fullWidth}\n disabled={disabled}\n onClick={() => {\n if (this.props.schema.confirm) {\n this.setState({confirmDialog: true});\n } else {\n this._onClick();\n }\n }}\n >\n {this.props.schema.icon ? <Icon src={this.props.schema.icon} className={this.props.classes.icon}/> : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n {this.renderErrorDialog()}\n {this.renderMessageDialog()}\n </div>;\n }\n}\n\nConfigSendto.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n commandRunning: PropTypes.bool,\n onCommandRunning: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigSendto);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\nimport IconInfo from '@mui/icons-material/Info';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4\n }\n});\n\nclass ConfigSetState extends ConfigGeneric {\n async _onClick() {\n let val = this.props.schema.val;\n if (typeof val === 'string' && val.includes('${')) {\n val = this.getPattern(val);\n const obj = await this.props.socket.getObject(this.props.schema.id);\n if (obj?.common?.type === 'number') {\n val = parseFloat(val);\n } else if (obj?.common?.type === 'boolean') {\n val = val === 'true' || val === true || val === '1' || val === 1;\n }\n }\n\n try {\n await this.props.socket.setState(this.props.schema.id, {val, ack: !!this.props.schema.ack});\n this.props.schema.okText && window.alert(this.getText(this.props.schema.okText));\n } catch (e) {\n if (this.props.schema.error && this.props.schema.error[e.toString()]) {\n window.alert(this.getText(this.props.schema.error[e.toString()]));\n } else {\n window.alert(I18n.t(e.toString()) || I18n.t('ra_Error'));\n }\n }\n }\n\n renderConfirmDialog() {\n if (!this.state.confirmDialog) {\n return null;\n }\n const confirm = this.state.confirmData || this.props.schema.confirm;\n let icon = null;\n if (confirm.type === 'warning') {\n icon = <IconWarning />;\n } else if (confirm.type === 'error') {\n icon = <IconError />;\n } else if (confirm.type === 'info') {\n icon = <IconInfo />;\n }\n\n return <ConfirmDialog\n title={ this.getText(confirm.title) || I18n.t('ra_Please confirm') }\n text={ this.getText(confirm.text) }\n ok={ this.getText(confirm.ok) || I18n.t('ra_Ok') }\n cancel={ this.getText(confirm.cancel) || I18n.t('ra_Cancel') }\n icon={icon}\n onClose={isOk =>\n this.setState({ confirmDialog: false}, async () =>\n isOk && (await this._onClick()))\n }\n />;\n }\n\n renderItem(error, disabled, defaultValue) {\n return <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n className={this.props.classes.fullWidth}\n disabled={disabled}\n onClick={async () => {\n if (this.props.schema.confirm) {\n this.setState({confirmDialog: true});\n } else {\n await this._onClick();\n }\n }}\n >\n {this.props.schema.icon ? <Icon src={this.props.schema.icon} className={this.props.classes.icon}/> : null}\n {this.getText(this.props.schema.label, this.props.schema.noTranslation)}\n </Button>;\n }\n}\n\nConfigSetState.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n commandRunning: PropTypes.bool,\n onCommandRunning: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigSetState);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Box, Typography, Slider } from '@mui/material';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%',\n },\n slider: {\n marginLeft: 10,\n marginRight: 10,\n width: 'calc(100% - 20px)',\n }\n});\n\nclass ConfigSlider extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ _value });\n }\n\n static getDerivedStateFromProps(props, state) {\n if ((props.schema.min !== undefined && props.schema.min < 0) ||\n (props.schema.max !== undefined && props.schema.max < 0)\n ) {\n return null;\n }\n const _value = ConfigGeneric.getValue(props.data, props.attr);\n if (_value === null || _value === undefined || _value.toString() !== parseFloat(state._value).toString()) {\n return { _value };\n } else {\n return null;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n const min = this.props.schema.min || 0;\n const max = this.props.schema.max || 100;\n const unit = this.props.schema.unit || '';\n\n const marks = [\n { value: min, label: min + unit},\n { value: max, label: max + unit}\n ];\n\n return <Box className={this.props.classes.fullWidth}>\n {this.props.schema.label ? <Typography gutterBottom>\n {this.getText(this.props.schema.label)}\n </Typography> : null}\n <Slider\n className={this.props.classes.slider}\n value={this.state._value}\n getAriaValueText={value => value + unit}\n step={this.props.schema.step || ((max - min) / 100)}\n valueLabelDisplay=\"auto\"\n marks={marks}\n disabled={!!disabled}\n error={error || ''}\n onChange={e => {\n const _value = e.target.value;\n this.setState({ _value }, () =>\n this.onChange(this.props.attr, _value));\n }}\n />\n {this.props.schema.help ? <Typography>\n {this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n </Typography> : null}\n </Box>;\n }\n}\n\nConfigSlider.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigSlider);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%',\n backgroundColor: theme.palette.mode === 'dark' ? '#FFF' : '#000',\n borderStyle: 'hidden',\n },\n primary: {\n backgroundColor: theme.palette.primary.main\n },\n secondary: {\n backgroundColor: theme.palette.secondary.main\n }\n});\n\nclass ConfigStaticDivider extends ConfigGeneric {\n renderItem() {\n return <hr\n className={Utils.clsx(\n this.props.classes.fullWidth,\n this.props.schema.color === 'primary' && this.props.classes.primary,\n this.props.schema.color === 'secondary' && this.props.classes.secondary\n )}\n style={{\n height: this.props.schema.color ? this.props.schema.height || 2 : this.props.schema.height || 1,\n backgroundColor: this.props.schema.color !== 'primary' && this.props.schema.color !== 'secondary' && this.props.schema.color ? this.props.schema.color : undefined,\n }}\n />;\n }\n}\n\nConfigStaticDivider.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigStaticDivider);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n header: {\n width: '100%',\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n padding: '4px !important',\n borderRadius: 3,\n marginBlockEnd: 0,\n marginBlockStart: 0,\n },\n});\n\nclass ConfigStaticHeader extends ConfigGeneric {\n renderItem() {\n switch ((this.props.schema.size || 5).toString()) {\n case '1':\n return <h1 className={this.props.classes.header}>\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </h1>;\n\n case '2':\n return <h2 className={this.props.classes.header}>\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </h2>;\n\n case '3':\n return <h3 className={this.props.classes.header}>\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </h3>;\n\n case '4':\n return <h4 className={this.props.classes.header}>\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </h4>;\n\n case '5':\n default:\n return <h5 className={this.props.classes.header}>\n {this.getText(this.props.schema.text, this.props.schema.noTranslation)}\n </h5>;\n }\n }\n}\n\nConfigStaticHeader.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigStaticHeader);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n height: '100%',\n width: '100%',\n }\n});\n\nclass ConfigStaticImage extends ConfigGeneric {\n renderItem() {\n let src = this.props.schema.src;\n if (src && !src.startsWith('.') &&\n !src.startsWith('http') &&\n !src.startsWith(`adapter/${this.props.adapterName}/`) &&\n !src.startsWith(`./adapter/${this.props.adapterName}/`)\n ) {\n src = `adapter/${this.props.adapterName}/${src}`;\n }\n\n return <img\n className={this.props.classes.fullWidth}\n src={src}\n onClick={this.props.schema.href ? () => this.props.schema.href && window.open(this.props.schema.href, '_blank') : null}\n alt=\"\"\n />;\n }\n}\n\nConfigStaticImage.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigStaticImage);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\n\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n height: '100%',\n width: '100%',\n }\n});\n\nclass ConfigStaticText extends ConfigGeneric {\n renderItem(error, disabled) {\n if (this.props.schema.button) {\n return <Button\n variant={this.props.schema.variant || undefined}\n color={this.props.schema.color || 'grey'}\n className={this.props.classes.fullWidth}\n disabled={disabled}\n onClick={this.props.schema.href ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href ? this.getText(this.props.schema.href, true) : null;\n href && window.open(href, '_blank');\n } : null}\n >\n {this.props.schema.icon ? <Icon src={this.props.schema.icon} className={this.props.classes.icon}/> : null}\n {this.getText(this.props.schema.text || this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n } else {\n\n return <span onClick={this.props.schema.href ? () => {\n // calculate one more time just before call\n const href = this.props.schema.href ? this.getText(this.props.schema.href, true) : null;\n href && window.open(href, '_blank');\n } : null}>\n {this.getText(this.props.schema.text || this.props.schema.label)}\n </span>;\n }\n }\n}\n\nConfigStaticText.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigStaticText);\n","import React, { createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { /*lighten,*/ withStyles } from '@mui/styles';\nimport clsx from 'clsx';\n\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { IconButton, InputAdornment, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TableSortLabel, TextField, Toolbar, Tooltip, Typography } from '@mui/material';\n\nimport AddIcon from '@mui/icons-material/Add';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport CloseIcon from '@mui/icons-material/Close';\nimport UpIcon from '@mui/icons-material/ArrowUpward';\nimport DownIcon from '@mui/icons-material/ArrowDownward';\nimport IconFilterOn from '@mui/icons-material/FilterAlt';\nimport IconFilterOff from '@mui/icons-material/FilterAltOff';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfigPanel from './ConfigPanel';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n root: {\n width: '100%',\n },\n paper: {\n width: '100%',\n marginBottom: theme.spacing(2),\n backgroundColor: `rgba(255, 255, 255, 0.1)`,\n },\n headerText: {\n width: '100%'\n },\n table: {\n minWidth: 750,\n },\n visuallyHidden: {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 20,\n width: 1,\n },\n addIcon: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n highlight:\n theme.palette.mode === 'light'\n ? {\n color: theme.palette.secondary.main,\n // backgroundColor: lighten(theme.palette.secondary.light, 0.85),\n }\n : {\n color: theme.palette.text.primary,\n backgroundColor: theme.palette.secondary.dark,\n },\n title: {\n flex: '1 1 100%',\n },\n rootTool: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(1),\n },\n silver: {\n opacity: 0.2\n },\n flex: {\n display: 'flex',\n alignItems: 'baseline',\n },\n filteredOut: {\n padding: 10,\n display: 'flex',\n textAlign: 'center'\n },\n buttonEmpty: {\n width: 34,\n display: 'inline-block'\n },\n buttonCell: {\n whiteSpace: 'nowrap',\n }\n});\n\nfunction objectToArray(object, nameOfFirstAttr, nameOfSecondAttr) {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const array = [];\n Object.keys(object).forEach(key => {\n const item = {};\n item[nameOfFirstAttr] = key;\n\n if (nameOfSecondAttr) {\n item[nameOfSecondAttr] = object[key]\n array.push(item);\n } else {\n array.push(Object.assign(item, object[key]));\n }\n });\n\n return array;\n}\n\nfunction arrayToObject(array, nameOfFirstAttr, nameOfSecondAttr) {\n nameOfFirstAttr = nameOfFirstAttr || 'key';\n\n const object = {};\n\n array.forEach(row => {\n let key = row[nameOfFirstAttr];\n if (key === null || key === undefined) {\n key = '';\n }\n delete row[nameOfFirstAttr];\n\n if (nameOfSecondAttr) {\n object[key] = row[nameOfSecondAttr];\n } else {\n object[key] = row;\n }\n });\n\n return object;\n}\n\nclass ConfigTable extends ConfigGeneric {\n constructor(props) {\n super(props)\n this.filterRefs = {};\n this.props.schema.items = this.props.schema.items || [];\n this.props.schema.items.forEach(el => {\n if (el.filter) {\n this.filterRefs[el.attr] = createRef();\n }\n });\n }\n\n async componentDidMount() {\n super.componentDidMount();\n let value = ConfigGeneric.getValue(this.props.data, this.props.attr) || [];\n\n // if the list is given as an object\n if (this.props.schema.objKeyName) {\n value = objectToArray(value, this.props.schema.objKeyName, this.props.schema.objValueName);\n }\n\n if (!Array.isArray(value)) {\n value = [];\n }\n\n const visibleValue = value.map((_, i) => i);\n\n this.setState({\n value,\n visibleValue,\n orderBy: /*this.props.schema.items.length ? this.props.schema.items[0].attr : */'',\n order: 'asc',\n iteration: 0,\n filterOn: [],\n });\n }\n\n componentWillUnmount() {\n this.typingTimer && clearTimeout(this.typingTimer)\n this.typingTimer = null;\n super.componentWillUnmount();\n }\n\n itemTable(attrItem, data, idx) {\n const { value } = this.state;\n const { schema } = this.props;\n const schemaForAttribute = schema.items && schema.items.find(el => el.attr === attrItem);\n\n if (!schemaForAttribute) {\n return null;\n }\n\n const schemaItem = {\n items: {\n [attrItem]: schemaForAttribute\n }\n };\n\n return <ConfigPanel\n index={idx + this.state.iteration}\n arrayIndex={idx}\n globalData={this.props.data}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={data}\n table\n custom\n schema={schemaItem}\n systemConfig={this.props.systemConfig}\n originalData={this.props.originalData}\n customs={this.props.customs}\n onChange={(attr, valueChange) => {\n const newObj = JSON.parse(JSON.stringify(value));\n newObj[idx][attr] = valueChange;\n this.setState({ value: newObj }, () =>\n this.onChangeWrapper(newObj,true));\n }}\n onError={(error, attr) => this.onError(error, attr)}\n />;\n }\n\n static descendingComparator(a, b, orderBy) {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n } else\n if (b[orderBy] > a[orderBy]) {\n return 1;\n } else {\n return 0;\n }\n }\n\n static getComparator(order, orderBy) {\n return order === 'desc'\n ? (a, b) => ConfigTable.descendingComparator(a, b, orderBy)\n : (a, b) => -ConfigTable.descendingComparator(a, b, orderBy);\n }\n\n handleRequestSort = (property, orderCheck = false) => {\n const { order, orderBy } = this.state;\n if (orderBy) {\n const isAsc = orderBy === property && order === 'asc';\n const newOrder = orderCheck ? order : (isAsc ? 'desc' : 'asc');\n const newValue = this.stableSort(newOrder, property);\n this.setState({ order: newOrder, orderBy: property, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, newValue));\n }\n }\n\n stableSort = (order, orderBy) => {\n const { value } = this.state;\n const comparator = ConfigTable.getComparator(order, orderBy);\n const stabilizedThis = value.map((el, index) => [el, index]);\n\n stabilizedThis.sort((a, b) => {\n const order = comparator(a[0], b[0]);\n if (order !== 0) {\n return order;\n } else {\n return a[1] - b[1];\n }\n });\n\n return stabilizedThis.map(el => el[0]);\n }\n\n enhancedTableHead(buttonsWidth, doAnyFilterSet) {\n const { schema, classes } = this.props;\n const { order, orderBy } = this.state;\n return <TableHead>\n <TableRow>\n {schema.items && schema.items.map((headCell, i) =>\n <TableCell\n style={{ width: typeof headCell.width === 'string' && headCell.width.endsWith('%') ? headCell.width : headCell.width }}\n key={headCell.attr + '_' + i}\n align=\"left\"\n sortDirection={orderBy === headCell.attr ? order : false}\n >\n <div className={classes.flex}>\n {!i && !schema.noDelete ? <Tooltip title={doAnyFilterSet ? I18n.t('ra_Cannot add items with set filter') : I18n.t('ra_Add row')}>\n <span>\n <IconButton size=\"small\" color=\"primary\" disabled={!!doAnyFilterSet && !this.props.schema.allowAddByFilter} onClick={this.onAdd}>\n <AddIcon />\n </IconButton>\n </span>\n </Tooltip> : null}\n {headCell.sort && <TableSortLabel\n active\n className={clsx(orderBy !== headCell.attr && classes.silver)}\n direction={orderBy === headCell.attr ? order : 'asc'}\n onClick={() => this.handleRequestSort(headCell.attr)}\n />}\n {headCell.filter && this.state.filterOn.includes(headCell.attr) ?\n <TextField\n variant=\"standard\"\n ref={this.filterRefs[headCell.attr]}\n onChange={() => this.applyFilter()}\n title={I18n.t('ra_You can filter entries by entering here some text')}\n InputProps={{\n endAdornment: this.filterRefs[headCell.attr]?.current?.children[0]?.children[0]?.value && <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n this.filterRefs[headCell.attr].current.children[0].children[0].value = '';\n this.applyFilter();\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>,\n }}\n fullWidth\n placeholder={this.getText(headCell.title)}\n />\n : <span className={this.props.classes.headerText}>{this.getText(headCell.title)}</span>}\n { headCell.filter ? <IconButton\n title={I18n.t('ra_Show/hide filter input')}\n size=\"small\"\n onClick={() => {\n const filterOn = [...this.state.filterOn];\n const pos = this.state.filterOn.indexOf(headCell.attr);\n if (pos === -1) {\n filterOn.push(headCell.attr);\n } else {\n filterOn.splice(pos, 1);\n }\n this.setState({ filterOn }, () => {\n if (pos && this.filterRefs[headCell.attr].current.children[0].children[0].value) {\n this.filterRefs[headCell.attr].current.children[0].children[0].value = '';\n this.applyFilter();\n }\n });\n }}\n >{this.state.filterOn.includes(headCell.attr) ? <IconFilterOff /> : <IconFilterOn />}</IconButton> : null}\n </div>\n </TableCell>\n )}\n {!schema.noDelete && <TableCell style={{ paddingLeft: 20, paddingRight: 20, width: buttonsWidth, textAlign: 'right' }} padding=\"checkbox\">\n <IconButton disabled size=\"small\">\n <DeleteIcon />\n </IconButton>\n </TableCell>}\n </TableRow>\n </TableHead>;\n }\n\n onDelete = index => () => {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n let visibleValue = JSON.parse(JSON.stringify(this.state.visibleValue));\n newValue.splice(index, 1);\n const pos = visibleValue.indexOf(index);\n if (pos !== -1) {\n visibleValue.splice(pos, 1);\n visibleValue = visibleValue.map(i => i > index ? i - 1 : i);\n }\n\n this.setState({ value: newValue, visibleValue, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(newValue));\n };\n\n onChangeWrapper = (newValue, updateVisible = false) => {\n this.typingTimer && clearTimeout(this.typingTimer);\n\n this.typingTimer = setTimeout((value, updateVisible) => {\n this.typingTimer = null;\n\n if (this.props.schema.objKeyName) {\n const objValue = arrayToObject(JSON.parse(JSON.stringify(value)), this.props.schema.objKeyName, this.props.schema.objValueName);\n this.onChange(this.props.attr, objValue);\n } else {\n this.onChange(this.props.attr, value);\n }\n\n if (updateVisible) {\n this.applyFilter(false, value);\n this.handleRequestSort(this.state.orderBy, true);\n }\n }, 300, newValue, updateVisible);\n }\n\n onAdd = () => {\n const { schema } = this.props;\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const visibleValue = JSON.parse(JSON.stringify(this.state.visibleValue));\n\n const newItem = schema.items && schema.items.reduce((accumulator, currentValue) => {\n let defaultValue;\n if (currentValue.defaultFunc) {\n if (this.props.custom) {\n defaultValue = currentValue.defaultFunc ? this.executeCustom(currentValue.defaultFunc, this.props.schema.default, this.props.data, this.props.instanceObj, newValue.length, this.props.data) : this.props.schema.default;\n } else {\n defaultValue = currentValue.defaultFunc ? this.execute(currentValue.defaultFunc, this.props.schema.default, this.props.data, newValue.length, this.props.data) : this.props.schema.default;\n }\n } else {\n defaultValue = currentValue.default === undefined ? null : currentValue.default;\n }\n\n accumulator[currentValue.attr] = defaultValue;\n return accumulator;\n }, {});\n\n newValue.push(newItem);\n visibleValue.push(newValue.length - 1);\n\n this.setState({ value: newValue, visibleValue }, () =>\n this.onChangeWrapper(newValue));\n }\n\n isAnyFilterSet() {\n return Object.keys(this.filterRefs).find(attr => this.filterRefs[attr].current?.children[0].children[0].value);\n }\n\n applyFilter = (clear = false, value = this.state.value) => {\n let visibleValue = value.map((_, i) => i);\n Object.keys(this.filterRefs).forEach(attr => {\n let valueInputRef = this.filterRefs[attr].current?.children[0].children[0].value;\n if (!clear && valueInputRef) {\n valueInputRef = valueInputRef.toLowerCase();\n visibleValue = visibleValue.filter(idx => value[idx] && value[idx][attr] && value[idx][attr].toLowerCase().includes(valueInputRef));\n } else if (this.filterRefs[attr].current) {\n this.filterRefs[attr].current.children[0].children[0].value = '';\n }\n });\n\n if (JSON.stringify(visibleValue) !== JSON.stringify(this.state.visibleValue)) {\n this.setState({ visibleValue });\n }\n }\n\n onMoveUp(idx) {\n const value = JSON.parse(JSON.stringify(this.state.value));\n const item = value[idx];\n value.splice(idx, 1);\n value.splice(idx - 1, 0, item);\n this.setState({ value, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(value));\n }\n\n onMoveDown(idx) {\n const value = JSON.parse(JSON.stringify(this.state.value));\n const item = value[idx];\n value.splice(idx, 1);\n value.splice(idx + 1, 0, item);\n this.setState({ value, iteration: this.state.iteration + 10000 }, () =>\n this.onChangeWrapper(value));\n }\n\n renderItem(error, disabled, defaultValue) {\n const { classes, schema } = this.props;\n const { value, visibleValue } = this.state;\n\n if (!value) {\n return null;\n }\n\n const doAnyFilterSet = this.isAnyFilterSet();\n\n return <Paper className={classes.paper}>\n <div className={classes.addIcon}>\n {schema.label ? <Toolbar\n variant=\"dense\"\n className={classes.rootTool}\n >\n <Typography className={classes.title} variant=\"h6\" id=\"tableTitle\" component=\"div\">\n {this.getText(schema.label)}\n </Typography>\n </Toolbar> : null}\n </div>\n <TableContainer>\n <Table className={classes.table} size=\"small\">\n {this.enhancedTableHead(!doAnyFilterSet && !this.state.orderBy ? 120 : 64, doAnyFilterSet)}\n <TableBody>\n {visibleValue.map((idx, i) =>\n <TableRow\n hover\n key={idx + '_' + i}\n >\n {schema.items && schema.items.map(headCell =>\n <TableCell key={headCell.attr + '_' + idx} align=\"left\">\n {this.itemTable(headCell.attr, value[idx], idx)}\n </TableCell>\n )}\n {!schema.noDelete && <TableCell align=\"left\" className={classes.buttonCell}>\n {!doAnyFilterSet && !this.state.orderBy ? (i ? <Tooltip title={I18n.t('ra_Move up')}>\n <IconButton size=\"small\" onClick={() => this.onMoveUp(idx)}>\n <UpIcon />\n </IconButton>\n </Tooltip> : <div className={classes.buttonEmpty}/>) : null}\n {!doAnyFilterSet && !this.state.orderBy ? (i < visibleValue.length - 1 ? <Tooltip title={I18n.t('ra_Move down')}>\n <IconButton size=\"small\" onClick={() => this.onMoveDown(idx)}>\n <DownIcon />\n </IconButton>\n </Tooltip> : <div className={classes.buttonEmpty}/> ) : null}\n <Tooltip title={I18n.t('ra_Delete current row')}>\n <IconButton size=\"small\" onClick={this.onDelete(idx)}>\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n </TableCell>}\n </TableRow>)}\n {!schema.noDelete && visibleValue.length >= (schema.showSecondAddAt || 5) ?\n <TableRow>\n <TableCell colSpan={schema.items.length + 1}>\n <Tooltip title={doAnyFilterSet ? I18n.t('ra_Cannot add items with set filter') : I18n.t('ra_Add row')}>\n <span>\n <IconButton size=\"small\" color=\"primary\" disabled={!!doAnyFilterSet && !this.props.schema.allowAddByFilter} onClick={this.onAdd}>\n <AddIcon />\n </IconButton>\n </span>\n </Tooltip>\n </TableCell>\n </TableRow> : null}\n </TableBody>\n </Table>\n {!visibleValue.length && value.length ?\n <div className={classes.filteredOut}>\n <Typography className={classes.title} variant=\"h6\" id=\"tableTitle\" component=\"div\">\n {I18n.t('ra_All items are filtered out')}\n <IconButton\n size=\"small\"\n onClick={e => this.applyFilter(true)}\n >\n <CloseIcon />\n </IconButton>\n </Typography>\n </div> : null}\n </TableContainer>\n {schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </Paper>;\n }\n}\n\nConfigTable.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigTable);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Autocomplete, TextField } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n indeterminate: {\n opacity: 0.5\n }\n});\n\nclass ConfigText extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value, oldValue: value });\n }\n\n static getDerivedStateFromProps(props, state) {\n let value = ConfigGeneric.getValue(props.data, props.attr);\n if (value !== null && value !== undefined) {\n if (props.schema.trim !== false) {\n value = value.toString().trim();\n } else {\n value = value.toString();\n }\n }\n\n if (value === null || value === undefined || (value !== state.value && value !== state.oldValue)) {\n return { value };\n } else {\n return null;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n let isIndeterminate = Array.isArray(this.state.value) || this.state.value === ConfigGeneric.DIFFERENT_VALUE;\n\n if (this.state.oldValue !== null && this.state.oldValue !== undefined) {\n this.updateTimeout && clearTimeout(this.updateTimeout);\n this.updateTimeout = setTimeout(() => {\n this.updateTimeout = null;\n this.setState({ oldValue: null });\n }, 30);\n } else if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n }\n\n if (isIndeterminate) {\n const arr = [...this.state.value].map(item => ({label: item.toString(), value: item}));\n arr.unshift({ label: I18n.t(ConfigGeneric.DIFFERENT_LABEL), value: ConfigGeneric.DIFFERENT_VALUE });\n\n return <Autocomplete\n className={this.props.classes.indeterminate}\n fullWidth\n value={arr[0]}\n getOptionSelected={(option, value) => option.label === value.label}\n onChange={(_, value) =>\n this.onChange(this.props.attr, value ? value.value : '')}\n options={arr}\n getOptionLabel={option => option.label}\n renderInput={params => <TextField\n variant=\"standard\"\n {...params}\n error={!!error}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n disabled={!!disabled}\n />}\n />;\n } else {\n return <TextField\n variant=\"standard\"\n fullWidth\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value, oldValue: this.state.value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n }\n }\n}\n\nConfigText.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigText);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport TextField from '@mui/material/TextField';\nimport IconButton from '@mui/material/IconButton';\n\nimport copy from '@iobroker/adapter-react-v5/Components/copy-to-clipboard';\nimport CopyIcon from '@iobroker/adapter-react-v5/icons/IconCopy';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n }\n});\n\nclass ConfigTextSendTo extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n\n this.askInstance();\n }\n\n askInstance() {\n if (this.props.alive) {\n let data = this.props.schema.data;\n if (data === undefined && this.props.schema.jsonData) {\n data = this.getPattern(this.props.schema.jsonData);\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Cannot parse json data: ' + data);\n }\n }\n\n if (data === undefined) {\n data = null;\n }\n\n this.props.socket.sendTo(`${this.props.adapterName}.${this.props.instance}`, this.props.schema.command || 'send', data)\n .then(text => this.setState({text: text || '', context: this.getContext()}));\n }\n }\n\n getContext() {\n const context = {};\n if (Array.isArray(this.props.schema.alsoDependsOn)) {\n this.props.schema.alsoDependsOn.forEach(attr =>\n context[attr] = ConfigGeneric.getValue(this.props.data, attr));\n }\n return JSON.stringify(context);\n }\n\n renderItem(error, disabled, defaultValue) {\n if (this.state.text === undefined) {\n return null;\n }\n\n if (this.props.alive) {\n const context = this.getContext();\n if (context !== this.state.context) {\n setTimeout(() => {\n this.askInstance();\n }, 300);\n }\n }\n\n if (this.props.schema.container === 'text') {\n return <TextField\n variant=\"standard\"\n fullWidth\n InputProps={{\n endAdornment: this.props.schema.copyToClipboard ?\n <IconButton\n size=\"small\"\n onClick={e => {\n copy(this.state.text);\n window.alert('Copied');\n }}>\n <CopyIcon/>\n </IconButton>\n : undefined,\n }}\n value={this.state.text}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n } else {\n return <div className={this.props.classes.fullWidth}>{this.state.text}</div>;\n }\n }\n}\n\nConfigTextSendTo.propTypes = {\n socket: PropTypes.object.isRequired,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n};\n\nexport default withStyles(styles)(ConfigTextSendTo);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport { TimePicker } from '@mui/x-date-pickers';\n\nconst styles = theme => ({\n indeterminate: {\n opacity: 0.5\n }\n});\n\nclass ConfigTimePicker extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n renderItem(error, disabled, defaultValue) {\n return <TimePicker\n fullWidth\n margin=\"normal\"\n format=\"HH:mm:ss\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value === null || this.state.value === undefined ? new Date() : this.state.value}\n onChange={value => {\n this.setState({ value }, () =>\n this.onChange(this.props.attr, value));\n }}\n InputLabelProps={{\n shrink: true,\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n }\n}\n\nConfigTimePicker.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigTimePicker);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport { TextField } from '@mui/material';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n icon: {\n width: 16,\n height: 16,\n marginRight: 8\n }\n});\n\nfunction convertID2Topic(id, prefix, namespace) {\n let topic;\n if (namespace && id.substring(0, namespace.length) === namespace) {\n topic = id.substring(namespace.length + 1);\n } else {\n topic = id;\n }\n topic = topic.replace(/\\./g, '/').replace(/_/g, ' ');\n return topic;\n}\n\nclass ConfigTopic extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (!value && this.props.customObj && this.props.customObj._id) {\n let topic = convertID2Topic(this.props.customObj._id, null, this.props.adapterName + '.' + this.props.instance);\n this.setState({value: topic});\n } else {\n this.setState({value: value || ''});\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n return <TextField\n variant=\"standard\"\n fullWidth\n inputProps={{maxLength: this.props.schema.maxLength || this.props.schema.max || undefined}}\n value={this.state.value}\n error={!!error}\n disabled={disabled}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, value));\n }}\n />;\n }\n}\n\nConfigTopic.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n customObj: PropTypes.object,\n};\n\nexport default withStyles(styles)(ConfigTopic);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '../Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n icon: {\n width: 16,\n height: 16,\n marginRight: 8\n }\n});\n\nclass ConfigUser extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n this.props.socket.getUsers()\n .then(users => {\n const _users = {};\n const lang = I18n.getLanguage();\n\n if (this.props.schema.short) {\n users.forEach(user => _users[user._id] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang)\n });\n } else {\n users.forEach(user => _users[user._id.replace(/^system\\.user\\./, '')] = {\n color: user.common?.color,\n icon: user.common?.icon,\n name: Utils.getObjectNameFromObj(user, lang)\n });\n }\n\n this.setState({users: _users});\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n\n return <FormControl variant=\"standard\" className={this.props.classes.fullWidth}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n renderValue={val => <span>{this.state.users && this.state.users[val]?.icon ? <Icon src={this.state.users && this.state.users[val]?.icon} className={this.props.classes.icon} /> : null}{(this.state.users && this.state.users[val]?.name) || val || ''}</span>}\n style={{ color: (this.state.users && this.state.users[value]?.color) || undefined, backgroundColor: Utils.getInvertedColor(this.state.users && this.state.users[value]?.color, this.props.themeType) }}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n >\n {this.state.users && Object.keys(this.state.users).map(id => <MenuItem style={{ color: this.state.users[id].color || undefined, backgroundColor: Utils.getInvertedColor(this.state.users[id].color, this.props.themeType) }} key={id} value={id}>\n {this.state.users[id].icon ? <Icon src={this.state.users[id].icon} className={this.props.classes.icon} /> : null}\n {this.state.users[id].name}\n </MenuItem>)}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>;\n }\n}\n\nConfigUser.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigUser);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport clsx from 'clsx';\n\nimport Grid from '@mui/material/Grid';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfigAlive from './ConfigAlive';\nimport ConfigAutocomplete from './ConfigAutocomplete';\nimport ConfigAutocompleteSendTo from './ConfigAutocompleteSendTo';\nimport ConfigCRON from './ConfigCRON';\nimport ConfigCertificateSelect from './ConfigCertificateSelect';\nimport ConfigCheckbox from './ConfigCheckbox';\nimport ConfigChip from './ConfigChip';\nimport ConfigColor from './ConfigColor';\nimport ConfigCoordinates from './ConfigCoordinates';\nimport ConfigCustom from './ConfigCustom';\nimport ConfigDatePicker from './ConfigDatePicker';\nimport ConfigFile from './ConfigFile';\nimport ConfigFileSelector from './ConfigFileSelector';\nimport ConfigFunc from './ConfigFunc';\nimport ConfigIP from './ConfigIP';\nimport ConfigImageUpload from './ConfigImageUpload';\nimport ConfigInstanceSelect from './ConfigInstanceSelect';\nimport ConfigJsonEditor from './ConfigJsonEditor';\nimport ConfigLanguage from './ConfigLanguage';\nimport ConfigNumber from './ConfigNumber';\nimport ConfigObjectId from './ConfigObjectId';\nimport ConfigPassword from './ConfigPassword';\nimport ConfigPattern from './ConfigPattern';\nimport ConfigRoom from './ConfigRoom';\nimport ConfigSelect from './ConfigSelect';\nimport ConfigSelectSendTo from './ConfigSelectSendTo';\nimport ConfigSendto from './ConfigSendto';\nimport ConfigSetState from './ConfigSetState';\nimport ConfigSlider from './ConfigSlider';\nimport ConfigStaticDivider from './ConfigStaticDivider';\nimport ConfigStaticHeader from './ConfigStaticHeader';\nimport ConfigStaticImage from './ConfigStaticImage';\nimport ConfigStaticText from './ConfigStaticText';\nimport ConfigTable from './ConfigTable';\nimport ConfigText from './ConfigText';\nimport ConfigTextSendTo from './ConfigTextSendTo';\nimport ConfigTimePicker from './ConfigTimePicker';\nimport ConfigTopic from './ConfigTopic';\nimport ConfigUser from './ConfigUser';\n\nconst components = {\n alive: ConfigAlive,\n autocomplete: ConfigAutocomplete,\n autocompleteSendTo: ConfigAutocompleteSendTo,\n certificate: ConfigCertificateSelect,\n checkbox: ConfigCheckbox,\n chip: ConfigChip, // deprecated. Use \"chips\"\n chips: ConfigChip,\n color: ConfigColor,\n coordinates: ConfigCoordinates,\n cron: ConfigCRON,\n custom: ConfigCustom,\n datePicker: ConfigDatePicker,\n divider: ConfigStaticDivider,\n file: ConfigFile,\n fileSelector: ConfigFileSelector,\n func: ConfigFunc,\n header: ConfigStaticHeader,\n image: ConfigImageUpload,\n instance: ConfigInstanceSelect,\n ip: ConfigIP,\n jsonEditor: ConfigJsonEditor,\n language: ConfigLanguage,\n number: ConfigNumber,\n objectId: ConfigObjectId,\n password: ConfigPassword,\n pattern: ConfigPattern,\n room: ConfigRoom,\n select: ConfigSelect,\n selectSendTo: ConfigSelectSendTo,\n sendto: ConfigSendto,\n sendTo: ConfigSendto,\n setState: ConfigSetState,\n slider: ConfigSlider,\n staticImage: ConfigStaticImage,\n staticLink: ConfigStaticText,\n staticText: ConfigStaticText,\n table: ConfigTable,\n text: ConfigText,\n textSendTo: ConfigTextSendTo,\n timePicker: ConfigTimePicker,\n topic: ConfigTopic,\n user: ConfigUser,\n};\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%',\n //height: '100%',\n },\n paper: {\n margin: 10,\n height: 'calc(100vh - 235px) !important',\n width: 'auto !important',\n overflowY: 'auto',\n paddingBottom: theme.spacing(1)\n },\n padding: {\n padding: 10,\n },\n heading: {\n\n },\n primary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.mode === 'dark' ? 'inherit' : '#FFF'\n },\n secondary: {\n backgroundColor: theme.palette.secondary.main,\n }\n});\n\nclass ConfigPanel extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n if (this.props.schema && this.props.schema.collapsable) {\n this.setState({expanded: (window._localStorage || window.localStorage).getItem(this.props.adapterName + '.' + this.props.attr) === 'true'});\n }\n }\n\n renderItems(items, disabled) {\n const classes = this.props.classes || {};\n\n return items ? Object.keys(items).map(attr => {\n if (this.props.multiEdit && items[attr].noMultiEdit) {\n return null;\n }\n\n const type = items[attr].type || 'panel';\n let ItemComponent;\n if (type === 'custom') {\n // name\n // url\n if (items[attr].url) {\n ItemComponent = ConfigCustom;\n } else\n if (this.props.customs && this.props.customs[items[attr].component]) {\n ItemComponent = this.props.customs[items[attr].component];\n } else {\n console.error('Cannot find custom component: ' + items[attr].component);\n ItemComponent = ConfigGeneric;\n }\n } else if (type === 'panel') {\n ItemComponent = ConfigPanelStyled;\n } else {\n ItemComponent = components[type] || ConfigGeneric;\n }\n\n return <ItemComponent\n key={attr + '_' + (this.props.index === undefined ? '' : this.props.index)}\n index={this.props.index}\n arrayIndex={this.props.arrayIndex}\n globalData={this.props.globalData}\n onCommandRunning={this.props.onCommandRunning}\n commandRunning={this.props.commandRunning}\n className={classes.panel}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n instance={this.props.instance}\n common={this.props.common}\n customs={this.props.customs}\n alive={this.props.alive}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n data={this.props.data}\n originalData={this.props.originalData}\n systemConfig={this.props.systemConfig}\n onError={this.props.onError}\n onChange={this.props.onChange}\n multiEdit={this.props.multiEdit}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n disabled={disabled}\n imagePrefix={this.props.imagePrefix}\n\n changeLanguage={this.props.changeLanguage}\n forceUpdate={this.props.forceUpdate}\n registerOnForceUpdate={this.props.registerOnForceUpdate}\n\n customObj={this.props.customObj}\n instanceObj={this.props.instanceObj}\n custom={this.props.custom}\n\n schema={items[attr]}\n attr={attr}\n />;\n }) : null;\n }\n\n render() {\n const schema = this.props.schema;\n\n if (!schema) {\n return null;\n }\n\n const { disabled, hidden } = this.calculate(schema);\n\n const items = this.props.schema.items;\n const classes = this.props.classes || {};\n\n if (hidden) {\n if (schema.hideOnlyControl) {\n const item = <Grid\n item\n xs={schema.xs || undefined}\n lg={schema.lg || undefined}\n md={schema.md || undefined}\n sm={schema.sm || undefined}\n style={Object.assign(\n {},\n {marginBottom: 0, /*marginRight: 8, */textAlign: 'left'},\n schema.style,\n this.props.themaType === 'dark' ? schema.darkStyle : {}\n )}\n />;\n\n if (schema.newLine) {\n return <>\n <div style={{flexBasis: '100%', height: 0}} />\n {item}\n </>\n } else {\n return item;\n }\n } else {\n return null;\n }\n } else\n if (this.props.table) {\n return this.renderItems(items, disabled);\n } else\n if (this.props.custom) {\n return <Grid\n key={this.props.attr + '_' + this.props.index}\n container\n className={classes.fullWidth}\n spacing={2}\n >\n {this.renderItems(items, disabled)}\n </Grid>;\n } else {\n let content;\n if (schema.collapsable) {\n content = <Accordion\n key={this.props.attr + '_' + this.props.index}\n className={classes.fullWidth}\n expanded={!!this.state.expanded}\n onChange={() => {\n (window._localStorage || window.localStorage).setItem(this.props.adapterName + '.' + this.props.attr, this.state.expanded ? 'false' : 'true');\n this.setState({expanded: !this.state.expanded});\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n style={Object.assign({}, schema.style, this.props.themeType ? schema.darkStyle : {})}\n className={clsx(classes.fullWidth, schema.color === 'primary' && classes.primary, schema.color === 'secondary' && classes.secondary)}\n >\n <Typography className={classes.heading}>{this.getText(schema.label)}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container className={classes.fullWidth + ' ' + classes.padding} spacing={2}>\n {this.renderItems(items, disabled)}\n </Grid>\n </AccordionDetails>\n </Accordion>\n } else {\n content = <div\n key={this.props.attr + '_' + this.props.index}\n className={clsx(this.props.className, this.props.isParentTab && classes.paper, classes.fullWidth)}\n >\n <Grid container className={clsx(classes.fullWidth, this.props.isParentTab && classes.padding)} spacing={2}>\n {this.renderItems(items, disabled)}\n </Grid>\n </div>;\n }\n\n if (!this.props.isParentTab) {\n const item = <Grid\n item\n title={this.getText(schema.tooltip)}\n xs={schema.xs || undefined}\n lg={schema.lg || undefined}\n md={schema.md || undefined}\n sm={schema.sm || undefined}\n style={Object.assign({}, {marginBottom: 0, /*marginRight: 8, */textAlign: 'left'}, schema.style)}>\n {content}\n </Grid>;\n\n if (schema.newLine) {\n return <>\n <div style={{flexBasis: '100%', height: 0}} />\n {item}\n </>;\n } else {\n return item;\n }\n } else {\n return content;\n }\n }\n }\n}\n\nConfigPanel.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n originalData: PropTypes.object,\n schema: PropTypes.object,\n index: PropTypes.number,\n customs: PropTypes.object,\n alive: PropTypes.bool,\n systemConfig: PropTypes.object,\n adapterName: PropTypes.string,\n instance: PropTypes.number,\n commandRunning: PropTypes.bool,\n onCommandRunning: PropTypes.func,\n dateFormat: PropTypes.string,\n isFloatComma: PropTypes.bool,\n multiEdit: PropTypes.bool,\n isParentTab: PropTypes.bool,\n imagePrefix: PropTypes.string,\n changeLanguage: PropTypes.func,\n\n arrayIndex: PropTypes.number,\n globalData: PropTypes.object,\n\n customObj: PropTypes.object,\n instanceObj: PropTypes.object,\n custom: PropTypes.bool,\n\n forceUpdate: PropTypes.func,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n registerOnForceUpdate: PropTypes.func,\n};\n\nconst ConfigPanelStyled = withStyles(styles)(ConfigPanel);\n\nexport default ConfigPanelStyled;","import { Component } from 'react';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\n\nimport { Grid } from '@mui/material';\nimport { Typography } from '@mui/material';\n\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport CancelIcon from '@mui/icons-material/Cancel';\n\nimport green from '@mui/material/colors/green';\nimport red from '@mui/material/colors/red';\n\nconst styles = {\n checkIcon: {\n color: green[700]\n },\n cancelIcon: {\n color: red[700]\n },\n wrapperContent:{\n display: 'flex',\n flexFlow: 'nowrap',\n alignItems: 'inherit'\n }\n};\n\nclass State extends Component {\n\n getIcon() {\n if (this.props.state) {\n return <CheckCircleIcon className={ this.props.classes.checkIcon } />;\n } else {\n return <CancelIcon className={ this.props.classes.cancelIcon } />;\n }\n }\n\n render() {\n return <Grid\n item\n container\n className={this.props.classes.wrapperContent}\n alignItems=\"center\"\n direction=\"row\"\n spacing={ 1 }\n >\n <Grid item>\n { this.getIcon() }\n </Grid>\n <Grid item>\n <Typography>\n { this.props.children }\n </Typography>\n </Grid>\n </Grid>;\n }\n}\n\nState.propTypes = {\n state: PropTypes.bool\n};\n\nexport default withStyles(styles)(State);","import { Component } from 'react';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Grid } from '@mui/material';\nimport { Paper } from '@mui/material';\n\nconst styles = {\n root: {\n width: '100%',\n height: '100%'\n },\n overflowHidden: {\n overflow: 'hidden'\n },\n container: {\n height: '100%'\n }\n};\n\nclass TabContainer extends Component {\n render() {\n const { classes } = this.props;\n\n return <Paper\n elevation={ !isNaN(this.props.elevation) ? this.props.elevation : 1 }\n className={ clsx(classes.root, {[classes.overflowHidden]: this.props.overflow !== 'visible'}, this.props.className) }\n >\n <Grid\n container\n direction=\"column\"\n wrap=\"nowrap\"\n className={ classes.container }\n >\n { this.props.children }\n </Grid>\n </Paper>;\n }\n}\n\nTabContainer.propTypes = {\n elevation: PropTypes.number,\n overflow: PropTypes.string,\n className: PropTypes.string\n};\n\nexport default withStyles(styles)(TabContainer);","import PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { withStyles } from '@mui/styles';\n\nimport { Grid } from '@mui/material';\n\nconst styles = {\n root: {\n height: '100%',\n overflow: 'hidden'\n },\n overflowAuto: {\n overflow: 'auto'\n }\n};\n\nconst TabContent = props => {\n const { classes } = props;\n\n return <Grid\n item\n className={ clsx(classes.root, {[classes.overflowAuto]: props.overflow === 'auto'}) }\n >\n { props.children }\n </Grid>;\n}\n\nTabContent.propTypes = {\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Overflow behavior\n */\n overflow: PropTypes.string\n};\n\nexport default withStyles(styles)(TabContent);","import PropTypes from 'prop-types';\n\nimport { Grid } from '@mui/material';\n\nconst TabHeader = props => {\n return <Grid\n item\n container\n alignItems=\"center\"\n >\n { props.children }\n </Grid>;\n}\n\nTabHeader.propTypes = {\n /**\n * The content of the component.\n */\n children: PropTypes.node\n};\n\nexport default TabHeader;","import React from 'react';\n\nimport { IconButton, Tooltip } from '@mui/material';\n\nimport Brightness4Icon from '@mui/icons-material/Brightness4';\nimport Brightness5Icon from '@mui/icons-material/Brightness5';\nimport Brightness6Icon from '@mui/icons-material/Brightness6';\nimport Brightness7Icon from '@mui/icons-material/Brightness7';\n\nexport default function ToggleThemeMenu({ themeName, toggleTheme, t, className, style, size }) {\n return <div className={className || undefined} style={style || undefined}>\n <Tooltip title={t('ra_Change color theme')}>\n <IconButton onClick={() => toggleTheme()} size={size || 'medium'}>\n {themeName === 'dark' && <Brightness4Icon className={className} />}\n {themeName === 'blue' && <Brightness5Icon className={className} />}\n {themeName === 'colored' && <Brightness6Icon className={className} />}\n {themeName === 'light' && <Brightness7Icon className={className} />}\n </IconButton>\n </Tooltip>\n </div>;\n}","/**\n * Copyright 2018-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst NAMESPACE = 'material';\nconst days = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst QUALITY_BITS = {\n 0x00: '0x00 - good',\n\n 0x01: '0x01 - general problem',\n 0x02: '0x02 - no connection problem',\n\n 0x10: '0x10 - substitute value from controller',\n 0x20: '0x20 - substitute initial value',\n 0x40: '0x40 - substitute value from device or instance',\n 0x80: '0x80 - substitute value from sensor',\n\n 0x11: '0x11 - general problem by instance',\n 0x41: '0x41 - general problem by device',\n 0x81: '0x81 - general problem by sensor',\n\n 0x12: '0x12 - instance not connected',\n 0x42: '0x42 - device not connected',\n 0x82: '0x82 - sensor not connected',\n\n 0x44: '0x44 - device reports error',\n 0x84: '0x84 - sensor reports error',\n};\nconst SIGNATURES = {\n JVBERi0: 'pdf',\n R0lGODdh: 'gif',\n R0lGODlh: 'gif',\n iVBORw0KGgo: 'png',\n '/9j/': 'jpg',\n PHN2Zw: 'svg',\n Qk1: 'bmp',\n AAABAA: 'ico' // 00 00 01 00 according to https://en.wikipedia.org/wiki/List_of_file_signatures\n};\n\nclass Utils {\n static namespace = NAMESPACE;\n static INSTANCES = 'instances';\n static dateFormat = ['DD', 'MM'];\n static FORBIDDEN_CHARS = /[^._\\-/ :!#$%&()+=@^{}|~\\p{Ll}\\p{Lu}\\p{Nd}]+/gu;\n\n /**\n * Capitalize words.\n * @param {string | undefined} name\n * @returns {string}\n */\n static CapitalWords(name) {\n return (name || '').split(/[\\s_]/)\n .filter(item => item)\n .map(word => word ? word[0].toUpperCase() + word.substring(1).toLowerCase() : '')\n .join(' ');\n }\n\n static formatSeconds(seconds) {\n const days = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n let hours = Math.floor(seconds / 3600);\n if (hours < 10) {\n hours = '0' + hours;\n }\n seconds %= 3600;\n let minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n let text = '';\n if (days) {\n text += `${days} ${I18n.t('ra_daysShortText')} `;\n }\n text += `${hours}:${minutes}:${seconds}`;\n\n return text;\n }\n\n /**\n * Get the name of the object by id from the name or description.\n * @param {Record<string, ioBroker.Object>} objects\n * @param {string} id\n * @param {{ name: any; } | ioBroker.Languages | null} settings\n * @param {{ language?: ioBroker.Languages; }} options\n * @param {boolean} [isDesc] Set to true to get the description.\n * @returns {string}\n */\n static getObjectName(objects, id, settings, options, isDesc) {\n let item = objects[id];\n let text = id;\n const attr = isDesc ? 'desc' : 'name';\n\n if (typeof settings === 'string' && !options) {\n options = {language: settings};\n settings = null;\n }\n\n options = options || {};\n if (!options.language) {\n options.language = (objects['system.config'] && objects['system.config'].common && objects['system.config'].common.language) || window.sysLang || 'en';\n }\n if (settings && settings.name) {\n text = settings.name;\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n } else\n if (item && item.common && item.common[attr]) {\n text = item.common[attr];\n if (attr !== 'desc' && !text && item.common.desc) {\n text = item.common.desc;\n }\n if (typeof text === 'object') {\n text = text[options.language] || text.en || text.de || text.ru || '';\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n } else {\n let pos = id.lastIndexOf('.');\n text = id.substring(pos + 1).replace(/[_.]/g, ' ');\n text = Utils.CapitalWords(text);\n }\n\n return text.trim();\n }\n\n /**\n * Get the name of the object from the name or description.\n * @param {ioBroker.PartialObject} obj\n * @param {{ name: any; } | ioBroker.Languages | null } settings or language\n * @param {{ language?: ioBroker.Languages; } } options\n * @param {boolean} [isDesc] Set to true to get the description.\n * @returns {string}\n */\n static getObjectNameFromObj(obj, settings, options, isDesc) {\n let item = obj;\n let text = (obj && obj._id) || '';\n const attr = isDesc ? 'desc' : 'name';\n\n if (typeof settings === 'string' && !options) {\n options = {language: settings};\n settings = null;\n }\n\n options = options || {};\n\n if (settings && settings.name) {\n text = settings.name;\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n } else\n if (item && item.common && item.common[attr]) {\n text = item.common[attr];\n if (attr !== 'desc' && !text && item.common.desc) {\n text = item.common.desc;\n }\n if (typeof text === 'object') {\n text = text[options.language] || text.en;\n }\n text = (text || '').toString().replace(/[_.]/g, ' ');\n\n if (text === text.toUpperCase()) {\n text = text[0] + text.substring(1).toLowerCase();\n }\n }\n return text.trim();\n }\n\n /**\n * @param {ioBroker.PartialObject | ioBroker.ObjectCommon} obj\n * @param {string} forEnumId\n * @param {{ user: string; }} options\n * @returns {string | null}\n */\n static getSettingsOrder(obj, forEnumId, options) {\n if (obj && obj.hasOwnProperty('common')) {\n obj = obj.common;\n }\n let settings;\n if (obj && obj.custom) {\n settings = (obj.custom || {})[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subOrder && settings[user].subOrder[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subOrder[forEnumId]));\n }\n } else {\n if (settings[user].order) {\n return JSON.parse(JSON.stringify(settings[user].order));\n }\n }\n }\n }\n return null;\n }\n\n /**\n * @param {ioBroker.PartialObject | ioBroker.ObjectCommon} obj\n * @param {string} forEnumId\n * @param {{ user: string; }} options\n */\n static getSettingsCustomURLs(obj, forEnumId, options) {\n if (obj && obj.hasOwnProperty('common')) {\n obj = obj.common;\n }\n let settings;\n if (obj && obj.custom) {\n settings = (obj.custom || {})[NAMESPACE];\n const user = options.user || 'admin';\n if (settings && settings[user]) {\n if (forEnumId) {\n if (settings[user].subURLs && settings[user].subURLs[forEnumId]) {\n return JSON.parse(JSON.stringify(settings[user].subURLs[forEnumId]));\n }\n } else {\n if (settings[user].URLs) {\n return JSON.parse(JSON.stringify(settings[user].URLs));\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Reorder the array items in list between source and dest.\n * @param {Iterable<any> | ArrayLike<any>} list\n * @param {number} source\n * @param {number} dest\n */\n static reorder(list, source, dest) {\n const result = Array.from(list);\n const [removed] = result.splice(source, 1);\n result.splice(dest, 0, removed);\n return result;\n };\n\n /**\n * @param {any} obj\n * @param {{ id: any; user: any; name: any; icon: any; color: any; language: ioBroker.Languages; }} options\n * @param {boolean} [defaultEnabling]\n */\n static getSettings(obj, options, defaultEnabling) {\n let settings;\n const id = (obj && obj._id) || (options && options.id);\n if (obj && obj.hasOwnProperty('common')) {\n obj = obj.common;\n }\n if (obj && obj.custom) {\n settings = obj.custom || {};\n settings = settings[NAMESPACE] && settings[NAMESPACE][options.user || 'admin'] ? JSON.parse(JSON.stringify(settings[NAMESPACE][options.user || 'admin'])) : {enabled: true};\n } else {\n settings = {enabled: defaultEnabling === undefined ? true : defaultEnabling, useCustom: false};\n }\n\n if (!settings.hasOwnProperty('enabled')) {\n settings.enabled = defaultEnabling === undefined ? true : defaultEnabling;\n }\n\n if (false && settings.useCommon) {\n if (obj.color) settings.color = obj.color;\n if (obj.icon) settings.icon = obj.icon;\n if (obj.name) settings.name = obj.name;\n } else {\n if (options) {\n if (!settings.name && options.name) settings.name = options.name;\n if (!settings.icon && options.icon) settings.icon = options.icon;\n if (!settings.color && options.color) settings.color = options.color;\n }\n\n if (obj) {\n if (!settings.color && obj.color) settings.color = obj.color;\n if (!settings.icon && obj.icon) settings.icon = obj.icon;\n if (!settings.name && obj.name) settings.name = obj.name;\n }\n }\n\n if (typeof settings.name === 'object') {\n settings.name = settings.name[options.language] || settings.name.en;\n\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n\n if (settings.name === settings.name.toUpperCase()) {\n settings.name = settings.name[0] + settings.name.substring(1).toLowerCase();\n }\n }\n if (!settings.name && id) {\n let pos = id.lastIndexOf('.');\n settings.name = id.substring(pos + 1).replace(/[_.]/g, ' ');\n settings.name = (settings.name || '').toString().replace(/_/g, ' ');\n settings.name = Utils.CapitalWords(settings.name);\n }\n\n return settings;\n }\n\n /**\n * @param {any} obj\n * @param {any} settings\n * @param {{ user: any; language: ioBroker.Languages; }} options\n */\n static setSettings(obj, settings, options) {\n if (obj) {\n obj.common = obj.common || {};\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[NAMESPACE] = obj.common.custom[NAMESPACE] || {};\n obj.common.custom[NAMESPACE][options.user || 'admin'] = settings;\n const s = obj.common.custom[NAMESPACE][options.user || 'admin'];\n if (s.useCommon) {\n if (s.color !== undefined) {\n obj.common.color = s.color;\n delete s.color;\n }\n if (s.icon !== undefined) {\n obj.common.icon = s.icon;\n delete s.icon;\n }\n if (s.name !== undefined) {\n if (typeof obj.common.name !== 'object') {\n obj.common.name = {};\n obj.common.name[options.language] = s.name;\n } else{\n obj.common.name[options.language] = s.name;\n }\n delete s.name;\n }\n }\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Get the icon for the given settings.\n * @param {{ icon: string | undefined; name: string | undefined; prefix: string | undefined}} settings\n * @param {any} style\n * @returns {JSX.Element | null}\n */\n static getIcon(settings, style) {\n if (settings && settings.icon) {\n // If UTF-8 icon\n if (settings.icon.length <= 2) {\n return <span style={style || {}}>{settings.icon}</span>;\n } else\n if (settings.icon.startsWith('data:image')) {\n return <img alt={settings.name} src={settings.icon} style={style || {}}/>;\n } else { // may be later some changes for second type\n return <img alt={settings.name} src={(settings.prefix || '') + settings.icon} style={style || {}}/>;\n }\n }\n return null;\n }\n\n /**\n * Get the icon for the given object.\n * @param {string} id\n * @param {{ common: { icon: any; }; }} obj\n * @returns {string | null}\n */\n static getObjectIcon(id, obj) {\n // If id is Object\n if (typeof id === 'object') {\n obj = id;\n id = obj._id;\n }\n\n if (obj && obj.common && obj.common.icon) {\n let icon = obj.common.icon;\n // If UTF-8 icon\n if (typeof icon === 'string' && icon.length <= 2) {\n return icon;\n } else\n if (icon.startsWith('data:image')) {\n return icon;\n } else {\n const parts = id.split('.');\n if (parts[0] === 'system') {\n icon = 'adapter/' + parts[2] + (icon.startsWith('/') ? '' : '/') + icon;\n } else {\n icon = 'adapter/' + parts[0] + (icon.startsWith('/') ? '' : '/') + icon;\n }\n\n if (window.location.pathname.match(/adapter\\/[^/]+\\/[^/]+\\.html/)) {\n icon = '../../' + icon;\n } else if (window.location.pathname.match(/material\\/[.\\d]+/)) {\n icon = '../../' + icon;\n } else\n if (window.location.pathname.match(/material\\//)) {\n icon = '../' + icon;\n }\n return icon;\n }\n } else {\n return null;\n }\n }\n\n /**\n * Splits CamelCase into words.\n * @param {string | undefined} text\n * @returns {string}\n */\n static splitCamelCase(text) {\n if (false && text !== text.toUpperCase()) {\n const words = text.split(/\\s+/);\n for (let i = 0; i < words.length; i++) {\n let word = words[i];\n if (word.toLowerCase() !== word && word.toUpperCase() !== word) {\n let z = 0;\n const ww = [];\n let start = 0;\n while (z < word.length) {\n if (word[z].match(/[A-ZÜÄÖА-Я]/)) {\n ww.push(word.substring(start, z));\n start = z;\n }\n z++;\n }\n if (start !== z) {\n ww.push(word.substring(start, z));\n }\n for (let k = 0; k < ww.length; k++) {\n words.splice(i + k, 0, ww[k]);\n }\n i += ww.length;\n }\n }\n\n return words.map(w => {\n w = w.trim();\n if (w) {\n return w[0].toUpperCase() + w.substring(1).toLowerCase();\n }\n return '';\n }).join(' ');\n } else {\n return Utils.CapitalWords(text);\n }\n }\n\n /**\n * Check if the given color is bright.\n * https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n * @param {string | null | undefined} color\n * @param {boolean} [defaultValue]\n * @returns {boolean}\n */\n static isUseBright(color, defaultValue) {\n if (color === null || color === undefined || color === '') {\n return defaultValue === undefined ? true : defaultValue;\n }\n color = color.toString();\n if (color.indexOf('#') === 0) {\n color = color.slice(1);\n }\n let r;\n let g;\n let b;\n\n const rgb = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n if (rgb && rgb.length === 4) {\n r = parseInt(rgb[1], 10);\n g = parseInt(rgb[2], 10);\n b = parseInt(rgb[3], 10);\n } else {\n // convert 3-digit hex to 6-digits.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n if (color.length !== 6) {\n return false;\n }\n\n r = parseInt(color.slice(0, 2), 16);\n g = parseInt(color.slice(2, 4), 16);\n b = parseInt(color.slice(4, 6), 16);\n }\n\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) <= 186;\n };\n\n /**\n * Get the time string in the format 00:00.\n * @param {string | number} seconds\n */\n static getTimeString(seconds) {\n seconds = parseFloat(seconds);\n if (isNaN(seconds)) {\n return '--:--';\n }\n const hours = Math.floor(seconds / 3600);\n let minutes = Math.floor((seconds % 3600) / 60);\n let secs = seconds % 60;\n if (hours) {\n if (minutes < 10) minutes = '0' + minutes;\n if (secs < 10) secs = '0' + secs;\n return hours + ':' + minutes + ':' + secs;\n } else {\n if (secs < 10) secs = '0' + secs;\n return minutes + ':' + secs;\n }\n }\n\n /**\n * Gets the wind direction with the given angle (degrees).\n * @param {number} angle in degrees.\n * @returns {string | undefined}\n */\n static getWindDirection(angle) {\n if (angle >= 0 && angle < 11.25) {\n return 'N'\n } else if (angle >= 11.25 && angle < 33.75) {\n return 'NNE'\n } else if (angle >= 33.75 && angle < 56.25) {\n return 'NE'\n } else if (angle >= 56.25 && angle < 78.75) {\n return 'ENE'\n } else if (angle >= 78.75 && angle < 101.25) {\n return 'E'\n } else if (angle >= 101.25 && angle < 123.75) {\n return 'ESE'\n } else if (angle >= 123.75 && angle < 146.25) {\n return 'SE'\n } else if (angle >= 146.25 && angle < 168.75) {\n return 'SSE'\n } else if (angle >= 168.75 && angle < 191.25) {\n return 'S'\n } else if (angle >= 191.25 && angle < 213.75) {\n return 'SSW'\n } else if (angle >= 213.75 && angle < 236.25) {\n return 'SW'\n } else if (angle >= 236.25 && angle < 258.75) {\n return 'WSW'\n } else if (angle >= 258.75 && angle < 281.25) {\n return 'W'\n } else if (angle >= 281.25 && angle < 303.75) {\n return 'WNW'\n } else if (angle >= 303.75 && angle < 326.25) {\n return 'NW'\n } else if (angle >= 326.25 && angle < 348.75) {\n return 'NNW'\n } else if (angle >= 348.75) {\n return 'N'\n }\n }\n\n /**\n * Pad the given number with a zero if its not 2 digits long.\n * @param {string | number} num\n */\n static padding(num) {\n if (typeof num === 'string') {\n if (num.length < 2) {\n return '0' + num;\n } else {\n return num;\n }\n } else if (num < 10) {\n return '0' + num;\n } else {\n return num;\n }\n }\n\n /**\n * Sets the date format.\n * @param {string} format\n */\n static setDataFormat(format) {\n if (format) {\n Utils.dateFormat = format.toUpperCase().split(/[.-/]/);\n Utils.dateFormat.splice(Utils.dateFormat.indexOf('YYYY'), 1);\n }\n }\n\n /**\n * Converts the date to a string.\n * @param {string | number | Date} now\n * @returns {string}\n */\n static date2string(now) {\n if (typeof now === 'string') {\n now = now.trim();\n if (!now) return '';\n // only letters\n if (now.match(/^[\\w\\s]+$/)) {\n // Day of week\n return now;\n }\n let m = now.match(/(\\d{1,4})[-./](\\d{1,2})[-./](\\d{1,4})/);\n if (m) {\n let a = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];\n let year = a.find(y => y > 31);\n a.splice(a.indexOf(year), 1);\n let day = a.find(m => m > 12);\n if (day) {\n a.splice(a.indexOf(day), 1);\n now = new Date(year, a[0] - 1, day);\n } else {\n // MM DD\n if (Utils.dateFormat[0][0] === 'M' && Utils.dateFormat[1][0] === 'D') {\n now = new Date(year, a[0] - 1, a[1]);\n if (Math.abs(now.getTime - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[1] - 1, a[0]);\n }\n } else\n // DD MM\n if (Utils.dateFormat[0][0] === 'D' && Utils.dateFormat[1][0] === 'M') {\n now = new Date(year, a[1] - 1, a[0]);\n if (Math.abs(now.getTime - Date.now()) > 3600000 * 24 * 10) {\n now = new Date(year, a[0] - 1, a[1]);\n }\n } else {\n now = new Date(now);\n }\n }\n } else {\n now = new Date(now);\n }\n } else {\n now = new Date(now);\n }\n\n let date = I18n.t('ra_dow_' + days[now.getDay()]).replace('ra_dow_', '');\n date += '. ' + now.getDate() + ' ' + I18n.t('ra_month_' + months[now.getMonth()]).replace('ra_month_', '');\n return date;\n }\n\n /**\n * Render a text as a link.\n * @param {string} text\n * @returns {string | JSX.Element[]}\n */\n static renderTextWithA(text) {\n let m = text.match(/<a [^<]+<\\/a>|<br\\/?>/);\n if (m) {\n const result = [];\n let key = 1;\n do {\n const p = text.split(m[0]);\n p[0] && result.push(<span key={'a' + (key++)}>{p[0]}</span>);\n\n if (m[0].startsWith('<br')) {\n result.push(<br key={'a' + (key++)} />);\n } else {\n let href = m[0].match(/href=\"([^\"]+)\"/) || m[0].match(/href='([^']+)'/);\n let target = m[0].match(/target=\"([^\"]+)\"/) || m[0].match(/target='([^']+)'/);\n let rel = m[0].match(/rel=\"([^\"]+)\"/) || m[0].match(/rel='([^']+)'/);\n const title = m[0].match(/>([^<]*)</);\n\n // eslint-disable-next-line\n result.push(<a key={'a' + (key++)} href={href ? href[1] : ''} target={target ? target[1] : '_blank'} rel={rel ? rel[1] : ''}>{title ? title[1] : ''}</a>);\n }\n\n text = p[1];\n\n m = text && text.match(/<a [^<]+<\\/a>|<br\\/?>/);\n if (!m) {\n p[1] && result.push(<span key={'a' + (key++)}>{p[1]}</span>);\n }\n } while (m);\n\n return result;\n } else {\n return text;\n }\n }\n\n /**\n * Get the smart name of the given state.\n * @param {Record<string, ioBroker.StateObject> | ioBroker.StateObject} states\n * @param {string} id\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static getSmartName(states, id, instanceId, noCommon) {\n if (!id) {\n if (!noCommon) {\n if (!states.common) {\n return states.smartName;\n } else {\n if (states && !states.common) {\n return states.smartName;\n } else {\n return states.common.smartName;\n }\n }\n } else {\n if (states && !states.common) {\n return states.smartName;\n } else {\n return (states &&\n states.common &&\n states.common.custom &&\n states.common.custom[instanceId]) ?\n states.common.custom[instanceId].smartName : undefined;\n }\n }\n } else\n if (!noCommon) {\n return states[id].common.smartName;\n } else {\n return (states[id] &&\n states[id].common &&\n states[id].common.custom &&\n states[id].common.custom[instanceId]) ?\n states[id].common.custom[instanceId].smartName || null : null;\n }\n }\n\n /**\n * Get the smart name from a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static getSmartNameFromObj(obj, instanceId, noCommon) {\n if (!noCommon) {\n if (!obj.common) {\n return obj.smartName;\n } else {\n if (obj && !obj.common) {\n return obj.smartName;\n } else {\n return obj.common.smartName;\n }\n }\n } else {\n if (obj && !obj.common) {\n return obj.smartName;\n } else {\n return (obj &&\n obj.common &&\n obj.common.custom &&\n obj.common.custom[instanceId]) ?\n obj.common.custom[instanceId].smartName : undefined;\n }\n }\n }\n\n /**\n * Enable smart name for a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static enableSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = {};\n } else {\n obj.common.smartName = {};\n }\n }\n\n /**\n * Completely remove smart name from a state.\n * @param {ioBroker.StateObject} obj\n * @param {string | number} instanceId\n * @param {boolean} [noCommon]\n */\n static removeSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n if (obj.common && obj.common.custom && obj.common.custom[instanceId]) {\n obj.common.custom[instanceId] = null;\n }\n } else {\n obj.common.smartName = null;\n }\n }\n\n /**\n * Update the smartname of a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} newSmartName\n * @param {string | undefined} byON\n * @param {string | undefined} smartType\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static updateSmartName(obj, newSmartName, byON, smartType, instanceId, noCommon) {\n const language = I18n.getLanguage();\n\n // convert Old format\n if (typeof obj.common.smartName === 'string') {\n const nnn = obj.common.smartName;\n obj.common.smartName = {};\n obj.common.smartName[language] = nnn;\n }\n\n // convert old settings\n if (obj.native && obj.native.byON) {\n delete obj.native.byON;\n let _smartName = obj.common.smartName;\n\n if (!_smartName || typeof _smartName !== 'object') {\n _smartName = {en: _smartName};\n _smartName[language] = _smartName.en;\n }\n obj.common.smartName = _smartName;\n }\n if (smartType !== undefined) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n if (!smartType) {\n delete obj.common.custom[instanceId].smartName.smartType;\n } else {\n obj.common.custom[instanceId].smartName.smartType = smartType;\n }\n } else {\n obj.common.smartName = obj.common.smartName || {};\n if (!smartType) {\n delete obj.common.smartName.smartType;\n } else {\n obj.common.smartName.smartType = smartType;\n }\n\n }\n }\n if (byON !== undefined) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n obj.common.custom[instanceId].smartName.byON = byON;\n } else {\n obj.common.smartName = obj.common.smartName || {};\n obj.common.smartName.byON = byON;\n }\n }\n if (newSmartName !== undefined) {\n let smartName;\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = obj.common.custom[instanceId].smartName || {};\n smartName = obj.common.custom[instanceId].smartName;\n } else {\n obj.common.smartName = obj.common.smartName || {};\n smartName = obj.common.smartName;\n }\n smartName[language] = newSmartName;\n\n // If smart name deleted\n if (smartName && (!smartName[language] ||\n (smartName[language] === obj.common.name &&\n (!obj.common.role || obj.common.role.indexOf('button') >= 0)))) {\n delete smartName[language];\n let empty = true;\n // Check if structure has any definitions\n for (const key in smartName) {\n if (smartName.hasOwnProperty(key)) {\n empty = false;\n break;\n }\n }\n // If empty => delete smartName completely\n if (empty) {\n if (noCommon) {\n if (obj.common.custom[instanceId].smartName.byON === undefined) {\n delete obj.common.custom[instanceId];\n } else {\n delete obj.common.custom[instanceId].en;\n delete obj.common.custom[instanceId].de;\n delete obj.common.custom[instanceId].ru;\n delete obj.common.custom[instanceId].nl;\n delete obj.common.custom[instanceId].pl;\n delete obj.common.custom[instanceId].it;\n delete obj.common.custom[instanceId].fr;\n delete obj.common.custom[instanceId].pt;\n delete obj.common.custom[instanceId].es;\n delete obj.common.custom[instanceId]['zh-cn'];\n }\n } else {\n if (obj.common.smartName.byON !== undefined) {\n delete obj.common.smartName.en;\n delete obj.common.smartName.de;\n delete obj.common.smartName.ru;\n delete obj.common.smartName.nl;\n delete obj.common.smartName.pl;\n delete obj.common.smartName.it;\n delete obj.common.smartName.fr;\n delete obj.common.smartName.pt;\n delete obj.common.smartName.es;\n delete obj.common.smartName['zh-cn'];\n } else {\n obj.common.smartName = null;\n }\n }\n }\n }\n }\n }\n\n /**\n * Disable the smart name of a state.\n * @param {ioBroker.StateObject} obj\n * @param {string} instanceId\n * @param {boolean} [noCommon]\n */\n static disableSmartName(obj, instanceId, noCommon) {\n if (noCommon) {\n obj.common.custom = obj.common.custom || {};\n obj.common.custom[instanceId] = obj.common.custom[instanceId] || {};\n obj.common.custom[instanceId].smartName = false;\n } else {\n obj.common.smartName = false;\n }\n }\n\n /**\n * Copy text to the clipboard.\n * @param {string} text\n * @param {Event} [e]\n */\n static copyToClipboard(text, e) {\n const el = window.document.createElement('textarea');\n el.value = text;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n console.log(text);\n e && e.stopPropagation();\n e && e.preventDefault();\n }\n\n /**\n * Gets the extension of a file name.\n * @param {string | null} [fileName] the file name.\n * @returns {string | null} The extension in lower case.\n */\n static getFileExtension(fileName) {\n const pos = (fileName || '').lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n } else {\n return null;\n }\n }\n\n /**\n * Format number of bytes as a string with B, KB, MB or GB.\n * The base for all calculations is 1024.\n * @param {number} bytes The number of bytes.\n * @returns {string} The formatted string (e.g. '723.5 KB')\n */\n static formatBytes(bytes) {\n if (Math.abs(bytes) < 1024) {\n return bytes + ' B';\n }\n\n const units = ['KB','MB','GB'];\n //const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return bytes.toFixed(1) + ' ' + units[u];\n }\n\n /**\n * Invert the given color according to theme type to get the inverted text color for background\n * @param {string} color Color in the format '#rrggbb' or '#rgb' (or without hash)\n * @param {string} themeType theme type\n * @param {string} invert dark theme has light color in control or light theme has light color in control\n * @returns {string}\n */\n static getInvertedColor(color, themeType, invert) {\n if (!color) {\n return undefined;\n } else {\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && (themeType === 'dark' || (invert && themeType === 'light'))) {\n return '#DDD';\n } else\n if (invertedColor === '#000000' && (themeType === 'light' || (invert && themeType === 'dark'))) {\n return '#222';\n } else {\n return undefined;\n }\n }\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n /**\n * Invert the given color\n * @param {string} hex Color in the format '#rrggbb' or '#rgb' (or without hash)\n * @param {boolean} bw Set to black or white.\n * @returns {string}\n */\n static invertColor(hex, bw) {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.startsWith('rgba')) {\n const m = hex.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)/);\n if (m) {\n hex = parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else if (hex.startsWith('rgba')) {\n const m = hex.match(/rgb?\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) {\n hex = parseInt(m[1], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0') +\n parseInt(m[2], 10).toString(16).padStart(2, '0');\n }\n } else\n if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n console.warn('Cannot invert color: ' + hex);\n return hex;\n }\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n // invert color components\n r = (255 - r).toString(16);\n g = (255 - g).toString(16);\n b = (255 - b).toString(16);\n // pad each with zeros and return\n return '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * @private\n * @param {any} mix\n * @returns {string}\n */\n static _toVal(mix) {\n let k, y, str='';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (k=0; k < mix.length; k++) {\n if (mix[k]) {\n if ((y = Utils._toVal(mix[k]))) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (k in mix) {\n if (mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * Convert any object to a string with its values.\n * @returns {string}\n */\n static clsx () {\n let i = 0;\n let tmp;\n let x;\n let str = '';\n while (i < arguments.length) {\n if ((tmp = arguments[i++])) {\n if ((x = Utils._toVal(tmp))) {\n str && (str += ' ');\n str += x\n }\n }\n }\n return str;\n }\n\n /**\n * Get the current theme name (either from local storage or the browser settings).\n * @param {string} [themeName]\n * @returns {string}\n */\n static getThemeName(themeName = '') {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return window.vendorPrefix;\n }\n\n return themeName ? themeName : (window._localStorage || window.localStorage).getItem('App.themeName') ?\n (window._localStorage || window.localStorage).getItem('App.themeName') : window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'colored';\n }\n\n /**\n * Get the type of theme.\n * @param {string} [themeName]\n * @returns {'dark' | 'light'}\n */\n static getThemeType(themeName = '') {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return 'light';\n }\n\n themeName = themeName || (window.localStorage && (window._localStorage || window.localStorage).getItem('App.themeName'));\n return themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light';\n }\n\n /**\n * Set the theme name and theme type.\n * @param {string} themeName\n */\n static setThemeName(themeName) {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return; // ignore\n }\n (window._localStorage || window.localStorage).setItem('App.themeName', themeName);\n (window._localStorage || window.localStorage).setItem('App.theme', themeName === 'dark' || themeName === 'blue' ? 'dark' : 'light');\n }\n\n /**\n * Toggle the theme name between 'dark' and 'colored'.\n * @param {string | null} themeName\n * @returns {string} the new theme name.\n */\n static toggleTheme(themeName) {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return window.vendorPrefix;\n }\n themeName = themeName || (window.localStorage && (window._localStorage || window.localStorage).getItem('App.themeName'));\n\n // dark => blue => colored => light => dark\n const themes = Utils.getThemeNames();\n const pos = themes.indexOf(themeName);\n let newTheme;\n if (pos !== -1) {\n newTheme = themes[(pos + 1) % themes.length];\n } else {\n newTheme = themes[0];\n }\n Utils.setThemeName(newTheme);\n\n return newTheme;\n }\n\n /**\n * Get the list of themes\n * @returns {array<string>} list of possible themes\n */\n static getThemeNames() {\n if (window.vendorPrefix && window.vendorPrefix !== '@@vendorPrefix@@') {\n return [window.vendorPrefix];\n }\n\n return ['light', 'dark', 'blue', 'colored'];\n }\n\n /**\n * Parse a query string into its parts.\n * @param {string} query\n * @returns {Record<string, string | boolean | number>}\n */\n static parseQuery(query) {\n query = (query || '').toString().replace(/^\\?/, '');\n /** @type {Record<string, string | boolean | number>} */\n const result = {};\n query.split('&').forEach(part => {\n part = part.trim();\n if (part) {\n const parts = part.split('=');\n const attr = decodeURIComponent(parts[0]).trim();\n if (parts.length > 1) {\n result[attr] = decodeURIComponent(parts[1]);\n if (result[attr] === 'true') {\n result[attr] = true;\n } else if (result[attr] === 'false') {\n result[attr] = false;\n } else {\n const f = parseFloat(result[attr]);\n if (f.toString() === result[attr]) {\n result[attr] = f;\n }\n }\n } else {\n result[attr] = true;\n }\n }\n });\n return result;\n }\n\n /**\n * Returns parent ID.\n * @param {string} id\n * @returns {string | null} parent ID or null if no parent\n */\n static getParentId(id) {\n const p = (id || '').toString().split('.');\n if (p.length > 1) {\n p.pop();\n return p.join('.');\n } else {\n return null;\n }\n }\n\n static formatDate(dateObj, dateFormat) {\n // format could be DD.MM.YYYY, YYYY.MM.DD or MM/DD/YYYY\n\n if (!dateObj) {\n return '';\n }\n\n let text;\n let mm = dateObj.getMonth() + 1;\n if (mm < 10) {\n mm = '0' + mm;\n }\n\n let dd = dateObj.getDate();\n if (dd < 10) {\n dd = '0' + dd;\n }\n\n if (dateFormat === 'MM/DD/YYYY') {\n text = mm + '/' + dd + '/' + dateObj.getFullYear();\n } else {\n text = dateObj.getFullYear() + '-' + mm + '-' + dd;\n }\n\n // time\n let v = dateObj.getHours();\n if (v < 10) {\n text += ' 0' + v;\n } else {\n text += ' ' + v;\n }\n v = dateObj.getMinutes();\n if (v < 10) {\n text += ':0' + v;\n } else {\n text += ':' + v;\n }\n\n v = dateObj.getSeconds();\n if (v < 10) {\n text += ':0' + v;\n } else {\n text += ':' + v;\n }\n\n v = dateObj.getMilliseconds();\n if (v < 10) {\n text += '.00' + v;\n } else if (v < 100) {\n text += '.0' + v;\n } else {\n text += '.' + v;\n }\n\n return text;\n }\n\n static formatTime(seconds) {\n if (seconds) {\n seconds = Math.round(seconds);\n const d = Math.floor(seconds / (3600 * 24));\n const h = Math.floor((seconds % (3600 * 24)) / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = seconds % 60;\n if (d) {\n return `${d}.${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n } else if (h) {\n return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n } else {\n return `0:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\n }\n } else {\n return '0:00:00';\n }\n }\n\n static MDtext2link(text) {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, ' '));\n }\n\n return text.replace(/[^a-zA-Zа-яА-Я0-9]/g, '').trim().replace(/\\s/g, '').toLowerCase();\n }\n\n static openLink(url, target) {\n // replace IPv6 Address with [ipv6]:port\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n\n if (target === 'this') {\n window.location = url;\n } else {\n window.open(url, target || '_blank');\n }\n }\n\n static MDgetTitle(text) {\n let {body, header} = Utils.extractHeader(text);\n if (!header.title) {\n // remove {docsify-bla}\n body = body.replace(/{[^}]*}/g, '');\n body = body.trim();\n const lines = body.replace(/\\r/g, '').split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('# ')) {\n return lines[i].substring(2).trim();\n }\n }\n return '';\n } else {\n return header.title;\n }\n }\n\n static MDextractHeader(text) {\n const attrs = {};\n if (text.substring(0, 3) === '---') {\n const pos = text.substring(3).indexOf('\\n---');\n if (pos !== -1) {\n const _header = text.substring(3, pos + 3);\n const lines = _header.replace(/\\r/g, '').split('\\n');\n lines.forEach(line => {\n if (!line.trim()) {\n return;\n }\n const pos = line.indexOf(':');\n if (pos !== -1) {\n const attr = line.substring(0, pos).trim();\n attrs[attr] = line.substring(pos + 1).trim();\n attrs[attr] = attrs[attr].replace(/^['\"]|['\"]$/g, '');\n if (attrs[attr] === 'true') {\n attrs[attr] = true;\n } else if (attrs[attr] === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(attrs[attr]).toString() === attrs[attr]) {\n attrs[attr] = parseFloat(attrs[attr]);\n }\n } else {\n attrs[line.trim()] = true;\n }\n });\n text = text.substring(pos + 7);\n }\n }\n return {header: attrs, body: text};\n }\n\n static MDremoveDocsify(text) {\n const m = text.match(/{docsify-[^}]*}/g);\n if (m) {\n m.forEach(doc => text = text.replace(doc, ''));\n }\n return text;\n }\n\n /**\n * Generate the json file on the file for download.\n * @param {string} filename file name\n * @returns {object} json structure (not stringified)\n */\n static generateFile(filename, json) {\n let el = document.createElement('a');\n el.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(json, null, 2)));\n el.setAttribute('download', filename);\n\n el.style.display = 'none';\n document.body.appendChild(el);\n\n el.click();\n\n document.body.removeChild(el);\n }\n\n /**\n * Convert quality code into text\n * @param {number} quality code\n * @returns {array<string>} lines that decode qulity\n */\n static quality2text(quality) {\n const custom = quality & 0xFFFF0000;\n const text = QUALITY_BITS[quality];\n let result;\n if (text) {\n result = [text];\n } else if (quality & 0x01) {\n result = [QUALITY_BITS[0x01], '0x' + (quality & (0xFFFF & ~1)).toString(16)];\n } else if (quality & 0x02) {\n result = [QUALITY_BITS[0x02], '0x' + (quality & (0xFFFF & ~2)).toString(16)];\n } else {\n result = ['0x' + quality.toString(16)];\n }\n if (custom) {\n result.push('0x' + (custom >> 16).toString(16).toUpperCase());\n }\n return result;\n }\n\n /**\n * Deep copy object\n * @param {object} object\n * @returns {object}\n */\n static clone(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n /**\n * Get states of object\n * @param {object} obj\n * @returns {object} states as an object in form {\"value1\": \"label1\", \"value2\": \"label2\"} or null\n */\n static getStates(obj) {\n let states = obj?.common?.states;\n if (states) {\n if (typeof states === 'string' && states[0] === '{') {\n try {\n states = JSON.parse(states);\n } catch (ex) {\n console.error(`Cannot parse states: ${states}`);\n states = null;\n }\n } else\n // if old format val1:text1;val2:text2\n if (typeof states === 'string') {\n const parts = states.split(';');\n states = {};\n for (let p = 0; p < parts.length; p++) {\n const s = parts[p].split(':');\n states[s[0]] = s[1];\n }\n } else if (Array.isArray(states)) {\n const result = {};\n if (obj.common.type === 'number') {\n states.forEach((value, key) => result[key] = value);\n } else\n if (obj.common.type === 'string') {\n states.forEach(value => result[value] = value);\n } else if (obj.common.type === 'boolean') {\n result['false'] = states[0];\n result['true'] = states[1];\n }\n\n return result;\n }\n }\n\n return states;\n }\n\n /**\n * Get svg file as text\n * @param {string} url URL of SVG file\n * @returns {object} Promise with \"data:image...\"\n */\n static getSvg(url) {\n return fetch(url)\n .then(response => response.blob())\n .then(blob => {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = function() { // do not optimize this function. \"this\" is important.\n resolve(this.result);\n };\n reader.readAsDataURL(blob);\n });\n });\n }\n\n /**\n * Detect file xtension by its content\n * @param {string} base64 Base64 encoded binary file\n * @returns {string} Detected extension, like 'jpg'\n */\n static detectMimeType(base64) {\n const signature = Object.keys(SIGNATURES).find(s => base64.startsWith(s));\n return signature ? SIGNATURES[signature] : null;\n }\n}\n\nexport default Utils;\n","import React, { Component } from 'react';\nimport semver from 'semver';\nimport moment from 'moment';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\n\nimport { Button } from '@mui/material';\nimport { Dialog } from '@mui/material';\nimport { DialogActions } from '@mui/material';\nimport { DialogContent } from '@mui/material';\nimport { DialogTitle } from '@mui/material';\nimport { Grid } from '@mui/material';\nimport { IconButton } from '@mui/material';\nimport { Typography } from '@mui/material';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport CheckIcon from '@mui/icons-material/Check';\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconWeb from '@mui/icons-material/Public';\nimport LanguageIcon from '@mui/icons-material/Language';\n\nimport State from '../components/State';\nimport {MOBILE_WIDTH} from '../helpers/MobileDialog';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport 'moment/locale/de';\nimport 'moment/locale/es';\nimport 'moment/locale/fr';\nimport 'moment/locale/it';\nimport 'moment/locale/nl';\nimport 'moment/locale/pl';\nimport 'moment/locale/pt';\nimport 'moment/locale/ru';\nimport 'moment/locale/zh-cn';\n\nconst styles = theme => ({\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n languageButton: {\n position: 'absolute',\n right: 52 + parseInt(theme.spacing(1), 10),\n top: theme.spacing(1)\n },\n languageButtonActive: {\n color: theme.palette.primary.main\n },\n typography: {\n paddingRight: 30\n },\n version: {\n background: '#4dabf5',\n borderRadius: 3,\n paddingLeft: 10,\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n wrapperButton: {\n },\n '@media screen and (max-width: 465px)': {\n wrapperButton: {\n '& *': {\n fontSize: 10\n }\n },\n },\n '@media screen and (max-width: 380px)': {\n wrapperButton: {\n '& *': {\n fontSize: 9\n }\n },\n },\n messageText: {\n\n },\n messageIcon: {\n width: 32,\n height: 32,\n marginRight: 8\n },\n messageColor_warn: {\n color: '#cb7642',\n },\n messageColor_error: {\n color: '#f5614d',\n },\n messageColor_info: {\n color: '#5abd29',\n },\n messageTitle_warn: {\n background: '#cb7642',\n borderRadius: 3,\n paddingLeft: 10,\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n messageTitle_error: {\n background: '#f5614d',\n borderRadius: 3,\n paddingLeft: 10,\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n messageTitle_info: {\n background: '#5abd29',\n borderRadius: 3,\n paddingLeft: 10,\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n messageDialogText: {\n fontSize: 18\n },\n messageDialogTitle: {\n\n },\n versionTime: {\n fontSize: 'smaller',\n opacity: 0.5,\n marginLeft: 4,\n },\n});\n\nclass AdapterUpdateDialog extends Component {\n constructor(props) {\n super(props);\n\n this.t = props.t;\n this.mobile = window.innerWidth < MOBILE_WIDTH;\n\n this.state = {\n showMessageDialog: false,\n };\n\n const messages = false; /*[\n {\n \"condition\": {\n \"operand\": \"and\",\n \"rules\": [\n \"oldVersion<=1.0.44\",\n \"newVersion>=1.0.45\"\n ]\n },\n \"title\": {\n \"en\": \"Important notice\",\n \"de\": \"Wichtiger Hinweis\",\n \"ru\": \"Важное замечание\",\n \"pt\": \"Notícia importante\",\n \"nl\": \"Belangrijke mededeling\",\n \"fr\": \"Avis important\",\n \"it\": \"Avviso IMPORTANTE\",\n \"es\": \"Noticia importante\",\n \"pl\": \"Ważna uwaga\",\n \"zh-cn\": \"重要通知\"\n },\n \"text\": {\n \"en\": \"From the ioBroker.knx@2.0.0 version only 500 data points can be used fro free. If you have more than 500 KNX data points, you must order the paid license\",\n \"de\": \"Ab der Version ioBroker.knx@2.0.0 können nur noch 500 Datenpunkte frei verwendet werden. Wenn Sie mehr als 500 KNX-Datenpunkte haben, müssen Sie die kostenpflichtige Lizenz bestellen\",\n \"ru\": \"Из версии ioBroker.knx@2.0.0 только 500 точек данных можно использовать бесплатно. Если у вас более 500 точек данных KNX, необходимо заказать платную лицензию.\",\n \"pt\": \"Na versão ioBroker.knx@2.0.0, apenas 500 pontos de dados podem ser usados gratuitamente. Se você tiver mais de 500 pontos de dados KNX, você deve solicitar a licença paga\",\n \"nl\": \"Van de ioBroker.knx@2.0.0 versie kunnen slechts 500 datapunten gratis worden gebruikt. Als u meer dan 500 KNX-datapunten heeft, moet u de betaalde licentie bestellen\",\n \"fr\": \"À partir de la version ioBroker.knx@2.0.0, seuls 500 points de données peuvent être utilisés gratuitement. Si vous avez plus de 500 points de données KNX, vous devez commander la licence payante\",\n \"it\": \"Dalla versione ioBroker.knx@2.0.0 è possibile utilizzare gratuitamente solo 500 punti dati. Se hai più di 500 punti dati KNX, devi ordinare la licenza a pagamento\",\n \"es\": \"Desde la versión ioBroker.knx@2.0.0, solo se pueden usar 500 puntos de datos de forma gratuita. Si tiene más de 500 puntos de datos KNX, debe solicitar la licencia paga\",\n \"pl\": \"Od wersji ioBroker.knx@2.0.0 można bezpłatnie korzystać tylko z 500 punktów danych. Jeśli masz więcej niż 500 punktów danych KNX, musisz zamówić płatną licencję\",\n \"zh-cn\": \"从 ioBroker.knx@2.0.0 版本开始,只能免费使用 500 个数据点。如果您有超过 500 个 KNX 数据点,则必须订购付费许可证\"\n },\n \"link\": \"https://iobroker.net/www/pricing\",\n \"linkText\": \"Prices\",\n \"level\": \"warn\",\n \"buttons\": [\"agree\", \"cancel\"]\n }\n ]*/\n\n this.messages = AdapterUpdateDialog.checkCondition(\n this.props.adapterObject && (this.props.adapterObject.messages || messages),\n this.props.installedVersion,\n this.props.adapterObject?.version\n );\n this.lang = I18n.getLanguage();\n moment.locale(this.lang);\n }\n\n getDependencies() {\n const result = [];\n\n this.props.dependencies && this.props.dependencies.forEach(dependency => {\n result.push(\n <State\n key={dependency.name}\n state={dependency.rightVersion}\n >\n {`${dependency.name}${dependency.version ? ` (${dependency.version})` : ''}: ${dependency.installed ? dependency.installedVersion : '-'}`}\n </State>\n );\n });\n\n return result;\n }\n\n getNews() {\n const result = [];\n\n this.props.news && this.props.news.forEach(entry => {\n const news = (entry.news ? entry.news.split('\\n') : [])\n .map(line => line\n .trim()\n .replace(/^\\*\\s?/, '')\n .replace(/<!--[^>]*->/, '')\n .replace(/<! -[^>]*->/, '')\n .trim()\n )\n .filter(line => !!line);\n\n if (this.props.adapterObject?.version && entry.version &&\n semver.gt(entry.version, this.props.adapterObject?.version)) {\n return;\n }\n\n result.push(<Grid item key={entry.version}>\n <Typography className={this.props.classes.version}>\n {entry.version}{this.props.adapterObject?.version === entry.version ? <span className={this.props.classes.versionTime}>({moment(this.props.adapterObject.versionDate).fromNow()})</span> : ''}\n </Typography>\n {news.map((value, index) => {\n return <Typography key={`${entry.version}-${index}`} component=\"div\" variant=\"body2\">\n { '• ' + value}\n </Typography>;\n })}\n </Grid>);\n });\n\n return result;\n }\n\n static checkCondition(objMessages, oldVersion, newVersion) {\n let messages = null;\n\n if (objMessages) {\n // const messages = {\n // \"condition\": {\n // \"operand\": \"and\",\n // \"rules\": [\n // \"oldVersion<=1.0.44\",\n // \"newVersion>=1.0.45\"\n // ]\n // },\n // \"title\": {\n // \"en\": \"Important notice\",\n // },\n // \"text\": {\n // \"en\": \"Main text\",\n // },\n // \"link\": \"https://iobroker.net/www/pricing\",\n // \"buttons\": [\"agree\", \"cancel\", \"ok],\n // \"linkText\" {\n // \"en\": \"More info\",\n // },\n // \"level\": \"warn\"\n // };\n\n objMessages.forEach(message => {\n let show = !message.condition || !message.condition.rules;\n if (message.condition && message.condition.rules) {\n const results = (Array.isArray(message.condition.rules) ? message.condition.rules : [message.condition.rules])\n .map(rule => {\n // oldVersion<=1.0.44\n let version;\n if (rule.includes('oldVersion')) {\n version = oldVersion;\n rule = rule.substring('newVersion'.length);\n } else if (rule.includes('newVersion')) {\n version = newVersion;\n rule = rule.substring('newVersion'.length);\n } else {\n // unknown rule\n return false;\n }\n let op;\n let ver;\n if (rule[1] >= '0' && rule[1] <= '9') {\n op = rule[0];\n ver = rule.substring(1);\n } else {\n op = rule.substring(0, 2);\n ver = rule.substring(2);\n }\n try {\n if (op === '==') {\n return semver.eq(version, ver);\n } else if (op === '>') {\n return semver.gt(version, ver);\n } else if (op === '<') {\n return semver.lt(version, ver);\n } else if (op === '>=') {\n return semver.gte(version, ver);\n } else if (op === '<=') {\n return semver.lte(version, ver);\n } else if (op === '!=') {\n return semver.neq(version, ver);\n } else {\n console.warn(`Unknown rule ${version}${rule}`);\n return false;\n }\n } catch (e) {\n console.warn(`Cannot compare ${version}${rule}`);\n return false;\n }\n });\n\n if (message.condition.operand === 'or') {\n show = results.find(res => res);\n } else {\n show = results.findIndex(res => !res) === -1;\n }\n }\n\n if (show) {\n messages = messages || [];\n messages.push({title: message.title, text: message.text, link: message.link, buttons: message.buttons, level: message.level});\n }\n });\n }\n\n return messages;\n }\n\n getText(text, noTranslation) {\n if (text && typeof text === 'object') {\n if (noTranslation) {\n return text.en;\n } else {\n return text[this.lang] || text.en;\n }\n } else {\n return text;\n }\n }\n\n renderOneMessage(message, index) {\n return <Grid item key={index}>\n <Typography className={this.props.classes['messageTitle_' + (message.level || 'warn')]}>\n {this.getText(message.title, this.props.noTranslation) || ''}\n </Typography>\n <Typography component=\"div\" variant=\"body2\" className={this.props.classes.messageText}>\n {this.getText(message.text, this.props.noTranslation) || ''}\n </Typography>\n {message.link ?\n <Button\n onClick={() => {\n const w = window.open(message.link, '_blank');\n w.focus();\n }}\n startIcon={<IconWeb />}\n variant=\"contained\"\n color=\"grey\"\n >{this.getText(message.linkText, this.props.noTranslation) || this.props.t('More info')}</Button>\n : null}\n </Grid>\n }\n\n renderMessages() {\n if (this.messages) {\n return <Grid\n container\n spacing={2}\n direction=\"column\"\n wrap=\"nowrap\"\n >\n {this.messages.map((message, i) => this.renderOneMessage(message, i))}\n </Grid>;\n } else {\n return null;\n }\n }\n\n renderMessageDialog() {\n if (!this.state.showMessageDialog) {\n return null;\n } else {\n const message = this.messages.find(m => m.buttons);\n const version = this.props.adapterObject?.version;\n const classes = this.props.classes;\n\n return <Dialog\n onClose={() => this.setState({showMessageDialog: false})}\n open={true}\n >\n <DialogTitle className={classes.messageDialogTitle}>\n {this.getText(message.title, this.props.noTranslation) || this.props.t('Please confirm')}\n </DialogTitle>\n <DialogContent className={classes.messageDialogText}>\n {message.level === 'warn' ? <IconWarning className={Utils.clsx(classes.messageIcon, classes.messageColor_warn)}/> : null}\n {message.level === 'error' ? <IconError className={Utils.clsx(classes.messageIcon, classes.messageColor_error)} /> : null}\n {message.level === 'info' ? <IconInfo className={Utils.clsx(classes.messageIcon, classes.messageColor_info)} /> : null}\n {this.getText(message.text, this.props.noTranslation)}\n </DialogContent>\n <DialogActions>\n {message.link ?\n <Button\n onClick={() => {\n const w = window.open(message.link, '_blank');\n w.focus();\n }}\n startIcon={<IconWeb />}\n variant=\"contained\"\n color=\"secondary\"\n >{this.getText(message.linkText, this.props.noTranslation) || this.props.t('More info')}</Button>\n : null\n }\n {message.link ? <div style={{flexGrow: 1}} /> : null}\n {message.buttons.map(button => {\n if (button === 'ok') {\n return <Button\n variant=\"contained\"\n onClick={() =>\n this.setState({ showMessageDialog: false }, () =>\n this.props.onUpdate(version))}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {this.t('Update')}\n </Button>\n } else if (button === 'agree') {\n return <Button\n className={classes['messageTitle_' + (message.level || 'warn')]}\n variant=\"contained\"\n onClick={() =>\n this.setState({ showMessageDialog: false }, () =>\n this.props.onUpdate(version))}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {this.t('Agree')}\n </Button>\n } else if (button === 'cancel') {\n return <Button\n variant=\"contained\"\n onClick={() => this.setState({ showMessageDialog: false })}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {this.t('Cancel')}\n </Button>\n }\n return null;\n })}\n </DialogActions>\n </Dialog>;\n }\n }\n\n render() {\n const { classes } = this.props;\n\n const version = this.props.adapterObject?.version;\n\n const news = this.getNews();\n\n return <Dialog\n onClose={this.props.onClose}\n open={this.props.open}\n >\n {this.renderMessageDialog()}\n <DialogTitle>\n <Typography component=\"h2\" variant=\"h6\" classes={{ root: classes.typography }}>\n <div style={{ width: 'calc(100% - 60px)'}}>{this.t('Update \"%s\" to v%s', this.props.adapter, version) }</div>\n <IconButton size=\"large\" className={classes.closeButton} onClick={this.props.onClose}>\n <CloseIcon />\n </IconButton>\n {I18n.getLanguage() !== 'en' && this.props.toggleTranslation ? <IconButton\n size=\"large\"\n className={Utils.clsx(classes.languageButton, this.props.noTranslation && classes.languageButtonActive)}\n onClick={this.props.toggleTranslation}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton> : null}\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n <Grid\n container\n direction=\"column\"\n spacing={2}\n wrap=\"nowrap\"\n >\n {this.props.dependencies && this.props.dependencies.length > 0 &&\n this.props.dependencies.find(dependency => !dependency.rightVersion) &&\n <Grid item>\n <Typography variant=\"h6\" gutterBottom>{this.t('Dependencies')}</Typography>\n {this.getDependencies()}\n </Grid>\n }\n {news.length ? <Grid item>\n <Typography variant=\"h6\" gutterBottom>{this.t('Change log')}</Typography>\n <Grid\n container\n spacing={2}\n direction=\"column\"\n wrap=\"nowrap\"\n >\n {news}\n </Grid>\n </Grid> : this.t('No change log available')}\n </Grid>\n {this.renderMessages()}\n </DialogContent>\n <DialogActions className={classes.wrapperButton}>\n {!!this.props.rightDependencies && this.props.onIgnore && version && <Button\n variant=\"outlined\"\n onClick={() => this.props.onIgnore(version)}\n color=\"primary\"\n >\n {this.t('Ignore version %s', version)}\n </Button>}\n <Button\n variant=\"contained\"\n autoFocus\n disabled={!this.props.rightDependencies || !version || !this.props.adapterObject}\n onClick={() => {\n if (this.messages && this.messages.find(message => message.buttons)) {\n this.setState({ showMessageDialog: true });\n } else {\n this.props.onUpdate(version);\n }\n }}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {this.mobile ? null : (this.props.textUpdate ? this.props.textUpdate : this.t('Update'))}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : this.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nAdapterUpdateDialog.propTypes = {\n adapter: PropTypes.string.isRequired,\n adapterObject: PropTypes.object.isRequired,\n dependencies: PropTypes.array,\n news: PropTypes.array,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n onUpdate: PropTypes.func.isRequired,\n onIgnore: PropTypes.func,\n onClose: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired,\n rightDependencies: PropTypes.bool,\n installedVersion: PropTypes.string,\n t: PropTypes.func.isRequired\n}\n\nexport default withStyles(styles)(AdapterUpdateDialog);\n","import React, { useEffect, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport {DialogTitle, LinearProgress} from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\n\nimport IconClose from '@mui/icons-material/Close';\nimport IconCheck from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nlet node = null;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex'\n },\n paper: {\n maxWidth: 1000\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden'\n },\n pre: {\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n margin: 0,\n padding: 10,\n }\n}));\nconst LicenseDialog = ({ url, cb, theme }) => {\n const classes = useStyles();\n const [open, setOpen] = useState(true);\n const [text, setText] = useState('');\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n fetch(url)\n .then(el => el.text())\n .then(el => {\n setLoading(false);\n setText(el);\n })\n .catch(() => setLoading(false));\n }, [url]);\n\n const onClose = () => {\n setOpen(false);\n try {\n node && window.document.body.removeChild(node);\n } catch (e) {\n // ignore\n }\n node = null;\n };\n\n return <ThemeProvider theme={theme}>\n <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <DialogTitle>{I18n.t('License agreement')}</DialogTitle>\n <DialogContent className={classes.overflowHidden} dividers>\n <div className={classes.root}>\n {loading ?\n <LinearProgress/>\n :\n <pre className={classes.pre} style={\n Utils.getThemeName() === 'dark' ||\n Utils.getThemeName() === 'blue' ?\n {color: 'black'} :\n null}>\n {text}\n </pre>\n }\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={loading}\n autoFocus\n onClick={() => {\n onClose();\n cb(true);\n }}\n startIcon={<IconCheck/>}\n color=\"primary\">\n {I18n.t('Accept')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => {\n onClose();\n cb(false);\n }}\n startIcon={<IconClose/>}\n color=\"grey\">\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>;\n}\n\nexport const licenseDialogFunc = (license, theme, cb, url) => {\n if (license) {\n return cb(true);\n }\n if (!node) {\n node = document.createElement('div');\n node.id = 'renderModal';\n document.body.appendChild(node);\n }\n const root = createRoot(node);\n\n return root.render(<StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <LicenseDialog url={url} cb={cb} theme={theme}/>\n </ThemeProvider>\n </StyledEngineProvider>);\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport { Button, TextField } from '@mui/material';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport TimeIcon from '@mui/icons-material/AccessTime';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport {MOBILE_WIDTH} from '../helpers/MobileDialog';\n\nconst styles = theme => ({\n buttonLabel: {\n whiteSpace: 'nowrap',\n },\n input: {\n minWidth: 150\n }\n});\n\nclass SlowConnectionWarningDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n readTimeoutSec: Math.round((this.props.readTimeoutMs || SlowConnectionWarningDialog.getReadTimeoutMs()) / 1000),\n };\n\n this.mobile = window.innerWidth < MOBILE_WIDTH;\n }\n\n static getReadTimeoutMs() {\n return parseInt((window._localStorage || window.localStorage).getItem('App.readTimeoutMs'), 10) || 15000;\n }\n\n static saveReadTimeoutMs(readTimeoutMs) {\n if (readTimeoutMs) {\n return (window._localStorage || window.localStorage).setItem('App.readTimeoutMs', readTimeoutMs.toString());\n } else {\n return (window._localStorage || window.localStorage).removeItem('App.readTimeoutMs');\n }\n }\n\n render() {\n return <Dialog\n open={true}\n maxWidth=\"lg\"\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{this.props.t('Detected slow connection!')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.props.t('Seems that you have slow connection. Do you want to increase timeout interval?')}\n </DialogContentText>\n <TextField\n variant=\"standard\"\n classes={{root: this.props.classes.input}}\n label={this.props.t('Read timeout')}\n value={this.state.readTimeoutSec}\n onChange={e => this.setState({readTimeoutSec: e.target.value})}\n type=\"number\"\n inputProps={{min: 5, max: 600}}\n helperText={this.props.t('in seconds')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n classes={{label: this.props.classes.buttonLabel}}\n variant=\"contained\"\n onClick={() => {\n SlowConnectionWarningDialog.saveReadTimeoutMs(60000);\n this.props.onClose(60000);\n }}\n startIcon={<TimeIcon/>}\n color=\"grey\"\n >\n {this.mobile ? this.props.t('1 minute') : this.props.t('Set timeout to 1 minute')}\n </Button>\n <Button\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!parseInt(this.state.readTimeoutSec, 10)}\n onClick={() => {\n const readTimeoutMs = parseInt(this.state.readTimeoutSec, 10) * 1000;\n SlowConnectionWarningDialog.saveReadTimeoutMs(readTimeoutMs);\n this.props.onClose(readTimeoutMs);\n }}\n startIcon={<CheckIcon/>}\n >\n {this.mobile ? null : this.props.t('Apply')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nSlowConnectionWarningDialog.propTypes = {\n t: PropTypes.func.isRequired,\n readTimeoutMs: PropTypes.number,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(SlowConnectionWarningDialog);\n","import { useState, useEffect } from 'react';\nimport * as Icons from '@mui/icons-material/';\n\nconst ICON_CACHE = {};\n\nlet objIcon = {\n 'All': 'AllInclusive',\n 'messaging': 'Message',\n 'communication': 'WifiTethering',\n 'general': 'Apps',\n 'logic': 'VpnKey',\n 'alarm': 'NotificationsActive',\n 'iot-systems': 'SystemUpdateAlt',\n 'misc-data': 'EmojiSymbols',\n 'multimedia': 'PermMedia',\n 'network': 'SettingsEthernet',\n 'storage': 'Storage',\n 'visualization': 'Visibility',\n 'climate-control': 'SettingsBrightness',\n 'date-and-time': 'DateRange',\n 'energy': 'BatteryChargingFull',\n 'garden': 'FilterVintage',\n 'geoposition': 'LocationOn',\n 'hardware': 'Phonelink',\n 'health': 'Favorite',\n 'household': 'House',\n 'infrastructure': 'Apartment',\n 'lighting': 'EmojiObjects',\n 'protocols': 'DialerSip',\n 'utility': 'PhonelinkSetup',\n 'vehicle': 'AirportShuttle',\n 'visualization-icons': 'BubbleChart',\n 'visualization-widgets': 'Widgets',\n 'weather': 'Brightness6',\n 'metering': 'LinearScale'\n};\n\nconst MaterialDynamicIcon = ({ iconName, className, adapter, socket, onClick, objIconBool }) => {\n let [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n ICON_CACHE[adapter] = ICON_CACHE[adapter] || socket.getObject(`system.adapter.${adapter}`);\n ICON_CACHE[adapter].then(obj =>\n obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`));\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return <img onClick={e => onClick && onClick(e)} src={url || ''} className={className} alt=\"\" />;\n } else {\n const Element = Icons[objIconBool ? objIcon[iconName] || 'Help' : (iconName || 'Help')];\n return <Element\n className={className}\n onClick={e => onClick && onClick(e)}\n />;\n }\n}\n\nMaterialDynamicIcon.defaultProps = {\n className: null,\n iconName: 'Help',\n objIconBool: false\n};\n\nexport default MaterialDynamicIcon;","import {Component} from 'react';\n\nexport const MOBILE_WIDTH = 800;\n\nclass MobileDialog extends Component {\n static isMobile() {\n return window.innerWidth < MOBILE_WIDTH;\n }\n\n componentDidMount() {\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({mobile: MobileDialog.isMobile()});\n }\n if (!this._resizeHandlerinstalled) {\n this._resizeHandlerinstalled = true;\n window.addEventListener('resize', this.__onResize, false);\n }\n }\n\n componentWillUnmount() {\n this._timerOnResize && clearTimeout(this._timerOnResize);\n this._timerOnResize = null;\n if (this._resizeHandlerinstalled) {\n window.removeEventListener('resize', this.__onResize, false);\n }\n }\n\n __onResize = () => {\n this._timerOnResize && clearTimeout(this._timerOnResize);\n this._timerOnResize = setTimeout(() => {\n this._timerOnResize = null;\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({mobile: MobileDialog.isMobile()});\n }\n }, 200);\n }\n\n getButtonTitle(icon, text, moreMobileIcon) {\n if (icon && text) {\n if (this.state.mobile) {\n if (moreMobileIcon) {\n return <>{icon} & {moreMobileIcon}</>;\n } else {\n return icon;\n }\n } else {\n return <>{icon}<span style={{marginLeft: 4}}>{text}</span></>;\n }\n } else if (icon) {\n return icon;\n } else if (text) {\n return text;\n } else {\n return null;\n }\n }\n}\n\nexport default MobileDialog;","import React, { Component } from 'react';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport CheckIcon from '@mui/icons-material/Check';\n\nconst styles = theme => ({\n formControl: {\n marginTop: theme.spacing(3)\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n typography: {\n paddingRight: 30\n }\n});\n\nclass AdapterDeletionDialog extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n deleteCustom: false,\n deleteCustomSupported: false,\n };\n this.t = props.t;\n }\n\n componentDidMount() {\n this.props.socket.checkFeatureSupported('DEL_INSTANCE_CUSTOM')\n .then(deleteCustomSupported => {\n deleteCustomSupported && this.props.socket.getObject('system.adapter.' + this.props.adapter)\n .then(obj => {\n if (obj && obj.common) {\n obj.common.supportCustoms && this.setState({ deleteCustomSupported: obj.common.supportCustoms })\n } else {\n this.setState({ deleteCustomSupported: true });\n }\n });\n });\n }\n\n render() {\n const { classes } = this.props;\n\n return <Dialog\n onClose={this.props.onClose}\n open={this.props.open}\n >\n <DialogTitle>\n <Typography component=\"h2\" variant=\"h6\" classes={{ root: classes.typography }}>\n {this.t('Please confirm')}\n <IconButton size=\"large\" className={classes.closeButton} onClick={this.props.onClose}>\n <CloseIcon />\n </IconButton>\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n <Typography gutterBottom>\n {this.t('Are you sure you want to delete adapter %s?', this.props.adapter)}\n </Typography>\n {this.state.deleteCustomSupported && <FormControlLabel\n control={<Checkbox checked={this.state.deleteCustom} onChange={e => this.setState({deleteCustom: e.target.checked})} />}\n label={this.t('Delete all custom object settings of this adapter too')}\n />}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n autoFocus\n onClick={() => {\n this.props.onClick(this.state.deleteCustom);\n this.props.onClose();\n }}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {this.t('Ok')}\n </Button>\n <Button\n variant=\"contained\"\n autoFocus\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nAdapterDeletionDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n adapter: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired,\n onClick: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired\n}\n\nexport default withStyles(styles)(AdapterDeletionDialog);\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgGlobe(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 576 512\",\n width: 15,\n height: 15,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGlobe);\nexport default __webpack_public_path__ + \"static/media/globe.f11bdd281223eb5584e7396a95915b6c.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _polygon;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLink(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 100 100\",\n width: 15,\n height: 15,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z\"\n })), _polygon || (_polygon = /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"currentColor\",\n points: \"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLink);\nexport default __webpack_public_path__ + \"static/media/link.11336b8e74da4573a692f63683cd87ae.svg\";\nexport { ForwardRef as ReactComponent };","/**\n * Copyright 2018-2021 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n//import React from 'react';\nimport copy from '@iobroker/adapter-react-v5/Components/copy-to-clipboard';\n\nclass MDUtils {\n static text2link(text) {\n const m = text.match(/\\d+\\.\\)\\s/);\n if (m) {\n text = text.replace(m[0], m[0].replace(/\\s/, ' '));\n }\n\n return text.replace(/[^a-zA-Zа-яА-Я0-9]/g, '').trim().replace(/\\s/g, '').toLowerCase();\n }\n\n static openLink(url, target) {\n // replace IPv6 Address with [ipv6]:port\n url = url.replace(/\\/\\/([0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*)(:\\d+)?\\//i, '//[$1]$2/');\n\n if (target === 'this') {\n window.location = url;\n } else {\n window.open(url, target || '_blank');\n }\n }\n\n static getTitle(text) {\n let {body, header} = MDUtils.extractHeader(text);\n if (!header.title) {\n // remove {docsify-bla}\n body = body.replace(/{[^}]*}/g, '');\n body = body.trim();\n const lines = body.replace(/\\r/g, '').split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('# ')) {\n return lines[i].substring(2).trim();\n }\n }\n return '';\n } else {\n return header.title;\n }\n }\n\n static extractHeader(text) {\n const attrs = {};\n if (text.substring(0, 3) === '---') {\n const pos = text.substring(3).indexOf('\\n---');\n if (pos !== -1) {\n const _header = text.substring(3, pos + 3);\n const lines = _header.replace(/\\r/g, '').split('\\n');\n lines.forEach(line => {\n if (!line.trim()) {\n return;\n }\n const pos = line.indexOf(':');\n if (pos !== -1) {\n const attr = line.substring(0, pos).trim();\n attrs[attr] = line.substring(pos + 1).trim();\n attrs[attr] = attrs[attr].replace(/^['\"]|['\"]$/g, '');\n if (attrs[attr] === 'true') {\n attrs[attr] = true;\n } else if (attrs[attr] === 'false') {\n attrs[attr] = false;\n } else if (parseFloat(attrs[attr]).toString() === attrs[attr]) {\n attrs[attr] = parseFloat(attrs[attr]);\n }\n } else {\n attrs[line.trim()] = true;\n }\n });\n text = text.substring(pos + 7);\n }\n }\n return {header: attrs, body: text};\n }\n\n static removeDocsify(text) {\n const m = text.match(/{docsify-[^}]*}/g);\n if (m) {\n m.forEach(doc => text = text.replace(doc, ''));\n }\n return text;\n }\n\n static onCopy(e, text) {\n copy(text);\n e && e.stopPropagation();\n e && e.preventDefault();\n }\n\n static decorateText(text, header, path) {\n path = path || '';\n\n let {body, license, changelog} = MDUtils.extractLicenseAndChangelog(text, true);\n\n const lines = body.split('\\n');\n const content = {};\n let current = [null, null, null, null];\n\n const parts = [];\n while (lines.length && !lines[0].trim()) lines.shift();\n while (lines.length && !lines[lines.length - 1].trim()) lines.pop();\n\n let title;\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i].trimRight();\n let last = parts.length - 1;\n\n if (line.startsWith('=========')) {\n // ignore it\n } else\n //<h1><img src=\"ru/adapterref/iobroker.linkeddevices/admin/linkeddevices.png\" width=\"32\"/> ioBroker.linkeddevices</h1>\n if (line.match(/^<h1>.+<\\/h1>/)) {\n // skip\n } else\n if (line.match(/^# /)) {\n const cont = MDUtils.findTitle(line, -1, path);\n title = cont.title;\n } else\n if (line.trim().startsWith('|')) {\n if (!parts[last] || parts[last].type !== 'table') {\n parts.push({type: 'table', lines: [line]});\n } else {\n parts[last].lines.push(line);\n }\n } else\n if (line.match(/^##+ /)) {\n parts.push({lines: [line], type: 'chapter'});\n last++;\n let level = line.split('#').length - 3;\n const cont = MDUtils.findTitle(line, level, path);\n content[cont.href] = cont;\n current[level] = cont;\n level++;\n while(current[level] !== undefined) level = null;\n } else\n if (line.startsWith('@@@')) {\n line = line.substring(3).trim();\n parts.push({lines: [line], type: '@@@'});\n last++;\n if (line.trim().endsWith('@@@')) {\n parts[last].lines[0] = line.substring(0, line.length - 3);\n } else {\n while(i + 1 < lines.length && !lines[i + 1].trim().endsWith('@@@')) {\n parts[last].lines.push(lines[i + 1].trim());\n i++;\n }\n }\n } else if (line.trim().startsWith('```')) {\n parts.push({lines: [line], type: 'code'});\n last++;\n if (!line.substring(3).trim().endsWith('```')) {\n while(i + 1 < lines.length && !lines[i + 1].trim().endsWith('```')) {\n parts[last].lines.push(lines[i + 1]);\n i++;\n }\n parts[last].lines.push(lines[i + 1]);\n i++;\n }\n } else if (line.startsWith('?> ') || line.startsWith('!> ')) {\n parts.push({lines: [line.substring(3)], type: line.startsWith('?>') ? 'warn' : 'alarm'});\n last++;\n while(i + 1 < lines.length && lines[i + 1].trim()) {\n parts[last].lines.push(lines[i + 1]);\n i++;\n }\n } else if (line.startsWith('> ')) {\n parts.push({lines: [line.substring(2)], type: 'notice'});\n last++;\n while(i + 1 < lines.length && lines[i + 1].trim()) {\n parts[last].lines.push(lines[i + 1]);\n i++;\n }\n } else if (line.trim()) {\n parts.push({lines: [line], type: 'p'});\n last++;\n while(i + 1 < lines.length && //lines[i + 1].trim() &&\n //!lines[i + 1].trim().match(/^>\\s|^\\?>\\s|^!>\\s|^@@@|^#+|^====|^\\|/)) {\n !lines[i + 1].trim().match(/^```|^>\\s|^\\?>\\s|^!>\\s|^@@@|^#+|^====|^\\|/)) {\n parts[last].lines.push(lines[i + 1].trimRight());\n i++;\n }\n }\n }\n\n return {\n parts,\n content,\n title,\n changeLog: changelog,\n license\n };\n }\n\n static extractLicenseAndChangelog(text, ignoreHeaders) {\n const lines = (text || '').trim().split('\\n');\n const changelog = [];\n let changelogA = false;\n const license = [];\n let licenseA = false;\n let newLines = [];\n lines.forEach(line => {\n if (line.match(/#+\\sChangelog/i)) {\n !ignoreHeaders && changelog.push('## Changelog');\n changelogA = true;\n licenseA = false;\n } else if (line.match(/#+\\sLicense/i)) {\n !ignoreHeaders && license.push('## License');\n changelogA = false;\n licenseA = true;\n } else if (line.match(/^# |^## /)) {\n // if some other chapter detected\n newLines.push(line);\n changelogA = false;\n licenseA = false;\n } else if (licenseA) {\n license.push(line);\n } else if (changelogA) {\n changelog.push(line);\n } else {\n newLines.push(line);\n }\n });\n while (newLines.length && !newLines[0].trim()) newLines.shift();\n while (newLines.length && !newLines[newLines.length - 1].trim()) newLines.pop();\n\n while (changelog.length && !changelog[0].trim()) changelog.shift();\n while (changelog.length && !changelog[changelog.length - 1].trim()) changelog.pop();\n\n while (license.length && !license[0].trim()) license.shift();\n while (license.length && !license[license.length - 1].trim()) license.pop();\n\n return {body: newLines.join('\\n'), license: license.join('\\n'), changelog: changelog.join('\\n')};\n }\n\n static findTitleFromH1(line, level, path) {\n\n }\n\n static findTitle(line, level, path) {\n let name = line.substring(level + 3).trim()\n // remove bold and italic modifier\n .replace(/^\\*|\\*$/g, '')\n .replace(/^\\*|\\*$/g, '')\n .replace(/^\\*|\\*$/g, '');\n\n const t = MDUtils.text2link(name);\n\n // detect <a id=\"Systemeinstellungen\"></a>9.) Systemeinstellungen\n const m = name.match(/<a [^>]*>(.*)<\\/a>/);\n if (m) {\n name = name.replace(m[0], m[1]).trim();\n }\n\n const link = MDUtils.text2docLink(name, path);\n\n return {\n level,\n title: link ? link.name : name,\n link: link ? link.link : t,\n href: t,\n external: !!link\n };\n }\n\n static text2docLink(text, path) {\n const m = text.match(/\\[([^\\]]*)]\\(([^)]*)\\)/);\n if (m) {\n const parts = path.split('/');\n parts.pop();\n return {link: parts.join('/') + '/' + m[2], name: m[1]};\n } else {\n return null;\n }\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * @private\n * @param {any} mix\n * @returns {string}\n */\n static _toVal(mix) {\n let k, y, str='';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (k=0; k < mix.length; k++) {\n if (mix[k]) {\n if ((y = MDUtils._toVal(mix[k]))) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (k in mix) {\n if (mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n }\n\n // https://github.com/lukeed/clsx/blob/master/src/index.js\n // License\n // MIT © Luke Edwards\n /**\n * Convert any object to a string with its values.\n * @returns {string}\n */\n static clsx () {\n let i = 0;\n let tmp;\n let x;\n let str = '';\n while (i < arguments.length) {\n if ((tmp = arguments[i++])) {\n if ((x = MDUtils._toVal(tmp))) {\n str && (str += ' ');\n str += x\n }\n }\n }\n return str;\n }\n}\n\nexport default MDUtils;","/* eslint-disable jsx-a11y/anchor-has-content */\n/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@mui/styles';\nimport MarkdownView from 'react-showdown';\nimport semver from 'semver';\n\nimport Paper from '@mui/material/Paper';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionActions from '@mui/material/AccordionDetails';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport IconButton from '@mui/material/IconButton';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport Snackbar from '@mui/material/Snackbar';\n\nimport {MdEdit as IconEdit} from 'react-icons/md';\nimport {MdClose as IconClose} from 'react-icons/md';\nimport {MdMenu as IconMenu} from 'react-icons/md';\nimport {MdExpandMore as IconExpandMore} from 'react-icons/md';\nimport {FaGithub as IconGithub} from 'react-icons/fa';\nimport IconGlobe from '../assets/globe.svg';\nimport IconLink from '../assets/link.svg';\n\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from './MDUtils';\n//import Page404 from '@iobroker/adapter-react-v5/Components/404';\n\nconst styles = theme => ({\n root: {\n width: 'calc(100% - 10px)',\n maxWidth: 1400,\n margin: 5,\n '& .md-link': {\n display: 'inline-block'\n },\n '& h2': {\n width: '100%',\n textAlign: 'left',\n paddingBottom: 10,\n borderBottom: '1px solid lightgray'\n },\n '& hr': {\n borderWidth: '0 0 1px 0'\n },\n '& a': {\n color: 'inherit'\n },\n '& pre': {\n background: '#e3e3e3',\n },\n '& code': {\n margin: '0 0.15em',\n padding: '0.125em 0.4em',\n borderRadius: 2,\n background: '#e3e3e3',\n color: '#000000',\n whiteSpace: 'pre',\n },\n '& img': {\n maxWidth: '100%'\n }\n },\n logoImage: {\n width: 64,\n verticalAlign: 'middle',\n },\n infoEdit: {\n float: 'right',\n textDecoration: 'none',\n color: 'gray'\n },\n infoEditLocal: {\n float: 'right',\n textDecoration: 'none',\n marginRight: 15,\n cursor: 'pointer',\n display: 'inline-block'\n },\n adapterCard: {\n marginBottom: 0,\n marginTop: 0,\n },\n badgesDetails: {\n display: 'block',\n '& img': {\n marginRight: 5,\n }\n },\n titleText: {\n display: 'inline-block',\n marginLeft: 10,\n },\n adapterCardAttr:{\n fontWeight: 'bold',\n width: 150,\n display: 'inline-block'\n },\n adapterCardListItem: {\n paddingTop: 3,\n paddingBottom: 3,\n },\n description: {\n fontStyle: 'italic'\n },\n contentDiv: {\n position: 'fixed',\n width: '20%',\n minWidth: 200,\n overflowX: 'hidden',\n opacity: 0.8,\n top: 60,\n right: 20,\n background: theme.palette.mode === 'dark' ? '#111111': '#EEEEEE',\n maxHeight: 'calc(100% - 70px)',\n },\n contentDivClosed: {\n position: 'fixed',\n opacity: 0.8,\n top: 60,\n right: 20,\n width: 25,\n height: 25,\n cursor: 'pointer'\n },\n contentClose: {\n position: 'fixed',\n top: 60 + 5,\n right: 20 + 5,\n cursor: 'pointer',\n\n '&:hover': {\n color: '#111111'\n }\n },\n contentLinks: {\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.mode === 'dark' ? '#AAA' : '#666',\n }\n },\n headerTranslated: {\n borderColor: '#009c4f',\n borderWidth: '0 0 0 3px',\n padding: 10,\n marginTop: 5,\n marginBottom: 5,\n borderStyle: 'solid',\n background: '#bdded5',\n cursor: 'pointer',\n '&:before': {\n content: `url(${IconGlobe})`,\n marginRight: 10,\n color: '#000000',\n height: 20,\n width: 20,\n }\n },\n license: {\n paddingLeft: 10,\n fontWeight: 'bold',\n marginTop: 0,\n paddingTop: 1,\n },\n mdLink: {\n cursor: 'pointer',\n textDecoration: 'underline',\n '&:after': {\n //content: '\"🔗\"',\n content: 'url(' + IconLink + ')',\n width: 16,\n height: 16,\n opacity: 0.7,\n fontSize: 14,\n //marginLeft: 5\n }\n },\n mdHeaderLink: {\n textDecoration: 'none',\n '&:after': {\n content: '\"🔗\"',\n width: 16,\n height: 16,\n opacity: 0,\n fontSize: 14,\n //marginLeft: 5\n },\n '&:hover:after': {\n opacity: 0.7,\n }\n },\n info: {\n paddingTop: 10,\n paddingBottom: 10,\n },\n email: {\n fontStyle: 'italic',\n cursor: 'pointer',\n textDecoration: 'underline'\n },\n name: {\n fontStyle: 'italic'\n },\n\n table: {\n width: 'auto',\n },\n tableHead: {\n background: '#555555',\n },\n tableRowHead: {\n height: 24,\n },\n tableCellHead: {\n color: '#FFFFFF',\n padding: '3px 10px',\n border: '1px solid rgba(224, 224, 224, 1)',\n margin: 0,\n '&>p': {\n margin: 0,\n }\n },\n tableBody: {\n\n },\n tableRow: {\n height: 24,\n },\n tableCell: {\n padding: '3px 10px',\n margin: 0,\n border: '1px solid rgba(224, 224, 224, 1)',\n '&>p': {\n margin: 0,\n }\n },\n\n summary: {\n transition: 'background 0.5s, color: 0.5s',\n fontSize: 20,\n backgroundColor: theme.palette.mode === 'dark' ? '#444' : '#DDD'\n },\n summaryExpanded: {\n //fontWeight: 'bold',\n },\n\n warn: {\n borderColor: '#0b87da',\n borderWidth: '0 0 0 3px',\n padding: 10,\n marginTop: 5,\n marginBottom: 5,\n borderStyle: 'solid',\n background: '#eff6fb',\n '&:before': {\n content: '\"⚠\"',\n //borderRadius: '50%',\n //background: '#008aff',\n }\n },\n alarm: {\n borderColor: '#da0b50',\n borderWidth: '0 0 0 3px',\n padding: 10,\n marginTop: 5,\n marginBottom: 5,\n borderStyle: 'solid',\n background: '#fbeff3',\n '&:before': {\n content: '\"⚠\"',\n //borderRadius: '50%',\n //background: '#008aff',\n }\n },\n notice: {\n borderColor: '#9c989b',\n borderWidth: '0 0 0 3px',\n padding: 10,\n marginTop: 5,\n marginBottom: 5,\n borderStyle: 'solid',\n background: '#dedede',\n '&:before': {\n content: '\"✋\"',\n //borderRadius: '50%',\n //background: '#dedede',\n }\n },\n todo: {\n borderColor: '#00769c',\n borderWidth: '0 0 0 3px',\n paddingLeft: 10,\n paddingRight: 10,\n paddingTop: 0,\n paddingBottom: 0,\n marginTop: 5,\n marginBottom: 5,\n borderStyle: 'solid',\n background: '#c4d2de',\n /*&:before': {\n content: '\"✋\"',\n //borderRadius: '50%',\n //background: '#dedede',\n }*/\n },\n paragraph: {\n\n },\n\n changeLog: {\n display: 'block',\n width: '100%'\n },\n changeLogDiv: {\n display: 'block',\n paddingBottom: theme.spacing(2),\n '&:hover': {\n backgroundColor: theme.palette.mode === 'dark' ? '#333' : '#DDD',\n },\n width: '100%'\n },\n changeLogVersion: {\n fontWeight: 'bold',\n fontSize: 18,\n },\n changeLogDate: {\n fontSize: 16,\n fontStyle: 'italic',\n marginLeft: theme.spacing(1),\n opacity: 0.7\n },\n changeLogLine: {\n display: 'block',\n fontSize: 14,\n marginLeft: theme.spacing(1),\n '&:before': {\n content: '\"• \"',\n }\n },\n changeLogUL: {\n paddingLeft: theme.spacing(1),\n marginTop: 4,\n },\n changeLogAuthor: {\n fontStyle: 'italic',\n fontWeight: 'bold',\n marginRight: theme.spacing(1),\n },\n changeLogLineText: {\n\n },\n\n changeLogAccordion: {\n justifyContent: 'flex-start',\n }\n});\n\nconst CONVERTER_OPTIONS = {\n emoji: true,\n underline: true,\n strikethrough: true,\n simplifiedAutoLink: true,\n parseImgDimensions: true,\n splitAdjacentBlockquotes: true,\n openLinksInNewWindow: true,\n backslashEscapesHTMLTags: true,\n};\n\nlet title;\n\nconst ADAPTER_CARD = ['version', 'authors', 'keywords', 'mode', 'materialize', 'compact'];\n\nconst EXPAND_LANGUAGE = {\n en: 'english',\n de: 'german',\n ru: 'russian',\n 'zh-cn': 'chinese (simplified)'\n};\n\nclass Markdown extends Component {\n constructor(props) {\n super(props);\n // load page\n this.state = {\n parts: [],\n title: '',\n loadTimeout: false,\n header: {},\n content: {},\n license: '',\n changeLog: '',\n tooltip: '',\n text: this.props.text || '',\n notFound: false,\n affiliate: null,\n adapterNews: null,\n hideContent: window.localStorage ? (window._localStorage || window.localStorage).getItem('Docs.hideContent') === 'true' : false,\n };\n\n if (!title) {\n title = window.title;\n }\n\n this.mounted = false;\n\n if (!this.state.text) {\n this.load();\n\n // Give 300ms to load the page. After that show the loading indicator.\n setTimeout(() => !this.state.parts.length && this.setState({loadTimeout: true}), 300);\n } else {\n this.parseText();\n }\n\n this.contentRef = React.createRef();\n\n this.customLink = ({ text, link }) =>\n <a className={this.props.classes.mdLink + ' md-link'} onClick={() => {\n if (link) {\n if (link.startsWith('#')) {\n this.onNavigate(Utils.text2link(link.substring(1)))\n } else {\n let href = link;\n if (!href.match(/^https?:\\/\\//)) {\n const parts = (this.props.path || '').split('/');\n // const fileName = parts.pop();\n const prefix = parts.join('/') + '/';\n\n href = prefix + link;\n }\n\n this.onNavigate(null, href);\n }\n }\n }} title={link}>{text}</a>;\n\n /*\n if (reactObj && (reactObj.type === 'h1' || reactObj.type === 'h2' || reactObj.type === 'h3' || reactObj.type === 'h3')) {\n reactObj.props.children[0] = (<span>{reactObj.props.children[0]}<a\n href={prefix + '?' + reactObj.props.id}\n className={this.props.classes.mdHeaderLink + ' md-h-link'}>\n </a></span>);\n }\n */\n this.customH = ({text, id, level, prefix}) => {\n const _level = parseInt(level, 10);\n\n if (_level === 1) {\n return <h1 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h1>;\n } else if (_level === 2) {\n return <h2 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h2>;\n } else if (_level === 3) {\n return <h3 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h3>;\n } else if (_level === 4) {\n return <h4 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h4>;\n } else if (_level === 5) {\n return <h5 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h5>;\n } else {\n return <h6 id={id}><span>{text}</span><a href={prefix + '?' + id} className={this.props.classes.mdHeaderLink + ' md-h-link'}/></h6>;\n }\n };\n this.meta = ({text, id, level, prefix}) => {\n return 'meta';\n };\n this.link = ({text, id, level, prefix}) => {\n return <div>linkAAAAA</div>;\n };\n }\n\n componentDidMount() {\n this.mounted = true;\n this.state.text && this.parseText(this.state.text);\n this.props.socket && this.props.socket.getRepository()\n .then(repo => this.setState({ adapterNews: repo[this.props.adapter]?.news }))\n }\n\n UNSAFE_componentWillReceiveProps(nextProps, nextContext) {\n if (this.props.path !== nextProps.path) {\n this.mounted && this.setState({ notFound: false, parts: [] });\n this.load(nextProps.path);\n } else if (this.props.text !== nextProps.text) {\n this.setState({ text: nextProps.text });\n if (!nextProps.text) {\n if (this.props.path !== nextProps.path) {\n this.mounted && this.setState({ notFound: false, parts: [] });\n this.load(nextProps.path);\n }\n } else {\n this.mounted && this.setState({ text: nextProps.text }, () =>\n this.parseText());\n }\n } else\n if (this.props.language !== nextProps.language) {\n this.mounted && this.setState({ notFound: false, parts: [] });\n this.load(null, nextProps.language);\n }\n }\n\n /*onHashChange(location) {\n location = location || Router.getLocation();\n if (location.chapter) {\n const el = window.document.getElementById(location.chapter);\n el && el.scrollIntoView(true);\n }\n }*/\n\n onNavigate(id, link) {\n if (link && link.match(/^https?:\\/\\//)) {\n Utils.openLink(link);\n } else if (id) {\n const el = window.document.getElementById(id) || window.document.getElementById(id.replace('nbsp', ''));\n if (el) {\n el.scrollIntoView(true);\n }\n } else if (link) {\n // if relative path\n if (!link.startsWith('#')) {\n // ../../download\n /*const ppp = link.replace(this.props.path + '/', '').split('#');\n let _link = ppp[1];\n let _path = ppp[0].replace(/\\.MD$/, '.md');\n if (!_path.endsWith('.md')) {\n _path += '.md';\n }\n const location = Router.getLocation();\n\n if (_path.startsWith('.')) {\n const parts = _path.split('/');\n const locParts = location.page.split('/');\n locParts.pop();\n parts.forEach(part => {\n if (part === '.') return;\n if (part === '..') {\n locParts.pop();\n return;\n }\n locParts.push(part);\n });\n _path = locParts.join('/')\n }\n\n this.props.onNavigate(null, this.props.rootPath || location.tab, _path, _link);*/\n } else if (link) {\n //this.props.onNavigate(null, null, link);\n link = link.replace(/^#/, '');\n const el = window.document.getElementById(link) || window.document.getElementById(link.replace('nbsp', ''));\n if (el) {\n el.scrollIntoView(true);\n }\n }\n }\n }\n\n parseChangeLog(changeLog) {\n const lines = changeLog.split('\\n');\n const entries = {};\n let oneEntry;\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n if (line.startsWith('##')) {\n if (oneEntry) {\n entries[oneEntry.version] = oneEntry;\n oneEntry = null;\n }\n // ### 3.0.5 (2020-10-30) or ### 3.0.5 [2020-10-30] or ### 3.0.5\n const [version, date] = line.replace(/^#+\\s?/, '').split(/[\\s([]+/);\n if (version) {\n oneEntry = {lines: []};\n oneEntry.version = version.trim();\n oneEntry.date = (date || '').trim().replace(/\\)/, '');\n }\n } else if (line.trim() && oneEntry) {\n // extract author\n // *(bluefox) if group\n line = line.replace(/^[+*]+\\s?/, '').trim();\n if (line.startsWith('(') && line.includes(')')) {\n const p = line.split(')');\n const author = p[0].replace('(', '');\n line = line.replace('(' + author + ')', '').trim();\n oneEntry.lines.push({author, line});\n } else {\n oneEntry.lines.push(line);\n }\n }\n }\n\n if (oneEntry) {\n entries[oneEntry.version] = oneEntry;\n }\n\n return entries;\n }\n\n parseText(text) {\n text = text || this.state.text || '';\n if (this.props.editEnabled) {\n this.editText = text;\n }\n if (!text || text.startsWith('<!DOCTYPE html>')) {\n // page not found\n return this.setState({notFound: true});\n }\n\n const {header, parts, content, license, changeLog, title} = this.format(text);\n let _title = header.title || title || Utils.getTitle(text);\n /*if (_title) {\n window.document.title = _title;\n } else if (title) {\n _title = title;\n window.document.title = title;\n }*/\n let affiliate = null;\n if (header.affiliate) {\n try {\n affiliate = JSON.parse(header.affiliate);\n } catch (e) {\n console.error('Cannot parse affiliate: ' + header.affiliate);\n }\n }\n\n let _changeLog;\n // try to add missing news\n if (changeLog) {\n // split news\n _changeLog = this.parseChangeLog(changeLog);\n if (_changeLog && typeof _changeLog === 'object' && this.state.adapterNews) {\n const lang = I18n.getLanguage();\n Object.keys(this.state.adapterNews).forEach(version => {\n if (!_changeLog[version]) {\n let news = this.state.adapterNews[version];\n if (typeof news === 'object') {\n news = news[lang] || news.en || '';\n }\n\n _changeLog[version] = {version, lines: news.split('\\\\n')};\n }\n });\n }\n }\n\n this.mounted && this.setState({\n affiliate,\n notFound: false,\n parts,\n header,\n loadTimeout: false,\n content,\n license,\n changeLog: _changeLog || changeLog,\n title: _title\n });\n\n this.onHashChange && setTimeout(() => this.onHashChange(), 200);\n }\n\n load(path, language) {\n path = path || this.props.path;\n language = language || this.props.language;\n if (path && language) {\n fetch(`${language}${path[0] === '/' ? path : '/' + path}`)\n .then(res => res.text())\n .then(text => this.parseText(text));\n }\n }\n\n format(text) {\n text = (text || '').trim();\n let {header, body} = Utils.extractHeader(text);\n\n if (body.startsWith('# ')) {\n // there is no header and readme starts with\n // \n // # ioBroker IoT Adapter\n }\n\n // remove comments like <!-- -->\n body = body.replace(/\\r\\n|\\n/g, '§$§$');\n body = body.replace(/<!--[^>]*-->/gm, '\\n');\n body = body.replace(/<! -[^>]* ->/gm, '\\n'); // translator make it wrong\n body = body.replace(/§\\$§\\$/g, '\\n');\n body = body.replace(/\\[\\*\\*\\*\\s(.+)\\s\\*\\*\\*]/g, '[***$1***]');\n body = body.replace(/\\[\\*\\*\\s(.+)\\s\\*\\*]/g, '[**$1**]');\n body = body.replace(/\\[\\*\\s(.+)\\s\\*]/g, '[*$1*]');\n body = body.replace(/\\*\\*\\*\\s(.+)\\s\\*\\*\\*/g, '***$1***');\n body = body.replace(/\\*\\*\\s(.+)\\s\\*\\*/g, '**$1**');\n body = body.replace(/\\*\\s(.+)\\s\\*/g, '*$1*');\n body = body.replace(/`` `(.+)```/g, '```$1```');\n\n body = Utils.removeDocsify(body);\n let {parts, content, license, changeLog, title} = Utils.decorateText(body, header, `${this.props.path && (this.props.path[0] === '/' ? this.props.path : '/' + this.props.path)}`);\n\n return {header, parts, content, license, changeLog, title};\n }\n\n formatAuthors(text) {\n const parts = text.split(',').map(t => t.trim()).filter(t => t);\n\n const authors = [];\n for (let i = 0; i < parts.length; i++) {\n const m = parts[i].trim().match(/<([-.\\w\\d_@]+)>$/);\n if (m) {\n const email = m[1];\n authors.push(<span key={parts[i]} className={this.props.classes.email} title={I18n.t('Click to copy %s', email)} onClick={e => {\n Utils.onCopy(e, email);\n this.setState({tooltip: I18n.t('Copied')});\n }}>{parts[i].replace(m[0], '').trim() + (parts.length - 1 === i ? '' : ', ')}</span>);\n } else {\n authors.push(<span key={parts[i]} className={this.props.classes.name}>{parts[i] + (parts.length - 1 === i ? '' : ', ')}</span>);\n }\n }\n\n return authors;\n }\n\n renderHeader() {\n const data = [];\n\n if (this.state.header.translatedFrom) {\n let translatedFrom = EXPAND_LANGUAGE[this.state.header.translatedFrom] || this.state.header.translatedFrom;\n // Translate language from english to actual language\n translatedFrom = I18n.t(translatedFrom);\n\n data.push(<div\n key=\"translatedFrom\"\n className={this.props.classes.headerTranslated}\n onClick={() => {\n if (this.props.onNavigate) {\n this.props.onNavigate && this.props.onNavigate(this.state.header.translatedFrom);\n } else {\n // read this.props.link\n fetch(this.props.link)\n .then(res => res.text())\n .then(text => this.setState({text}, () =>\n this.parseText()))\n .catch(e => window.alert(`Cannot fetch \"${this.props.link}\": ${e}`));\n }\n }}\n title={I18n.t('Go to original')}\n >{I18n.t('Translated from %s', translatedFrom)}\n </div>);\n }\n\n if (this.state.header.adapter) {\n data.push(<h1 key=\"h1\">{[\n this.state.header.logo ? <img key=\"logo\" src={'https://www.iobroker.net/' + this.state.header.logo} alt=\"logo\" className={this.props.classes.logoImage}/> : null,\n <div key=\"title\" className={this.props.classes.titleText}>{this.state.header.title}</div>\n ]}</h1>);\n if (this.state.header.readme) {\n const link = this.state.header.readme.replace(/blob\\/master\\/README.md$/, '');\n data.push(<IconButton size=\"large\" key=\"github\" title={I18n.t('Open repository')} onClick={() => Utils.openLink(link)}><IconGithub/></IconButton>);\n }\n }\n\n if (this.state.header.description) {\n data.push(<span key=\"description\" className={this.props.classes.description}>{this.state.header.description}</span>);\n }\n\n if (Object.keys(this.state.header).find(attr => ADAPTER_CARD.indexOf(attr) !== -1)) {\n data.push(<Accordion key=\"header\" className={this.props.classes.adapterCard}>\n <AccordionSummary className={this.props.classes.summary} classes={{expanded: this.props.classes.summaryExpanded}} expandIcon={<IconExpandMore />}>{I18n.t('Information')}</AccordionSummary>\n <AccordionActions><List>{\n ADAPTER_CARD\n .filter(attr => this.state.header.hasOwnProperty(attr))\n .map(attr =>\n <ListItem key={attr} className={this.props.classes.adapterCardListItem}>\n <div className={this.props.classes.adapterCardAttr}>{I18n.t(attr)}: </div>\n <span>{attr === 'authors' ? this.formatAuthors(this.state.header[attr]) : this.state.header[attr].toString()}</span>\n </ListItem>)}\n </List></AccordionActions>\n </Accordion>);\n }\n\n if (Object.keys(this.state.header).find(attr => attr.startsWith('BADGE-'))) {\n data.push(<Accordion key=\"header_badges\" className={this.props.classes.adapterCard}>\n <AccordionSummary className={this.props.classes.summary} classes={{expanded: this.props.classes.summaryExpanded}} expandIcon={<IconExpandMore />}>{I18n.t('Badges')}</AccordionSummary>\n <AccordionActions classes={{root: this.props.classes.badgesDetails}}>{\n Object.keys(this.state.header).filter(attr => attr.startsWith('BADGE-'))\n .map((attr, i) => [\n this.state.header[attr].indexOf('nodei.co') !== -1 ? (<br key={'br' + i}/>) : null,\n <img key={'img' + i} src={this.state.header[attr]} alt={attr.substring(6)}/>\n ])}\n </AccordionActions>\n </Accordion>);\n }\n\n return data;\n }\n\n renderInfo() {\n return <div className={this.props.classes.info}>\n {this.state.header.lastChanged ? [\n <span key=\"lastChangedTitle\" className={this.props.classes.infoTitle}>{I18n.t('Last changed:')} </span>,\n <span key=\"lastChangedValue\" className={this.props.classes.infoValue}>{this.state.header.lastChanged}</span>,\n ] : null}\n {this.props.editMode && this.state.header.editLink ?\n <a className={this.props.classes.infoEdit}\n href={this.state.header.editLink.replace(/\\/edit\\//, '/blob/')}\n rel=\"noopener noreferrer\"\n target=\"_blank\"><IconGithub style={{marginRight: 4}}/>{I18n.t('See on github')}\n </a> : null}\n {this.props.editEnabled && this.editText ?\n <div className={this.props.classes.infoEditLocal} onClick={() => {\n this.props.onEditMode && this.props.onEditMode(true);\n }}><IconEdit />{I18n.t('Edit local')}</div> : null}\n\n </div>;\n }\n\n _renderSubContent(menu) {\n return <ul>{\n menu.children.map(item => {\n const ch = this.state.content[item].children;\n const link = this.state.content[item].external && this.state.content[item].link;\n return <li><span onClick={() => this.onNavigate(item, link)} className={this.props.classes.contentLinks}>{this.state.content[item].title}</span>\n {ch ? this._renderSubContent(this.state.content[item]) : null}\n </li>;\n }).filter(e => e)\n }</ul>;\n }\n\n renderAffiliates() {\n if (!this.state.affiliate || !this.props.affiliates) {\n return null;\n }\n\n const Affiliates = this.props.affiliates;\n\n return <Affiliates\n key=\"affiliates\"\n language={this.props.language}\n mobile={this.props.mobile}\n theme={this.props.theme}\n data={this.state.affiliate}\n />;\n }\n\n onToggleContentButton() {\n this.setState({hideContent: !this.state.hideContent});\n window.localStorage && (window._localStorage || window.localStorage).setItem('Docs.hideContent', this.state.hideContent ? 'false' : 'true');\n }\n\n renderContentCloseButton() {\n if (this.state.hideContent) {\n return <IconMenu className={this.props.classes.contentClose}/>;\n } else {\n return <IconClose className={this.props.classes.contentClose} onClick={() => this.onToggleContentButton()}/>;\n }\n }\n\n renderContent() {\n const links = Object.keys(this.state.content);\n if (!links.length) {\n return null;\n }\n if (this.state.hideContent) {\n return <Paper className={this.props.classes.contentDivClosed} onClick={() => this.onToggleContentButton()}>\n {this.renderContentCloseButton()}\n </Paper>;\n } else {\n return <Paper className={this.props.classes.contentDiv}>\n {this.renderContentCloseButton()}\n <ul>{\n links.map(item => {\n const link = this.state.content[item].external && this.state.content[item].link;\n const level = this.state.content[item].level;\n let title = this.state.content[item].title.replace('>', '>').replace('<', '<').replace('&', '&');\n\n return <li key={title} style={{ fontSize: 16 - level * 2, paddingLeft: level * 8, fontWeight: !level ? 'bold' : 'normal' }}>\n <span onClick={() => this.onNavigate(item, link)} className={this.props.classes.contentLinks}>{title}</span>\n {this.state.content[item].children ? this._renderSubContent(this.state.content[item]) : null}\n </li>;\n }).filter(e => e)\n }</ul>\n </Paper>;\n }\n }\n\n renderLicense() {\n if (!this.state.license) {\n return null;\n } else {\n const CustomLink = this.customLink;\n const CustomH = this.customH;\n return <Accordion>\n <AccordionSummary\n className={this.props.classes.summary}\n classes={{expanded: this.props.classes.summaryExpanded}}\n expandIcon={<IconExpandMore />}>{I18n.t('License')} <span className={this.props.classes.license}> {this.state.header.license}</span></AccordionSummary>\n <AccordionActions>\n <MarkdownView\n markdown={this.state.license}\n options={CONVERTER_OPTIONS}\n components={{CustomLink, CustomH}}\n />\n </AccordionActions>\n </Accordion>;\n }\n }\n\n renderChangeLogLines() {\n const classes = this.props.classes;\n\n const versions = Object.keys(this.state.changeLog);\n\n const pos1 = versions.indexOf('**WORK');\n let pos2;\n if (pos1 !== -1) {\n versions.splice(pos1, 1);\n } else {\n pos2 = versions.indexOf('__WORK');\n if (pos2 !== -1) {\n versions.splice(pos2, 1);\n }\n }\n\n try {\n versions.sort(semver.gt);\n } catch (e) {\n console.warn('Cannot semver: ' + e);\n }\n if (pos1 !== -1) {\n versions.unshift('**WORK');\n } else if (pos2 !== -1) {\n versions.unshift('__WORK');\n }\n\n return <div className={classes.changeLog} key=\"change-log\">{versions.map(version => {\n const item = this.state.changeLog[version];\n if (version.includes('WORK')) {\n version = 'WORK IN PROGRESS';\n item.date = '';\n }\n return <div key={version} className={classes.changeLogDiv}>\n <div className={classes.changeLogVersion}>{version}{item.date ? <span className={classes.changeLogDate}>{item.date }</span> : ''}</div>\n <ul className={classes.changeLogUL}>{item.lines.map((line, i) => typeof line === 'object' ?\n <li key={i} className={classes.changeLogLine}><span className={classes.changeLogAuthor}>{line.author}</span><span className={classes.changeLogLineText}>{line.line}</span></li>\n :\n <li key={i} className={classes.changeLogLine}><span className={classes.changeLogLineText}>{line}</span></li>\n )}</ul>\n </div>\n })}</div>;\n }\n\n renderChangeLog() {\n if (!this.state.changeLog) {\n return null;\n } else {\n const CustomLink = this.customLink;\n const CustomH = this.customH;\n return <Accordion>\n <AccordionSummary className={this.props.classes.summary} classes={{expanded: this.props.classes.summaryExpanded}} expandIcon={<IconExpandMore />}>{I18n.t('Changelog')}</AccordionSummary>\n <AccordionActions classes={{root: this.props.classes.changeLogAccordion}}>\n {typeof this.state.changeLog === 'string' ?\n <MarkdownView markdown={this.state.changeLog} options={CONVERTER_OPTIONS} components={{CustomLink, CustomH}}/>\n :\n this.renderChangeLogLines()\n }\n </AccordionActions>\n </Accordion>;\n }\n }\n\n renderSnackbar() {\n return <Snackbar\n anchorOrigin={{vertical: 'top', horizontal: 'right'}}\n open={!!this.state.tooltip}\n autoHideDuration={6000}\n onClose={() => this.setState({tooltip: ''})}\n message={<span id=\"message-id\">{this.state.tooltip}</span>}\n action={[\n <IconButton size=\"large\"\n key=\"close\"\n color=\"inherit\"\n className={this.props.classes.close}\n onClick={() => this.setState({tooltip: ''})}\n >\n <IconClose/>\n </IconButton>,\n ]}\n />;\n }\n\n replaceHref(line) {\n if (!line) {\n return '';\n }\n const m = line.match(/\\[.*]\\(#[^)]+\\)/g);\n if (m) {\n m.forEach(link => {\n const pos = link.lastIndexOf('](');\n let text = link.substring(0, pos).replace(/^\\[/, '');\n let href = link.substring(pos + 2).replace(/\\)$/, '');\n line = line.replace(link, `<CustomLink text=\"${text}\" link=\"${href}\" />`);\n });\n }\n const mm = line.match(/!?\\[.*]\\([^)]+\\)/g);\n if (mm) {\n // https://raw.githubusercontent.com/ioBroker/ioBroker.iot/master/README.md\n // https://github.com/ioBroker/ioBroker.iot/blob/master/README.md\n const prefixHttp = this.props.link\n .substring(0, this.props.link.lastIndexOf('/'))\n .replace('https://raw.githubusercontent.com/', 'https://github.com/')\n .replace(/\\/master$/, '/blob/master');\n\n const prefixImage = this.props.link.substring(0, this.props.link.lastIndexOf('/'));\n mm.forEach(link => {\n const isImage = link.startsWith('!');\n link = link.replace(/^!/, '');\n const pos = link.lastIndexOf('](');\n let text = link.substring(0, pos).replace(/^\\[/, '');\n let href = link.substring(pos + 2).replace(/\\)$/, '');\n if (!href.startsWith('http')) {\n if (isImage) {\n line = line.replace(link, `[${text}](${prefixImage}/${href})`);\n } else {\n // <a href=\"http://www.google.com\" target=\"blank\">google</a>\n line = line.replace(link, `<a href=\"${prefixHttp}/${href}\" target=\"blank\">${text}</a>`);\n }\n } else if (!isImage) {\n line = line.replace(link, `<a href=\"${href}\" target=\"blank\">${text}</a>`);\n }\n });\n }\n return line;\n\n /*const parts = (this.props.path || '').split('/');\n // const fileName = parts.pop();\n const prefix = parts.join('/') + '/';\n\n if (reactObj && reactObj.props && reactObj.props.children) {\n reactObj.props.children.forEach((item, i) => {\n if (item && item.type === 'a') {\n let link = item.props.href;\n if (link) {\n if (link.startsWith('#')) {\n link = Utils.text2link(link.substring(1));\n reactObj.props.children[i] = (<div\n key={'link' + i}\n className={this.props.classes.mdLink + ' md-link'}\n title={link}\n onClick={() => this.onNavigate(link)}>\n {item.props.children ? item.props.children[0] : ''}\n </div>);\n } else {\n const oldLink = link;\n if (!link.match(/^https?:\\/\\//)) {\n link = prefix + link;\n }\n\n reactObj.props.children[i] = (<div\n key={'link' + i}\n className={this.props.classes.mdLink + ' md-link'}\n title={oldLink}\n onClick={() => this.onNavigate(null, link)}>\n {item.props.children ? item.props.children[0] : ''}\n </div>);\n }\n }\n }\n\n if (typeof item === 'object') {\n this.replaceHref(item);\n }\n });\n }*/\n }\n\n makeHeadersAsLink(line, prefix) {\n if (!line) {\n return '';\n }\n const mm = line.match(/^#+\\s.+/g);\n if (mm) {\n mm.forEach(header => {\n const level = header.match(/^(#+)\\s/)[1].length;\n let text = header.substring(level + 1);\n line = line.replace(header, `<CustomH text=\"${text}\" id=\"${Utils.text2link(text)}\" level=\"${level}\" prefix=\"${prefix}\"/>`);\n });\n }\n return line;\n /*if (reactObj && (reactObj.type === 'h1' || reactObj.type === 'h2' || reactObj.type === 'h3' || reactObj.type === 'h3')) {\n reactObj.props.children[0] = (<span>{reactObj.props.children[0]}<a\n href={prefix + '?' + reactObj.props.id}\n className={this.props.classes.mdHeaderLink + ' md-h-link'}>\n </a></span>);\n }*/\n }\n\n renderTable(lines, key) {\n const header = lines[0].replace(/^\\||\\|$/g, '').split('|').map(h => h.trim());\n const CustomLink = this.customLink;\n const CustomH = this.customH;\n\n const rows = [];\n for (let i = 2; i < lines.length; i++) {\n const parts = lines[i].replace(/^\\||\\|$/g, '').split('|').map(a => a.trim());\n\n const cells = [];\n for (let j = 0; j < header.length; j++) {\n parts[j] = this.replaceHref(parts[j]);\n const crt = <MarkdownView markdown={parts[j] || ''} options={CONVERTER_OPTIONS} components={{CustomLink, CustomH}}/>;\n cells.push(<TableCell className={this.props.classes.tableCell} key={'cell' + i + '_' + j}>{crt}</TableCell>);\n }\n\n rows.push(<TableRow className={this.props.classes.tableRow} key={'row' + i}>{cells}</TableRow>);\n }\n return <Table key={'table_' + key} size=\"small\" className={this.props.classes.table}>\n <TableHead className={this.props.classes.tableHead}>\n <TableRow className={this.props.classes.tableRowHead}>\n {\n header.map((h, i) =>\n <TableCell className={this.props.classes.tableCellHead} key={'header' + i}>\n <MarkdownView markdown={h} options={CONVERTER_OPTIONS} components={{CustomLink, CustomH}}/>\n </TableCell>)\n }\n </TableRow>\n </TableHead>\n <TableBody className={this.props.classes.tableBody}>{rows}</TableBody>\n </Table>;\n }\n\n render() {\n if (this.state.notFound) {\n return null; //<Page404 className={this.props.classes.root} language={this.props.language}/>;\n }\n if (this.props.editMode && this.props.editor) {\n const Editor = this.props.editor;\n return <Editor\n language={this.props.language}\n mobile={this.props.mobile}\n theme={this.props.theme}\n path={this.state.header.editLink}\n onClose={() => this.props.onEditMode && this.props.onEditMode(false)}\n />;\n }\n if (this.state.loadTimeout && !this.state.parts.length) {\n return <Loader theme={this.props.theme}/>;\n }\n\n const prefix = window.location.hash.split('?')[0];\n\n const CustomLink = this.customLink;\n const CustomH = this.customH;\n const meta = this.meta;\n const link = this.link;\n\n const reactElements = this.state.parts.map((part, i) => {\n if (part.type === 'table') {\n return this.renderTable(part.lines, i);\n } else {\n let line = part.lines.join('\\n');\n if (part.type === 'code') {\n line = line.trim().replace(/^```javascript/, '```');\n }\n\n const trimmed = line.trim();\n if (trimmed.match(/^\\*[^\\s]/) && trimmed.match(/[^\\s]\\*$/)) {\n line = trimmed;\n }\n\n // find all \"[text](#link)\" and replace it with <link text=\"text\" link=\"link\"/>\n // Detect \"[iobroker repo \\[repoName\\]](#iobroker-repo)\"\n\n line = this.replaceHref(line);\n line = this.makeHeadersAsLink(line, prefix);\n\n // replace <- with <\n line = line.replace(/<-/g, '<-');\n line = line.replace(/<\\/ br>/g, '<br/>');\n\n const rct = <MarkdownView markdown={line} options={CONVERTER_OPTIONS} components={{CustomLink, CustomH, meta, link}}/>;\n /*cconst rct = <ReactMarkdown\n children={line}\n components={{ CustomLink, CustomH }}\n />; */\n\n if (part.type === 'warn') {\n return <div key={'parts' + i} className={this.props.classes.warn}>{rct}</div>;\n } else if (part.type === 'alarm') {\n return <div key={'parts' + i} className={this.props.classes.alarm}>{rct}</div>;\n } else if (part.type === 'notice') {\n return <div key={'parts' + i} className={this.props.classes.notice}>{rct}</div>;\n } else if (part.type === '@@@') {\n return <div key={'parts' + i} className={this.props.classes.todo}>{rct}</div>;\n } else {\n return <div key={'parts' + i} className={this.props.classes.paragraph}>{rct}</div>;\n }\n }\n });\n\n return <div className={Utils.clsx(this.props.classes.root, this.props.className)} ref={this.contentRef}>\n {this.renderHeader()}\n {this.state.title && !this.state.header.adapter ? <h1>{this.state.title}</h1> : null}\n {this.renderAffiliates()}\n {reactElements}\n <hr/>\n {this.renderLicense()}\n {this.renderChangeLog()}\n {this.renderInfo()}\n {this.renderContent()}\n {this.renderSnackbar()}\n </div>;\n }\n}\n\nMarkdown.propTypes = {\n language: PropTypes.string,\n onNavigate: PropTypes.func,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n mobile: PropTypes.bool,\n rootPath: PropTypes.string,\n path: PropTypes.string,\n text: PropTypes.string,\n editMode: PropTypes.bool,\n onEditMode: PropTypes.func,\n editEnabled: PropTypes.bool,\n affiliates: PropTypes.object,\n editor: PropTypes.object,\n className: PropTypes.string,\n socket: PropTypes.object,\n adapter: PropTypes.string,\n};\n\nexport default withStyles(styles)(Markdown);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { AppBar } from '@mui/material';\nimport { Button } from '@mui/material';\nimport { Grid } from '@mui/material';\nimport { Toolbar } from '@mui/material';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport LinkIcon from '@mui/icons-material/Link';\n\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader';\n\nimport Markdown from '../components/Markdown';\n\nconst styles = {\n root: {\n height: '100%'\n },\n scroll: {\n height: '100%',\n overflowY: 'auto',\n '& img': {\n maxWidth: '100%'\n },\n fontSize: 14,\n }\n};\n\nclass AdapterInfoDialog extends Component {\n\n constructor(props) {\n\n super(props);\n\n const uri = `https://www.iobroker.net/${I18n.getLanguage()}/adapterref/iobroker.${props.adapter}/README.md`;\n //this.props.link.replace('https://github.com', 'https://raw.githubusercontent.com').replace('blob/', '');\n const uriGithub = this.props.link.replace('https://github.com', 'https://raw.githubusercontent.com').replace('blob/', '');\n const rawUri = uriGithub.replace('blob/', '').substring(0, uriGithub.lastIndexOf('/') + 1);\n\n this.state = {\n tab: 0,\n readme: '',\n uri,\n rawUri\n };\n\n this.t = props.t;\n }\n\n async componentDidMount() {\n try {\n const data = await fetch(this.state.uri);\n let readme = await data.text();\n /*const lines = readme.split('\\n');\n if (lines[0].trim() === '---') {\n let i = 1;\n while(lines[i] !== '---') i++;\n lines.splice(0, i + 1);\n readme = lines.join('\\n');\n lines.unshift(``);\n lines.unshift('# ioBroker.' + this.props.adapter);\n lines.unshift('');\n }\n const split = this.splitReadMe(readme);*/\n readme = readme.replace(/\\(([-\\w]+)\\/adapterref\\//g, '(https://www.iobroker.net/$1/adapterref/');\n /*readme = readme.replace(/\\(en\\/adapterref\\//g, '(https://www.iobroker.net/en/adapterref/');\n readme = readme.replace(/\\(de\\/adapterref\\//g, '(https://www.iobroker.net/de/adapterref/');\n readme = readme.replace(/\\(zh-cn\\/adapterref\\//g, '(https://www.iobroker.net/zh-cn/adapterref/');\n readme = readme.replace(/\\(zh-cn\\/adapterref\\//g, '(https://www.iobroker.net/zh-cn/adapterref/');*/\n readme = readme.replace(/src=\"([-\\w]+)\\/adapterref\\//g, 'src=\"https://www.iobroker.net/zh-cn/adapterref/');\n // readme = readme.replace(/(<meta[^>]+>)/g, '\\\\$1');\n\n this.setState({text: readme});\n } catch(error) {\n window.alert(error);\n }\n }\n\n trimArr(lines) {\n let j = lines.length - 1;\n\n while (j >= 0 && !lines[j]) {\n j--;\n }\n\n if (j !== lines.length - 1) {\n lines.splice(j + 1);\n }\n\n return lines;\n }\n\n splitReadMe(html, link) {\n\n const result = {logo: '', readme: [], changelog: [], license: []};\n let lines = html.trim().split(/\\r\\n|\\n/);\n\n // second line is main title\n if (lines[2].match(/^#\\sio/)) {\n lines.splice(2, 1);\n }\n\n if (lines[1].match(/^#\\sio/)) {\n lines.splice(1, 1);\n }\n // first line is logo\n if (lines[0].match(/!\\[[-_\\w\\d]*]\\([-._\\w\\d/]+\\.png\\)/)) {\n result.logo = link + lines[0].match(/\\((.+)\\)/)[1];\n lines.splice(0, 1);\n }\n\n let part = 'readme';\n\n for (let i = 0; i < lines.length; i++) {\n\n if (lines[i].match(/^====/)) {\n continue;\n }\n\n if (lines[i].match(/^###?\\s+Changelog/)) {\n part = 'changelog';\n continue;\n\n } else if (lines[i].match(/^###?\\s+License/)) {\n part = 'license';\n continue;\n } else if (lines[i].match(/^##?\\s+.+/)) {\n part = 'readme';\n }\n\n if (!result[part].length && !lines[i]) {\n continue;\n }\n\n result[part].push(lines[i]);\n }\n\n\n\n if (result.logo) {\n // that.$divLogo.html('<img src=\"' + result.logo + '\" />').show();\n } else {\n // that.$divLogo.html('').hide();\n }\n\n this.trimArr(result.readme);\n this.trimArr(result.changelog);\n this.trimArr(result.license);\n\n if (result.readme.length) {\n result.readme = result.readme.join('\\n');\n } else {\n result.readme = '';\n }\n if (result.changelog.length) {\n result.changelog = result.changelog.join('\\n');\n } else {\n delete result.changelog;\n }\n if (result.license.length) {\n result.license[0] = '## ' + result.license[0];\n result.license = result.license.join('\\n');\n } else {\n delete result.license;\n }\n\n return result;\n }\n\n changeTab(event, newValue) {\n this.setState({\n tab: newValue\n });\n }\n\n openTab(path) {\n const tab = window.open(path, '_blank');\n tab.focus();\n }\n\n closeDialog() {\n Router.doNavigate('tab-adapters');\n }\n\n transformUri(uri) {\n return (uri && uri.startsWith('http') ? '' : this.state.rawUri) + uri;\n }\n\n render() {\n if (!this.state.text) {\n return <Loader theme={this.props.theme}/>;\n }\n const { classes } = this.props;\n //const { tab } = this.state;\n\n return <Grid\n item\n container\n direction=\"column\"\n wrap=\"nowrap\"\n className={ classes.root }\n >\n {/*<AppBar color=\"default\" position=\"static\">\n <Tabs value={ this.state.tab } onChange={ (event, newValue) => this.changeTab(event, newValue) }>\n <Tab label=\"README\" disabled={ !this.state.readme }/>\n <Tab label=\"Changelog\" disabled={ !this.state.changelog }/>\n <Tab label=\"License\" disabled={ !this.state.license }/>\n </Tabs>\n </AppBar>\n <Box p={ 3 } className={ classes.scroll }>\n <ReactMarkdown\n source={ this.state[tab === 1 ? 'changelog' : tab === 2 ? 'license' : 'readme'] }\n linkTarget=\"_blank\"\n transformLinkUri={ (uri) => this.transformUri(uri) }\n transformImageUri={ (uri) => this.transformUri(uri) }\n escapeHtml={ false }\n />\n </Box>*/}\n <Markdown className={ classes.scroll }\n text={this.state.text}\n language={I18n.getLanguage()}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n mobile={this.props.mobile}\n editMode={false}\n socket={this.props.socket}\n adapter={this.props.adapter}\n // https://github.com/ioBroker/ioBroker.admin/blob/master/README.md =>\n // https://raw.githubusercontent.com/ioBroker/ioBroker.admin/master/README.md\n link={this.props.link.replace('https://github.com/', 'https://raw.githubusercontent.com/').replace('/blob/', '/')}\n //onNavigate={(language, tab, page, chapter) => this.onNavigate(language, tab, page, chapter)}\n />\n <AppBar color=\"default\" position=\"static\">\n <Toolbar>\n <Grid container spacing={ 1 }>\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={ () => this.openTab(this.props.link) }\n startIcon={<LinkIcon />}\n >\n { this.t('Open original') }\n </Button>\n </Grid>\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={ () => this.closeDialog() }\n startIcon={<CloseIcon />}\n >\n { this.t('Close') }\n </Button>\n </Grid>\n </Grid>\n </Toolbar>\n </AppBar>\n </Grid>;\n }\n}\n\nAdapterInfoDialog.propTypes = {\n adapter: PropTypes.string,\n link: PropTypes.string,\n t: PropTypes.func,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n socket: PropTypes.object\n};\n\nexport default withStyles(styles)(AdapterInfoDialog);","import React, { Component } from 'react';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport FormControl from '@mui/material/FormControl';\nimport Grid from '@mui/material/Grid';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport AddIcon from '@mui/icons-material/Add';\n\nimport HostSelectors from '../components/HostSelectors';\n\nconst styles = theme => ({\n formControl: {\n marginTop: theme.spacing(3)\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n paper: {\n //minWidth: 600\n },\n typography: {\n paddingRight: 30\n }\n});\n\nclass AddInstanceDialog extends Component {\n constructor(props) {\n super(props);\n this.state = {\n instanceNumbers: []\n }\n this.t = props.t;\n }\n\n componentDidMount() {\n this.props.instancesWorker.getInstances()\n .then(instances => {\n const instanceNumbers = Object.keys(instances)\n .filter(id => instances[id]?.common?.name === this.props.adapter)\n .map(id => id.substring(id.lastIndexOf('.') + 1));\n\n this.setState({instanceNumbers});\n });\n }\n\n\n getAvailableInstances() {\n const result = [];\n result.push(<MenuItem value=\"auto\" key=\"auto\">{this.t('auto')}</MenuItem>);\n\n for (let i = 0; i <= 10; i++) {\n if (!this.state.instanceNumbers.includes(i)) {\n result.push(<MenuItem value={`${i}`} key={i}>{i}</MenuItem>);\n }\n }\n\n return result;\n }\n\n checkDependencies = (dependencies = this.props.dependencies) => {\n if (!dependencies) {\n return '';\n }\n let array = []\n for (let adapter of dependencies) {\n if (!adapter.installedVersion) {\n array.push(this.props.t('Latest available version of \"%s\" is required, but nothing installed. Please install first \"%s\" and then retry.', adapter.name, adapter.name));\n } else if (!adapter.rightVersion) {\n array.push(`${this.props.t('Invalid version of %s. Required %s. Current ', adapter.name, adapter.version)}${adapter.installedVersion}`);\n }\n }\n return array.length ? array.map(el => <div key={el}>{el}</div>) : '';\n }\n\n render() {\n const { classes } = this.props;\n\n const checkDeps = this.checkDependencies();\n\n return <Dialog\n onClose={this.props.onClose}\n open={this.props.open}\n classes={{ paper: classes.paper }}\n >\n <DialogTitle>\n <Typography component=\"h2\" variant=\"h6\" classes={{ root: classes.typography }}>\n {this.t('You are going to add new instance:')} {this.props.adapter}\n <IconButton size=\"large\" className={classes.closeButton} onClick={this.props.onClose}>\n <CloseIcon />\n </IconButton>\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n {!checkDeps ? <Grid\n container\n direction=\"column\"\n >\n <HostSelectors\n tooltip={this.t('Select host to add the instance')}\n expertMode={true}\n socket={this.props.socket}\n hostsWorker={this.props.hostsWorker}\n currentHost={this.props.currentHost}\n setCurrentHost={(hostName, hostId) =>\n this.props.onHostChange(hostId.replace(/^system\\.host\\./, ''))}\n />\n <FormControl variant=\"standard\" className={classes.formControl}>\n <InputLabel id=\"instance-label\">{this.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n labelId=\"instance-label\"\n value={this.props.currentInstance}\n onChange={this.props.onInstanceChange}\n >\n {this.getAvailableInstances()}\n </Select>\n </FormControl>\n </Grid> : null}\n <div style={{\n margin: 10,\n fontSize: 16,\n color: this.props.themeType === 'dark' ? '#e70000' : '#840101'\n }}>{checkDeps}</div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n autoFocus\n disabled={!!checkDeps}\n onClick={() => {\n this.props.onClick();\n this.props.onClose();\n }}\n color=\"primary\"\n startIcon={<AddIcon/>}\n >\n {this.t('Add')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nAddInstanceDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n themeType: PropTypes.string,\n adapter: PropTypes.string.isRequired,\n instancesWorker: PropTypes.object.isRequired,\n socket: PropTypes.object,\n currentHost: PropTypes.string.isRequired,\n currentInstance: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired,\n onClick: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onHostChange: PropTypes.func.isRequired,\n onInstanceChange: PropTypes.func.isRequired\n}\n\nexport default withStyles(styles)(AddInstanceDialog);","import React, { Component } from 'react';\n\nimport { withStyles } from '@mui/styles';\n\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport {\n Avatar,\n CardMedia,\n Grid,\n IconButton,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n Rating,\n} from '@mui/material';\n\nimport AddIcon from '@mui/icons-material/Add';\nimport AddToPhotosIcon from '@mui/icons-material/AddToPhotos';\nimport BuildIcon from '@mui/icons-material/RotateRight';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport CloudIcon from '@mui/icons-material/Cloud';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\nimport DeleteForeverIcon from '@mui/icons-material/DeleteForever';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport GitHubIcon from '@mui/icons-material/GitHub';\nimport HelpIcon from '@mui/icons-material/Help';\nimport PublishIcon from '@mui/icons-material/Publish';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport sentryIcon from '../../assets/sentry.svg';\n\nimport {\n amber,\n blue,\n green,\n red\n} from '@mui/material/colors';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport IsVisible from '../IsVisible';\n\n\nconst styles = theme => ({\n smallAvatar: {\n width: theme.spacing(4),\n height: theme.spacing(4),\n marginLeft: 4,\n },\n paddingNone: {\n padding: '0 !important'\n },\n hidden: {\n visibility: 'hidden'\n },\n name: {\n flexWrap: 'nowrap',\n width: 300,\n marginTop: 0\n },\n nameDiv: {\n display: 'flex',\n alignItems: 'center',\n },\n categoryName: {\n fontWeight: 'bold',\n cursor: 'pointer',\n },\n green: {\n color: green[500]\n },\n blue: {\n color: blue[700]\n },\n category: {\n backgroundColor: theme.palette.background.default,\n },\n updateAvailable: {\n color: green[700]\n },\n wrongDependencies: {\n color: red[700]\n },\n grow: {\n flexGrow: 1\n },\n displayNone: {\n display: 'none'\n },\n sentryIcon: {\n fontSize: '1.2rem'\n },\n versionWarn: {\n color: amber[500]\n },\n buttonUpdate: {\n border: '1px solid',\n padding: '0px 7px',\n borderRadius: 5,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026'\n }\n },\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10\n },\n classPoll: {\n color: 'orange'\n },\n classPush: {\n color: 'green'\n },\n classAssumption: {\n color: 'red',\n transform: 'rotate(90deg)'\n },\n marginLeft5: {\n marginLeft: 5\n },\n marginRight5: {\n marginRight: 5\n },\n flex: {\n display: 'flex'\n },\n sentry: {\n width: 21,\n height: 21,\n marginTop: 3,\n objectFit: 'fill',\n filter: 'invert(0%) sepia(90%) saturate(1267%) hue-rotate(-260deg) brightness(99%) contrast(97%)'\n },\n rating: {\n cursor: 'pointer',\n height: 18\n },\n nameCell: {\n paddingTop: '0 !important',\n paddingBottom: '0 !important',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n});\n\nclass AdapterRow extends Component {\n renderVersion() {\n const {\n name,\n classes,\n enabledCount,\n installedCount,\n installedFrom,\n installedVersion,\n t\n } = this.props;\n\n return <Grid\n container\n wrap=\"nowrap\"\n alignItems=\"center\"\n spacing={1}\n >\n <Grid item>\n {installedVersion +\n (installedCount ? ` (${installedCount}${installedCount !== enabledCount ? '~' : ''})` : '')\n }\n </Grid>\n {installedFrom && !installedFrom.startsWith(`iobroker.${name}@`) &&\n <Grid item container>\n <Tooltip title={t('Non-NPM-Version: ') + installedFrom}>\n <GitHubIcon\n fontSize=\"small\"\n className={classes.versionWarn}\n />\n </Tooltip>\n </Grid>\n }\n </Grid>;\n }\n\n render() {\n const isCategory = this.props.category;\n\n const {\n classes,\n connectionType,\n installedCount,\n installedVersion,\n updateAvailable,\n commandRunning,\n name,\n rightDependencies,\n rightOs,\n sentry,\n categoryName,\n openInstallVersionDialog,\n dataSource,\n descHidden,\n adapter,\n versionDate,\n onSetRating,\n rating\n } = this.props;\n\n if (isCategory) {\n return <TableRow\n hover={false}\n className={clsx(classes.category, this.props.hidden && classes.displayNone)}\n >\n <TableCell>\n <Grid container spacing={1} alignItems=\"center\" className={classes.name}>\n <Grid item>\n <IconButton\n size=\"small\"\n onClick={this.props.onToggle}\n >\n {this.props.expanded ? <ExpandMoreIcon /> : <ChevronRightIcon />}\n </IconButton>\n </Grid>\n </Grid>\n </TableCell>\n <TableCell onClick={this.props.onToggle}>\n <div className={clsx(classes.nameDiv, classes.categoryName)}>\n <MaterialDynamicIcon objIconBool iconName={categoryName} className={classes.marginRight5} />\n {name}\n </div>\n </TableCell>\n <TableCell colSpan={descHidden ? 5 : 6}>\n <Typography component=\"span\" variant=\"body2\" className={classes.green}>\n {installedCount}\n </Typography>\n {` ${this.props.t('of')} `}\n <Typography component=\"span\" variant=\"body2\" className={classes.blue}>\n {this.props.count}\n </Typography>\n {` ${this.props.t('Adapters from this Group installed')}`}\n </TableCell>\n </TableRow>;\n } else {\n return <TableRow\n hover={true}\n className={this.props.hidden ? classes.displayNone : ''}\n >\n <TableCell />\n <TableCell>\n <Grid container spacing={1} alignItems=\"center\" className={classes.name}>\n <Grid item className={classes.paddingNone}>\n <Avatar\n variant=\"square\"\n alt={name}\n src={this.props.image}\n className={classes.smallAvatar}\n />\n </Grid>\n {this.props.allowAdapterRating !== false ?\n <Grid item className={classes.nameCell}>\n <div>{name}</div>\n {!versionDate ? <div\n onClick={onSetRating ? () => onSetRating() : undefined}\n className={clsx(classes.rating, onSetRating && classes.ratingSet)}\n title={rating?.title}\n >\n <Rating\n name={adapter}\n precision={0.5}\n size=\"small\"\n readOnly\n value={rating?.rating ? rating.rating.r : 0}\n />\n </div> : null}\n </Grid>\n :\n <Grid item>{name}</Grid>\n }\n </Grid>\n </TableCell>\n {!descHidden && <TableCell title={this.props.description}>{this.props.description}</TableCell>}\n <TableCell>\n <div className={classes.flex}>\n {connectionType === 'cloud' ?\n <Tooltip title={this.props.t('Adapter requires the specific cloud access for these devices/service')}><CloudIcon /></Tooltip> :\n (connectionType === 'local' ?\n <Tooltip title={this.props.t('Adapter does not use the cloud for these devices/service')}><CloudOffIcon /></Tooltip> : null)\n }\n {dataSource && <div className={classes.marginLeft5}>{(\n dataSource === 'poll' ?\n <Tooltip title={this.props.t('The device or service will be periodically asked')}>\n <ArrowUpwardIcon className={classes.classPoll} />\n </Tooltip> :\n dataSource === 'push' ?\n <Tooltip title={this.props.t('The device or service delivers the new state actively')}>\n <ArrowDownwardIcon className={classes.classPush} />\n </Tooltip> :\n dataSource === 'assumption' ?\n <Tooltip title={this.props.t('Adapter cannot request the exactly device status and the status will be guessed on the last sent command')}>\n <RemoveIcon className={classes.classAssumption} /></Tooltip> : null\n )}\n </div>}\n {sentry && <div className={classes.marginLeft5}>\n <Tooltip title=\"sentry\" classes={{ popper: classes.tooltip }}>\n <CardMedia\n className={classes.sentry}\n component=\"img\"\n image={sentryIcon}\n />\n </Tooltip>\n </div>}\n </div>\n </TableCell>\n <TableCell>{installedVersion && this.renderVersion()}</TableCell>\n <TableCell className={clsx({\n [classes.updateAvailable]: updateAvailable && rightDependencies,\n [classes.wrongDependencies]: !rightDependencies\n })}>\n <IsVisible value={this.props.allowAdapterUpdate}>\n <Grid\n container\n alignItems=\"center\"\n >\n {!commandRunning && updateAvailable ?\n <Tooltip title={this.props.t('Update')}>\n <div\n onClick={this.props.onUpdate}\n className={classes.buttonUpdate}>\n <IconButton\n className={classes.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>{this.props.version}\n </div>\n </Tooltip>\n :\n this.props.version\n }\n </Grid>\n </IsVisible>\n </TableCell>\n <TableCell>{this.props.license}</TableCell>\n <TableCell>\n <IsVisible value={this.props.allowAdapterInstall}>\n <Tooltip title={this.props.t('Add instance')}>\n <IconButton\n size=\"small\"\n className={!rightOs ? classes.hidden : ''}\n onClick={rightOs ? this.props.onAddInstance : null}\n >\n <AddIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n <IsVisible value={this.props.allowAdapterReadme}>\n <Tooltip title={this.props.t('Readme')}>\n <IconButton\n size=\"small\"\n onClick={this.props.onInfo}\n >\n <HelpIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {this.props.expertMode &&\n <Tooltip title={this.props.t('Upload')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={this.props.onUpload}\n >\n <PublishIcon />\n </IconButton>\n </Tooltip>\n }\n <IsVisible value={this.props.allowAdapterDelete}>\n <Tooltip title={this.props.t('Delete adapter')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={this.props.onDeletion}\n >\n <DeleteForeverIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {this.props.expertMode && this.props.allowAdapterUpdate !== false &&\n <Tooltip title={this.props.t('Install a specific version')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={openInstallVersionDialog}\n >\n <AddToPhotosIcon />\n </IconButton>\n </Tooltip>\n }\n {this.props.rebuild && this.props.expertMode &&\n <Tooltip title={this.props.t('Rebuild')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={this.props.onRebuild}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n }\n </TableCell>\n </TableRow>;\n }\n }\n}\n\nAdapterRow.propTypes = {\n category: PropTypes.bool,\n connectionType: PropTypes.string,\n count: PropTypes.number,\n description: PropTypes.string,\n enabledCount: PropTypes.number,\n expanded: PropTypes.bool,\n expertMode: PropTypes.bool,\n hidden: PropTypes.bool,\n image: PropTypes.string,\n installedCount: PropTypes.number,\n installedFrom: PropTypes.string,\n installedVersion: PropTypes.string,\n keywords: PropTypes.array,\n name: PropTypes.string,\n license: PropTypes.string,\n onAddInstance: PropTypes.func,\n onDeletion: PropTypes.func,\n onRebuild: PropTypes.func,\n onToggle: PropTypes.func,\n onUpdate: PropTypes.func,\n onUpload: PropTypes.func,\n rebuild: PropTypes.bool,\n rightDependencies: PropTypes.bool,\n rightOs: PropTypes.bool,\n sentry: PropTypes.bool,\n t: PropTypes.func,\n descHidden: PropTypes.bool,\n updateAvailable: PropTypes.bool,\n version: PropTypes.string,\n commandRunning: PropTypes.bool,\n rating: PropTypes.object,\n onSetRating: PropTypes.func,\n};\n\nexport default withStyles(styles)(AdapterRow);","import React, { useState } from 'react';\nimport { Card, CardContent, CardMedia, Fab, IconButton, Tooltip, Typography } from '@mui/material';\nimport { withStyles } from '@mui/styles';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\n\nimport Rating from '@mui/material/Rating';\n\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport AddIcon from '@mui/icons-material/Add';\nimport AddToPhotosIcon from '@mui/icons-material/AddToPhotos';\nimport BuildIcon from '@mui/icons-material/RotateRight';\nimport DeleteForeverIcon from '@mui/icons-material/DeleteForever';\nimport HelpIcon from '@mui/icons-material/Help';\nimport PublishIcon from '@mui/icons-material/Publish';\nimport CloudIcon from '@mui/icons-material/Cloud';\nimport CloudOffIcon from '@mui/icons-material/CloudOff';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport GitHubIcon from '@mui/icons-material/GitHub';\nimport { amber } from '@mui/material/colors';\n\nimport sentryIcon from '../../assets/sentry.svg';\nimport IsVisible from '../IsVisible';\n\nconst boxShadow = '0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)';\nconst boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nfunction MyImage(props) {\n const {src, alt, style, ...other} = props;\n const img = props.style.backgroundImage.substring(5, props.style.backgroundImage.length - 2);\n return <img src={img} alt={alt} {...other} onError={() => {this.onerror = null; this.src = './img/no-image.png';}} />;\n}\n\nconst styles = theme => ({\n root: {\n position: 'relative',\n margin: 10,\n width: 300,\n minHeight: 200,\n background: theme.palette.background.default,\n boxShadow,\n display: 'flex',\n flexDirection: 'column',\n transition: 'box-shadow 0.5s',\n '&:hover': {\n boxShadow: boxShadowHover\n }\n },\n imageBlock: {\n background: theme.palette.mode === 'dark' ? '#848484' : '#c0c0c0',\n minHeight: 60,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n color: '#000'\n },\n img: {\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n installed: {\n background: '#77c7ff8c'\n },\n update: {\n background: '#10ff006b'\n },\n fab: {\n position: 'absolute',\n bottom: -20,\n width: 40,\n height: 40,\n right: 20,\n },\n greenText: {\n color: theme.palette.success.dark,\n },\n collapse: {\n height: '100%',\n backgroundColor: 'silver',\n position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column'\n },\n collapseOff: {\n height: 0\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n marginLeft: 'auto',\n marginBottom: 10,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)'\n },\n '&:before': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: 'rgba(0, 0, 0, 0.54)',\n transform: 'rotate(45deg)'\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: 'rgba(0, 0, 0, 0.54)',\n transform: 'rotate(-45deg)'\n },\n },\n footerBlock: {\n background: theme.palette.background.default,\n padding: 10,\n display: 'flex',\n justifyContent: 'space-between'\n },\n hidden: {\n display: 'none'\n },\n buttonUpdate: {\n border: '1px solid',\n padding: '0px 7px',\n borderRadius: 5,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026'\n }\n },\n versionDate: {\n alignSelf: 'center'\n },\n adapter: {\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: 'middle',\n paddingLeft: 8,\n paddingTop: 16,\n color: theme.palette.mode === 'dark' ? '#333' : '#333'\n },\n adapterWithAgo: {\n width: 'calc(100% - 145px)',\n },\n description: {\n color: theme.palette.mode === 'dark' ? '#222' : 'inherit'\n },\n\n cardContent: {\n overflow: 'auto'\n },\n cardContentDiv: {\n position: 'sticky',\n right: 0,\n top: 0,\n background: 'silver'\n },\n cardContentFlex: {\n display: 'flex'\n },\n cardContentFlexBetween: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n cardContent2: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between'\n },\n cardMargin10: {\n marginTop: 10,\n },\n availableVersion: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center'\n },\n\n classPoll: {\n color: 'orange'\n },\n classPush: {\n color: 'green'\n },\n classAssumption: {\n color: 'red',\n transform: 'rotate(90deg)'\n },\n marginLeft5: {\n marginLeft: 5\n },\n rating: {\n marginTop: 20,\n },\n ratingSet: {\n cursor: 'pointer'\n },\n versionWarn: {\n color: amber[500],\n marginRight:5\n },\n sentry: {\n width: 21,\n height: 21,\n objectFit: 'fill',\n marginTop: 3,\n filter: 'invert(0%) sepia(90%) saturate(1267%) hue-rotate(-260deg) brightness(99%) contrast(97%)'\n },\n tooltip: {\n pointerEvents: 'none',\n },\n});\nconst AdapterTile = ({\n name,\n classes,\n image,\n version,\n installedVersion,\n installedCount,\n updateAvailable,\n onUpdate,\n description,\n rightOs,\n onAddInstance,\n onInfo,\n expertMode,\n onUpload,\n onDeletion,\n rebuild,\n onRebuild,\n hidden,\n stat,\n versionDate,\n adapter,\n isCategory,\n connectionType,\n openInstallVersionDialog,\n dataSource,\n t,\n commandRunning,\n rating,\n onSetRating,\n installedFrom,\n sentry,\n allowAdapterInstall,\n allowAdapterReadme,\n allowAdapterDelete,\n allowAdapterUpdate,\n allowAdapterRating\n}) => {\n const [openCollapse, setCollapse] = useState(false);\n const [focused, setFocused] = useState(false);\n\n return <Card className={clsx(classes.root, hidden ? classes.hidden : '')}>\n {(openCollapse || focused) && <div className={clsx(classes.collapse, !openCollapse ? classes.collapseOff : '')}>\n <CardContent className={classes.cardContent}>\n <div className={classes.cardContentDiv}>\n <div className={classes.close} onClick={() => setCollapse((bool) => !bool)} />\n </div>\n <Typography gutterBottom component={'span'} variant={'body2'} className={classes.description}>\n {description}\n </Typography>\n </CardContent>\n <div className={classes.footerBlock}>\n <IsVisible value={allowAdapterInstall}>\n <Tooltip title={t('Add instance')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!rightOs ? classes.hidden : ''}\n onClick={rightOs ? onAddInstance : null}\n >\n <AddIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n <div className={classes.cardContentFlex}>\n <IsVisible value={allowAdapterReadme}>\n <Tooltip title={t('Readme')}>\n <IconButton\n size=\"small\"\n onClick={onInfo}\n >\n <HelpIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {expertMode &&\n <Tooltip title={t('Upload')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={onUpload}\n >\n <PublishIcon />\n </IconButton>\n </Tooltip>\n }\n <IsVisible value={allowAdapterDelete}>\n <Tooltip title={t('Delete adapter')}>\n <IconButton\n size=\"small\"\n disabled={commandRunning}\n className={!installedVersion ? classes.hidden : ''}\n onClick={onDeletion}\n >\n <DeleteForeverIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {expertMode && allowAdapterUpdate !== false &&\n <Tooltip title={t('Install a specific version')}>\n <IconButton\n disabled={commandRunning}\n size=\"small\"\n className={!installedVersion ? classes.hidden : ''}\n onClick={openInstallVersionDialog}\n >\n <AddToPhotosIcon />\n </IconButton>\n </Tooltip>\n }\n {rebuild && expertMode &&\n <Tooltip title={t('Rebuild')}>\n <IconButton\n disabled={commandRunning}\n size=\"small\"\n className={!installedVersion ? classes.hidden : ''}\n onClick={onRebuild}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n }\n </div>\n </div>\n </div>}\n <div className={clsx(classes.imageBlock,\n installedVersion ? classes.installed : '',\n installedVersion && installedVersion !== version && updateAvailable ? classes.update : '')}\n >\n <CardMedia\n className={classes.img}\n component={MyImage}\n src={image || 'img/no-image.png'}\n image={image || 'img/no-image.png'}\n />\n <div className={clsx(classes.adapter, (stat || versionDate) && classes.adapterWithAgo)}>{adapter}</div>\n <div className={classes.versionDate}>{stat || versionDate}</div>\n {!stat && !versionDate && allowAdapterRating !== false ? <div\n onClick={onSetRating ? () => onSetRating() : undefined}\n className={clsx(classes.rating, onSetRating && classes.ratingSet)}\n title={rating?.title}\n >\n <Rating\n name={adapter}\n precision={0.5}\n size=\"small\"\n readOnly\n value={rating?.rating ? rating.rating.r : 0}\n />\n </div> : null}\n <Tooltip title={t('Info')}>\n <Fab\n onMouseOut={() => setFocused(false)}\n onMouseOver={() => setFocused(true)}\n onClick={() => setCollapse((bool) => !bool)} className={classes.fab} color=\"primary\" aria-label=\"add\">\n <MoreVertIcon />\n </Fab>\n </Tooltip>\n </div>\n <CardContent className={classes.cardContent2}>\n <Typography gutterBottom variant=\"h5\" component=\"h5\">{name}</Typography>\n <div className={classes.cardContentFlex}>\n {!isCategory &&\n (connectionType === 'cloud' ?\n <Tooltip title={t('Adapter requires the specific cloud access for these devices/service')}><CloudIcon /></Tooltip> :\n connectionType === 'local' ?\n <Tooltip title={t('Adapter does not use the cloud for these devices/service')}><CloudOffIcon /></Tooltip> : '')\n }\n {\n dataSource && <div className={classes.marginLeft5}>{(\n dataSource === 'poll' ?\n <Tooltip title={t('The device or service will be periodically asked')}>\n <ArrowUpwardIcon className={classes.classPoll} />\n </Tooltip> :\n dataSource === 'push' ?\n <Tooltip title={t('The device or service delivers the new state actively')}>\n <ArrowDownwardIcon className={classes.classPush} />\n </Tooltip> :\n dataSource === 'assumption' ?\n <Tooltip title={t('Adapter cannot request the exactly device status and the status will be guessed on the last sent command')}>\n <RemoveIcon className={classes.classAssumption} /></Tooltip> : null\n )}</div>\n }\n {sentry && <div className={classes.marginLeft5}>\n <Tooltip title=\"sentry\">\n <CardMedia\n className={classes.sentry}\n component=\"img\"\n image={sentryIcon}\n />\n </Tooltip>\n </div>}\n </div>\n <div className={classes.cardMargin10}>\n {!!installedCount && <Typography component={'span'} className={classes.cardContentFlexBetween}>\n <div>{t('Installed instances')}:</div>\n <div>{installedCount}</div>\n </Typography>}\n <IsVisible value={allowAdapterUpdate}>\n <Typography component={'span'} className={classes.availableVersion}>\n <div>{t('Available version:')}</div>\n <div className={clsx(updateAvailable && classes.greenText, classes.curdContentFlexCenter)} >\n {!commandRunning && updateAvailable ?\n\n <Tooltip title={t('Update')}>\n <div onClick={onUpdate} className={classes.buttonUpdate}><IconButton\n className={classes.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>{version}</div>\n </Tooltip> :\n version\n }</div>\n </Typography>\n </IsVisible>\n {installedVersion && <Typography component={'span'} className={classes.cardContentFlexBetween}>\n <div>{t('Installed version')}:</div>\n <div className={classes.cardContentFlex}>{installedFrom && !installedFrom.startsWith(`iobroker.${name}@`) &&\n <Tooltip title={t('Non-NPM-Version: ') + installedFrom}>\n <GitHubIcon\n fontSize=\"small\"\n className={classes.versionWarn}\n />\n </Tooltip>\n }{installedVersion}\n </div>\n </Typography>}\n </div>\n </CardContent>\n </Card>;\n}\n\nAdapterTile.propTypes = {\n commandRunning: PropTypes.bool,\n rating: PropTypes.object,\n onSetRating: PropTypes.func,\n};\n\nexport default withStyles(styles)(AdapterTile);","import React, { useCallback, useState } from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport { AppBar, Box, Checkbox, FormControlLabel, IconButton, InputAdornment, Tab, Tabs, TextField, Autocomplete } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\n\nimport npmIcon from '../assets/npm.png';\nimport { FaGithub as GithubIcon } from 'react-icons/fa';\nimport UrlIcon from '@mui/icons-material/Language';\nimport SmsIcon from '@mui/icons-material/Sms';\nimport CloseIcon from '@mui/icons-material/Close';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Icon from '@iobroker/adapter-react-v5/Components/Icon';\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`full-width-tabpanel-${index}`}\n aria-labelledby={`full-width-tab-${index}`}\n {...other}\n >\n {value === index && <Box style={{ paddingTop: 10 }} p={3}>\n <Typography component=\"div\">{children}</Typography>\n </Box>}\n </div>;\n}\n\nTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nfunction a11yProps(index) {\n return {\n id: `full-width-tab-${index}`,\n 'aria-controls': `full-width-tabpanel-${index}`,\n };\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: '100%'\n },\n paper: {\n maxWidth: 1000\n },\n tabPaper: {\n padding: theme.spacing(2)\n },\n title: {\n marginTop: 10,\n padding: theme.spacing(1),\n marginLeft: theme.spacing(1),\n fontSize: 18,\n color: theme.palette.primary.main\n },\n warningText: {\n color: '#f53939'\n },\n noteText: {\n marginTop: theme.spacing(2),\n },\n errorTextNoGit: {\n fontSize: 13,\n color: '#ff1616'\n },\n listIcon: {\n width: 24,\n height: 24,\n },\n listIconWithMargin: {\n width: 24,\n height: 24,\n marginRight: 8,\n },\n tabSelected: {\n color: theme.palette.mode === 'dark' ? theme.palette.secondary.contrastText : '#FFFFFF !important',\n },\n}));\n\n// some older browsers do not have flat\nif (!Array.prototype.flat) {\n // eslint-disable-next-line\n Object.defineProperty(Array.prototype, 'flat', {\n configurable: true,\n value: function flat() {\n const depth = isNaN(arguments[0]) ? 1 : Number(arguments[0]);\n\n return depth ? Array.prototype.reduce.call(this, function (acc, cur) {\n if (Array.isArray(cur)) {\n acc.push.apply(acc, flat.call(cur, depth - 1));\n } else {\n acc.push(cur);\n }\n\n return acc;\n }, []) : Array.prototype.slice.call(this);\n },\n writable: true\n });\n}\n\nconst GitHubInstallDialog = ({ categories, repository, onClose, open, installFromUrl, t }) => {\n t = t || I18n.t;\n\n const classes = useStyles();\n const [autocompleteValue, setAutocompleteValue] = useState(null);\n const [debug, setDebug] = useState((window._localStorage || window.localStorage).getItem('App.gitDebug') === 'true');\n const [url, setUrl] = useState('');\n const [currentTab, setCurrentTab] = useState((window._localStorage || window.localStorage).getItem('App.gitTab') || 'npm');\n\n // eslint-disable-next-line array-callback-return\n const list = useCallback(() =>\n categories\n .map(category => category.adapters)\n .sort()\n .flat()\n .map(el => {\n const adapter = repository[el];\n if (!adapter?.controller) {\n const parts = (adapter.extIcon || adapter.meta || adapter.readme || '').toString().split('/');\n return {\n value: el + '/' + parts[3],\n name: `${adapter?.name} [${parts[3]}]`,\n icon: adapter.extIcon,\n nogit: !!adapter.nogit\n };\n } else {\n return null;\n }\n })\n .filter(it => it)\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0),\n [categories, repository]);\n\n const closeInit = () => {\n setAutocompleteValue(null);\n setUrl('');\n };\n\n const _list = currentTab !== 'URL' ? list() : null;\n\n return <Dialog\n onClose={onClose}\n open={open}\n classes={{ paper: classes.paper }}\n >\n <DialogContent dividers>\n <div className={classes.root}>\n <AppBar position=\"static\" color=\"default\">\n <Tabs\n value={currentTab}\n onChange={(e, newTab) => {\n (window._localStorage || window.localStorage).setItem('App.gitTab', newTab);\n setCurrentTab(newTab);\n }}\n variant=\"fullWidth\"\n indicatorColor=\"secondary\"\n >\n <Tab\n label={t('From npm')}\n wrapped\n classes={{ selected: classes.tabSelected }}\n icon={<img src={npmIcon} alt=\"npm\" width={24} height={24} />}\n {...a11yProps(0)}\n value=\"npm\"\n />\n <Tab\n label={t('From github')}\n wrapped\n classes={{ selected: classes.tabSelected }}\n icon={<GithubIcon style={{ width: 24, height: 24 }} width={24} height={24} />}\n {...a11yProps(0)}\n value=\"GitHub\"\n />\n <Tab\n label={t('Custom')}\n wrapped\n classes={{ selected: classes.tabSelected }}\n icon={<UrlIcon width={24} height={24} />}\n {...a11yProps(1)}\n value=\"URL\"\n />\n </Tabs>\n </AppBar>\n <div className={classes.title}>{t('Install or update the adapter from %s', currentTab || 'npm')}\n </div>\n {currentTab === 'npm' ? <Paper className={classes.tabPaper}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={debug}\n onChange={e => {\n (window._localStorage || window.localStorage).setItem('App.gitDebug', e.target.checked ? 'true' : 'false');\n setDebug(e.target.checked);\n }} />}\n label={t('Debug outputs')}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end' }}>\n <SmsIcon style={{ marginRight: 10 }} />\n <Autocomplete\n fullWidth\n value={autocompleteValue}\n onChange={(_, newValue) => setAutocompleteValue(newValue)}\n options={_list}\n getOptionLabel={option => option.name}\n renderInput={params => {\n const _params = {...params};\n _params.InputProps = _params.InputProps || {};\n _params.InputProps.startAdornment = <InputAdornment position=\"start\">\n <Icon src={autocompleteValue?.icon || ''} className={classes.listIcon}/>\n </InputAdornment>;\n\n return <TextField\n variant=\"standard\"\n {...params}\n label={I18n.t('Select adapter')}\n />;\n }}\n renderOption={(props, option) => <Box component=\"li\" sx={{ '& > img': { mr: 2, flexShrink: 0 } }} {...props}>\n <Icon src={option.icon || ''} className={classes.listIconWithMargin}/>\n {option.name}\n </Box>}\n />\n </div>\n <div style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40\n }}>{t('Warning!')}</div>\n <div className={classes.warningText}>\n {t('npm_warning', 'NPM', 'NPM')}\n </div>\n <div className={classes.noteText} >\n {t('github_note')}\n </div>\n </Paper> : null}\n {currentTab === 'GitHub' ? <Paper className={classes.tabPaper}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={debug}\n onChange={(e) => setDebug(e.target.checked)} />}\n label={t('Debug outputs')}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end' }}>\n <SmsIcon style={{ marginRight: 10 }} />\n <Autocomplete\n fullWidth\n value={autocompleteValue}\n getOptionDisabled={option => option.nogit}\n renderOption={(props, option) => <Box component=\"li\" sx={{ '& > img': { mr: 2, flexShrink: 0 } }} {...props}>\n <Icon src={option.icon || ''} className={classes.listIconWithMargin}/>\n {option.name}\n {option.nogit && <div className={classes.errorTextNoGit}>{I18n.t('This adapter cannot be installed from git as must be built before installation.')}</div>}\n </Box>}\n onChange={(_, newValue) => setAutocompleteValue(newValue)}\n options={_list}\n getOptionLabel={option => option.name}\n renderInput={params => {\n const _params = {...params};\n _params.InputProps = _params.InputProps || {};\n _params.InputProps.startAdornment = <InputAdornment position=\"start\">\n <Icon src={autocompleteValue?.icon || ''} className={classes.listIconWithMargin}/>\n </InputAdornment>;\n\n return <TextField\n variant=\"standard\"\n {...params}\n label={I18n.t('Select adapter')}\n />;\n }}\n />\n </div>\n <div style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40\n }}>{t('Warning!')}</div>\n <div className={classes.warningText}>\n {t('github_warning', 'GitHub', 'GitHub')}\n </div>\n <div className={classes.noteText} >\n {t('github_note')}\n </div>\n </Paper> : null}\n {currentTab === 'URL' ? <Paper className={classes.tabPaper}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TextField\n variant=\"standard\"\n fullWidth\n label={t('URL')}\n helperText={t('URL or file path')}\n value={url}\n onChange={event => setUrl(event.target.value)}\n InputProps={{\n endAdornment: url ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setUrl('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null\n }}\n />\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center'\n }}>\n <FormControlLabel\n control={\n <Checkbox\n checked={debug}\n onChange={(e) => setDebug(e.target.checked)} />}\n label={t('Debug outputs')}\n />\n </div>\n <div style={{\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: 40\n }}>{t('Warning!')}</div>\n <div className={classes.warningText}>\n {t('github_warning', 'URL', 'URL')}\n </div>\n <div className={classes.noteText} >\n {t('github_note')}\n </div>\n </Paper> : null}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={((currentTab === 'GitHub' || currentTab === 'npm') && !autocompleteValue) || (currentTab === 'URL' && !url)}\n autoFocus\n onClick={() => {\n if (currentTab === 'GitHub') {\n const parts = (autocompleteValue?.value || '').split('/');\n //const _url = 'https://github.com/' + parts[1] + '/ioBroker.' + parts[0] + '/tarball/master';\n const _url = `${parts[1]}/ioBroker.${parts[0]}`;\n installFromUrl(_url, debug, true);\n } else if (currentTab === 'URL') {\n if (!url.includes('.')) {\n installFromUrl('iobroker.' + url, debug, true);\n } else {\n installFromUrl(url, debug, true);\n }\n } else if (currentTab === 'npm') {\n const parts = (autocompleteValue?.value || '').split('/');\n if (!parts[0].includes('.')) {\n installFromUrl('iobroker.' + parts[0], debug, true);\n } else {\n installFromUrl(parts[0], debug, true);\n }\n }\n onClose();\n closeInit();\n }}\n color=\"primary\"\n startIcon={<CheckIcon/>}\n >\n {t('Install')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => {\n onClose();\n closeInit();\n }}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nexport default GitHubInstallDialog;","import React, {Component} from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\nimport clsx from 'clsx';\n\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ListItemText from '@mui/material/ListItemText';\nimport Checkbox from '@mui/material/Checkbox';\nimport {\n Avatar, Button,\n CircularProgress,\n Dialog, DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n Typography\n} from '@mui/material';\n\nimport AdapterUpdateDialog from '../../dialogs/AdapterUpdateDialog';\nimport CloseIcon from '@mui/icons-material/Close';\nimport LanguageIcon from '@mui/icons-material/Language';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport moment from \"moment\";\n\nconst styles = theme => ({\n smallAvatar: {\n width: theme.spacing(3),\n height: theme.spacing(3)\n },\n listItem: {\n marginBottom: 2,\n background: theme.palette.background\n },\n toVersion: {\n color: theme.palette.mode === 'dark' ? '#00dc00' : '#008100',\n fontWeight: 'bold',\n },\n updateDone: {\n background: '#5ef05e80',\n opacity: 0.7,\n },\n '@media screen and (max-width: 400px)': {\n minWidth:{\n minWidth:32\n },\n listItem:{\n paddingLeft:2\n }\n },\n wrapperButton: {\n },\n typography: {\n paddingRight: 30\n },\n versions: {\n minWidth: 110,\n display: 'inline-block',\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n languageButton: {\n position: 'absolute',\n right: 52 + parseInt(theme.spacing(1), 10),\n top: theme.spacing(1)\n },\n languageButtonActive: {\n color: theme.palette.primary.main\n },\n versionHeader: {\n background: '#4dabf5',\n borderRadius: 3,\n paddingLeft: 10,\n fontWeight: 'bold',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n});\n\nclass AdaptersUpdater extends Component {\n constructor(props) {\n super(props);\n\n this.updateAvailable = this.detectUpdates();\n this.initialVersions = {};\n this.updateAvailable.forEach(adapter => this.initialVersions[adapter] = this.props.installed[adapter].version);\n\n this.state = {\n current: this.props.current,\n showNews: null,\n };\n\n this.currentRef = React.createRef();\n\n this.props.onUpdateSelected([...this.updateAvailable], this.updateAvailable);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps, nextContext) {\n if (nextProps.current !== this.state.current) {\n this.setState({current: nextProps.current});\n setTimeout(() =>\n this.currentRef.current?.scrollIntoView(), 200);\n }\n }\n\n static isUpdateAvailable(oldVersion, newVersion) {\n try {\n return semver.gt(newVersion, oldVersion) === true;\n } catch (e) {\n console.warn(`Cannot compare \"${newVersion}\" and \"${oldVersion}\"`);\n return false;\n }\n }\n\n detectUpdates() {\n const updateAvailable = [];\n\n Object.keys(this.props.repository).forEach(adapter => {\n const _installed = this.props.installed[adapter];\n // ignore js-controller in this dialog\n if (adapter === 'js-controller' || adapter === 'admin') {\n return;\n }\n if (_installed &&\n _installed.ignoreVersion !== this.props.repository[adapter].version &&\n AdaptersUpdater.isUpdateAvailable(_installed.version, this.props.repository[adapter].version)\n ) {\n if (!AdapterUpdateDialog.checkCondition(this.props.repository[adapter].messages, _installed.version, this.props.repository[adapter].version)) {\n updateAvailable.push(adapter);\n }\n }\n });\n\n updateAvailable.sort();\n\n return updateAvailable;\n }\n\n getNews(adapter) {\n const adapterObj = this.props.repository[adapter];\n const installed = this.props.installed[adapter];\n const news = [];\n\n if (installed && adapterObj && adapterObj.news) {\n Object.keys(adapterObj.news).forEach(version => {\n try {\n if (semver.gt(version, installed.version)) {\n news.push({\n version,\n news: this.props.noTranslation ? adapterObj.news[version].en : (adapterObj.news[version][this.props.lang] || adapterObj.news[version].en)\n });\n }\n } catch (e) {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed.version}\"`);\n }\n });\n }\n\n return news;\n }\n\n renderOneAdapter(adapter) {\n const checked = this.props.selected.includes(adapter);\n if ((this.props.finished || this.props.inProcess) && !checked) {\n return null;\n }\n const image = '.' + this.props.installed[adapter].localIcon;\n\n return <React.Fragment key={adapter}>\n <ListItem\n key={adapter}\n dense\n classes={{root: clsx(this.props.classes.listItem, this.props.updated.includes(adapter) && this.props.classes.updateDone)}}\n ref={this.state.current === adapter && this.currentRef}\n >\n <ListItemIcon className={this.props.classes.minWidth}>\n <Avatar\n variant=\"square\"\n alt={adapter}\n src={image}\n className={this.props.classes.smallAvatar}\n />\n </ListItemIcon>\n <ListItemText\n primary={adapter}\n title={this.getNews(adapter).map(item => `${item.version}: ${item.news}`).join('\\n')}\n secondary={<span>\n <div className={this.props.classes.versions}>\n {this.initialVersions[adapter]} → <span className={this.props.classes.toVersion}>{this.props.repository[adapter].version}</span>\n </div>\n <IconButton\n title={I18n.t('Show change log')}\n onClick={() =>\n this.setState({ showNews: {\n adapter,\n version: this.props.repository[adapter].version,\n fromVersion: this.initialVersions[adapter]\n }})}\n size=\"small\"\n >\n <InfoIcon />\n </IconButton>\n </span>}\n />\n {!this.props.finished && !this.props.inProcess && <ListItemSecondaryAction>\n <Checkbox\n edge=\"end\"\n checked={checked}\n tabIndex={-1}\n disableRipple\n disabled={this.props.inProcess}\n onClick={() => {\n const selected = [...this.props.selected];\n const pos = selected.indexOf(adapter);\n if (pos !== -1) {\n selected.splice(pos, 1);\n } else {\n selected.push(adapter);\n selected.sort();\n }\n this.props.onUpdateSelected(selected);\n }}\n />\n </ListItemSecondaryAction>}\n {this.state.current === adapter && !this.props.stoppedOnError && !this.props.finished && <ListItemSecondaryAction>\n <CircularProgress/>\n </ListItemSecondaryAction>}\n </ListItem>\n\n </React.Fragment>;\n }\n\n getReactNews(adapter) {\n const adapterObj = this.props.repository[adapter];\n const installed = this.props.installed[adapter];\n const result = [];\n\n if (installed && adapterObj && adapterObj.news) {\n Object.keys(adapterObj.news).forEach(version => {\n try {\n if (semver.gt(version, installed.version) && adapterObj.news[version]) {\n const newsText = this.props.noTranslation ?\n (adapterObj.news[version].en || '') :\n (adapterObj.news[version][this.props.lang] || adapterObj.news[version].en || '');\n\n const news = newsText.split('\\n')\n .map(line => line\n .trim()\n .replace(/^\\*\\s?/, '')\n .replace(/<!--[^>]*->/, '')\n .replace(/<! -[^>]*->/, '')\n .trim()\n )\n .filter(line => !!line);\n\n result.push(<Grid item key={version}>\n <Typography className={this.props.classes.versionHeader}>\n {version}{this.props.adapterObject?.version === version ?\n <span className={this.props.classes.versionTime}>({moment(this.props.adapterObject.versionDate).fromNow()})</span> : ''}\n </Typography>\n {news.map((value, index) => {\n return <Typography key={`${version}-${index}`} component=\"div\" variant=\"body2\">\n { `• ${this.props.noTranslation ? adapterObj.news[version].en : (adapterObj.news[version][this.props.lang] || adapterObj.news[version].en)}`}\n </Typography>;\n })}\n </Grid>);\n }\n } catch (e) {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed.version}\"`);\n }\n });\n }\n\n return result;\n }\n\n renderShowNews() {\n if (this.state.showNews) {\n const news = this.getReactNews(this.state.showNews.adapter);\n\n return <Dialog\n onClose={() => this.setState({ showNews: null })}\n open={true}\n >\n <DialogTitle>\n <Typography component=\"h2\" variant=\"h6\" classes={{ root: this.props.classes.typography }}>\n <div style={{ width: 'calc(100% - 60px)'}}>{I18n.t('Update \"%s\" to v%s', this.state.showNews.adapter, this.state.showNews.version)}</div>\n <IconButton size=\"large\" className={this.props.classes.closeButton} onClick={() => this.setState({ showNews: null })}>\n <CloseIcon />\n </IconButton>\n {I18n.getLanguage() !== 'en' && this.props.toggleTranslation ? <IconButton\n size=\"large\"\n className={Utils.clsx(this.props.classes.languageButton, this.props.noTranslation && this.props.classes.languageButtonActive)}\n onClick={this.props.toggleTranslation}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton> : null}\n </Typography>\n </DialogTitle>\n <DialogContent dividers>\n <Grid\n container\n direction=\"column\"\n spacing={2}\n wrap=\"nowrap\"\n >\n {news.length ? <Grid item>\n <Typography variant=\"h6\" gutterBottom>{I18n.t('Change log')}</Typography>\n <Grid\n container\n spacing={2}\n direction=\"column\"\n wrap=\"nowrap\"\n >\n {news}\n </Grid>\n </Grid> : I18n.t('No change log available')}\n </Grid>\n </DialogContent>\n <DialogActions className={this.props.classes.wrapperButton}>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showNews: null })}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n render() {\n return <List className={this.props.classes.root}>\n {this.updateAvailable.map(adapter => this.renderOneAdapter(adapter))}\n {this.renderShowNews()}\n </List>;\n }\n}\n\nAdaptersUpdater.propTypes = {\n inProcess: PropTypes.bool.isRequired,\n lang: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired,\n stoppedOnError: PropTypes.bool.isRequired,\n socket: PropTypes.object.isRequired,\n repository: PropTypes.object.isRequired,\n installed: PropTypes.object.isRequired,\n onUpdateSelected: PropTypes.func.isRequired,\n selected: PropTypes.array.isRequired,\n current: PropTypes.string.isRequired,\n updated: PropTypes.array.isRequired,\n finished: PropTypes.bool.isRequired,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n}\n\nexport default withStyles(styles)(AdaptersUpdater);\n","import React, { Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Checkbox from '@mui/material/Checkbox';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport Grid from '@mui/material/Grid';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Toolbar from '@mui/material/Toolbar';\nimport {IconButton, Tooltip} from '@mui/material';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport AdaptersUpdater from '../components/Adapters/AdaptersUpdater';\nimport Command from '../components/Command';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\nimport Utils from \"@iobroker/adapter-react-v5/Components/Utils\";\nimport LanguageIcon from \"@mui/icons-material/Language\";\n\nconst styles = theme => {\n return ({\n dialogRoot: {\n height: 'calc(100% - 64px)',\n },\n wrapperHead: {\n justifyContent: 'space-between',\n display: 'flex'\n },\n checkbox: {\n marginRight: 10\n },\n appBar: {\n flexWrap: 'wrap',\n position: 'sticky',\n bottom: -10,\n paddingLeft: theme.spacing(1),\n background: theme.name === 'blue' ? '#5d6467' : (theme.name === 'dark' ? '#5b5b5b' : '#FFF'),\n },\n container:{\n overflow: 'hidden',\n height: 'calc(100% - 48px)'\n },\n '@media screen and (max-width: 602px)': {\n container: {\n height: 'auto'\n }\n },\n '@media screen and (max-width: 500px)': {\n content: {\n padding: 8\n }\n },\n languageButton: {\n position: 'absolute',\n right: 73,\n top: 11\n },\n languageButtonActive: {\n color: theme.palette.primary.main\n },\n })\n};\n\nclass AdaptersUpdaterDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n selected: [],\n inProcess: false,\n finished: false,\n current: '',\n updated: [],\n stoppedOnError: false,\n debug: (window._localStorage || window.localStorage).getItem('AdaptersUpdaterDialog.debug') === 'true',\n stopOnError: (window._localStorage || window.localStorage).getItem('AdaptersUpdaterDialog.stopOnError') !== 'false',\n closeOnFinished: (window._localStorage || window.localStorage).getItem('AdaptersUpdaterDialog.closeOnFinished') === 'true',\n };\n\n this.updateAvailable = [];\n }\n\n updateAdapter(adapter, version, cb) {\n this.onAdapterFinished = cb;\n this.setState({ current: adapter, currentVersion: version });\n }\n\n onStartUpdate() {\n this.setState({ inProcess: true }, () => {\n this.props.onSetCommandRunning(true);\n this.processList = [...this.state.selected];\n this.processList = this.processList.map(adapter => ({adapter, version: this.props.repository[adapter]?.version}));\n\n this.updateAdapters(() => {\n this.setState({ inProcess: false, finished: true }, () => {\n this.props.onSetCommandRunning(false);\n if (this.state.closeOnFinished) {\n this.props.onClose(!!this.state.updated.length);\n } else {\n // update adapters and so on\n }\n });\n });\n });\n }\n\n updateAdapters(cb) {\n if (!this.processList || !this.processList.length) {\n cb && cb();\n } else {\n const {adapter, version} = this.processList.shift();\n\n this.updateAdapter(adapter, version, () => {\n const updated = [...this.state.updated];\n updated.push(adapter);\n this.setState({ updated }, () =>\n setTimeout(() => this.updateAdapters(cb), 200));\n });\n }\n }\n\n render() {\n return <Dialog\n open={true}\n maxWidth=\"lg\"\n fullWidth={!!this.state.current}\n onClose={() => this.props.onClose(!!this.state.updated.length)}\n aria-labelledby=\"update-dialog-title\"\n aria-describedby=\"update-dialog-description\"\n classes={{ paper: this.props.classes.dialogRoot }}\n scroll=\"paper\"\n >\n <DialogTitle id=\"update-dialog-title\">\n <div className={this.props.classes.wrapperHead}>\n {this.props.t('Update %s adapter(s)', this.state.selected.length)}\n {!this.state.finished && !this.state.inProcess && <Tooltip title={this.props.t('Select/Unselect all')}><Checkbox\n checked={this.state.selected.length === this.updateAvailable.length}\n className={this.props.classes.checkbox}\n tabIndex={-1}\n indeterminate={this.state.selected.length !== this.updateAvailable.length && this.state.selected.length !== 0}\n disableRipple\n onClick={() => {\n let selected = [];\n if (this.state.selected.length !== this.updateAvailable.length) {\n selected = [...this.updateAvailable];\n }\n this.setState({ selected });\n }}\n /></Tooltip>}\n {I18n.getLanguage() !== 'en' && this.props.toggleTranslation ? <IconButton\n size=\"large\"\n className={Utils.clsx(this.props.classes.languageButton, this.props.noTranslation && this.props.classes.languageButtonActive)}\n onClick={() => this.props.toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton> : null}\n </div>\n </DialogTitle>\n <DialogContent classes={{ root: this.props.classes.content }} style={{ height: '100%' }}>\n <Grid container direction=\"row\" className={this.props.classes.container}>\n <Grid item style={{ height: '100%', overflow: 'hidden', width: this.state.current ? 250 : '100%' }}>\n <div style={{ height: '100%', overflow: 'auto' }}>\n <AdaptersUpdater\n t={this.props.t}\n finished={this.state.finished}\n inProcess={this.state.inProcess}\n selected={this.state.selected}\n current={this.state.current}\n stoppedOnError={this.state.stoppedOnError}\n updated={this.state.updated}\n lang={this.props.lang}\n socket={this.props.socket}\n installed={this.props.installed}\n repository={this.props.repository}\n noTranslation={this.props.noTranslation}\n toggleTranslation={this.props.toggleTranslation}\n onUpdateSelected={(selected, updateAvailable) => {\n if (updateAvailable) {\n this.updateAvailable = updateAvailable;\n }\n this.setState({ selected });\n }}\n />\n </div>\n </Grid>\n {!!this.state.current && <Grid item style={{ height: '100%', overflow: 'hidden', width: 'calc(100% - 260px)', minWidth: 240 }}>\n <Command\n noSpacing\n key={this.state.current}\n ready\n host={this.props.currentHost}\n socket={this.props.socket}\n t={this.props.t}\n cmd={`upgrade ${this.state.current}@${this.state.currentVersion}${this.state.debug ? ' --debug' : ''}`}\n onFinished={() => this.onAdapterFinished()}\n errorFunc={() => {\n if (this.state.stopOnError) {\n this.setState({ stoppedOnError: true, finished: true });\n this.onAdapterFinished = null;\n this.props.onSetCommandRunning(false);\n } else {\n this.onAdapterFinished();\n }\n }}\n />\n </Grid>}\n </Grid>\n <Toolbar variant=\"dense\" disableGutters className={this.props.classes.appBar}>\n <FormControlLabel\n control={<Checkbox\n disabled={this.state.finished}\n checked={this.state.stopOnError}\n onChange={() => {\n (window._localStorage || window.localStorage).setItem('AdaptersUpdaterDialog.stopOnError', this.state.stopOnError ? 'false' : 'true');\n this.setState({ stopOnError: !this.state.stopOnError });\n }}\n />}\n label={this.props.t('Stop on error')}\n />\n <FormControlLabel\n control={<Checkbox\n disabled={this.state.finished}\n checked={this.state.closeOnFinished}\n onChange={() => {\n (window._localStorage || window.localStorage).setItem('AdaptersUpdaterDialog.closeOnFinished', this.state.closeOnFinished ? 'false' : 'true');\n this.setState({ closeOnFinished: !this.state.closeOnFinished });\n }} />}\n label={this.props.t('Close on finished')}\n />\n <FormControlLabel\n control={<Checkbox\n disabled={this.state.finished || this.state.inProcess}\n checked={this.state.debug}\n onChange={() => {\n (window._localStorage || window.localStorage).setItem('AdaptersUpdaterDialog.debug', this.state.debug ? 'false' : 'true');\n this.setState({ debug: !this.state.debug });\n }} />}\n label={this.props.t('Debug info')}\n />\n </Toolbar>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.stoppedOnError || this.state.inProcess || this.state.finished || !this.state.selected.length}\n onClick={() => this.onStartUpdate()}\n color=\"primary\"\n autoFocus\n startIcon={<CheckIcon/>}\n >\n {this.props.t('Update')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose(!!this.state.updated.length)}\n disabled={this.state.inProcess}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nAdaptersUpdaterDialog.propTypes = {\n currentHost: PropTypes.string.isRequired,\n lang: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired,\n socket: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n repository: PropTypes.object.isRequired,\n installed: PropTypes.object.isRequired,\n onSetCommandRunning: PropTypes.func.isRequired,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n}\n\nexport default withStyles(styles)(AdaptersUpdaterDialog);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Rating from '@mui/material/Rating';\nimport { Button, TextField } from '@mui/material';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\n\nimport VoteIcon from '@mui/icons-material/HowToVote';\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst styles = theme => ({\n rating: {\n marginBottom: 20,\n },\n listRating: {\n marginRight: theme.spacing(1),\n },\n listTime: {\n opacity: 0.5,\n fontStyle: 'italic',\n },\n list: {\n //maxHeight: 200,\n },\n listOwn: {\n backgroundColor: theme.name === 'colored' || theme.name === 'light' ? '#16516e2e' : theme.palette.secondary.dark\n },\n listTitle: {\n backgroundColor: theme.palette.primary.dark,\n paddingTop: 4,\n paddingBottom: 4,\n marginBottom: 4,\n color: '#ffffff',\n textAlign: 'center'\n },\n languageFilter: {\n width: 300,\n },\n ratingTextControl: {\n width: 'calc(100% - 138px)',\n marginRight: 8,\n },\n ratingLanguageControl: {\n width: 130,\n },\n noComments: {\n width: '100%',\n textAlign: 'center',\n marginTop: theme.spacing(2)\n },\n commentCount: {\n marginTop: 2,\n marginLeft: theme.spacing(1),\n opacity: 0.8,\n fontSize: 10,\n float: 'right'\n }\n});\n\nconst LANGUAGES = [\n {\n id: 'en',\n title: 'English'\n },\n {\n id: 'de',\n title: 'Deutsch'\n },\n {\n id: 'ru',\n title: 'русский'\n },\n {\n id: 'pt',\n title: 'Portugues'\n },\n {\n id: 'nl',\n title: 'Nederlands'\n },\n {\n id: 'fr',\n title: 'français'\n },\n {\n id: 'it',\n title: 'Italiano'\n },\n {\n id: 'es',\n title: 'Espanol'\n },\n {\n id: 'pl',\n title: 'Polski'\n },\n {\n id: 'zh-ch',\n title: '简体中文'\n }\n];\n\nclass RatingDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n ratingNumber: 0,\n ratingComment: '',\n votings: null,\n ratingLang: this.props.lang,\n filterLang: (window._localStorage || window.localStorage).getItem('app.commentLang') || this.props.lang,\n commentsByLanguage: {},\n };\n }\n\n componentDidMount() {\n fetch('https://rating.iobroker.net/adapter/' + this.props.adapter + '?uuid=' + this.props.uuid)\n .then(res => res.json())\n .then(votings => {\n votings = votings || {};\n votings.rating = votings.rating || {};\n const versions = Object.keys(votings.rating);\n versions.sort((a, b) => votings.rating[a].ts > votings.rating[b].ts ? -1 : (votings.rating[a].ts < votings.rating[b].ts ? 1 : 0));\n const commentsByLanguage = {};\n\n if (votings.comments) {\n votings.comments.sort((a, b) => a.ts > b.ts ? -1 : (a.ts < b.ts ? 1 : 0));\n\n votings.comments.forEach(comment => {\n commentsByLanguage[comment.lang] = commentsByLanguage[comment.lang] || 0;\n commentsByLanguage[comment.lang]++;\n });\n }\n\n if (versions.length) {\n const item = votings.rating[versions[0]];\n this.setState({ votings, ratingNumber: item ? item.r : 0, commentsByLanguage});\n } else {\n this.setState({ votings, commentsByLanguage });\n }\n });\n }\n\n setAdapterRating(adapter, version, rating, comment, lang) {\n return fetch('https://rating.iobroker.net/vote', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n redirect: 'follow',\n body: JSON.stringify({ uuid: this.props.uuid, adapter, version, rating, comment, lang})\n })\n .then(res => res.json())\n .then(update => {\n window.alert(this.props.t('Vote:') + ' ' + adapter + '@' + version + '=' + rating);\n const repository = JSON.parse(JSON.stringify(this.props.repository));\n repository[adapter].rating = update;\n return repository;\n })\n .catch(e => {\n window.alert('Cannot vote: ' + e);\n return null;\n });\n }\n\n renderComments() {\n if (this.state.votings?.comments && this.state.votings.comments.length) {\n let found = this.state.votings.comments.find(comment =>\n !(this.state.filterLang && this.state.filterLang !== '_' && comment.lang !== this.state.filterLang));\n\n return <div style={{ width: '100%', textAlign: 'left'}}>\n <h3 className={this.props.classes.listTitle} >{this.props.t('Comments')}</h3>\n <FormControl variant=\"standard\" className={this.props.classes.languageFilter}>\n <InputLabel>{this.props.t('Show comments in language')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.filterLang}\n onChange={e => {\n (window._localStorage || window.localStorage).setItem('app.commentLang', e.target.value);\n this.setState({filterLang: e.target.value})\n }}\n >\n <MenuItem value={'_'}>{this.props.t('All')} <span className={this.props.classes.commentCount}>{this.state.votings.comments.length}</span></MenuItem>\n {LANGUAGES.map(item => <MenuItem\n key={item.id}\n value={item.id}\n >{item.title} {this.state.commentsByLanguage[item.id] ? <span className={this.props.classes.commentCount}>{this.state.commentsByLanguage[item.id]}</span> : null}</MenuItem>)}\n </Select>\n </FormControl>\n <List classes={{ root: this.props.classes.list }} dense disablePadding>\n {found && this.state.votings.comments.map((comment, i) => {\n if (this.state.filterLang && this.state.filterLang !== '_' && comment.lang !== this.state.filterLang) {\n return null;\n } else {\n return comment ? <ListItem\n key={i}\n title={comment.uuid ? this.props.t('Your comment') : ''}\n classes={{ root: comment.uuid ? this.props.classes.listOwn : undefined }} dense>\n <ListItemAvatar classes={{ root: this.props.classes.listRating }}>\n <Rating readOnly defaultValue={comment.rating} size=\"small\" />\n </ListItemAvatar>\n <ListItemText\n primary={comment.comment}\n secondary={new Date(comment.ts).toLocaleString() + ' / v' + comment.version}\n classes={{ secondary: this.props.classes.listTime }}\n />\n </ListItem> : null;\n }\n })}\n {!found && <div className={this.props.classes.noComments}>{this.props.t('No comments in selected language')}</div>}\n </List>\n </div>\n } else {\n return null;\n }\n }\n\n render() {\n let item;\n let versions;\n if (this.state.votings) {\n const votings = this.state.votings.rating;\n versions = Object.keys(votings);\n versions.sort((a, b) => votings[a].ts > votings[b].ts ? -1 : (votings[a].ts < votings[b].ts ? 1 : 0));\n if (versions.length) {\n item = votings[versions[0]];\n }\n }\n\n return <Dialog\n open={true}\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{`${this.props.t('Review')} ${this.props.adapter}${this.props.version ? '@' + this.props.version : ''}`}</DialogTitle>\n <DialogContent style={{ textAlign: 'center' }} title={(this.props.currentRating && this.props.currentRating.title) || ''}>\n <Rating\n className={this.props.classes.rating}\n name={this.props.adapter}\n value={this.props.version ? this.state.ratingNumber : this.props.currentRating?.rating && this.props.currentRating.rating.r}\n size=\"large\"\n readOnly={!this.props.version}\n onChange={(event, newValue) =>\n this.setState({ ratingNumber: newValue })}\n />\n {this.props.version ? <div style={{width: '100%', textAlign: 'left'}}>\n <TextField\n variant=\"standard\"\n className={this.props.classes.ratingTextControl}\n value={this.state.ratingComment}\n label={this.props.t('Comment to version')}\n inputProps={{ maxLength: 200 }}\n helperText={this.props.t('Max length %s characters', 200)}\n onChange={e =>\n this.setState({ ratingComment: e.target.value })}\n />\n <FormControl variant=\"standard\" className={this.props.classes.ratingLanguageControl}>\n <InputLabel>{this.props.t('Language')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.ratingLang}\n onChange={e => this.setState({ratingLang: e.target.value})}\n >\n {LANGUAGES.map(item => <MenuItem key={item.id} value={item.id}>{item.title}</MenuItem>)}\n </Select>\n </FormControl>\n </div> : null}\n {this.props.version ?\n <div style={{ paddingTop: 20, paddingBottom: 16 }}>{this.props.t('Rate how good this version of the adapter works on your system. You can vote for every new version.')}</div>\n : null}\n\n {versions && item ? <div>{this.props.t('You voted for %s on %s', versions[0], new Date(item.ts).toLocaleDateString())}</div> : null}\n {this.renderComments()}\n </DialogContent>\n <DialogActions>\n {this.props.version && <Button\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!this.state.ratingNumber || this.state.votings === null}\n onClick={() => {\n if (this.state.ratingNumber !== item?.r || this.state.ratingComment) {\n this.setAdapterRating(this.props.adapter, this.props.version, this.state.ratingNumber, this.state.ratingComment, this.state.ratingLang)\n .then(repository => this.props.onClose(repository));\n } else {\n this.props.onClose();\n }\n }}\n startIcon={<VoteIcon />}\n >\n {this.props.t('Rate')}\n </Button>}\n <Button\n autoFocus={!this.props.version}\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nRatingDialog.propTypes = {\n t: PropTypes.func.isRequired,\n lang: PropTypes.string.isRequired,\n uuid: PropTypes.string.isRequired,\n version: PropTypes.string,\n currentRating: PropTypes.object,\n adapter: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n repository: PropTypes.object,\n};\n\nexport default withStyles(styles)(RatingDialog);\n","/* eslint-disable array-callback-return */\nimport React, { Component, Fragment, createRef } from 'react';\nimport semver from 'semver';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { withStyles } from '@mui/styles';\n\nimport {\n Grid,\n Button,\n IconButton,\n LinearProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n Typography,\n InputAdornment,\n ListItemText,\n Hidden\n} from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\n\n// import CloudOffIcon from '@mui/icons-material/CloudOff';\nimport FolderIcon from '@mui/icons-material/Folder';\nimport FolderOpenIcon from '@mui/icons-material/FolderOpen';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport ListIcon from '@mui/icons-material/List';\nimport ViewListIcon from '@mui/icons-material/ViewList';\nimport ViewModuleIcon from '@mui/icons-material/ViewModule';\nimport UpdateIcon from '@mui/icons-material/Update';\nimport StarIcon from '@mui/icons-material/Star';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { FaGithub as GithubIcon } from 'react-icons/fa';\n\nimport { blue, green } from '@mui/material/colors';\n\nimport Router from '@iobroker/adapter-react-v5/Components/Router';\n\nimport AdapterDeletionDialog from '../dialogs/AdapterDeletionDialog';\nimport AdapterInfoDialog from '../dialogs/AdapterInfoDialog';\nimport AdapterUpdateDialog from '../dialogs/AdapterUpdateDialog';\nimport AddInstanceDialog from '../dialogs/AddInstanceDialog';\nimport AdapterRow from '../components/Adapters/AdapterRow';\nimport AdapterTile from '../components/Adapters/AdapterTile';\nimport TabContainer from '../components/TabContainer';\nimport TabContent from '../components/TabContent';\nimport TabHeader from '../components/TabHeader';\nimport CustomSelectButton from '../components/CustomSelectButton';\nimport GitHubInstallDialog from '../dialogs/GitHubInstallDialog';\nimport { licenseDialogFunc } from '../dialogs/LicenseDialog';\nimport CustomModal from '../components/CustomModal';\nimport AdaptersUpdaterDialog from '../dialogs/AdaptersUpdaterDialog';\nimport RatingDialog from '../dialogs/RatingDialog';\nimport SlowConnectionWarningDialog from '../dialogs/SlowConnectionWarningDialog';\nimport IsVisible from '../components/IsVisible';\n\nconst WIDTHS = {\n emptyBlock: 50,\n name: 300,\n connectionType: 85,\n installed: 120,\n available: 120,\n update: 40,\n license: 80,\n install: 220,\n};\n\nconst SUM = Object.keys(WIDTHS).reduce((s, i) => s + WIDTHS[i], 0);\n\nconst styles = theme => ({\n container: {\n height: '100%',\n width: '100%',\n },\n containerNotFullHeight: {\n height: 'calc(100% - 22px)',\n },\n containerFullHeight: {\n height: '100%',\n },\n smallAvatar: {\n width: theme.spacing(3),\n height: theme.spacing(3)\n },\n table: {\n width: '100%',\n tableLayout: 'fixed',\n minWidth: 960,\n '& td': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 4,\n paddingLeft: 4,\n },\n '& th': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 4,\n paddingLeft: 4,\n }\n },\n hidden: {\n visibility: 'hidden'\n },\n name: {\n flexWrap: 'nowrap',\n width: WIDTHS.name\n },\n emptyBlock: {\n flexWrap: 'nowrap',\n width: WIDTHS.emptyBlock\n },\n description: {\n width: `calc(100% - ${SUM}px)`\n },\n keywords: {\n\n },\n connectionType: {\n width: WIDTHS.connectionType\n },\n installed: {\n width: WIDTHS.installed\n },\n available: {\n width: WIDTHS.available,\n paddingRight: 6\n },\n update: {\n width: WIDTHS.update,\n padding: 0\n },\n license: {\n width: WIDTHS.license\n },\n install: {\n width: WIDTHS.install\n },\n green: {\n color: green[500]\n },\n blue: {\n color: blue[700]\n },\n category: {\n backgroundColor: theme.palette.background.default,\n },\n grow: {\n flexGrow: 1\n },\n updateAvailable: {\n color: green[700]\n },\n tabContainer: {\n overflow: 'auto'\n },\n containerVersion: {\n borderBottom: 0\n },\n currentVersion: {\n display: 'flex',\n padding: 20,\n fontSize: 15,\n borderBottom: '1px solid silver',\n transition: 'background 0.2s',\n cursor: 'pointer',\n '&:hover': {\n background: '#c0c0c045',\n }\n },\n updateAllButton: {\n position: 'relative'\n },\n updateAllIcon: {\n position: 'absolute',\n top: 15,\n left: 15,\n opacity: 0.4,\n color: theme.palette.mode === 'dark' ? '#aad5ff' : '#007fff'\n },\n counters: {\n marginRight: 10,\n minWidth: 120,\n display: 'flex',\n '& div': {\n marginLeft: 3\n }\n },\n visible: {\n opacity: 0\n },\n infoAdapters: {\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#9c9c9c' : '#333',\n cursor: 'pointer'\n },\n greenText: {\n color: '#00a005d1'\n },\n rating: {\n marginBottom: 20,\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n notStableRepo: {\n background: theme.palette.mode === 'dark' ? '#8a7e00' : '#fdee20',\n color: '#111',\n fontSize: 14,\n padding: '2px 8px',\n borderRadius: 5\n },\n viewModeDiv: {\n display: 'flex',\n flexFlow: 'wrap',\n overflow: 'auto',\n justifyContent: 'center'\n }\n});\n\nclass Adapters extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lastUpdate: 0,\n repository: {},\n installed: {},\n adapters: {},\n instances: {},\n categories: [],\n hostData: {},\n hostOs: '',\n nodeJsVersion: '',\n init: false,\n addInstanceDialog: false,\n addInstanceError: false,\n addInstanceAdapter: '',\n addInstanceId: 'auto',\n addInstanceHostName: '',\n adapterDeletionDialog: false,\n adapterDeletionAdapter: null,\n update: false,\n dialog: null,\n dialogProp: null,\n filterConnectionType: false,\n search: (window._localStorage || window.localStorage).getItem('Adapter.search') || '',\n list: false,\n viewMode: false,\n updateList: false,\n installedList: false,\n categoriesTiles: 'All',\n filterTiles: 'A-Z',\n arrayFilter: [{ name: 'A-Z' }, { name: 'Popular first' }, { name: 'Recently updated' }],\n gitHubInstallDialog: false,\n updateAvailable: [],\n filteredList: null,\n showUpdater: false,\n descWidth: 300,\n showStatistics: false,\n showSetRating: null,\n readTimeoutMs: SlowConnectionWarningDialog.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n adapterToUpdate: '',\n adapterInstallVersion: '',\n currentHost: this.props.currentHost,\n forceUpdateAdapters: this.props.forceUpdateAdapters,\n };\n\n this.rebuildSupported = false;\n this.inputRef = createRef();\n this.countRef = createRef();\n\n this.t = this.translate;\n this.wordCache = {};\n this.cache = {};\n this.listOfVisibleAdapterLength = 0;\n this.allAdapters = 0;\n this.installedAdapters = 0;\n this.recentUpdatedAdapters = 0;\n this.uuid = '';\n }\n\n translate = (word, arg1, arg2) => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n }\n\n renderSlowConnectionWarning() {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n } else {\n return <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={this.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({showSlowConnectionWarning: false, readTimeoutMs}, () =>\n this.updateAll());\n } else {\n this.setState({showSlowConnectionWarning: false});\n }\n }}\n />;\n }\n }\n\n componentDidMount() {\n if (this.props.ready) {\n this.updateAll()\n .then(() => {\n this.state.search && this.filterAdapters();\n this.props.adaptersWorker.registerHandler(this.onAdaptersChanged);\n this.props.instancesWorker.registerHandler(this.onAdaptersChanged);\n });\n }\n }\n\n updateAll(update, bigUpdate, indicateUpdate) {\n return this.getAdapters(update, bigUpdate, indicateUpdate)\n .then(() => this.getAdaptersInfo(update, indicateUpdate));\n }\n\n componentDidUpdate() {\n const descWidth = this.getDescWidth();\n if (this.state.descWidth !== descWidth) {\n this.setState({ descWidth });\n }\n if (this.countRef.current) {\n this.countRef.current.innerHTML = this.listOfVisibleAdapterLength;\n }\n }\n\n componentWillUnmount() {\n this.updateTimeout && clearTimeout(this.updateTimeout);\n this.updateTimeout = null;\n this.props.adaptersWorker.unregisterHandler(this.onAdaptersChanged);\n this.props.instancesWorker.unregisterHandler(this.onAdaptersChanged);\n }\n\n static getDerivedStateFromProps() {\n const location = Router.getLocation();\n\n return {\n dialog: location.dialog,\n dialogProp: location.id\n };\n }\n\n onAdaptersChanged = events => {\n this.tempAdapters = this.tempAdapters || JSON.parse(JSON.stringify(this.state.adapters || {}));\n this.tempInstalled = this.tempInstalled || JSON.parse(JSON.stringify(this.state.installed || {}));\n this.tempInstances = this.tempInstances || JSON.parse(JSON.stringify(this.state.instances || {}));\n\n events.forEach(event => {\n // detect if adapter or instance\n let isInstance = !!event.id.match(/\\.\\d+$/);\n if (isInstance) {\n if (event.type === 'deleted' || !event.obj) {\n delete this.tempInstances[event.id];\n } else {\n this.tempInstances[event.id] = {\n enabled: event.obj.common.enabled,\n icon: event.obj.common.icon,\n name: event.obj.common.name,\n };\n }\n } else {\n if (event.type === 'deleted' || !event.obj) {\n // extract name from id\n const p = event.id.split('.');\n\n // remove from installed\n delete this.tempInstalled[p[2]];\n delete this.tempAdapters[event.id];\n } else {\n const name = event.obj.common.name;\n if (this.tempInstalled[name]) {\n // Update attributes\n Object.keys(this.tempInstalled[name]).forEach(attr => {\n if (event.obj.common[attr] !== undefined && attr !== 'installedFrom') {\n this.tempInstalled[name][attr] = event.obj.common[attr];\n }\n });\n } else {\n // new\n this.tempInstalled[event.id.split('.').pop()] = JSON.parse(JSON.stringify(event.obj.common));\n }\n this.tempAdapters[event.id] = event.obj;\n }\n }\n });\n\n this.updateTimeout && clearTimeout(this.updateTimeout);\n this.updateTimeout = setTimeout(() => {\n const adapters = this.tempAdapters;\n this.tempAdapters = null;\n const installed = this.tempInstalled;\n this.tempInstalled = null;\n const instances = this.tempInstances;\n this.tempInstances = null;\n\n this.analyseInstalled(adapters, installed, null, () =>\n this.calculateInfo(instances));\n }, 300);\n }\n\n analyseInstalled(adapters, installed, repository, cb) {\n adapters = adapters || this.state.adapters;\n installed = installed || this.state.installed;\n repository = repository || this.state.repository;\n\n const updateAvailable = [];\n\n Object.keys(installed).forEach(value => {\n if (installed[value]) {\n const version = installed[value].version;\n const repositoryValue = repository[value];\n\n if (repositoryValue &&\n repositoryValue.version !== version &&\n Adapters.updateAvailable(version, repositoryValue.version) &&\n !updateAvailable.includes(value)\n ) {\n updateAvailable.push(value);\n }\n }\n });\n\n this.cache.listOfVisibleAdapter = null;\n\n this.setState({\n adapters,\n updateAvailable,\n installed,\n repository\n }, () => cb && cb());\n }\n\n getAdapters = (update, bigUpdate, indicateUpdate) => {\n console.log('[ADAPTERS] getAdapters');\n let adapters;\n let installed;\n const currentHost = this.state.currentHost;\n update = update || this.props.adaptersWorker.isForceUpdate();\n\n return new Promise(resolve => {\n if (!this.state.update && (update || indicateUpdate)) {\n this.setState({ update: true }, () => resolve());\n } else {\n resolve();\n }\n })\n .then(() => this.props.adaptersWorker.getAdapters(update))\n .catch(e => window.alert('Cannot getAdapters: ' + e))\n .then(_adapters => {\n adapters = _adapters;\n return this.props.socket.getInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getInstalled from \"${currentHost}\" (timeout ${this.state.readTimeoutMs}ms): ${e}`);\n e.toString().includes('timeout') && this.setState({ showSlowConnectionWarning: true });\n return null;\n });\n })\n .then(_installed => {\n installed = _installed;\n return this.props.socket.getRepository(currentHost, { repo: this.props.systemConfig.common.activeRepo, update: (bigUpdate || indicateUpdate) }, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert('Cannot getRepository: ' + e);\n e.toString().includes('timeout') && this.setState({ showSlowConnectionWarning: true });\n return null;\n })\n })\n .then(repository =>\n this.analyseInstalled(adapters, installed, repository));\n }\n\n getWordVotes(votes) {\n if (votes === 1) {\n return this.t('vote');\n } else if (votes >= 2 && votes <= 4) {\n return this.t('votes2');\n } else if (votes >= 5 && votes <= 20) {\n return this.t('votes');\n } else {\n const v = votes % 10;\n if (v === 1) {\n return this.t('vote21');\n } else if (v >= 2 && v <= 4) {\n return this.t('votes2');\n } else {\n return this.t('votes');\n }\n }\n }\n\n calculateInfo(instances, ratings, hostData) {\n hostData = hostData || this.state.hostData;\n ratings = ratings || this.state.ratings;\n instances = instances || this.state.instances;\n\n const adapters = this.state.adapters;\n\n const installed = JSON.parse(JSON.stringify(this.state.installed));\n const repository = JSON.parse(JSON.stringify(this.state.repository));\n\n const nodeJsVersion = (hostData['Node.js'] || '').replace('v', '');\n const hostOs = hostData.os;\n\n const categories = {};\n const categoriesSorted = [];\n let categoriesExpanded = {};\n try {\n categoriesExpanded = JSON.parse((window._localStorage || window.localStorage).getItem('Adapters.expandedCategories')) || {};\n } catch (error) {\n // ignore\n }\n\n\n Object.keys(installed).forEach(value => {\n const adapter = installed[value];\n if (adapters[value]?.common?.ignoreVersion) {\n adapter.ignoreVersion = adapters[value].common.ignoreVersion;\n }\n\n if (!adapter.controller && value !== 'hosts') {\n if (!repository[value]) {\n repository[value] = JSON.parse(JSON.stringify(adapter));\n repository[value].version = '';\n }\n }\n adapter.count = 0;\n adapter.enabled = 0;\n });\n\n Object.keys(instances).forEach(id => {\n const adapterName = instances[id].name;\n if (installed[adapterName]) {\n installed[adapterName].count++;\n }\n });\n\n const now = Date.now();\n this.recentUpdatedAdapters = 0;\n this.installedAdapters = 0;\n\n Object.keys(repository).forEach(value => {\n if (value === 'hosts') {\n return;\n }\n const adapter = repository[value];\n if (adapter.keywords) {\n adapter.keywords = adapter.keywords.map(word => word.toLowerCase());\n }\n const _installed = installed[value];\n\n adapter.rating = ratings && ratings[value];\n\n if (adapter.rating && adapter.rating.rating) {\n adapter.rating.title = [\n `${this.t('Total rating:')} ${adapter.rating.rating.r} (${adapter.rating.rating.c} ${this.getWordVotes(adapter.rating.rating.c)})`,\n (_installed && _installed.version && adapter.rating[_installed.version]) ?\n `${this.t('Rating for')} v${_installed.version}: ${adapter.rating[_installed.version].r} (${adapter.rating[_installed.version].c} ${this.getWordVotes(adapter.rating.rating.c)})`\n : ''\n ].filter(i => i).join('\\n');\n } else {\n adapter.rating = { title: this.t('No rating or too few data') };\n }\n\n if (!adapter.controller) {\n const type = adapter.type;\n const installedInGroup = installed[value];\n\n const daysAgo = Math.round((now - new Date(adapter.versionDate).getTime()) / 86400000);\n\n if (daysAgo <= 31) {\n this.recentUpdatedAdapters++;\n }\n if (installed[value]) {\n this.installedAdapters++;\n }\n\n if (!categories[type]) {\n categories[type] = {\n name: type,\n translation: this.t(type + '_group'),\n count: 1,\n installed: installedInGroup ? 1 : 0,\n adapters: [value]\n };\n } else {\n categories[type].count++;\n categories[type].adapters.push(value);\n if (installedInGroup) {\n categories[type].installed++;\n }\n }\n }\n });\n\n Object.keys(categories).sort((a, b) => {\n if (a === 'general' && b !== 'general') {\n return -1;\n } else if (a !== 'general' && b === 'general') {\n return 1;\n } else if (categories[a].translation > categories[b].translation) {\n return 1;\n } else if (categories[a].translation < categories[b].translation) {\n return -1;\n } else {\n return 0;\n }\n }).forEach(value =>\n categoriesSorted.push(categories[value]));\n\n const _titles = {};\n\n Object.keys(categories).forEach(type =>\n categories[type].adapters.sort((a, b) => {\n if (installed[a] && installed[b]) {\n if (!_titles[a]) {\n let title = repository[a].titleLang || repository[a].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n if (!_titles[b]) {\n let title = repository[b].titleLang || repository[b].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[b] = title.toLowerCase();\n }\n\n return _titles[a] > _titles[b] ? 1 : (_titles[a] < _titles[b] ? -1 : 0);\n } else if (installed[a]) {\n return -1;\n } else if (installed[b]) {\n return 1;\n } else {\n // sort by real language name and not by adapter name\n if (!_titles[a]) {\n let title = repository[a].titleLang || repository[a].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n if (!_titles[b]) {\n let title = repository[b].titleLang || repository[b].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[b] = title.toLowerCase();\n }\n\n return _titles[a] > _titles[b] ? 1 : (_titles[a] < _titles[b] ? -1 : 0);\n }\n }));\n\n let installedList = false;\n try {\n installedList = JSON.parse((window._localStorage || window.localStorage).getItem('Adapters.installedList'));\n } catch (error) {\n\n }\n const list = (window._localStorage || window.localStorage).getItem('Adapters.list') === 'true';\n const viewMode = (window._localStorage || window.localStorage).getItem('Adapters.viewMode') === 'true';\n const updateList = (window._localStorage || window.localStorage).getItem('Adapters.updateList') === 'true';\n const categoriesTiles = (window._localStorage || window.localStorage).getItem('Adapters.categoriesTiles') || 'All';\n const filterTiles = (window._localStorage || window.localStorage).getItem('Adapters.filterTiles') || 'A-Z';\n this.allAdapters = Object.keys(repository).length - 1;\n\n this.cache.listOfVisibleAdapter = null;\n\n return new Promise(resolve =>\n this.setState({\n repository,\n installed,\n ratings,\n filterTiles,\n categoriesTiles,\n installedList,\n instances,\n updateList,\n viewMode,\n list,\n lastUpdate: Date.now(),\n hostData,\n hostOs,\n nodeJsVersion,\n categories: categoriesSorted,\n categoriesExpanded,\n init: true,\n update: false\n }, () => resolve()));\n }\n\n getAdaptersInfo = (update, indicateUpdate) => {\n if (!this.state.currentHost) {\n return;\n }\n\n // Do not update too often\n if (Date.now() - this.state.lastUpdate > 1000) {\n console.log('[ADAPTERS] getAdaptersInfo');\n\n const currentHost = this.state.currentHost;\n\n let hostData;\n let ratings;\n\n return new Promise(resolve => {\n if (!this.state.update || indicateUpdate) {\n this.setState({ update: true }, () => resolve());\n } else {\n resolve();\n }\n })\n .then(() => this.props.socket.getHostInfo(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getHostInfo for \"${currentHost}\": ${e}`);\n e.toString().includes('timeout') && this.setState({showSlowConnectionWarning: true});\n })\n )\n .then(_hostData => {\n hostData = _hostData;\n /*return this.props.socket.checkFeatureSupported('CONTROLLER_NPM_AUTO_REBUILD')\n .catch(e => window.alert('Cannot checkFeatureSupported: ' + e));\n })\n .then(_rebuild => {\n rebuild = _rebuild;*/\n if (this.props.adminGuiConfig.adapters?.allowAdapterRating === false) {\n return Promise.resolve({});\n }\n\n return this.props.socket.getRatings(update)\n .catch(e => window.alert('Cannot read ratings: ' + e));\n })\n .then(_ratings => {\n ratings = _ratings;\n return this.props.socket.getCompactInstances(update)\n .catch(e => {\n window.alert('Cannot read countsOfInstances: ' + e);\n return {};\n });\n })\n .then(instances => {\n // simulation\n // setTimeout(() => this.setState({showSlowConnectionWarning: true}), 5000);\n\n this.uuid = ratings?.uuid || null;\n // BF (2022.02.09) TODO: Remove all \"rebuild\" stuff later (when js-controller 4.x will be mainstream)\n // this.rebuildSupported = false;// rebuild || false; Rebuild is no more supported from js-controller 4.0\n return this.calculateInfo(instances, ratings, hostData);\n })\n .catch(error => window.alert('Cannot get adapters info: ' + error));\n } else {\n return Promise.resolve();\n }\n }\n\n async addInstance(adapter, instance, debug = false, customUrl = false) {\n if (!instance && this.props.expertMode && !customUrl) {\n this.setState({\n addInstanceDialog: true,\n addInstanceAdapter: adapter,\n addInstanceHostName: this.state.currentHost.replace(/^system\\.host\\./, '')\n });\n } else {\n if (instance && !customUrl) {\n const instances = this.props.instancesWorker.getInstances();\n // if the instance already exists\n if (instances[`system.adapter.${adapter}.${instance}`]) {\n return this.setState({ addInstanceError: true });\n }\n }\n const host = (this.state.addInstanceHostName || this.state.currentHost).replace(/^system\\.host\\./, '');\n this.props.executeCommand(`${customUrl ? 'url' : 'add'} ${adapter} ${instance ? instance + ' ' : ''}--host ${host} ${debug || this.props.expertMode ? '--debug' : ''}`, host, true);\n }\n }\n\n upload(adapter) {\n this.props.executeCommand(`upload ${adapter}${this.props.expertMode ? ' --debug' : ''}`);\n }\n\n /*rebuild(adapter) {\n this.props.executeCommand('rebuild ' + adapter)\n }*/\n\n delete(adapter, deleteCustom) {\n this.props.executeCommand(`del ${adapter}${deleteCustom ? ' --custom' : ''}${this.props.expertMode ? ' --debug' : ''}`);\n }\n\n update(adapter, version) {\n this.props.executeCommand(`upgrade ${adapter}@${version}${this.props.expertMode ? ' --debug' : ''}`);\n }\n\n closeAddInstanceDialog() {\n this.setState({\n addInstanceDialog: false,\n addInstanceAdapter: '',\n addInstanceId: 'auto'\n });\n }\n\n openAdapterDeletionDialog(adapter) {\n this.setState({\n adapterDeletionDialog: true,\n adapterDeletionAdapter: adapter\n });\n }\n\n closeAdapterDeletionDialog() {\n this.setState({\n adapterDeletionDialog: false,\n adapterDeletionAdapter: null\n });\n }\n\n toggleCategory(category) {\n this.setState(oldState => {\n\n const categoriesExpanded = oldState.categoriesExpanded;\n categoriesExpanded[category] = !categoriesExpanded[category];\n\n (window._localStorage || window.localStorage).setItem('Adapters.expandedCategories', JSON.stringify(categoriesExpanded));\n\n return { categoriesExpanded };\n });\n }\n\n handleHostsChange(hostName) {\n this.setState({ addInstanceHostName: hostName.replace(/^system\\.host\\./, '') });\n }\n\n handleInstanceChange(event) {\n this.setState({ addInstanceId: event.target.value });\n }\n\n static updateAvailable(oldVersion, newVersion) {\n try {\n return semver.gt(newVersion, oldVersion) === true;\n } catch (e) {\n console.warn(`[ADAPTERS] Cannot compare \"${newVersion}\" and \"${oldVersion}\"`);\n return false;\n }\n }\n\n getDependencies = value => {\n const adapter = this.state.repository[value];\n let result = [];\n\n if (adapter) {\n const dependencies = adapter.dependencies;\n const nodeVersion = adapter.node;\n\n dependencies && dependencies.length && dependencies.forEach(dependency => {\n\n const entry = {\n name: '',\n version: null,\n installed: false,\n installedVersion: null,\n rightVersion: false\n };\n\n const checkVersion = typeof dependency !== 'string';\n const keys = Object.keys(dependency);\n entry.name = !checkVersion ? dependency : keys ? keys[0] : null;\n entry.version = checkVersion ? dependency[entry.name] : null;\n\n if (result && entry.name) {\n const installed = this.state.installed[entry.name];\n\n entry.installed = !!installed;\n entry.installedVersion = installed ? installed.version : null;\n try {\n entry.rightVersion = installed ? (checkVersion ? semver.satisfies(installed.version, entry.version, { includePrerelease: true }) : true) : false;\n } catch (e) {\n entry.rightVersion = true;\n }\n }\n\n result.push(entry);\n });\n\n if (nodeVersion) {\n const entry = {\n name: 'node',\n version: nodeVersion,\n installed: true,\n installedVersion: this.state.nodeJsVersion,\n rightVersion: false\n };\n\n try {\n entry.rightVersion = semver.satisfies(this.state.nodeJsVersion, nodeVersion);\n } catch (e) {\n entry.rightVersion = true;\n }\n\n result.push(entry);\n }\n }\n\n return result;\n }\n\n rightDependencies(value) {\n const adapter = this.state.repository[value];\n let result = true;\n\n if (adapter) {\n const dependencies = adapter.dependencies;\n const nodeVersion = adapter.node;\n\n if (dependencies) {\n if (dependencies instanceof Array) {\n dependencies.forEach(dependency => {\n const checkVersion = typeof dependency !== 'string';\n const keys = Object.keys(dependency);\n const name = !checkVersion ? dependency : keys ? keys[0] : null;\n\n if (result && name) {\n const installed = this.state.installed[name];\n\n try {\n result = installed ? (checkVersion ? semver.satisfies(installed.version, dependency[name], { includePrerelease: true }) : true) : false;\n } catch (e) {\n result = true;\n }\n }\n });\n } else if (typeof dependencies === 'object') {\n Object.keys(dependencies).forEach(dependency => {\n if (dependency && dependencies[dependency] !== undefined && result) {\n const installed = this.state.installed[dependency];\n const checkVersion = typeof dependencies[dependency] !== 'string';\n try {\n result = installed ? (checkVersion ? semver.satisfies(installed.version, dependency[dependency], { includePrerelease: true }) : true) : false;\n } catch (e) {\n result = true;\n }\n }\n });\n } else {\n console.error(`[ADAPTERS] Invalid dependencies for ${value}: ${JSON.stringify(dependencies)}`);\n }\n }\n\n if (result && nodeVersion) {\n try {\n result = semver.satisfies(this.state.nodeJsVersion, nodeVersion);\n } catch (e) {\n result = true;\n }\n }\n }\n\n return result;\n }\n\n rightOs(value) {\n const adapter = this.state.repository[value];\n\n if (adapter?.os) {\n return !!adapter.os.find(value => this.state.hostOs === value);\n }\n\n return true;\n }\n\n openInfoDialog(adapter) {\n Router.doNavigate('tab-adapters', 'readme', adapter);\n }\n\n openUpdateDialog(adapterToUpdate) {\n this.setState({adapterToUpdate});\n }\n\n openInstallVersionDialog(adapterInstallVersion) {\n this.setState({adapterInstallVersion});\n }\n\n closeAdapterUpdateDialog(cb) {\n this.setState({adapterToUpdate: ''}, () =>\n cb && cb());\n }\n\n renderSetRatingDialog() {\n if (this.state.showSetRating) {\n return <RatingDialog\n t={this.t}\n lang={this.props.lang}\n version={this.state.showSetRating.version}\n adapter={this.state.showSetRating.adapter}\n repository={this.state.repository}\n currentRating={this.state.showSetRating.rating}\n onClose={repository => {\n if (repository) {\n this.setState({showSetRating: null, repository});\n } else {\n this.setState({showSetRating: null});\n }\n }}\n uuid={this.uuid}\n />;\n } else {\n return null;\n }\n }\n\n getNews(value, all = false) {\n const adapter = this.state.repository[value];\n const installed = this.state.installed[value];\n const news = [];\n\n if (installed && adapter && adapter.news) {\n Object.keys(adapter.news).forEach(version => {\n try {\n if (semver.gt(version, installed.version) || all) {\n news.push({\n version,\n news: this.props.noTranslation ? adapter.news[version].en : (adapter.news[version][this.props.lang] || adapter.news[version].en)\n });\n }\n } catch (e) {\n // ignore it\n console.warn(`[ADAPTERS] Cannot compare \"${version}\" and \"${installed.version}\"`);\n }\n });\n }\n\n return news;\n }\n\n handleFilterChange(event) {\n this.typingTimer && clearTimeout(this.typingTimer);\n\n this.typingTimer = setTimeout(value => {\n (window._localStorage || window.localStorage).setItem('Adapter.search', value || '');\n this.typingTimer = null;\n this.filterAdapters(value);\n }, 300, event.target.value);\n }\n\n toggleConnectionTypeFilter() {\n this.setState({ filterConnectionType: !this.state.filterConnectionType });\n }\n\n expandAll() {\n this.setState(oldState => {\n const categories = oldState.categories;\n const categoriesExpanded = oldState.categoriesExpanded;\n\n categories.forEach(category => categoriesExpanded[category.name] = true);\n\n (window._localStorage || window.localStorage).setItem('Adapters.expandedCategories', JSON.stringify(categoriesExpanded));\n\n return { categoriesExpanded };\n });\n }\n\n collapseAll() {\n const categoriesExpanded = {};\n\n (window._localStorage || window.localStorage).setItem('Adapters.expandedCategories', JSON.stringify(categoriesExpanded));\n\n this.setState({ categoriesExpanded });\n }\n\n listTable() {\n let list = !this.state.list;\n if (list) {\n this.expandAll();\n }\n (window._localStorage || window.localStorage).setItem('Adapters.list', list ? 'true' : 'false');\n this.setState({ list });\n }\n\n changeViewMode() {\n this.cache.listOfVisibleAdapter = null;\n let viewMode = !this.state.viewMode;\n (window._localStorage || window.localStorage).setItem('Adapters.viewMode', viewMode ? 'true' : 'false');\n this.setState({ viewMode });\n }\n\n changeUpdateList() {\n this.cache.listOfVisibleAdapter = null;\n let updateList = !this.state.updateList;\n (window._localStorage || window.localStorage).setItem('Adapters.updateList', updateList ? 'true' : 'false');\n this.setState({ updateList });\n }\n\n changeInstalledList(onlyInstalled) {\n this.cache.listOfVisibleAdapter = null;\n let installedList = !this.state.installedList ? 1 : this.state.installedList < 2 ? 2 : false;\n if (!installedList && onlyInstalled) {\n installedList = 1;\n }\n (window._localStorage || window.localStorage).setItem('Adapters.installedList', JSON.stringify(installedList));\n this.setState({ installedList });\n }\n\n changeFilterTiles(filterTiles) {\n this.cache.listOfVisibleAdapter = null;\n (window._localStorage || window.localStorage).setItem('Adapters.filterTiles', filterTiles);\n this.setState({ filterTiles });\n }\n\n changeCategoriesTiles(categoriesTiles) {\n this.cache.listOfVisibleAdapter = null;\n (window._localStorage || window.localStorage).setItem('Adapters.categoriesTiles', categoriesTiles);\n this.setState({ categoriesTiles });\n }\n\n filterAdapters(search) {\n this.cache.listOfVisibleAdapter = null;\n search = search === undefined ? this.state.search : search;\n search = (search || '').toLowerCase().trim();\n let filteredList = [];\n if (search) {\n this.state.categories.forEach(category => category.adapters.forEach(name => {\n const adapter = this.state.repository[name];\n if (!adapter) {\n return;\n }\n\n let title = adapter.titleLang || adapter.title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n const desc = adapter.desc ? adapter.desc[this.props.lang] || adapter.desc.en || adapter.desc : '';\n\n if (name.includes(search)) {\n filteredList.push(name);\n } else\n if (title && typeof title === 'string' && title.toLowerCase().includes(search)) {\n filteredList.push(name);\n } else if (desc && typeof desc === 'string' && desc.toLowerCase().includes(search)) {\n filteredList.push(name);\n } else {\n adapter.keywords && adapter.keywords.forEach(value =>\n value.includes(search) && filteredList.push(name));\n }\n }));\n } else {\n filteredList = null;\n }\n this.setState({ filteredList, search });\n }\n\n getRow(value, descHidden) {\n const cached = this.cache.adapters[value];\n if (cached) {\n const adapter = this.state.repository[value];\n const installed = this.state.installed[value];\n\n if ((cached.title instanceof Object) || !cached.desc) {\n console.warn('[ADAPTERS] ' + value);\n }\n\n return <AdapterRow\n t={this.t}\n descHidden={descHidden}\n key={'adapter-' + value}\n connectionType={cached.connectionType}\n dataSource={adapter.dataSource}\n description={cached.desc}\n adapter={value}\n versionDate={cached.daysAgoText}\n enabledCount={installed && installed.enabled}\n expertMode={this.props.expertMode}\n image={cached.image}\n installedCount={installed && installed.count}\n installedFrom={installed && installed.installedFrom}\n installedVersion={installed && installed.version}\n keywords={adapter.keywords}\n name={cached.title}\n license={adapter.license}\n updateAvailable={cached.updateAvailable}\n version={adapter.version}\n hidden={false}\n rightDependencies={cached.rightDependencies}\n rightOs={cached.rightOs}\n sentry={cached.sentry}\n //rebuild={this.rebuildSupported}\n commandRunning={this.props.commandRunning}\n rating={adapter.rating}\n onSetRating={() =>\n this.setState({ showSetRating: { adapter: value, version: installed && installed.version, rating: adapter.rating}})}\n onAddInstance={() =>\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, async result =>\n result && await this.addInstance(value), (adapter.extIcon || '').split('/master')[0] + '/master/LICENSE')\n }\n onDeletion={() => this.openAdapterDeletionDialog(value)}\n onInfo={() => this.openInfoDialog(value)}\n //onRebuild={() => this.rebuild(value)}\n onUpdate={() => this.openUpdateDialog(value)}\n openInstallVersionDialog={() => this.openInstallVersionDialog(value)}\n onUpload={() => licenseDialogFunc(adapter.license === 'MIT', this.props.theme, result =>\n result && this.upload(value), (adapter.extIcon || '').split('/master')[0] + '/master/LICENSE')}//\n allowAdapterDelete={this.state.repository[value] ? this.state.repository[value].allowAdapterDelete : true}\n allowAdapterInstall={this.state.repository[value] ? this.state.repository[value].allowAdapterInstall : true}\n allowAdapterUpdate={this.state.repository[value] ? this.state.repository[value].allowAdapterUpdate : true}\n allowAdapterReadme={this.state.repository[value] ? this.state.repository[value].allowAdapterReadme : true}\n allowAdapterRating={this.props.adminGuiConfig.admin.adapters ? this.props.adminGuiConfig.admin.adapters.allowAdapterRating : true}\n />;\n } else {\n return null;\n }\n }\n clearAllFilters() {\n (window._localStorage || window.localStorage).removeItem('Adapter.search');\n (window._localStorage || window.localStorage).removeItem('Adapters.installedList');\n (window._localStorage || window.localStorage).removeItem('Adapters.updateList');\n if (this.inputRef.current) {\n this.inputRef.current.value = '';\n }\n this.setState({\n filteredList: null,\n updateList: false,\n filterConnectionType: false,\n installedList: false,\n search: ''\n }, () =>\n this.filterAdapters());\n }\n\n getRows(descHidden) {\n if (!this.cache.listOfVisibleAdapter) {\n this.buildCache();\n }\n\n let count = 0;\n\n let rows;\n if (this.state.list) {\n rows = this.cache.listOfVisibleAdapter.map(value => {\n const item = this.getRow(value, descHidden);\n item && count++;\n return item;\n });\n } else {\n rows = this.state.categories.map(category => {\n let showCategory = category.adapters.find(value => this.cache.listOfVisibleAdapter.includes(value));\n if (!showCategory) {\n return null;\n }\n const categoryName = category.name;\n const expanded = this.state.categoriesExpanded[categoryName];\n count++;\n\n return <Fragment key={`category-${categoryName} ${category.adapters.length}`}>\n <AdapterRow\n descHidden={descHidden}\n key={'category-' + categoryName + 1}\n category\n categoryName={categoryName}\n count={category.count}\n expanded={expanded}\n installedCount={category.installed}\n name={category.translation}\n onToggle={() => this.toggleCategory(categoryName)}\n t={this.t}\n hidden={false}\n />\n\n {expanded && category.adapters.map(value => {\n const item = this.getRow(value, descHidden);\n item && count++;\n return item;\n })}\n </Fragment>;\n });\n }\n\n if (!count) {\n return !this.state.update && <tr><td\n colSpan={4}\n style={{\n padding: 16,\n fontSize: 18,\n cursor: 'pointer'\n }}\n title={this.t('Click to clear all filters')}\n onClick={() => this.clearAllFilters()}\n >\n {this.t('all items are filtered out')}\n </td></tr>;\n } else {\n return rows;\n }\n }\n\n buildCache() {\n this.cache.listOfVisibleAdapter = [];\n this.cache.adapters = {};\n const now = Date.now();\n const textDaysAgo0 = this.t('0 %d days ago');\n const textDaysAgo1 = this.t('1 %d days ago');\n const textDaysAgo2 = this.t('2 %d days ago');\n const textDaysAgo = this.t('5 %d days ago');\n\n const sortPopularFirst = !this.state.viewMode && this.state.filterTiles === 'Popular first';\n const sortRecentlyUpdated = !this.state.viewMode && this.state.filterTiles === 'Recently updated';\n\n // get all visible adapters\n this.state.categories\n .filter(cat => this.state.viewMode || !this.state.categoriesTiles || this.state.categoriesTiles === 'All' || cat.name === this.state.categoriesTiles)\n .forEach(category => category.adapters.forEach(value => {\n const adapter = this.state.repository[value];\n\n if (value === 'admin') {\n console.log('[ADAPTERS] ' + value);\n }\n\n if (adapter && !adapter.controller) {\n const connectionType = adapter.connectionType ? adapter.connectionType : '-';\n const updateAvailable = this.state.updateAvailable.includes(value);\n const installed = this.state.installed[value];\n\n let show = !this.state.filteredList || this.state.filteredList.includes(value);\n if (show && this.state.filterConnectionType) {\n show = connectionType === 'local';\n }\n if (show && this.state.updateList) {\n show = updateAvailable;\n }\n if (show && this.state.installedList) {\n show = this.state.installedList < 2 ? !!(installed && installed.version) : !!(installed && installed.version && !installed.count) ;\n }\n if (show) {\n this.cache.listOfVisibleAdapter.push(value);\n const daysAgo10 = Math.round((now - new Date(adapter.versionDate).getTime()) / 8640000);\n const daysAgo = Math.round(daysAgo10 / 10);\n\n let title = adapter.titleLang || adapter.title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n\n const _daysAgo10 = daysAgo % 100 <= 10 || daysAgo % 100 >= 20 ? daysAgo % 10 : 5;\n\n this.cache.adapters[value] = {\n title,\n desc: adapter.desc ? adapter.desc[this.props.lang] || adapter.desc['en'] || adapter.desc : '',\n image: installed && this.state.adapters['system.adapter.' + value] ? '.' + installed.localIcon : adapter.extIcon,\n connectionType: adapter.connectionType ? adapter.connectionType : '-',\n updateAvailable: this.state.updateAvailable.includes(value),\n rightDependencies: this.rightDependencies(value),\n rightOs: this.rightOs(value),\n sentry: !!(adapter.plugins && adapter.plugins.sentry),\n daysAgo: daysAgo10,\n stat: sortPopularFirst && adapter.stat,\n daysAgoText: sortRecentlyUpdated && (daysAgo || daysAgo === 0) ?\n daysAgo === 0 ? textDaysAgo0 :\n (_daysAgo10 === 1 ? textDaysAgo1.replace('%d', daysAgo) :\n (_daysAgo10 === 2 || _daysAgo10 === 3 || _daysAgo10 === 4 ? textDaysAgo2.replace('%d', daysAgo) : textDaysAgo.replace('%d', daysAgo))) : ''\n };\n }\n }\n }));\n\n this.listOfVisibleAdapterLength = this.cache.listOfVisibleAdapter.length;\n\n const repo = this.state.repository;\n const adapters = this.cache.adapters;\n const installed = this.state.installed;\n\n const _titles = {};\n\n this.cache.listOfVisibleAdapter.sort((a, b) => {\n if (sortPopularFirst) {\n return repo[b].stat - repo[a].stat;\n } else\n if (sortRecentlyUpdated) {\n if (!adapters[a]) {\n return -1;\n } else if (!adapters[b]) {\n return 1;\n }\n if (adapters[a].daysAgo === adapters[b].daysAgo) {\n if (!_titles[a]) {\n let title = adapters[a].titleLang || adapters[a].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n if (!_titles[b]) {\n let title = adapters[b].titleLang || adapters[b].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n\n return _titles[a] > _titles[b] ? 1 : (_titles[a] < _titles[b] ? -1 : 0);\n } else {\n return adapters[a].daysAgo - adapters[b].daysAgo;\n }\n } else {\n if (installed[a] && installed[b]) {\n if (!_titles[a]) {\n let title = adapters[a].titleLang || adapters[a].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n if (!_titles[b]) {\n let title = adapters[b].titleLang || adapters[b].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[b] = title.toLowerCase();\n }\n\n return _titles[a] > _titles[b] ? 1 : (_titles[a] < _titles[b] ? -1 : 0);\n } else if (installed[a]) {\n return -1;\n } else if (installed[b]) {\n return 1;\n } else {\n // sort by real language name and not by adapter name\n if (!_titles[a]) {\n let title = adapters[a].titleLang || adapters[a].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[a] = title.toLowerCase();\n }\n if (!_titles[b]) {\n let title = adapters[b].titleLang || adapters[b].title;\n if (typeof title === 'object') {\n title = title[this.props.lang] || title.en;\n }\n title = ((title || '').toString() || '').replace('ioBroker Visualisation - ', '');\n _titles[b] = title.toLowerCase();\n }\n\n return _titles[a] > _titles[b] ? 1 : (_titles[a] < _titles[b] ? -1 : 0);\n }\n }\n });\n\n // console.log('[ADAPTERS] Update cache!');\n }\n\n getTiles() {\n if (!this.cache.listOfVisibleAdapter) {\n this.buildCache();\n }\n\n if (!this.cache.listOfVisibleAdapter.length) {\n return !this.state.update && <div style={{\n margin: 20,\n fontSize: 26\n }}>{this.props.t('all items are filtered out')}</div>;\n } else {\n return this.cache.listOfVisibleAdapter.map(value => {\n const adapter = this.state.repository[value];\n const installed = this.state.installed[value];\n const cached = this.cache.adapters[value];\n\n if (cached.title instanceof Object || !cached.desc) {\n console.warn(`[ADAPTERS] ${JSON.stringify(adapter)}`);\n }\n\n return <AdapterTile\n t={this.t}\n commandRunning={this.props.commandRunning}\n key={'adapter-' + value}\n image={cached.image}\n name={cached.title}\n dataSource={adapter.dataSource}\n adapter={value}\n stat={cached.stat}\n versionDate={cached.daysAgoText}\n connectionType={cached.connectionType}\n description={cached.desc}\n enabledCount={installed && installed.enabled}\n expertMode={this.props.expertMode}\n installedCount={installed && installed.count}\n installedFrom={installed && installed.installedFrom}\n installedVersion={installed && installed.version}\n keywords={adapter.keywords}\n license={adapter.license}\n updateAvailable={cached.updateAvailable}\n version={adapter.version}\n hidden={false}\n rightDependencies={cached.rightDependencies}\n rightOs={cached.rightOs}\n sentry={cached.sentry}\n //rebuild={this.rebuildSupported}\n rating={adapter.rating}\n onSetRating={() =>\n this.setState({ showSetRating: { adapter: value, version: installed && installed.version, rating: adapter.rating}})}\n onAddInstance={() =>\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, async result =>\n result && await this.addInstance(value), (adapter.extIcon || '').split('/master')[0] + '/master/LICENSE')}//\n onDeletion={() => this.openAdapterDeletionDialog(value)}\n onInfo={() => this.openInfoDialog(value)}\n //onRebuild={() => this.rebuild(value)}\n onUpdate={() => this.openUpdateDialog(value)}\n openInstallVersionDialog={() => this.openInstallVersionDialog(value)}\n onUpload={() => licenseDialogFunc(adapter.license === 'MIT', this.props.theme, result =>\n result && this.upload(value), (adapter.extIcon || '').split('/master')[0] + '/master/LICENSE')}//\n allowAdapterDelete={this.state.repository[value] ? this.state.repository[value].allowAdapterDelete : true}\n allowAdapterInstall={this.state.repository[value] ? this.state.repository[value].allowAdapterInstall : true}\n allowAdapterUpdate={this.state.repository[value] ? this.state.repository[value].allowAdapterUpdate : true}\n allowAdapterReadme={this.state.repository[value] ? this.state.repository[value].allowAdapterReadme : true}\n allowAdapterRating={this.props.adminGuiConfig.admin.adapters ? this.props.adminGuiConfig.admin.adapters.allowAdapterRating : true}\n />;\n });\n }\n }\n\n getUpdater() {\n if (!this.state.showUpdater) {\n return null;\n } else {\n return <AdaptersUpdaterDialog\n onSetCommandRunning={commandRunning => this.props.onSetCommandRunning(commandRunning)}\n t={this.props.t}\n currentHost={this.state.currentHost}\n lang={this.props.lang}\n installed={this.state.installed}\n repository={this.state.repository}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n onClose={reload =>\n this.setState({ showUpdater: false }, () =>\n reload && this.updateAll(true, false))}\n socket={this.props.socket}\n />;\n }\n }\n\n getDescWidth() {\n if (this.props.menuOpened) {\n return document.body.scrollWidth - SUM - 180 + 15;\n } else if (this.props.menuClosed) {\n return document.body.scrollWidth - SUM;\n } else if (this.props.menuCompact) {\n return document.body.scrollWidth - SUM - 50 + 15;\n }\n }\n\n getStatistics() {\n if (this.state.showStatistics) {\n return <Dialog\n open={true}\n onClose={() => this.setState({ showStatistics: false })}\n >\n <DialogTitle>{this.t('Statistics')}</DialogTitle>\n <DialogContent style={{ fontSize: 16 }}>\n <div className={this.props.classes.counters}>{this.t('Total adapters')}: <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.allAdapters}</span></div>\n <div className={this.props.classes.counters}>{this.t('Installed adapters')}: <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.installedAdapters}</span></div>\n <div className={this.props.classes.counters}>{this.t('Last month updated adapters')}: <span style={{ paddingLeft: 6, fontWeight: 'bold' }}>{this.recentUpdatedAdapters}</span></div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.setState({ showStatistics: false })} color=\"primary\" autoFocus startIcon={<CloseIcon />}>\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n render() {\n if (!this.state.init) {\n return <LinearProgress />;\n }\n\n if (this.state.dialog === 'readme' && this.state.dialogProp) {\n const adapter = this.state.repository[this.state.dialogProp] || null;\n\n if (adapter) {\n return <TabContainer className={this.props.classes.tabContainer}>\n <AdapterInfoDialog\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n adapter={this.state.dialogProp}\n link={adapter.readme || ''}\n socket={this.props.socket}\n t={this.t}\n />\n </TabContainer>;\n }\n }\n\n const { classes } = this.props;\n const descHidden = this.state.descWidth < 50;\n\n let updateAllButtonAvailable = !this.props.commandRunning && !!this.props.ready && !!this.state.updateList && this.state.updateAvailable.length > 1;\n\n // it is not possible to update admin in bulk\n if (updateAllButtonAvailable && this.state.updateAvailable.length === 2 && this.state.updateAvailable.includes('admin')) {\n updateAllButtonAvailable = false;\n }\n\n if (this.props.currentHost !== this.state.currentHost || this.props.forceUpdateAdapters !== this.state.forceUpdateAdapters) {\n this.hostsTimer = this.hostsTimer || setTimeout(() => {\n this.hostsTimer = null;\n this.setState({\n currentHost: this.props.currentHost,\n forceUpdateAdapters: this.props.forceUpdateAdapters,\n }, async () => await this.updateAll(false, false, true));\n }, 200);\n }\n\n const formatNews = news => {\n const lines = (news || '').toString()\n .split('\\n')\n .map(line => line\n .trim()\n .replace(/^\\*+/, '')\n .replace(/^-/, '')\n .replace(/\\*+$/, '')\n .replace(/\\r/g, '')\n .trim()\n )\n .filter(line => line);\n\n return <ul>{lines.map((line, index) => <li key={index}>{line}</li>)}</ul>;\n };\n\n return <TabContainer>\n {this.state.update &&\n <Grid item>\n <LinearProgress />\n </Grid>\n }\n <TabHeader>\n <Tooltip title={this.t('Change view mode')}>\n <IconButton size=\"large\" onClick={() => this.changeViewMode()}>\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip title={this.t('Check adapter for updates')}>\n <IconButton size=\"large\" onClick={() => this.updateAll(true, true)}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n {this.state.viewMode && !this.state.list && <><Tooltip title={this.t('expand all')}>\n <IconButton size=\"large\" onClick={() => this.expandAll()}>\n <FolderOpenIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title={this.t('collapse all')}>\n <IconButton size=\"large\" onClick={() => this.collapseAll()}>\n <FolderIcon />\n </IconButton>\n </Tooltip>\n </>}\n {this.state.viewMode && <Tooltip title={this.t('list')}>\n <IconButton size=\"large\" onClick={() => this.listTable()}>\n <ListIcon color={this.state.list ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>}\n\n {/*<Tooltip title={this.t('Filter local connection type')}>\n <IconButton size=\"large\" onClick={() => this.toggleConnectionTypeFilter()}>\n <CloudOffIcon color={this.state.filterConnectionType ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>*/}\n {this.state.updateList ?\n <IconButton size=\"large\" onClick={() => this.changeInstalledList(true)}>\n <StarIcon color=\"primary\" style={{ opacity: 0.3, color: this.state.installedList === 2 ? 'red' : undefined }} />\n </IconButton>\n :\n <Tooltip title={this.t(!this.state.installedList ?\n 'Show only installed' :\n (this.state.installedList < 2 ?\n 'Showed only installed adapters' :\n 'Showed only installed adapters without instance.'))}>\n <IconButton size=\"large\"\n onClick={() => this.changeInstalledList()}>\n <StarIcon style={this.state.installedList === 2 ? {color: 'red'} : null}\n color={this.state.installedList && this.state.installedList < 2 ? 'primary' : 'inherit'}/>\n </IconButton>\n </Tooltip>\n }\n <IsVisible config={this.props.adminGuiConfig} name=\"admin.adapters.filterUpdates\">\n <Tooltip title={this.t('Filter adapter with updates')}>\n <IconButton size=\"large\" onClick={() => this.changeUpdateList()}>\n <UpdateIcon color={this.state.updateList ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {updateAllButtonAvailable && <Tooltip title={this.t('Update all adapters')}>\n <IconButton size=\"large\" onClick={() => this.setState({ showUpdater: true })} classes={{ label: this.props.classes.updateAllButton }}>\n <UpdateIcon />\n <UpdateIcon className={this.props.classes.updateAllIcon} />\n </IconButton>\n </Tooltip>}\n\n {this.props.expertMode && this.props.adminGuiConfig.admin.adapters?.gitHubInstall !== false &&\n <Tooltip title={this.t('Install from custom URL')}>\n <IconButton size=\"large\" onClick={() => this.setState({ gitHubInstallDialog: true })}>\n <GithubIcon />\n </IconButton>\n </Tooltip>\n }\n <div className={classes.grow} />\n <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={this.t('Filter by name')}\n defaultValue={this.state.search}\n onChange={event => this.handleFilterChange(event)}\n InputProps={{\n endAdornment: (\n this.state.search ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (window._localStorage || window.localStorage).removeItem('Adapter.search');\n this.inputRef.current.value = '';\n this.setState({ search: '' }, () =>\n this.filterAdapters());\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null\n ),\n }}\n />\n\n {!this.state.viewMode &&\n <CustomSelectButton\n t={this.t}\n icons\n contained={this.state.categoriesTiles !== 'All'}\n translateSuffix={'_group'}\n arrayItem={[{ name: 'All' }, ...this.state.categories]}\n onClick={value => this.changeCategoriesTiles(value)}\n value={this.state.categoriesTiles} />\n }\n {!this.state.viewMode &&\n <CustomSelectButton\n t={this.t}\n arrayItem={this.state.arrayFilter}\n onClick={value => this.changeFilterTiles(value)}\n value={this.state.filterTiles} />\n }\n <div className={classes.grow} />\n <IsVisible config={this.props.adminGuiConfig} name=\"admin.adapters.statistics\">\n <Hidden only={['xs', 'sm']} >\n <div className={classes.infoAdapters} onClick={() => this.setState({ showStatistics: true })}>\n <div className={clsx(classes.counters, classes.greenText)}>{this.t('Selected adapters')}<div ref={this.countRef} /></div>\n <div className={classes.counters}>{this.t('Total adapters')}:<div>{this.allAdapters}</div></div>\n <div className={classes.counters}>{this.t('Installed adapters')}:<div>{this.installedAdapters}</div></div>\n <div className={classes.counters}>{this.t('Last month updated adapters')}:<div>{this.recentUpdatedAdapters}</div></div>\n </div>\n </Hidden>\n </IsVisible>\n </TabHeader>\n {this.state.viewMode && this.props.systemConfig && this.props.systemConfig.common && <TabContent>\n {(typeof this.props.systemConfig.common.activeRepo === 'string' && this.props.systemConfig.common.activeRepo !== 'stable') ||\n (this.props.systemConfig.common.activeRepo && typeof this.props.systemConfig.common.activeRepo !== 'string' && !this.props.systemConfig.common.activeRepo.includes('stable')) ?\n <div className={this.props.classes.notStableRepo}>{this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}</div> : null}\n <TableContainer className={clsx(classes.container, this.props.systemConfig.common.activeRepo !== 'stable' ? classes.containerNotFullHeight : classes.containerFullHeight)}>\n <Table stickyHeader size=\"small\" className={classes.table}>\n <TableHead>\n <TableRow>\n <TableCell className={classes.emptyBlock}>\n </TableCell>\n <TableCell className={classes.name}>\n <Typography>{this.t('Name')}</Typography>\n </TableCell>\n {!descHidden && <TableCell className={classes.description} style={{ width: this.state.descWidth }}>\n <Typography>{this.t('Description')}</Typography>\n </TableCell>}\n <TableCell className={classes.connectionType} />\n <TableCell className={classes.installed}>\n <Typography>{this.t('Installed')}</Typography>\n </TableCell>\n <TableCell className={classes.available}>\n <Typography>{this.t('Available')}</Typography>\n </TableCell>\n <TableCell className={classes.license}>\n <Typography>{this.t('License')}</Typography>\n </TableCell>\n <TableCell className={classes.install}>\n <Typography>{this.t('Install')}</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.getRows(descHidden)}\n </TableBody>\n </Table>\n </TableContainer>\n </TabContent>}\n\n {this.getUpdater()}\n {this.getStatistics()}\n {this.renderSetRatingDialog()}\n {this.renderSlowConnectionWarning()}\n\n {!this.state.viewMode && this.props.systemConfig.common && this.props.systemConfig.common.activeRepo && <>\n {(typeof this.props.systemConfig.common.activeRepo === 'string' && this.props.systemConfig.common.activeRepo !== 'stable') ||\n (this.props.systemConfig.common.activeRepo && typeof this.props.systemConfig.common.activeRepo !== 'string' && !this.props.systemConfig.common.activeRepo.includes('stable')) ? <div className={this.props.classes.notStableRepo}>{this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}</div> : null}\n <div className={this.props.classes.viewModeDiv}>{this.getTiles()}</div>\n </>}\n\n {this.state.addInstanceDialog &&\n <AddInstanceDialog\n themeType={this.props.themeType}\n open={this.state.addInstanceDialog}\n adapter={this.state.addInstanceAdapter}\n socket={this.props.socket}\n hostsWorker={this.props.hostsWorker}\n instancesWorker={this.props.instancesWorker}\n repository={this.state.repository}\n dependencies={this.getDependencies(this.state.addInstanceAdapter)}\n currentHost={'system.host.' + this.state.addInstanceHostName}\n currentInstance={this.state.addInstanceId}\n t={this.t}\n onClick={async () =>\n await this.addInstance(this.state.addInstanceAdapter, this.state.addInstanceId)}\n onClose={() => this.closeAddInstanceDialog()}\n onHostChange={hostName => this.handleHostsChange(hostName)}\n onInstanceChange={event => this.handleInstanceChange(event)}\n />\n }\n {this.state.adapterDeletionDialog &&\n <AdapterDeletionDialog\n open={this.state.adapterDeletionDialog}\n adapter={this.state.adapterDeletionAdapter}\n socket={this.props.socket}\n t={this.t}\n onClick={deleteCustom => this.delete(this.state.adapterDeletionAdapter, deleteCustom)}\n onClose={() => this.closeAdapterDeletionDialog()}\n />\n }\n {this.state.gitHubInstallDialog && <GitHubInstallDialog\n t={this.t}\n open={this.state.gitHubInstallDialog}\n categories={this.state.categories}\n installFromUrl={async (value, debug, customUrl) =>\n await this.addInstance(value, undefined, debug, customUrl)}\n repository={this.state.repository}\n onClose={() => { this.setState({ gitHubInstallDialog: false }) }}\n />}\n {this.state.adapterToUpdate &&\n <AdapterUpdateDialog\n open={true}\n adapter={this.state.adapterToUpdate}\n adapterObject={this.state.repository[this.state.adapterToUpdate]}\n t={this.t}\n dependencies={this.getDependencies(this.state.adapterToUpdate)}\n rightDependencies={this.rightDependencies(this.state.adapterToUpdate)}\n news={this.getNews(this.state.adapterToUpdate)}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={ this.props.noTranslation }\n installedVersion={this.state.installed[this.state.adapterToUpdate]?.version}\n onUpdate={version => {\n const adapter = this.state.adapterToUpdate;\n this.closeAdapterUpdateDialog(() => this.update(adapter, version));\n }}\n onIgnore={ignoreVersion => {\n const adapter = this.state.adapterToUpdate;\n this.closeAdapterUpdateDialog(() => {\n this.props.socket.getObject('system.adapter.' + adapter)\n .then(obj => {\n if (obj) {\n obj.common.ignoreVersion = ignoreVersion;\n return this.props.socket.setObject(obj._id, obj);\n } else {\n window.alert(`Adapter \"${adapter}\" does not exist!`);\n }\n })\n .then(() => {\n const updateAvailable = [...this.state.updateAvailable];\n const pos = updateAvailable.indexOf(adapter);\n if (pos !== -1) {\n updateAvailable.splice(pos, 1);\n this.setState({ updateAvailable });\n }\n });\n });\n }}\n onClose={() => this.closeAdapterUpdateDialog()}\n />\n }\n {this.state.adapterInstallVersion &&\n <CustomModal\n open={true}\n title={this.t('Please select specific version of %s', this.state.adapterInstallVersion)}\n applyButton={false}\n onClose={() => this.setState({adapterInstallVersion: ''})}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n >\n <div className={classes.containerVersion}>\n {this.getNews(this.state.adapterInstallVersion, true).map(({ version, news }) => {\n return <div key={version} className={classes.currentVersion} onClick={() => {\n this.update(this.state.adapterInstallVersion, version);\n this.setState({adapterInstallVersion: ''});\n }}>\n <ListItemText\n primary={version}\n secondary={formatNews(news)}\n />\n </div>\n })}\n </div>\n </CustomModal>\n }\n </TabContainer>;\n }\n}\n\nAdapters.propTypes = {\n onSetCommandRunning: PropTypes.func.isRequired,\n commandRunning: PropTypes.bool,\n menuOpened: PropTypes.bool,\n menuClosed: PropTypes.bool,\n menuCompact: PropTypes.bool,\n adaptersWorker: PropTypes.object,\n instancesWorker: PropTypes.object,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n systemConfig: PropTypes.object,\n socket: PropTypes.object,\n hosts: PropTypes.array,\n currentHost: PropTypes.string,\n hostsWorker: PropTypes.object,\n ready: PropTypes.bool,\n t: PropTypes.func,\n lang: PropTypes.string,\n expertMode: PropTypes.bool,\n executeCommand: PropTypes.func,\n adminGuiConfig: PropTypes.object,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n};\n\nexport default withStyles(styles)(Adapters);\n","import React from 'react';\nimport { withStyles } from '@mui/styles';\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport LinearProgress from '@mui/material/LinearProgress';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport Utils from '../Utils';\n\nconst styles = theme => ({\n root: {\n //border: '0 solid #FFF',\n display: 'block',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n //background: 'white',\n color: 'black',\n borderRadius: 4,\n boxShadow: '0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%)',\n border: '0px solid #888'\n },\n});\n\nexport function getHref(instancesWorker, tab, hostname, protocol, port, hosts, adminInstance, themeName) {\n return instancesWorker.getInstances()\n .then(instances => {\n let adapter = tab.replace(/^tab-/, '');\n let instNum;\n const m = adapter.match(/-(\\d+)$/);\n instNum = m ? parseInt(m[1], 10) : null;\n\n let instance;\n if (instNum !== null) {\n adapter = adapter.replace(/-(\\d+)$/, '');\n const name = `system.adapter.${adapter}.${instNum}`;\n instance = Object.keys(instances).find(id => id === name);\n } else {\n const name = `system.adapter.${adapter}.`;\n\n instance = instances && Object.keys(instances).find(id => id.startsWith(name));\n }\n instance = instances && instances[instance];\n\n if (!instance || !instance.common || !instance.common.adminTab) {\n console.error(`Cannot find instance ${tab}`);\n\n return '';\n }\n\n // calculate href\n let href = instance.common.adminTab.link;\n\n if (!href) {\n if (instance.common.materializeTab) {\n href = `adapter/${adapter}/tab_m.html${instNum !== null && instNum !== undefined ? '?' + instNum : ''}`;\n } else {\n href = `adapter/${adapter}/tab.html${instNum !== null && instNum !== undefined ? '?' + instNum : ''}`;\n }\n }\n\n if (!instance.common.adminTab.singleton && instNum !== null && instNum !== undefined) {\n href += `${href.includes('?') ? '&' : '?'}instance=${instNum}`;\n }\n\n if (href.includes('%')) {\n // fix for singletons\n if (instNum === null || instNum === undefined) {\n instNum = instance._id.split('.').pop();\n }\n\n // replace\n const hrefs = Utils.replaceLink(href, adapter, instNum, {\n hostname,\n protocol,\n objects: instances,\n hosts,\n adminInstance,\n port,\n });\n\n href = hrefs ? hrefs[0]?.url : '';\n }\n\n // add at the end the instance, as some adapters make bullshit like: window.location.search.slice(-1) || 0;\n href += `${href.includes('?') ? '&' : '?'}newReact=true${instNum !== null && instNum !== undefined ? '&' + instNum : ''}&react=${themeName}`;\n\n return href;\n });\n}\n\nclass CustomTab extends Component {\n constructor(props) {\n super(props);\n this.state = {\n href: '',\n };\n\n this.refIframe = React.createRef();\n this.registered = false;\n\n getHref(this.props.instancesWorker, this.props.tab, this.props.hostname, this.props.protocol, this.props.port, this.props.hosts, this.props.adminInstance, this.props.themeName)\n .then(href =>\n this.setState({ href }));\n }\n\n componentWillUnmount() {\n this.registered && this.props.onUnregisterIframeRef(this.refIframe);\n }\n\n componentDidMount() {\n if (!this.registered && this.refIframe.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (!this.registered && this.refIframe.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n render() {\n if (!this.state.href) {\n return <LinearProgress />;\n }\n\n return <iframe\n ref={el => this.refIframe = el}\n title={ this.props.tab }\n className={ this.props.classes.root }\n src={ this.state.href }\n onError={ e => {\n e.target.onerror = null;\n this.setState({href: this.state.href.replace('tab_m.html', 'tab.html') });\n }}\n />;\n }\n}\n\nCustomTab.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n themeName: PropTypes.string,\n tab: PropTypes.string.isRequired,\n instancesWorker: PropTypes.object.isRequired,\n\n hostname: PropTypes.string,\n protocol: PropTypes.string,\n port: PropTypes.number,\n adminInstance: PropTypes.string,\n hosts: PropTypes.array,\n\n expertMode: PropTypes.bool,\n onRegisterIframeRef: PropTypes.func,\n onUnregisterIframeRef: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(CustomTab));\n"],"sourceRoot":""}
|