iobroker.admin 6.5.2 → 6.5.3

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/3589.045331b1.chunk.js","mappings":"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","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/wrapper/Dialogs/Cron.jsx","components/JsonConfigComponent/ConfigCRON.jsx","components/JsonConfigComponent/ConfigCertificateSelect.jsx","components/JsonConfigComponent/ConfigCertificates.jsx","components/JsonConfigComponent/ConfigCertCollection.jsx","components/JsonConfigComponent/wrapper/Dialogs/Error.jsx","components/JsonConfigComponent/ConfigCheckLicense.jsx","components/JsonConfigComponent/ConfigCheckbox.jsx","components/JsonConfigComponent/ChipInput.jsx","components/JsonConfigComponent/ConfigChip.jsx","components/JsonConfigComponent/wrapper/Components/ColorPicker.jsx","components/JsonConfigComponent/ConfigColor.jsx","components/JsonConfigComponent/ConfigCoordinates.jsx","components/JsonConfigComponent/ConfigCustom.jsx","components/JsonConfigComponent/ConfigDatePicker.jsx","components/JsonConfigComponent/wrapper/Dialogs/SelectFile.jsx","components/JsonConfigComponent/ConfigFileSelector.jsx","components/JsonConfigComponent/ConfigFile.jsx","components/JsonConfigComponent/wrapper/Components/TextWithIcon.jsx","components/JsonConfigComponent/ConfigFunc.jsx","components/JsonConfigComponent/ConfigIP.jsx","components/JsonConfigComponent/ConfigImageSendTo.jsx","components/JsonConfigComponent/wrapper/Components/UploadImage.jsx","components/JsonConfigComponent/ConfigImageUpload.jsx","components/JsonConfigComponent/ConfigInstanceSelect.jsx","components/JsonConfigComponent/ConfigJsonEditor.jsx","components/JsonConfigComponent/ConfigLanguage.jsx","components/JsonConfigComponent/ConfigNumber.jsx","components/JsonConfigComponent/wrapper/Dialogs/SelectID.jsx","components/JsonConfigComponent/ConfigObjectId.jsx","components/JsonConfigComponent/ConfigPassword.jsx","components/JsonConfigComponent/wrapper/icons/IconCopy.jsx","components/JsonConfigComponent/ConfigPattern.jsx","components/JsonConfigComponent/ConfigPort.jsx","components/JsonConfigComponent/ConfigRoom.jsx","components/JsonConfigComponent/ConfigSelect.jsx","components/JsonConfigComponent/ConfigSelectSendTo.jsx","components/JsonConfigComponent/wrapper/Components/Icon.jsx","components/JsonConfigComponent/wrapper/Dialogs/Message.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/ConfigUUID.jsx","components/JsonConfigComponent/ConfigUser.jsx","components/JsonConfigComponent/ConfigPanel.jsx","components/JsonConfigComponent/wrapper/Components/Utils.jsx","components/JsonConfigComponent/wrapper/Dialogs/Confirm.jsx","components/JsonConfigComponent/wrapper/i18n.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"],"sourcesContent":["var _path;\nvar _excluded = [\"title\", \"titleId\"];\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); }\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; }\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; }\nimport * as React from \"react\";\nfunction SvgSentry(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\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}\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 // try to get disabled instances\n if (!ids.length) {\n ids = Object.keys(context.objects)\n .filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))\n .map(id => id.substring(15));\n }\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\n classes={{ root: !this.props.visible ? classes.hiddenDialog : '', paper: classes.dialogRoot }}\n onClose={this.props.inBackground ? this.props.onClose : this.props.onInBackground}\n open={!0}\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\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';\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 CommonUtils from '../Utils';\nimport { Checkbox } from '@mui/material';\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n selected: {\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : CommonUtils.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' : CommonUtils.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('&gt;', '>') : '';\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={Utils.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: Utils.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\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';\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 { Utils, I18n, Icon, withWidth } from '@iobroker/adapter-react-v5';\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={Utils.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={Utils.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={Utils.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={!0}\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\"];\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); }\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; }\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; }\nimport * as React from \"react\";\nfunction SvgPin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\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}\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';\nimport Autocomplete from \"@mui/material/Autocomplete\";\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\nconst CURRENCY = [\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\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 <Autocomplete\n variant=\"standard\"\n freeSolo\n options={CURRENCY}\n inputValue={this.state.currency}\n onChange={(event, newValue) => this.setState( { currency: newValue ? newValue.id : '' })}\n onInputChange={(event, currency) => this.setState( { currency })}\n getOptionLabel={option => option.title}\n renderOption={(props, option) => <li {...props}>{option.title}</li>}\n renderInput={params =>\n <TextField {...params} variant=\"standard\" label={this.props.t('Currency')} />}\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;\nvar _excluded = [\"title\", \"titleId\"];\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); }\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; }\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; }\nimport * as React from \"react\";\nfunction SvgLongLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\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}\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';\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, Utils, Router } from '@iobroker/adapter-react-v5';\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={Utils.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={Utils.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={!0}\n onClose={() => {}}\n fullWidth\n fullScreen\n aria-labelledby=\"wizard-dialog-title\"\n >\n <DialogTitle id=\"wizard-dialog-title\">\n <img src={Logo} className={this.props.classes.logo} alt=\"logo\" />\n {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\" />\n </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';\nimport { withStyles } from '@mui/styles';\n\nimport { MapContainer, TileLayer } from 'react-leaflet';\nimport { useMap } from 'react-leaflet/hooks';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\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 Autocomplete from '@mui/material/Autocomplete';\nimport FormHelperText from '@mui/material/FormHelperText';\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: 'uk',\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 autocomplete: 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 (e.autocomplete && e.values) {\n return <Grid item sm={6} xs={12} key={i}>\n <Autocomplete\n variant=\"standard\"\n freeSolo\n options={e.values}\n inputValue={value.toString()}\n onChange={(evt, newValue) => {\n const id = this.getSettings()[i].id;\n this.doChange(id, newValue ? newValue.id : '');\n }}\n onInputChange={(event, newValue) => {\n const id = this.getSettings()[i].id;\n this.doChange(id, newValue);\n }}\n getOptionLabel={option =>\n e.translate ? this.props.t(option.title || option.id) : option.title || option.id}\n renderOption={(props, option) => <li {...props}>{e.translate ? this.props.t(option.title || option.id) : option.title || option.id}</li>}\n renderInput={params =>\n <TextField {...params} variant=\"standard\" label={this.props.t(e.title)} />}\n />\n </Grid>;\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.toLowerCase().startsWith('stable') && !value.toLowerCase().includes('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\n zoomControl\n doubleClickZoom\n scrollWheelZoom\n dragging\n animate\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 { 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 Tooltip from '@mui/material/Tooltip';\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';\nimport RestoreIcon from '@mui/icons-material/SettingsBackupRestore';\n\nimport { I18n, Utils as UtilsCommon, withWidth, Confirm as ConfirmDialog } from '@iobroker/adapter-react-v5';\n\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 stableColumn: {\n width: 80\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 fabButton: {\n marginRight: theme.spacing(1),\n width: 44,\n },\n});\n\nfunction repoToArray(repos) {\n return Utils.objectMap(repos, (repo, name) => ({\n title: name,\n link: repo.link,\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 onValueChanged,\n onChangeActiveRepo,\n repoInfo,\n}) => <TableRow className=\"float_row\">\n <TableCell className={UtilsCommon.clsx(classes.dragColumn, 'float_cell')} title={t('Drag and drop to reorder')}>\n <DragHandle t={t} />\n </TableCell>\n <TableCell className={UtilsCommon.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.toLowerCase().startsWith('beta');\n } else {\n newData.common.activeRepo.splice(pos, 1);\n }\n\n if (item.title.toLowerCase().startsWith('beta') && newData.common.activeRepo.find(r => r.toLowerCase().startsWith('stable'))) {\n pos = newData.common.activeRepo.findIndex(r => r.toLowerCase().startsWith('stable'));\n newData.common.activeRepo.splice(pos, 1);\n } else if (item.title.toLowerCase().startsWith('stable') && newData.common.activeRepo.find(r => r.toLowerCase().startsWith('beta'))) {\n pos = newData.common.activeRepo.findIndex(r => r.toLowerCase().startsWith('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={UtilsCommon.clsx(classes.stableColumn, 'float_cell')}>\n <Tooltip title={I18n.t('Flag will be automatically detected as repository will be read for the first time')}>\n <span>\n <Checkbox\n disabled\n checked={repoInfo[item.title]?.stable}\n indeterminate={!repoInfo[item.title]}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell className={UtilsCommon.clsx(classes.nameRow, 'float_cell')}>\n <TextField\n variant=\"standard\"\n value={item.title}\n InputLabelProps={{ shrink: true }}\n InputProps={{ readOnly: false }}\n className={UtilsCommon.clsx(classes.input, 'xs-centered')}\n onChange={evt => onValueChanged(evt.target.value, item.title, 'title')}\n />\n </TableCell>\n <TableCell className={UtilsCommon.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={UtilsCommon.clsx(classes.input, 'xs-centered')}\n onChange={evt => onValueChanged(evt.target.value, item.title, 'link')}\n />\n </TableCell>\n <TableCell className={UtilsCommon.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(({\n items,\n classes,\n multipleRepos,\n t,\n error,\n adminGuiConfig,\n dataAux,\n onDelete,\n onValueChanged,\n onChangeActiveRepo,\n repositories,\n repoInfo,\n}) => {\n return <Table className={classes.table}>\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell className={UtilsCommon.clsx(classes.dragColumn, 'float_cell')} />\n <TableCell className={UtilsCommon.clsx(classes.enableColumn, 'float_cell')}>{multipleRepos ? I18n.t('Active') : ''}</TableCell>\n <TableCell className={UtilsCommon.clsx(classes.stableColumn, 'float_cell')}>{I18n.t('Stable')}</TableCell>\n <TableCell className={UtilsCommon.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={UtilsCommon.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 repoInfo={repoInfo}\n repositories={repositories}\n onDelete={onDelete}\n onValueChanged={onValueChanged}\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 onValueChanged = (value, id, name) => {\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\n let newConfig;\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 newConfig = this.getUpdateDefaultRepo(value, newData, oldTitle, value);\n }\n\n this.props.onChange(newData, newConfig);\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 onRestore = () => {\n let newData = JSON.parse(JSON.stringify(this.props.data))\n newData.native.repositories = {\n stable: {\n link: 'http://download.iobroker.net/sources-dist.json',\n },\n beta: {\n link: 'http://download.iobroker.net/sources-dist-latest.json',\n }\n };\n // Store old information if already read\n const oldStable = Object.keys(this.props.data.native.repositories).find(name => this.props.data.native.repositories[name].link === newData.native.repositories.stable.link);\n if (oldStable) {\n if (newData.native.repositories.stable.json) {\n newData.native.repositories.stable.json = this.props.data.native.repositories[oldStable].json;\n }\n if (newData.native.repositories.stable.hash) {\n newData.native.repositories.stable.hash = this.props.data.native.repositories[oldStable].hash;\n }\n if (newData.native.repositories.stable.time) {\n newData.native.repositories.stable.time = this.props.data.native.repositories[oldStable].time;\n }\n }\n const oldBeta = Object.keys(this.props.data.native.repositories).find(name => this.props.data.native.repositories[name].link === newData.native.repositories.beta.link);\n if (oldBeta) {\n if (newData.native.repositories.beta.json) {\n newData.native.repositories.beta.json = this.props.data.native.repositories[oldBeta].json;\n }\n if (newData.native.repositories.beta.hash) {\n newData.native.repositories.beta.hash = this.props.data.native.repositories[oldBeta].hash;\n }\n if (newData.native.repositories.beta.time) {\n newData.native.repositories.beta.time = this.props.data.native.repositories[oldBeta].time;\n }\n }\n\n let newConfig = JSON.parse(JSON.stringify(this.props.dataAux));\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = 'stable';\n return newConfig;\n } else {\n newConfig.common.activeRepo = ['stable'];\n }\n\n this.props.onChange(newData, newConfig);\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={classes.fabButton}\n title={this.props.t('Add new line to the repository list')}\n >\n <AddIcon />\n </Fab>\n <Fab\n size=\"small\"\n onClick={this.onRestore}\n className={classes.fabButton}\n title={this.props.t('Restore repository list to default')}\n >\n <RestoreIcon />\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 repoInfo={this.props.repoInfo}\n repositories={this.props.data.native.repositories}\n onDelete={this.onDelete}\n onValueChanged={this.onValueChanged}\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 repoInfo: PropTypes.object,\n};\n\nexport default withWidth()(withStyles(styles)(RepositoriesDialog));\n","// LicensesDialog\nimport { Component } from 'react';\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, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = () => ({\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 async requestLicenses() {\n this.setState({ requesting: true });\n try {\n let password = this.props.data.native.password;\n // if password was not changed\n if (password === '__SOME_PASSWORD__') {\n const obj = await this.props.socket.getObject('system.licenses');\n // if login was changed\n if (obj.native.login !== this.props.data.native.login) {\n password = await this.props.socket.decrypt(obj.native.password);\n } else {\n password = null;\n }\n }\n\n const licenses = await LicensesDialog.requestLicensesByHost(this.props.socket, this.props.host, password ? this.props.data.native.login : null, password, this.props.t);\n\n if (licenses !== null && licenses !== undefined) {\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 this.setState({ licenses, requesting: false });\n } else {\n this.setState({ requesting: false });\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={Utils.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 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, I18n, Utils as UtilsCommon } from '@iobroker/adapter-react-v5';\n\nimport Utils from '../../Utils';\n\n// icons\n\nconst styles = () => ({\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={() => 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: () => this.setState({ chClass: true }),\n onDragLeave: () => this.setState({ chClass: false }),\n onDrop: () => {\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={UtilsCommon.clsx(this.props.classes.littleRow, 'float_cell')}> </TableCell>\n <TableCell className={UtilsCommon.clsx(this.props.classes.nameRow, 'float_cell')}>\n {this.props.t('name')}\n </TableCell>\n <TableCell className={UtilsCommon.clsx('grow_cell', 'float_cell')}>\n {this.props.t('Certificate')}\n </TableCell>\n <TableCell className={UtilsCommon.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\n style={{\n width: '100%',\n // height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n fontSize: 20,\n color: '#ff4949',\n }}\n >\n {this.props.t('ra_Use iobroker.acme adapter for letsencrypt certificates')}\n </div>\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/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-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\n// eslint-disable-next-line no-undef\nace.config.set('basePath', 'lib/js/ace');\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\n showGutter\n highlightActiveLine\n readOnly\n theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={JSON.stringify(this.props.dataAux, null, 2)}\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 repoInfo: {},\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 newState.repoInfo = {};\n\n Object.keys(systemRepositories.native.repositories).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newState.repoInfo[repo] = systemRepositories.native.repositories[repo].json._repoInfo;\n delete systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n delete systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n delete systemRepositories.native.repositories[repo].time;\n }\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 let repoChanged = false;\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]) {\n if (systemRepositories.native.repositories[repo].json) {\n newRepo[repo].json = systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n newRepo[repo].hash = systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n newRepo[repo].time = systemRepositories.native.repositories[repo].time;\n }\n }\n });\n if (JSON.stringify(this.state.systemRepositories.native.repositories) !== JSON.stringify(newRepo)) {\n systemRepositories.native.repositories = newRepo;\n repoChanged = true;\n return this.props.socket.setObject('system.repositories', systemRepositories);\n } else {\n return Promise.resolve();\n }\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(repoChanged);\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 repoInfo={this.state.repoInfo}\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 if (data || dataAux) {\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\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={!0}\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\n style={{\n height: 50,\n withWidth: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={window.loginLogo}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </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>\n <ExpertIcon style={{ marginRight: 8 }} />\n {I18n.t('Expert mode')}\n </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 linkTitle: message.linkTitle,\n img: message.img,\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].linkTitle;\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 variant=\"body2\"\n component=\"p\"\n >\n {Utils.renderTextWithA(text.replace(/\\n/g, '<br />'))}\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 {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';\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, Utils } from '@iobroker/adapter-react-v5';\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={Utils.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' || lines?.error !== undefined) {\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';\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';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport ConfigPanel from '../components/JsonConfigComponent/ConfigPanel';\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={Utils.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';\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 {\n Tooltip,\n AppBar, Avatar, Box,\n Checkbox, CircularProgress, LinearProgress,\n Paper, Step, StepLabel, Stepper, Switch,\n Table, TableBody, TableCell,\n TableContainer, TableHead, TableRow,\n TableSortLabel, Typography,\n} 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, Utils, SelectWithIcon } from '@iobroker/adapter-react-v5';\n\nimport Command from '../components/Command';\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={Utils.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={Utils.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={Utils.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';\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, Router, Confirm as ConfirmDialog, Icon, withWidth } from '@iobroker/adapter-react-v5';\nimport Utils from './components/Utils'; // adapter-react-v5/Components/Utils';\nimport theme from '@iobroker/adapter-react-v5/Theme';\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\nconst DEFAULT_GUI_SETTINGS_OBJECT = {\n type: 'state',\n common: {\n type: 'boolean',\n read: true,\n write: false,\n role: 'state',\n },\n native: {}\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\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 'uk': require('@iobroker/adapter-react-v5/i18n/uk'),\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 'uk': require('./i18n/uk'),\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') !== 'false',\n\n cloudNotConnected: false,\n cloudReconnect: 0,\n\n showRedirect: false,\n redirectCountDown: 0,\n\n triggerAdapterUpdate: 0,\n\n updating: false, // js controller updating\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.getObject(`system.adapter.${this.adminInstance}.guiSettings`)\n .then(async obj => {\n if (!obj) {\n obj = JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, obj);\n }\n\n let state;\n try {\n state = await this.socket.getState(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch (e) {\n state = { val: false };\n }\n if (state && state.val) {\n this.guiSettings = obj;\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 was 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') !== 'false';\n\n this.setState({ guiSettings: true, drawerState, noTranslation }, () => {\n if (Utils.getThemeName() !== this.state.theme.name) {\n this.toggleTheme(Utils.getThemeName());\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 this.guiSettings = obj || JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\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 await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, { val: true, ack: true });\n } else {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, { val: true, ack: true });\n window.location.reload();\n }\n\n await this.getGUISettings();\n });\n } else if (!enabled && this.guiSettings) {\n this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`)\n .then(async obj => {\n if (!obj) {\n try {\n // create object if not exists\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, DEFAULT_GUI_SETTINGS_OBJECT);\n } catch (e) {\n console.error(`Cannot create system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\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 try {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: false,\n ack: true\n });\n } catch (e) {\n window.alert(`Cannot disable settings: ${e}`);\n }\n this.setState({ guiSettings: false });\n });\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 triggerUpdate={this.state.triggerAdapterUpdate}\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 adminInstance={this.adminInstance}\n onUpdating={updating => this.setState({ updating })}\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={repoChanged => {\n Router.doNavigate(null);\n if (repoChanged) {\n this.setState({ triggerAdapterUpdate: this.state.triggerAdapterUpdate + 1})\n }\n }}\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(alertMessage, alertType) {\n if (alertType !== 'error' && alertType !== 'warning' && alertType !== 'info' && alertType !== 'success') {\n alertType = 'info';\n }\n\n this.setState({\n alert: true,\n alertType,\n alertMessage,\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={!0}\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={Utils.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 && !this.state.updating) {\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={Utils.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={Utils.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={Utils.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={Utils.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\n style={{\n height: 50,\n withWidth: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\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={Utils.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 Utils.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={!0}\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 'Loading chunk', // 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 'has no target', // ignore alias 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';\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, I18n } from '@iobroker/adapter-react-v5';\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={Utils.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\n objIconBool\n iconName={name}\n className={classes.icon}\n />}\n {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';\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, Icon, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles = () => ({\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(true)\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={Utils.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={Utils.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 {\n Grid,\n Button,\n} from '@mui/material';\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 './wrapper/i18n';\nimport Utils from './wrapper/Components/Utils';\nimport ConfirmDialog from './wrapper/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 (props.schema) {\n if (props.custom) {\n this.defaultValue = props.schema.defaultFunc ? this.executeCustom(props.schema.defaultFunc, props.schema.default, props.data, props.instanceObj, props.arrayIndex, props.globalData) : props.schema.default;\n } else {\n this.defaultValue = props.schema.defaultFunc ? this.execute(props.schema.defaultFunc, props.schema.default, props.data, props.arrayIndex, props.globalData) : 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 setTimeout(() => this.props.forceUpdate([this.props.attr], this.props.data), 100));\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({\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmOldValue: null,\n confirmData: null,\n }, () =>\n this.props.onChange(data));\n } else {\n this.setState({\n confirmDialog: false,\n confirmDepAttr: null,\n confirmDepNewValue: null,\n confirmNewValue: null,\n confirmAttr: null,\n confirmOldValue: null,\n confirmData: null,\n });\n }\n })\n }\n />;\n }\n\n onChange(attr, newValue, cb) {\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 let _newValue;\n if (this.props.custom) {\n _newValue = this.executeCustom(dep.onChange.calculateFunc, data, this.props.customObj, this.props.instanceObj, this.props.arrayIndex, this.props.globalData);\n } else {\n _newValue = this.execute(dep.onChange.calculateFunc, val, data, this.props.arrayIndex, this.props.globalData);\n }\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, () => cb && cb());\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 cb && cb();\n });\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 ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))) {\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' ? '#a147ff' : '#5b238f', textDecoration: 'underline' }}\n >{this.getText(text, noTranslation)}</a>;\n }\n }\n\n getPattern(pattern, data) {\n data = data || this.props.data;\n if (!pattern) {\n return '';\n } else {\n if (typeof pattern === 'object') {\n if (pattern.func) {\n pattern = pattern.func;\n } else {\n console.log(`Object must be stringified: ${JSON.stringify(pattern)}`);\n pattern = JSON.stringify(pattern);\n }\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 return f(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 } 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(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 </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 './wrapper/i18n';\nimport Utils from './wrapper/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 './wrapper/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 './wrapper/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 { Cron } from '@iobroker/adapter-react-v5';\nexport default Cron;","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 I18n from './wrapper/i18n';\nimport DialogCron from './wrapper/Dialogs/Cron';\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 {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\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 './wrapper/i18n';\n\nconst styles = () => ({\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 {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, 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 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 ConfigGeneric from './ConfigGeneric';\nimport I18n from './wrapper/i18n';\n\nconst styles = () => ({\n fullWidth: {\n width: '100%',\n },\n leWidth: {\n width: 620,\n marginBottom: 10,\n },\n certWidth: {\n width: 200,\n marginRight: 10,\n },\n});\n\nclass ConfigCertificates extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n const certificates = await this.props.socket.getCertificates();\n const certsPublicOptions = [];\n const certsPrivateOptions = [];\n const certsChainOptions = [];\n\n let collectionsOptions = await this.props.socket.getObject('system.certificates');\n if (collectionsOptions?.native?.collections) {\n collectionsOptions = Object.keys(collectionsOptions.native.collections);\n } else {\n collectionsOptions = null;\n }\n\n certificates\n .forEach(el => {\n if (el.type === 'public') {\n certsPublicOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'private') {\n certsPrivateOptions.push({ label: el.name, value: el.name });\n } else if (el.type === 'chained') {\n certsChainOptions.push({ label: el.name, value: el.name });\n } else {\n certsPublicOptions.push({ label: el.name, value: el.name });\n certsPrivateOptions.push({ label: el.name, value: el.name });\n certsChainOptions.push({ label: el.name, value: el.name });\n }\n });\n\n certsPublicOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsPrivateOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n certsChainOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n\n this.setState({\n certsPublicOptions,\n certsChainOptions,\n certsPrivateOptions,\n collectionsOptions,\n });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.certsPublicOptions || !this.state.certsPrivateOptions || !this.state.certsChainOptions) {\n return null;\n }\n const leCollection = (ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false').toString();\n const certPublic = ConfigGeneric.getValue(this.props.data, this.props.schema.certPublicName || 'certPublic');\n const certPrivate = ConfigGeneric.getValue(this.props.data, this.props.schema.certPrivateName || 'certPrivate');\n const certChained = ConfigGeneric.getValue(this.props.data, this.props.schema.certChainedName || 'certChained');\n\n const itemCertPublic = this.state.certsPublicOptions?.find(item => item.value === certPublic);\n const itemCertPrivate = this.state.certsPrivateOptions?.find(item => item.value === certPrivate);\n const itemCertChained = this.state.certsChainOptions?.find(item => item.value === certChained);\n\n return <div className={this.props.classes.fullWidth}>\n {this.state.collectionsOptions ? <FormControl className={this.props.classes.leWidth} variant=\"standard\">\n <InputLabel shrink>Let's encrypt</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={leCollection}\n onChange={e => this.onChange(\n this.props.schema.leCollectionName || 'leCollection',\n e.target.value === 'false' ? false : (e.target.value === 'true' ? true: e.target.value)\n )}\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t('ra_Do not use let\\'s encrypt')}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t('ra_Use all available let\\'s encrypt certificates')}\n </MenuItem>\n {this.state.collectionsOptions?.map(item =>\n <MenuItem\n key={item}\n value={item}\n >\n {item}\n </MenuItem>)}\n </Select>\n </FormControl> : null}\n {this.state.collectionsOptions ? <br /> : null}\n {this.state.collectionsOptions && leCollection !== 'false' ? <div>{I18n.t('ra_Fallback custom certificates')}</div> : null}\n <FormControl className={this.props.classes.certWidth} variant=\"standard\">\n <InputLabel shrink>{I18n.t('ra_Public certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPublic || ''}\n renderValue={() => this.getText(itemCertPublic?.label)}\n onChange={e => this.onChange(this.props.schema.certPublicName || 'certPublic', e.target.value)}\n >\n {this.state.certsPublicOptions?.map((item, i) =>\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>)}\n </Select>\n </FormControl>\n <FormControl className={this.props.classes.certWidth} variant=\"standard\">\n <InputLabel shrink>{I18n.t('ra_Private certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certPrivate || ''}\n renderValue={() => this.getText(itemCertPrivate?.label)}\n onChange={e => this.onChange(this.props.schema.certPrivateName || 'certPrivate', e.target.value)}\n >\n {this.state.certsPrivateOptions?.map((item, i) =>\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>)}\n </Select>\n </FormControl>\n <FormControl className={this.props.classes.certWidth} variant=\"standard\">\n <InputLabel shrink>{I18n.t('ra_Chained certificate')}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n displayEmpty\n disabled={!!disabled}\n value={certChained || ''}\n renderValue={() => this.getText(itemCertChained?.label)}\n onChange={e => this.onChange(this.props.schema.certChainedName || 'certChained', e.target.value)}\n >\n {this.state.certsChainOptions?.map((item, i) =>\n <MenuItem\n key={`${item.value}_${i}`}\n value={item.value}\n style={item.value === ConfigGeneric.NONE_VALUE ? { opacity: 0.5 } : {}}\n >\n {this.getText(item.label)}\n </MenuItem>)}\n </Select>\n </FormControl>\n </div>;\n }\n}\n\nConfigCertificates.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)(ConfigCertificates);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport {\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n FormHelperText,\n} from '@mui/material';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport I18n from './wrapper/i18n';\n\nconst styles = () => ({\n fullWidth: {\n width: '100%',\n },\n});\n\nclass ConfigCertCollection extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n\n let collectionsOptions = await this.props.socket.getObject('system.certificates');\n if (collectionsOptions?.native?.collections) {\n collectionsOptions = Object.keys(collectionsOptions.native.collections);\n } else {\n collectionsOptions = [];\n }\n this.setState({ collectionsOptions });\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.collectionsOptions) {\n return null;\n }\n const leCollection = (ConfigGeneric.getValue(this.props.data, this.props.schema.leCollectionName || 'leCollection') || 'false').toString();\n\n return <FormControl className={this.props.classes.fullWidth} 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={leCollection}\n onChange={e => this.onChange(\n this.props.schema.attr,\n e.target.value === 'false' ? false : (e.target.value === 'true' ? true: e.target.value)\n )}\n >\n <MenuItem\n key=\"_false\"\n value=\"false\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t('ra_Do not use let\\'s encrypt')}\n </MenuItem>\n <MenuItem\n key=\"_true\"\n value=\"true\"\n style={{ fontWeight: 'bold' }}\n >\n {I18n.t('ra_Use all available let\\'s encrypt certificates')}\n </MenuItem>\n {this.state.collectionsOptions?.map(item =>\n <MenuItem\n key={item}\n value={item}\n >\n {item}\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\nConfigCertCollection.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)(ConfigCertCollection);","import { Error } from '@iobroker/adapter-react-v5';\nexport default Error;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport {\n Button,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n DialogTitle,\n} from '@mui/material';\n\nimport IconSend from '@mui/icons-material/Send';\n\nimport I18n from './wrapper/i18n';\nimport DialogError from './wrapper/Dialogs/Error';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfirmDialog from './wrapper/Dialogs/Confirm';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 4,\n },\n licLabel: {\n fontWeight: 'bold',\n minWidth: 100,\n marginRight: 10,\n textTransform: 'capitalize',\n display: 'inline-block',\n },\n licValue: {\n fontWeight: 'normal'\n },\n errorTitle: {\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n },\n okTitle: {\n color: theme.palette.mode === 'dark' ? '#6fd56f' : '#007c00',\n },\n errorText: {\n color: theme.palette.mode === 'dark' ? '#e39191' : '#b62020',\n marginBottom: 30,\n },\n});\n\nclass ConfigCheckLicense extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n this.setState( {\n _error: '',\n running: false,\n showLicenseData: null,\n foundSuitableLicense: false,\n licenseOfflineCheck: false,\n result: null,\n });\n }\n\n renderErrorDialog() {\n if (this.state._error && !this.state.showLicenseData) {\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.showLicenseData) {\n const pre = [];\n const data = this.state.showLicenseData;\n Object.keys(data).forEach(key => {\n if (data[key] === null || data[key] === undefined) {\n return;\n }\n if (typeof data[key] === 'object') {\n const obj = data[key];\n Object.keys(obj).forEach(key1 => {\n if (obj[key1] !== null && obj[key1] !== undefined) {\n if (typeof obj[key1] === 'object') {\n pre.push(<div key={key1}>\n <div className={this.props.classes.licLabel}>{key1}:</div>\n {JSON.stringify(obj[key1], null, 2)}\n </div>);\n } else {\n pre.push(<div key={key1}>\n <div className={this.props.classes.licLabel}>{key} - {key1}:</div>\n {data[key1].toString()}\n </div>);\n }\n }\n });\n } else {\n pre.push(<div key={key}>\n <div className={this.props.classes.licLabel}>{key.replace(/_/g, ' ')}:</div>\n {data[key]}\n </div>);\n }\n });\n pre.push(<div key=\"checked\">\n <div className={this.props.classes.licLabel}>{I18n.t('ra_Checked')}:</div>\n {this.state.licenseOfflineCheck ? I18n.t('ra_locally') : I18n.t('ra_via internet')}\n </div>);\n\n return <Dialog\n open={!0}\n onClose={() => this.setState({ showLicenseData: null })}\n >\n <DialogTitle>\n <span\n className={this.state.result ? this.props.classes.okTitle : this.props.classes.errorTitle}\n >\n {I18n.t('ra_License %s', this.state.result ? 'OK' : 'INVALID')}\n </span>\n </DialogTitle>\n <DialogContent>\n {this.state._error ? <div className={this.props.classes.errorText}>{this.state._error}</div> : null}\n {pre}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => this.setState({ showLicenseData: null })}\n color=\"primary\"\n variant=\"contained\"\n >\n {I18n.t('ra_Close')}\n </Button>\n </DialogActions>\n </Dialog>\n } else {\n return null;\n }\n }\n\n static parseJwt(token) {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64).split('').map(c => `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`).join(''));\n try {\n return JSON.parse(jsonPayload);\n } catch (e) {\n return null;\n }\n }\n\n static isVersionValid(version, rule, invoice, adapterName) {\n if (!rule || !version) {\n return true;\n }\n let result = true;\n const [major] = version.split('.');\n if (rule.startsWith('>=')) {\n result = parseInt(major, 10) >= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('<=')) {\n result = parseInt(major, 10) <= parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('>')) {\n result = parseInt(major, 10) > parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('<')) {\n result = parseInt(major, 10) < parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('=')) {\n result = parseInt(major, 10) === parseInt(rule.substring(1, 10));\n } else if (rule.startsWith('==')) {\n result = parseInt(major, 10) === parseInt(rule.substring(2, 10));\n } else if (rule.startsWith('===')) {\n result = parseInt(major, 10) === parseInt(rule.substring(3, 10));\n }\n\n if (!result && invoice && adapterName) {\n // all commercial licenses are valid for all versions\n if (invoice !== 'free') {\n return true;\n }\n }\n\n return true;\n }\n\n async findInLicenseManager(adapterName) {\n // read if license manager is supported\n const licenses = await this.props.socket.getObject('system.licenses');\n if (licenses?.native?.licenses?.length) {\n // enable license manager\n let useLicense;\n const now = Date.now();\n\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n // find license for vis\n licenses.native.licenses.forEach(license => {\n if (!license.validTill || license.validTill === '0000-00-00 00:00:00' || new Date(license.validTill).getTime() > now) {\n const parts = (license.product || '').split('.');\n if (parts[1] === adapterName &&\n (!useLicense || license.invoice !== 'free') &&\n (!uuid || !license.uuid || license.uuid === uuid) &&\n ConfigCheckLicense.isVersionValid(version, license.version, license.invoice, adapterName)\n ) {\n useLicense = license;\n }\n }\n });\n\n return useLicense?.json;\n } else {\n return false;\n }\n }\n\n static updateLicenses(socket) {\n return new Promise((resolve, reject) => {\n socket.getRawSocket().emit('updateLicenses', null, null, (err, licenses) => {\n if (err === 'permissionError') {\n reject(I18n.t('May not trigger \"updateLicenses\"'));\n } else {\n if (err && err.error) {\n reject(I18n.t(err.error));\n } else if (err) {\n reject(I18n.t(err));\n } else {\n resolve(licenses);\n }\n }\n });\n });\n }\n\n async checkLicense(license, adapterName) {\n let uuid;\n if (this.props.schema.uuid) {\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n uuid = uuidObj?.native?.uuid;\n }\n let version;\n if (this.props.schema.version) {\n const aObj = await this.props.socket.getObject(`system.adapter.${adapterName}`);\n version = aObj?.common?.version;\n }\n\n const controller = new AbortController();\n let timeout = setTimeout(() => {\n timeout = null;\n controller.abort();\n }, 5000);\n\n try {\n const response = await window.fetch('https://iobroker.net/api/v1/public/cert/', {\n method: 'POST',\n body: JSON.stringify({json: license, uuid}),\n headers: {\n 'Content-Type': 'text/plain',\n },\n signal: controller.signal,\n });\n timeout && clearTimeout(timeout);\n let data = await response.text();\n try {\n data = JSON.parse(data);\n } catch (e) {\n // ignore\n }\n\n if (data?.error) {\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n return this.setState({\n _error: data.error,\n licenseOfflineCheck: false,\n showLicenseData: data,\n result: false,\n running: false,\n });\n } catch (e) {\n console.log('Cannot parse license');\n return this.setState({ _error: data.error, result: false, running: false });\n }\n } else {\n let showLicenseData = null;\n try {\n showLicenseData = ConfigCheckLicense.parseJwt(license);\n } catch (e) {\n\n }\n if (data) {\n const validTill = data.validTill || data.valid_till;\n if (validTill && validTill !== '0000-00-00 00:00:00' && new Date(validTill).getTime() < Date.now()) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(validTill).toLocaleString()),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n const parts = (data.name || '').split('.');\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n licenseOfflineCheck: false,\n showLicenseData,\n result: true,\n running: false,\n });\n } else {\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: false,\n showLicenseData,\n result: false,\n running: false,\n });\n }\n } else {\n throw new Error('ra_Invalid answer from server');\n }\n }\n } catch (error) {\n if (error?.response?.status === 404) {\n return this.setState({ _error: I18n.t('ra_License does not exist'), result: false, running: false });\n }\n // check offline\n try {\n const data = ConfigCheckLicense.parseJwt(license);\n const parts = (data.name || '').split('.');\n\n if (data.valid_till && data.valid_till !== '0000-00-00 00:00:00' && new Date(data.valid_till).getTime() < Date.now()) {\n return this.setState({\n _error: I18n.t('ra_License expired on %s', new Date(data.valid_till).toLocaleString()),\n showLicenseData: data,\n licenseOfflineCheck: true,\n running: false,\n result: false,\n });\n }\n if (parts[1] === adapterName) {\n // check UUID\n if (uuid && data.uuid && data.uuid !== uuid) {\n return this.setState({\n _error: I18n.t('ra_Serial number (UUID) \"%s\" in license is for other device.', data.uuid),\n showLicenseData: data,\n licenseOfflineCheck: true,\n result: false,\n running: false,\n });\n }\n\n if (!ConfigCheckLicense.isVersionValid(version, data.version, data.invoice, adapterName)) {\n return this.setState({\n _error: I18n.t('ra_License is for version %s, but required version is %s', data.version, this.props.schema.version),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n\n return this.setState({\n running: false,\n result: true,\n licenseOfflineCheck: true,\n showLicenseData: data,\n });\n } else {\n return this.setState({\n _error: I18n.t('ra_License for other product \"%s\"', data.name),\n licenseOfflineCheck: true,\n showLicenseData: data,\n result: false,\n running: false,\n });\n }\n } catch (e) {\n return this.setState({ _error: I18n.t('ra_Cannot decode license'), result: false, licenseOfflineCheck: true, running: false });\n }\n }\n }\n\n renderAskForUpdate() {\n if (!this.state.askForUpdate) {\n return null;\n }\n return <ConfirmDialog\n text={I18n.t('ra_License not found in license manager. Do you want to read licenses from iobroker.net?')}\n ok={I18n.t('ra_Yes')}\n onClose={async isYes => {\n this.setState({ askForUpdate: false });\n if (isYes) {\n await ConfigCheckLicense.updateLicenses();\n await this._onClick(true);\n }\n }}\n />;\n }\n\n async _onClick(secondRun) {\n const adapterName = this.props.adapterName === 'vis-2-beta' ? 'vis' : this.props.adapterName\n this.setState({ running: true });\n let license;\n if (this.props.data.useLicenseManager) {\n license = await this.findInLicenseManager(adapterName);\n if (!license && !secondRun) {\n // no suitable license found in license manager\n // should we read all licenses again?\n this.setState({ askForUpdate: true });\n return;\n }\n } else {\n license = this.props.data.license;\n }\n if (license) {\n await this.checkLicense(license, adapterName, this.props.schema.uuid);\n } else {\n if (this.props.data.useLicenseManager) {\n this.setState({\n _error: I18n.t('ra_Suitable license not found in license manager'),\n result: false,\n running: false,\n });\n } else {\n // this case could not happen\n this.setState({\n _error: I18n.t('ra_Please enter the license'),\n result: false,\n running: false,\n });\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 || 'outlined'}\n color={this.props.schema.color || 'primary'}\n className={this.props.classes.fullWidth}\n disabled={(!this.props.data.license && !this.props.data.useLicenseManager) || this.state.running}\n startIcon={<IconSend />}\n onClick={() => this._onClick()}\n >\n {this.state.running ? <CircularProgress size={20} style={{ marginRight: 8 }} /> : null}\n {this.getText(this.props.schema.label || 'ra_Check license', this.props.schema.noTranslation)}\n </Button>\n {this.renderMessageDialog()}\n {this.renderErrorDialog()}\n {this.renderAskForUpdate()}\n </div>;\n }\n}\n\nConfigCheckLicense.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};\n\nexport default withStyles(styles)(ConfigCheckLicense);","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 './wrapper/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 let chips = value || this.state.chips || [];\n if (!Array.isArray(chips)) {\n chips = (chips || '').toString().split(/[,\\s]+/).map(c => c.trim());\n }\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 { ColorPicker } from '@iobroker/adapter-react-v5';\nexport default ColorPicker;","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 './wrapper/Components/Utils';\nimport ColorPicker from './wrapper/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 </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.props.schema.readOnly && 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 readOnly: this.props.schema.readOnly || false,\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';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport IconGpsFixed from '@mui/icons-material/GpsFixed';\nimport IconLocationOn from '@mui/icons-material/LocationOn';\n\nimport I18n from './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\n width: {\n width: 'calc(100% - 85px)',\n },\n width50: {\n width: 120,\n marginRight: 5,\n },\n});\n\nclass ConfigCoordinates extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n\n const newState = {};\n if (this.props.schema.useSystemName) {\n newState.useSystem = !!ConfigGeneric.getValue(this.props.data, this.props.schema.useSystemName);\n }\n if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n newState.longitude = ConfigGeneric.getValue(this.props.data, this.props.schema.longitudeName);\n newState.latitude = ConfigGeneric.getValue(this.props.data, this.props.schema.latitudeName);\n if (!newState.longitude && !newState.latitude && this.props.schema.autoInit) {\n setTimeout(() => this.getCoordinates(), 300);\n }\n } else {\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 Object.keys(newState).length && setTimeout(() => this.setState(newState), 50);\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 if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState({\n longitude: obj.common.longitude,\n latitude: obj.common.latitude,\n });\n } else {\n this.setState({ value: obj.common.latitude + (this.props.schema.divider || ',') + obj.common.longitude });\n }\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 if (this.props.schema.longitudeName && this.props.schema.latitudeName) {\n this.setState({\n longitude: position.coords.longitude,\n latitude: position.coords.latitude,\n });\n } else {\n this.setState({ value: position.coords.latitude + (this.props.schema.divider || ',') + position.coords.longitude });\n }\n } else {\n this.getSystemCoordinates();\n }\n },\n error => {\n console.error(`Cannot determine coordinates from browser: ${error}`);\n this.getSystemCoordinates();\n }\n );\n } else {\n this.getSystemCoordinates();\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n return <>\n {this.props.schema.useSystemName ?\n <FormControlLabel\n control={<Checkbox\n value={this.state.useSystem}\n onChange={e => {\n const useSystem = e.target.checked;\n if (useSystem) {\n this.getSystemCoordinates();\n }\n this.setState({ useSystem }, () =>\n this.onChange(this.props.schema.useSystemName, useSystem));\n }}\n />}\n label={I18n.t('ra_Use system settings for position')}\n /> : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ?\n <TextField\n variant=\"standard\"\n className={this.props.classes.width50}\n value={this.state.longitude === null || this.state.longitude === undefined ? '' : this.state.longitude}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const longitude = e.target.value;\n this.setState({ longitude }, () =>\n this.onChange(this.props.schema.longitudeName, (longitude || '').trim()));\n }}\n label={I18n.t('ra_Longitude')}\n /> : null}\n {this.props.schema.longitudeName && this.props.schema.latitudeName ?\n <TextField\n variant=\"standard\"\n className={this.props.classes.width50}\n value={this.state.latitude === null || this.state.latitude === undefined ? '' : this.state.latitude}\n error={!!error}\n disabled={this.state.useSystem || !!disabled}\n onChange={e => {\n const latitude = e.target.value;\n this.setState({ latitude }, () =>\n this.onChange(this.props.schema.latitudeName, (latitude || '').trim()));\n }}\n label={I18n.t('ra_Latitude')}\n /> : null}\n {!this.props.schema.longitudeName || !this.props.schema.latitudeName ?\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 readOnly={this.state.useSystem}\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 /> : null}\n {!this.state.useSystem ?\n <Fab size=\"small\" onClick={() => this.getCoordinates()} title={I18n.t('ra_Take browser position')} style={{ marginRight: 4 }}><IconLocationOn /></Fab> : null}\n {!this.state.useSystem ?\n <Fab size=\"small\" onClick={() => this.getSystemCoordinates()} title={I18n.t('ra_Take position from system settings')}><IconGpsFixed /></Fab> : null}\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 './wrapper/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 => {\n if (lang !== 'en') {\n // try to load English\n return fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => console.log(`Cannot load i18n \"${file}\": ${error}`));\n } else {\n console.log(`Cannot load i18n \"${file}\": ${error}`);\n }\n });\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 { SelectFile } from '@iobroker/adapter-react-v5';\nexport default SelectFile;","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 './wrapper/Components/Utils';\nimport I18n from './wrapper/i18n';\nimport ConfirmDialog from './wrapper/Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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 uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)',\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 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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => <>{this.getIcon(item)}<span>{item?.label || ''}</span></>}\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\n className={this.props.classes.deleteButton}\n size=\"small\"\n onClick={() => this.setState({ deleteFile: item.value })}><IconDelete/>\n </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.fileTypes === 'image') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg'],\n };\n } else if (this.props.schema.fileTypes === 'audio') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4'],\n };\n } else if (this.props.schema.fileTypes === 'text') {\n accept = {\n 'text/plain': ['.txt'],\n };\n }\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': ['.ics'],\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 {\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 SelectFileDialog from './wrapper/Dialogs/SelectFile';\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 <SelectFileDialog\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 { TextWithIcon } from '@iobroker/adapter-react-v5';\nexport default TextWithIcon;","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 './wrapper/Components/TextWithIcon';\nimport I18n from './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => item ? (item.obj ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()} /> : item.label) : ''}\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 {item.obj ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()} /> : 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\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 {\n InputLabel,\n TextField,\n FormHelperText,\n MenuItem,\n FormControl,\n Select,\n} from '@mui/material';\n\nimport I18n from './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n {!this.state.ips ?\n <TextField\n fullWidth\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n /> :\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 ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\n fullWidth: {\n width: '100%',\n },\n});\n\nclass ConfigImageSendTo 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(image => this.setState({ image: image || '', 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.image === undefined) {\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 return <img\n className={this.props.classes.fullWidth}\n alt=\"dynamic content\"\n src={this.state.image}\n style={{ width: this.props.schema.width, height: this.props.schema.height }}\n />;\n }\n}\n\nConfigImageSendTo.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)(ConfigImageSendTo);","import { UploadImage } from '@iobroker/adapter-react-v5';\nexport default UploadImage;","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 './wrapper/Components/UploadImage';\nimport I18n from './wrapper/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 {this.props.schema.label ? <InputLabel shrink>{this.getText(this.props.schema.label)}</InputLabel> : null}\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 './wrapper/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 if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\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 './wrapper/i18n';\nimport CustomModal from '../CustomModal';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-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 './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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: this.props.schema.system ? (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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => 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 './wrapper/i18n';\nimport Utils from './wrapper/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 let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (_value === null || _value === undefined) {\n _value = '';\n }\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 inputProps={{\n readOnly: this.props.schema.readOnly || false,\n }}\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={{\n min: this.props.schema.min,\n max: this.props.schema.max,\n step: this.props.schema.step,\n readOnly: this.props.schema.readOnly || false,\n }}\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 { SelectID } from '@iobroker/adapter-react-v5';\nexport default SelectID;","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 './wrapper/Dialogs/SelectID';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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 {schema.label ? <InputLabel shrink>{this.getText(schema.label)}</InputLabel> : null}\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 types={schema.types ? [schema.types] : undefined}\n customFilter={schema.customFilter}\n filters={schema.filters}\n socket={socket}\n statesOnly={schema.all === undefined ? true : schema.all}\n selected={value}\n root={schema.root}\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 './wrapper/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 { IconCopy } from '@iobroker/adapter-react-v5';\nexport default IconCopy;","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 Utils from './wrapper/Components/Utils';\nimport CopyIcon from './wrapper/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 Utils.copyToClipboard(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 { TextField } from '@mui/material';\n\nimport I18n from './wrapper/i18n';\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 warning: {\n '& .Mui-error': {\n color: 'orange',\n },\n },\n});\n\nclass ConfigPort extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n let _value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n if (_value === null || _value === undefined) {\n _value = '';\n }\n this.setState({ _value: _value.toString(), oldValue: _value.toString() });\n\n // read all instances\n this.props.socket.getAdapterInstances()\n .then(instances => {\n const ownId = `system.adapter.${this.props.adapterName}.${this.props.instance}`;\n const ports = [];\n instances\n .forEach(instance => {\n // ignore own instance\n if (instance._id === ownId) {\n return;\n }\n // if letsencrypt is enabled and update is enabled, then add port to check\n if (instance?.native &&\n instance.native.secure &&\n instance.native.leEnabled &&\n instance.native.leUpdate\n ) {\n const port = parseInt(instance.native.leCheckPort || instance.native.lePort, 10);\n port && ports.push({\n name: `${instance._id.replace('system.adapter.', '')} (LE)`,\n port,\n enabled: instance.common?.enabled,\n });\n }\n\n const port = parseInt(instance?.native?.port, 10);\n if (port) {\n ports.push({\n name: instance._id.replace('system.adapter.', ''),\n port,\n enabled: instance.common?.enabled,\n });\n }\n return null;\n });\n this.setState({ ports });\n });\n }\n\n static getDerivedStateFromProps(props, state) {\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() !== parseInt(state._value, 10).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 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 const min = this.props.schema.min || 20;\n const max = this.props.schema.max || 0xFFFF;\n\n let warning;\n if (this.state.ports) {\n const num = parseInt(this.state._value, 10);\n let idx = this.state.ports.findIndex(item => item.port === num && item.enabled);\n if (idx !== -1) {\n error = I18n.t('ra_Port is already used by %s', this.state.ports[idx].name);\n } else {\n idx = this.state.ports.findIndex(item => item.port === num && !item.enabled);\n if (idx !== -1) {\n warning = true;\n error = I18n.t('ra_Port could be used by %s', this.state.ports[idx].name);\n }\n }\n }\n\n if (!error && this.state._value !== null && this.state._value !== undefined) {\n if (this.state._value < min) {\n error = I18n.t('ra_Too small');\n }\n if (this.state._value > max) {\n error = I18n.t('ra_Too big');\n }\n }\n\n return <TextField\n variant=\"standard\"\n type=\"number\"\n fullWidth\n inputProps={{\n min,\n max,\n readOnly: this.props.schema.readOnly || false,\n }}\n value={this.state._value === null || this.state._value === undefined ? '' : this.state._value}\n error={!!error}\n disabled={!!disabled}\n className={warning ? this.props.classes.warning : ''}\n onChange={e => {\n const _value = e.target.value;\n if (isFinite(_value)) {\n if (parseFloat(_value) < min) {\n this.onError(this.props.attr, I18n.t('ra_Too small'));\n } else if (parseFloat(_value) > 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() === parseInt(_value, 10).toString()) {\n this.onChange(this.props.attr, parseInt(_value, 10) || 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 }\n}\n\nConfigPort.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)(ConfigPort);","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 './wrapper/Components/TextWithIcon';\nimport I18n from './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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\n if (this.props.schema.allowDeactivate !== false) {\n selectOptions.unshift({ label: I18n.t(ConfigGeneric.NONE_LABEL), value: ConfigGeneric.NONE_VALUE });\n }\n\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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={() => item ? (item.obj ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()} /> : item.label) : ''}\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 {item.obj ? <TextWithIcon value={item.obj} themeType={this.props.themeType} lang={I18n.getLanguage()} /> : 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\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 './wrapper/i18n';\nimport Utils from './wrapper/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\n fullWidth: {\n width: '100%'\n },\n noMargin: {\n '&>div': {\n marginTop: 0,\n },\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\n variant=\"standard\"\n className={Utils.clsx(this.props.classes.fullWidth, this.props.arrayIndex !== undefined && this.props.classes.noMargin)}\n id={`jsonSelect_${this.props.schema.attr}_${this.props.index || this.props.index === 0 ? this.props.index : ''}`}\n >\n {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\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 './wrapper/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);\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 { this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null }\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 { Icon } from '@iobroker/adapter-react-v5';\nexport default Icon;","import { Message } from '@iobroker/adapter-react-v5';\nexport default Message;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Button, CircularProgress } from '@mui/material';\n\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconAuth from '@mui/icons-material/Key';\nimport IconSend from '@mui/icons-material/Send';\nimport IconWeb from '@mui/icons-material/Public';\nimport IconSearch from '@mui/icons-material/Search';\n\nimport I18n from './wrapper/i18n';\nimport Icon from './wrapper/Components/Icon';\nimport DialogError from './wrapper/Dialogs/Error';\nimport DialogMessage from './wrapper/Dialogs/Message';\nimport DialogConfirm from './wrapper/Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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\n // check ipv4 addresses\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 ip4 and not docker or wsl\n if (ip.family === 'IPv4' && !ip.address.startsWith('172') && (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))) { // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\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 // check ipv6 addresses\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 (ip.family === 'IPv6' && (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/))) { // if DNS name\n hostIp = ip.address;\n } else if (!hostIp) {\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\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\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({ _message: '' })} />;\n } else {\n return null;\n }\n }\n\n _onClick() {\n this.props.onCommandRunning(true);\n this.setState({ running: true });\n\n const _origin = `${window.location.protocol}//${window.location.host}${window.location.pathname.replace(/\\/index\\.html$/, '')}`\n const _originIp = `${window.location.protocol}//${this.state.hostname.split(':').length > 3 ? `[${this.state.hostname}]` : 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 _originIp,\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 = {\n _origin,\n _originIp,\n };\n }\n let timeout;\n if (this.props.schema.timeout) {\n timeout = setTimeout(() => {\n this.props.onCommandRunning(false);\n this.setState({ _error: I18n.t('ra_Request timed out'), running: false });\n }, parseInt(this.props.schema.timeout, 10) || 10000);\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 (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\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 } if (response?.native && this.props.schema.useNative) {\n const attrs = Object.keys(response.native);\n attrs.forEach(attr =>\n this.onChange(attr, response.native[attr]));\n setTimeout(() => this.props.forceUpdate(attrs, this.props.data), 300);\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(() => {\n this.props.onCommandRunning(false);\n this.setState({ running: false });\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 <DialogConfirm\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 getIcon() {\n let icon = null;\n if (this.props.schema.icon === 'auth') {\n icon = <IconAuth />;\n } else if (this.props.schema.icon === 'send') {\n icon = <IconSend />;\n } else if (this.props.schema.icon === 'web') {\n icon = <IconWeb />;\n } else if (this.props.schema.icon === 'warning') {\n icon = <IconWarning />;\n } else if (this.props.schema.icon === 'error') {\n icon = <IconError />;\n } else if (this.props.schema.icon === 'info') {\n icon = <IconInfo />;\n } else if (this.props.schema.icon === 'search') {\n icon = <IconSearch />;\n } else if (this.props.schema.icon) {\n icon = <Icon src={this.props.schema.icon} />;\n }\n\n return icon;\n }\n\n renderItem(error, disabled, defaultValue) {\n let icon = this.getIcon();\n\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 || !this.props.alive}\n startIcon={icon}\n title={this.props.alive ? this.getText(this.props.schema.title) || '' : I18n.t('ra_Instance is not alive')}\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.showProcess && this.state.running ? <CircularProgress size={20} style={{ marginRight: 8 }} /> : 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);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\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\nimport I18n from './wrapper/i18n';\nimport Icon from './wrapper/Components/Icon';\nimport ConfirmDialog from './wrapper/Dialogs/Confirm';\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 './wrapper/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 style={Object.assign({}, this.props.schema.href ? { cursor: 'pointer' } : {})}\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 IconAuth from '@mui/icons-material/Key';\nimport IconSend from '@mui/icons-material/Send';\nimport IconWeb from '@mui/icons-material/Public';\nimport IconWarning from '@mui/icons-material/Warning';\nimport IconError from '@mui/icons-material/Error';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconSearch from '@mui/icons-material/Search';\n\nimport Icon from './wrapper/Components/Icon';\nimport Utils from './wrapper/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n height: '100%',\n width: '100%',\n },\n link: {\n textDecoration: 'underline',\n color: theme.palette.mode === 'dark' ? '#4dabf5' : '#254e72',\n cursor: 'pointer',\n },\n});\n\nclass ConfigStaticText extends ConfigGeneric {\n getIcon() {\n let icon = null;\n if (this.props.schema.icon === 'auth') {\n icon = <IconAuth />;\n } else if (this.props.schema.icon === 'send') {\n icon = <IconSend />;\n } else if (this.props.schema.icon === 'web') {\n icon = <IconWeb />;\n } else if (this.props.schema.icon === 'warning') {\n icon = <IconWarning />;\n } else if (this.props.schema.icon === 'error') {\n icon = <IconError />;\n } else if (this.props.schema.icon === 'info') {\n icon = <IconInfo />;\n } else if (this.props.schema.icon === 'search') {\n icon = <IconSearch />;\n } else if (this.props.schema.icon) {\n icon = <Icon src={this.props.schema.icon} />;\n }\n\n return icon;\n }\n\n renderItem(error, disabled) {\n if (this.props.schema.button) {\n let icon = this.getIcon();\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 startIcon={icon}\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.getText(this.props.schema.text || this.props.schema.label, this.props.schema.noTranslation)}\n </Button>\n } else {\n let text = this.getText(this.props.schema.text || this.props.schema.label);\n if (text && (text.includes('<a ') || text.includes('<br') || text.includes('<b>') || text.includes('<i>'))) {\n text = Utils.renderTextWithA(text);\n }\n\n return <span\n className={this.props.schema.href ? this.props.classes.link : ''}\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 {text}\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';\n\nimport FormHelperText from '@mui/material/FormHelperText';\nimport {\n IconButton, InputAdornment, Paper,\n Table, TableBody, TableCell, TableContainer,\n TableHead, TableRow, TableSortLabel,\n TextField, Toolbar, Tooltip,\n Typography,\n} 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';\nimport CopyContentIcon from '@mui/icons-material/ContentCopy';\n\nimport I18n from './wrapper/i18n';\nimport Utils from './wrapper/Components/Utils';\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 this.setState({\n value,\n visibleValue: null,\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={Utils.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 newValue.splice(index, 1);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () =>\n this.onChangeWrapper(newValue)));\n };\n\n onClone = index => () => {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const cloned = JSON.parse(JSON.stringify(newValue[index]));\n if (typeof this.props.schema.clone === 'string' && typeof cloned[this.props.schema.clone] === 'string') {\n let i = 1;\n let text = cloned[this.props.schema.clone];\n const pattern = text.match(/(\\d+)$/);\n if (pattern) {\n text = text.replace(pattern[0], '');\n i = parseInt(pattern[0], 10) + 1;\n } else {\n text += '_';\n }\n // eslint-disable-next-line no-loop-func\n while (newValue.find(it => it[this.props.schema.clone] === text + i.toString())) {\n i++;\n }\n cloned[this.props.schema.clone] = `${cloned[this.props.schema.clone]}_${i}`;\n }\n\n newValue.splice(index, 0, cloned);\n\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () =>\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 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\n this.setState({ value: newValue }, () =>\n this.applyFilter(false, null, () =>\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, value, cb) => {\n value = 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 (visibleValue.length === value.length) {\n visibleValue = null;\n }\n\n if (visibleValue === null && this.state.visibleValue === null) {\n cb && cb();\n return;\n }\n\n if (JSON.stringify(visibleValue) !== JSON.stringify(this.state.visibleValue)) {\n this.setState({ visibleValue }, () => cb && cb());\n } else {\n cb && cb();\n }\n }\n\n onMoveUp(idx) {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx - 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () =>\n this.onChangeWrapper(newValue)));\n }\n\n onMoveDown(idx) {\n const newValue = JSON.parse(JSON.stringify(this.state.value));\n const item = newValue[idx];\n newValue.splice(idx, 1);\n newValue.splice(idx + 1, 0, item);\n this.setState({ value: newValue, iteration: this.state.iteration + 10000 }, () =>\n this.applyFilter(false, null, () =>\n this.onChangeWrapper(newValue)));\n }\n\n renderItem(error, disabled, defaultValue) {\n const { classes, schema } = this.props;\n let { value, visibleValue } = this.state;\n\n if (!value) {\n return null;\n }\n\n visibleValue = visibleValue || value.map((_, i) => i);\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 {this.props.schema.clone ? <Tooltip title={I18n.t('ra_Clone current row')}>\n <IconButton size=\"small\" onClick={this.onClone(idx)}>\n <CopyContentIcon />\n </IconButton>\n </Tooltip> : null}\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 {\n Autocomplete,\n TextField,\n TextareaAutosize,\n} from '@mui/material';\n\nimport I18n from './wrapper/i18n';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n indeterminate: {\n opacity: 0.5\n },\n label: {\n width: '100%',\n fontSize: 16,\n },\n helper: {\n width: '100%',\n fontSize: 12,\n },\n error: {\n width: '100%',\n fontSize: 12,\n color: '#FF0000',\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 inputProps={{\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n }}\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 (this.props.schema.minRows > 1) {\n const helper = this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation);\n return <div style={{ width: '100%' }}>\n {this.props.schema.label ? <div className={this.props.classes.label}>{this.getText(this.props.schema.label)}</div> : null}\n <TextareaAutosize\n variant=\"standard\"\n style={{\n width: '100%',\n resize: 'vertical',\n backgroundColor: this.props.themeType === 'dark' ? '#363636' : '#cccccc',\n color: this.props.themeType === 'dark' ? '#fff' : '#111',\n }}\n minRows={this.props.schema.minRows}\n maxRows={this.props.schema.maxRows}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n disabled={!!disabled}\n readOnly={this.props.schema.readOnly || false}\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 />\n {helper || error ? <div className={error ? this.props.classes.error : this.props.classes.helper}>{error || helper}</div> : null}\n </div>\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={{\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: this.props.schema.readOnly || false,\n }}\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}\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 Utils from './wrapper/Components/Utils';\nimport CopyIcon from './wrapper/icons/IconCopy';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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(() => this.askInstance(), 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={() => {\n Utils.copyToClipboard(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';\n\nimport TextField from '@mui/material/TextField';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconCopy from '@mui/icons-material/ContentCopy';\n\nimport I18n from './wrapper/i18n';\nimport Utils from './wrapper/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nclass ConfigUUID extends ConfigGeneric {\n async componentDidMount() {\n super.componentDidMount();\n\n const uuidObj = await this.props.socket.getObject('system.meta.uuid');\n this.setState( { uuid: uuidObj?.native?.uuid || 'unknown'});\n }\n\n renderItem(error, disabled) {\n return <TextField\n variant=\"standard\"\n fullWidth\n error={!!error}\n disabled={!!disabled}\n inputProps={{\n readOnly: true,\n }}\n InputProps={{\n endAdornment: <IconButton onClick={() => {\n Utils.copyToClipboard(this.state.uuid);\n window.alert(I18n.t('ra_Copied %s', this.state.uuid));\n }}>\n <IconCopy />\n </IconButton>\n }}\n value={this.state.uuid || ''}\n label={this.getText(this.props.schema.label) || I18n.t('ra_Serial number (UUID)')}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />;\n }\n}\n\nConfigUUID.propTypes = {\n socket: PropTypes.object.isRequired,\n schema: PropTypes.object,\n};\n\nexport default ConfigUUID;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport {\n InputLabel,\n TextField,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n} from '@mui/material';\n\nimport Icon from './wrapper/Components/Icon';\nimport I18n from './wrapper/i18n';\nimport Utils from './wrapper/Components/Utils';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = () => ({\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 {this.props.schema.label ? <InputLabel>{this.getText(this.props.schema.label)}</InputLabel> : null}\n {!this.state.users ?\n <TextField\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={value}\n onChange={e => this.onChange(this.props.attr, e.target.value)}\n />\n :\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 }\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';\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';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\nimport Utils from './wrapper/Components/Utils';\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 ConfigCertificates from './ConfigCertificates';\nimport ConfigCertCollection from './ConfigCertCollection';\nimport ConfigCheckLicense from './ConfigCheckLicense';\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 ConfigImageSendTo from './ConfigImageSendTo';\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 ConfigPort from './ConfigPort';\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 ConfigUUID from './ConfigUUID';\nimport ConfigUser from './ConfigUser';\n\nconst components = {\n alive: ConfigAlive,\n autocomplete: ConfigAutocomplete,\n autocompleteSendTo: ConfigAutocompleteSendTo,\n certCollection: ConfigCertCollection,\n certificate: ConfigCertificateSelect,\n certificates: ConfigCertificates,\n checkbox: ConfigCheckbox,\n checkLicense: ConfigCheckLicense,\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 imageSendTo: ConfigImageSendTo,\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 port: ConfigPort,\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 uuid: ConfigUUID,\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 const style = this.props.schema.style || {};\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 style={style}\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={Utils.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} style={style}>\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={Utils.clsx(this.props.className, this.props.isParentTab && classes.paper, classes.fullWidth)}\n style={style}\n >\n <Grid container className={Utils.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 { Utils } from '@iobroker/adapter-react-v5';\nexport default Utils;","import { Confirm } from '@iobroker/adapter-react-v5';\nexport default Confirm;","import { I18n } from '@iobroker/adapter-react-v5';\nexport default I18n;","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';\n\nimport { Grid } from '@mui/material';\nimport { Paper } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\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={ Utils.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';\n\nimport { withStyles } from '@mui/styles';\n\nimport { Grid } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\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={Utils.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-2023 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport { Utils as _Utils, I18n } from '@iobroker/adapter-react-v5';\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 * @param {boolean} [noTrim] Allow to use spaces in name (by edit)\n * @returns {string}\n */\n static getObjectNameFromObj(obj, settings, options, isDesc, noTrim) {\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 noTrim ? text : 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 // remove alfa channel\n if (color.length === 8) {\n color = color.substring(0, 6);\n } else\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\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (m) {\n const result = [];\n let key = 1;\n do {\n const start = text.substring(0, m.index);\n text = text.substring(m.index + m[0].length);\n start && result.push(<span key={`a${key++}`}>{start}</span>);\n\n if (m[0].startsWith('<b>')) {\n result.push(<b key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</b>);\n } else if (m[0].startsWith('<i>')) {\n result.push(<i key={`a${key++}`}>{m[0].substring(3, m[0].length - 4)}</i>);\n } else 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\n key={`a${key++}`}\n href={href ? href[1] : ''}\n target={target ? target[1] : '_blank'}\n rel={rel ? rel[1] : ''}\n style={{ color: 'inherit' }}\n >\n {title ? title[1] : ''}\n </a>);\n }\n\n m = text && text.match(/<a [^<]+<\\/a>|<br\\/?>|<b>[^<]+<\\/b>|<i>[^<]+<\\/i>/);\n if (!m) {\n text && result.push(<span key={'a' + (key++)}>{text}</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 e && e.stopPropagation();\n e && e.preventDefault()\n return _Utils.copyToClipboard(text);\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('rgb')) {\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 let alfa = null;\n if (hex.length === 8) {\n alfa = hex.substring(6, 8);\n hex = hex.substring(0, 6);\n } else\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${alfa ? alfa : ''}`\n : `#FFFFFF${alfa ? alfa : ''}`;\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')}${alfa ? alfa : ''}`;\n }\n\n /**\n * Convert RGB to array [r, g, b]\n * @param {string} hex Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns {Array<number>} Array with 3 elements [r, g, b]\n */\n static color2rgb(hex) {\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 && hex.length !== 8) {\n console.warn(`Cannot invert color: ${hex}`);\n return false;\n }\n\n return [\n parseInt(hex.slice(0, 2), 16),\n parseInt(hex.slice(2, 4), 16),\n parseInt(hex.slice(4, 6), 16),\n ];\n }\n\n // Big thanks to: https://github.com/antimatter15/rgb-lab\n /**\n * Convert RGB to LAB\n * @param {Array<number>} rgb color in format [r,g,b]\n * @returns {Array<number>} lab color in format [l,a,b]\n */\n static rgb2lab(rgb){\n let r = rgb[0] / 255;\n let g = rgb[1] / 255;\n let b = rgb[2] / 255;\n\n r = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;\n let y = (r * 0.2126 + g * 0.7152 + b * 0.0722); /* / 1.00000; */\n let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;\n\n x = (x > 0.008856) ? Math.pow(x, 0.33333333) : (7.787 * x) + 0.137931; // 16 / 116;\n y = (y > 0.008856) ? Math.pow(y, 0.33333333) : (7.787 * y) + 0.137931; // 16 / 116;\n z = (z > 0.008856) ? Math.pow(z, 0.33333333) : (7.787 * z) + 0.137931; // 16 / 116;\n\n return [(116 * y) - 16, 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Calculate the distance between two colors in LAB color space in the range 0-100^2\n * If distance is less than 1000, the colors are similar\n * @param {string} color1 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @param {string} color2 Color in the format '#rrggbb' or '#rgb' (or without hash) or rgb(r,g,b) or rgba(r,g,b,a)\n * @returns {number} distance in the range 0-100^2\n */\n static colorDistance(color1, color2) {\n const lab1 = Utils.rgb2lab(Utils.color2rgb(color1));\n const lab2 = Utils.rgb2lab(Utils.color2rgb(color2));\n const dltL = lab1[0] - lab2[0];\n const dltA = lab1[1] - lab2[1];\n const dltB = lab1[2] - lab2[2];\n const c1 = Math.sqrt(lab1[1] * lab1[1] + lab1[2] * lab1[2]);\n const c2 = Math.sqrt(lab2[1] * lab2[1] + lab2[2] * lab2[2]);\n const dltC = c1 - c2;\n let dltH = dltA * dltA + dltB * dltB - dltC * dltC;\n dltH = dltH < 0 ? 0 : Math.sqrt(dltH);\n const sc = 1.0 + 0.045 * c1;\n const sh = 1.0 + 0.015 * c1;\n const dltLKlsl = dltL;\n const dltCkcsc = dltC / sc;\n const dltHkhsh = dltH / sh;\n const i = dltLKlsl * dltLKlsl + dltCkcsc * dltCkcsc + dltHkhsh * dltHkhsh;\n return i < 0 ? 0 : i;\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 y;\n let 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 (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n y = Utils._toVal(mix[k]);\n if (y) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (const 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).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).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/, '&nbsp;'));\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/uk';\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({\n title: message.title,\n text: message.text,\n link: message.link,\n buttons: message.buttons,\n level: message.level,\n });\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={!0}\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';\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}));\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 setText('');\n fetch(url)\n .then(el => el.text())\n .then(text => {\n setLoading(false);\n setText(text);\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}>\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={!0}\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;\nvar _excluded = [\"title\", \"titleId\"];\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); }\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; }\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; }\nimport * as React from \"react\";\nfunction SvgGlobe(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\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}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGlobe);\nexport default __webpack_public_path__ + \"static/media/globe.f11bdd281223eb5584e7396a95915b6c.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _polygon;\nvar _excluded = [\"title\", \"titleId\"];\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); }\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; }\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; }\nimport * as React from \"react\";\nfunction SvgLink(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\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}\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 { Utils } from '@iobroker/adapter-react-v5';\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/, '&nbsp;'));\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 Utils.copyToClipboard(text, e);\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 // ![Logo](admin/iot.png)\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].includes('nodei.co') ? (<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('&gt;', '>').replace('&lt;', '<').replace('&amp;', '&');\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 &lt;\n line = line.replace(/<-/g, '&lt;-');\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, I18n, Loader } from '@iobroker/adapter-react-v5';\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 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 uriGithub,\n text: null,\n };\n\n this.t = props.t;\n }\n\n async componentDidMount() {\n // https://github.com/iobroker-community-adapters/ioBroker.acme/blob/main/README.md =>\n // https://raw.githubusercontent.com/iobroker-community-adapters/ioBroker.acme/main/README.md\n const link = this.props.link.replace('github.com', 'raw.githubusercontent.com').replace('blob/', '');\n\n try {\n const data = await fetch(link);\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(`![Logo](admin/${this.props.adapter}.png)`);\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 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 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 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({ tab: newValue });\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\n 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\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';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from '@mui/styles';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\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={Utils.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={Utils.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\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={Utils.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={Utils.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 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 { Utils } from '@iobroker/adapter-react-v5';\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={e => {\n if (this) {\n this.onerror = null;\n this.src = './img/no-image.png';\n } else if (e.target) {\n e.target.onerror = null;\n e.target.src = './img/no-image.png';\n }\n }} />;\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={Utils.clsx(classes.root, hidden ? classes.hidden : '')}>\n {(openCollapse || focused) && <div className={Utils.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={Utils.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={Utils.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={Utils.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={Utils.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 const adapters = categories\n .map(category => category.adapters)\n .flat()\n .sort()\n\n return adapters\n .map((el, i) => {\n if (i && adapters[i - 1] === el) {\n return null;\n }\n const adapter = repository[el];\n if (!adapter?.controller) {\n const parts = (adapter.extIcon || adapter.meta || adapter.readme || '').toString().split('/');\n\n let name = adapter?.name;\n if (!name) {\n name = adapter.titleLang;\n if (name && typeof name === 'object') {\n name = name[I18n.getLanguage()] || name.en;\n } else {\n name = adapter.title || el;\n }\n }\n\n return {\n value: `${el}/${parts[3]}`,\n name: `${name} [${parts[3]}]`,\n icon: adapter.extIcon || adapter.icon,\n nogit: !!adapter.nogit,\n title: el,\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 moment from 'moment';\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 { Utils, I18n } from '@iobroker/adapter-react-v5';\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 if (!this.props.installed[adapter]) {\n // during installation this adapter was uninstalled\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: Utils.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, fromVersion) {\n const adapterObj = this.props.repository[adapter];\n const installed = this.props.installed[adapter];\n fromVersion = fromVersion || installed.version;\n const result = [];\n\n if (installed && adapterObj && adapterObj.news) {\n Object.keys(adapterObj.news).forEach(version => {\n try {\n if (semver.gt(version, fromVersion) && 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 { `• ${value}`}\n </Typography>;\n })}\n </Grid>);\n }\n } catch (e) {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${fromVersion}\"`);\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, this.state.showNews.fromVersion);\n\n return <Dialog\n onClose={() => this.setState({ showNews: null })}\n open={!0}\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';\nimport LanguageIcon from '@mui/icons-material/Language';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport AdaptersUpdater from '../components/Adapters/AdaptersUpdater';\nimport Command from '../components/Command';\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={!0}\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={!0}\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 { 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';\nimport Utils from '../components/Utils'; // adapter-react-v5/Components/Utils';\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: '#000',\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 compactRepositories: null,\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 triggerUpdate: props.triggerUpdate,\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, compactRepositories) {\n hostData = hostData || this.state.hostData;\n ratings = ratings || this.state.ratings;\n instances = instances || this.state.instances;\n compactRepositories = compactRepositories || this.state.compactRepositories;\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 if (value.startsWith('_')) {\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 compactRepositories,\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 let instances;\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 instances = _instances;\n return this.props.socket.getCompactSystemRepositories(update)\n .catch(e => {\n window.alert(`Cannot read getCompactSystemRepositories: ${e}`);\n return {};\n });\n })\n .then(compactRepositories => {\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, compactRepositories);\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 if (adapter.dependencies && !Array.isArray(adapter.dependencies)) {\n adapter.dependencies = [adapter.dependencies];\n }\n\n if (adapter.globalDependencies && !Array.isArray(adapter.globalDependencies)) {\n adapter.globalDependencies = [adapter.globalDependencies];\n }\n\n const dependencies = [\n ...(adapter.dependencies || []),\n ...(adapter.globalDependencies || []),\n ];\n const nodeVersion = adapter.node;\n\n dependencies && dependencies.length && dependencies.forEach(dependency => {\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 let url = adapter.extIcon || adapter.icon || '';\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, async result =>\n result && await this.addInstance(value), url);\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={() => {\n let url = adapter.extIcon || adapter.icon || '';\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, result =>\n result && this.upload(value), url)\n }}\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\n style={{\n margin: 20,\n fontSize: 26,\n }}\n >\n {this.props.t('all items are filtered out')}\n </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 let url = adapter.extIcon || adapter.icon || '';\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, async result =>\n result && await this.addInstance(value), url);\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={() => {\n let url = adapter.extIcon || adapter.icon || '';\n if (url.includes('/main')) {\n url = `${url.split('/main')[0]}/main/LICENSE`;\n } else {\n url = `${url.split('/master')[0]}/master/LICENSE`;\n }\n\n licenseDialogFunc(adapter.license === 'MIT', this.props.theme, result =>\n result && this.upload(value), url);\n }}\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={!0}\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 // update adapters, because repository could be changed\n if (this.state.triggerUpdate !== this.props.triggerUpdate) {\n setTimeout(() => {\n this.setState({ triggerUpdate: this.props.triggerUpdate }, () =>\n this.updateAll(true));\n }, 100);\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 // fast check if active repo is stable\n let stableRepo =\n (\n typeof this.props.systemConfig.common.activeRepo === 'string' &&\n this.props.systemConfig.common.activeRepo.toLowerCase().startsWith('stable')\n )\n ||\n (\n this.props.systemConfig.common.activeRepo &&\n typeof this.props.systemConfig.common.activeRepo !== 'string' &&\n this.props.systemConfig.common.activeRepo.find(r => r.toLowerCase().startsWith('stable'))\n );\n\n // if repositories are available\n const repositories = this.state.compactRepositories?.native?.repositories;\n if (repositories) {\n // old style with just one active repository\n if (typeof this.props.systemConfig.common.activeRepo === 'string') {\n // Todo (BF 2022.08.19): remove this check after one month. Flag will be stored in _repoInfo\n if (!this.props.systemConfig.common.activeRepo.toLowerCase().startsWith('stable') &&\n repositories[this.props.systemConfig.common.activeRepo]?.json?._repoInfo\n ) {\n stableRepo = repositories[this.props.systemConfig.common.activeRepo].json?._repoInfo.stable;\n }\n } else\n // new style with multiple active repositories\n if (this.props.systemConfig.common.activeRepo && typeof this.props.systemConfig.common.activeRepo !== 'string') {\n // if any active repo is not stable, show warning\n // Todo (BF 2022.08.19): remove this check after one month. Flag will be stored in _repoInfo\n stableRepo = !this.props.systemConfig.common.activeRepo.find(repo => !repo.toLowerCase().startsWith('stable') &&\n (!repositories[repo] ||\n !repositories[repo].json?._repoInfo?.stable));\n }\n }\n let repoName;\n if (!stableRepo) {\n repoName = Array.isArray(this.props.systemConfig.common.activeRepo) ? this.props.systemConfig.common.activeRepo.join(', ') : this.props.systemConfig.common.activeRepo;\n // old style with just one active repository\n if (typeof this.props.systemConfig.common.activeRepo === 'string') {\n const repoInfo = repositories && repositories[this.props.systemConfig.common.activeRepo]?.json?._repoInfo;\n if (repoInfo?.name) {\n if (repoInfo.name && typeof repoInfo.name === 'object') {\n repoName = repoInfo.name[this.props.lang] || repoInfo.name.en;\n } else {\n repoName = repoInfo.name;\n }\n }\n } else\n // new style with multiple active repositories\n if (this.props.systemConfig.common.activeRepo && typeof this.props.systemConfig.common.activeRepo !== 'string') {\n repoName = this.props.systemConfig.common.activeRepo.map(repo => {\n const repoInfo = repositories && repositories[repo]?.json?._repoInfo;\n if (repoInfo?.name) {\n if (repoInfo.name && typeof repoInfo.name === 'object') {\n return repoInfo.name[this.props.lang] || repoInfo.name.en;\n } else {\n return repoInfo.name;\n }\n }\n return repo;\n }).join(', ');\n }\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={Utils.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 {!stableRepo ?\n <div className={this.props.classes.notStableRepo}>{this.t('Active repo is \"%s\"', repoName)}</div> : null}\n <TableContainer className={Utils.clsx(classes.container, !stableRepo ? 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 {!stableRepo ? <div className={this.props.classes.notStableRepo}>{this.t('Active repo is \"%s\"', repoName)}</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={!0}\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={!0}\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 triggerUpdate: PropTypes.number,\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"],"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","b","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","systemConfig","it","map","aa","bb","tabsVisible","handleNavigation","IconButton","ChevronLeft","currentTab","newObj","href","SwipeableDrawer","List","offset","Connecting","TOOLBAR_HEIGHT","WizardPasswordTab","TextField","errorPassword","errorPasswordRepeat","Button","withWidth","WizardLicenseTab","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions","lines","LicenseTexts","line","FormControl","InputLabel","Select","MenuItem","FormControlLabel","Checkbox","Toolbar","SvgPin","SETTINGS_WIDTH","CURRENCY","WizardSettingsTab","position","data","changed","latitude","longitude","center","Style","Icon","Map","Tile","OSM","View","Feature","Point","lonLat","zoom","Autocomplete","newValue","currency","option","params","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","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","onValueChanged","onChangeActiveRepo","repoInfo","TableRow","TableCell","showWarning","arr","indexA","indexB","Delete","SortableList","Table","TableHead","TableBody","RepositoriesDialog","oldTitle","newConfig","oldStable","oldBeta","newRepo","newTitle","oldIndex","newIndex","Add","TableContainer","LicensesDialog","login","resolve","reject","err","licenses","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","SOME_PASSWORD","SystemSettingsDialog","diagData","newTab","Router","licenseManager","newState","systemRepositories","systemCertificates","systemLicenses","repoChanged","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","setInstancesInputsParams","installProgress","currentInstall","installStatus","cmdName","resetStateBack","checkInstall","suggested","setSuggested","showAll","setShowAll","instancesInputsParams","steps","logs","finishInstall","selectLogsIndex","setSelectLogsIndex","Visibility","label","newCheckboxChecked","val","ReportProblem","AssignmentTurnedIn","logsSuccess","adapterId","find","logsError","NavigateBefore","Search","LibraryAdd","NavigateNext","Instances","Intro","Logs","Files","Objects","Users","Enums","Hosts","EasyMode","query","generateClassName","DEFAULT_GUI_SETTINGS_OBJECT","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","updating","alertMessage","alertType","Snackbar","isYes","stack","Loader","expertModePermanent","IsVisible","HostSelectors","hostName","PictureInPictureAlt","DndProvider","Menu","build","container","LocalizationProvider","AdapterDateFns","_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","_newValue","_attr","arrayIndex","globalData","customObj","hidden","renderedItem","ConfigGeneric","ConfigAlive","ConfigAutocomplete","selectOptions","options","ConfigAutocompleteSendTo","list","ConfigCRON","showDialog","ConfigCertificateSelect","ConfigCertificates","certificates","certsPublicOptions","certsPrivateOptions","certsChainOptions","collectionsOptions","leCollection","certChained","itemCertPublic","itemCertPrivate","itemCertChained","ConfigCertCollection","ConfigCheckLicense","pre","key1","token","base64","jsonPayload","rule","invoice","major","useLicense","uuidObj","aObj","controller","timeout","response","showLicenseData","validTill","secondRun","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","useSystem","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","byte","deleteFile","binaryString","len","buf","buffer","folders","buttons","play","accept","ConfigFile","extension","SelectFile","ConfigFunc","enums","TextWithIcon","ConfigIP","ips","ConfigImageSendTo","image","ConfigImageUpload","exist","UploadImage","ConfigInstanceSelect","ConfigJsonEditor","showSelectId","LANGUAGES","languages","ConfigNumber","_value","isNumber","ConfigObjectId","PASSWORD_PLACEHOLDER","ConfigPassword","repeatPassword","_notEqual","InputAdornment","VisibilityOff","ConfigPattern","ConfigPort","ownId","ports","min","warning","ConfigSelect","ConfigSelectSendTo","v","_item","ip2int","findNetworkAddressOfHost","ConfigSendto","hostObj","_origin","_originIp","arg","attrs","ConfigSetState","ConfigSlider","unit","marks","ConfigStaticDivider","ConfigStaticHeader","ConfigStaticImage","src","ConfigStaticText","objectToArray","nameOfFirstAttr","nameOfSecondAttr","arrayToObject","row","ConfigTable","orderCheck","order","orderBy","newOrder","comparator","stabilizedThis","cloned","updateVisible","newItem","accumulator","currentValue","clear","visibleValue","valueInputRef","attrItem","schemaForAttribute","schemaItem","valueChange","buttonsWidth","doAnyFilterSet","filterOn","ConfigText","helper","ConfigTextSendTo","ConfigTimePicker","TimePicker","convertID2Topic","prefix","topic","ConfigTopic","ConfigUUID","ConfigUser","_users","components","ConfigChip","ConfigRoom","ItemComponent","ConfigPanelStyled","Accordion","AccordionSummary","AccordionDetails","State","TabContainer","TabContent","TabHeader","toggleTheme","size","NAMESPACE","months","QUALITY_BITS","SIGNATURES","_Utils","word","isDesc","noTrim","forEnumId","dest","removed","defaultEnabling","s","rgb","secs","angle","format","year","day","date","start","rel","states","instanceId","noCommon","newSmartName","byON","smartType","language","nnn","_smartName","smartName","empty","invert","alfa","color1","color2","lab1","lab2","dltL","dltA","dltB","c1","c2","dltC","dltH","sc","sh","dltLKlsl","dltCkcsc","dltHkhsh","mix","tmp","themes","newTheme","dateObj","dd","header","doc","filename","quality","ex","blob","signature","AdapterUpdateDialog","dependency","entry","objMessages","oldVersion","newVersion","show","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","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","fromVersion","Language","AdaptersUpdaterDialog","updated","RatingDialog","votings","commentsByLanguage","found","ListItemAvatar","WIDTHS","SUM","arg1","arg2","bigUpdate","indicateUpdate","_adapters","hostData","ratings","_hostData","_ratings","_instances","compactRepositories","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","stableRepo","repoName","ViewModule","FolderOpen","Folder","Star","ignoreVersion","getHref","instancesWorker","hrefs","CustomTab","prevProps","snapshot"],"sourceRoot":""}