iobroker.admin 7.1.1 → 7.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -8
- package/adminWww/asset-manifest.json +33 -33
- package/adminWww/index.html +1 -1
- package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +1 -1
- package/adminWww/static/js/2534.d8fd195b.chunk.js +2 -0
- package/adminWww/static/js/2534.d8fd195b.chunk.js.map +1 -0
- package/adminWww/static/js/2544.047df092.chunk.js +2 -0
- package/adminWww/static/js/2544.047df092.chunk.js.map +1 -0
- package/adminWww/static/js/2816.f7bf6ba0.chunk.js +2 -0
- package/adminWww/static/js/2816.f7bf6ba0.chunk.js.map +1 -0
- package/adminWww/static/js/3210.1be726e7.chunk.js +2 -0
- package/adminWww/static/js/3210.1be726e7.chunk.js.map +1 -0
- package/adminWww/static/js/4112.9b241792.chunk.js +2 -0
- package/adminWww/static/js/4112.9b241792.chunk.js.map +1 -0
- package/adminWww/static/js/4579.014de1f1.chunk.js +2 -0
- package/adminWww/static/js/4579.014de1f1.chunk.js.map +1 -0
- package/adminWww/static/js/{5174.60f22386.chunk.js → 5174.f5aa1074.chunk.js} +2 -2
- package/adminWww/static/js/5174.f5aa1074.chunk.js.map +1 -0
- package/adminWww/static/js/530.cb8dbcf9.chunk.js +2 -0
- package/adminWww/static/js/530.cb8dbcf9.chunk.js.map +1 -0
- package/adminWww/static/js/6552.0a447e18.chunk.js +2 -0
- package/adminWww/static/js/6552.0a447e18.chunk.js.map +1 -0
- package/adminWww/static/js/6938.af058182.chunk.js +2 -0
- package/adminWww/static/js/6938.af058182.chunk.js.map +1 -0
- package/adminWww/static/js/{8038.cacab580.chunk.js → 8038.ae8b7862.chunk.js} +2 -2
- package/adminWww/static/js/8038.ae8b7862.chunk.js.map +1 -0
- package/adminWww/static/js/858.f34ea2c6.chunk.js +2 -0
- package/adminWww/static/js/858.f34ea2c6.chunk.js.map +1 -0
- package/adminWww/static/js/9399.5852b7e7.chunk.js +2 -0
- package/adminWww/static/js/9399.5852b7e7.chunk.js.map +1 -0
- package/adminWww/static/js/9534.2af54084.chunk.js +2 -0
- package/adminWww/static/js/9534.2af54084.chunk.js.map +1 -0
- package/adminWww/static/js/9917.3662a807.chunk.js +2 -0
- package/adminWww/static/js/9917.3662a807.chunk.js.map +1 -0
- package/adminWww/static/js/{main.c1384a82.js → main.423e60b6.js} +2 -2
- package/adminWww/static/js/main.423e60b6.js.map +1 -0
- package/build-backend/lib/passportSocket.js +8 -10
- package/build-backend/lib/translations.js +0 -1
- package/build-backend/lib/web.js +101 -81
- package/build-backend/main.js +173 -184
- package/io-package.json +14 -14
- package/package.json +97 -96
- package/adminWww/static/js/2534.0bc9912f.chunk.js +0 -2
- package/adminWww/static/js/2534.0bc9912f.chunk.js.map +0 -1
- package/adminWww/static/js/2544.4fa1eef5.chunk.js +0 -2
- package/adminWww/static/js/2544.4fa1eef5.chunk.js.map +0 -1
- package/adminWww/static/js/2816.cfab0128.chunk.js +0 -2
- package/adminWww/static/js/2816.cfab0128.chunk.js.map +0 -1
- package/adminWww/static/js/3210.4c1ccdc2.chunk.js +0 -2
- package/adminWww/static/js/3210.4c1ccdc2.chunk.js.map +0 -1
- package/adminWww/static/js/4112.8c6e6dae.chunk.js +0 -2
- package/adminWww/static/js/4112.8c6e6dae.chunk.js.map +0 -1
- package/adminWww/static/js/4579.cd86a1cb.chunk.js +0 -2
- package/adminWww/static/js/4579.cd86a1cb.chunk.js.map +0 -1
- package/adminWww/static/js/5174.60f22386.chunk.js.map +0 -1
- package/adminWww/static/js/530.8eed62a7.chunk.js +0 -2
- package/adminWww/static/js/530.8eed62a7.chunk.js.map +0 -1
- package/adminWww/static/js/6552.29112fa0.chunk.js +0 -2
- package/adminWww/static/js/6552.29112fa0.chunk.js.map +0 -1
- package/adminWww/static/js/6938.f4331126.chunk.js +0 -2
- package/adminWww/static/js/6938.f4331126.chunk.js.map +0 -1
- package/adminWww/static/js/8038.cacab580.chunk.js.map +0 -1
- package/adminWww/static/js/858.3a130f69.chunk.js +0 -2
- package/adminWww/static/js/858.3a130f69.chunk.js.map +0 -1
- package/adminWww/static/js/9399.c959c5de.chunk.js +0 -2
- package/adminWww/static/js/9399.c959c5de.chunk.js.map +0 -1
- package/adminWww/static/js/9534.68ac37f7.chunk.js +0 -2
- package/adminWww/static/js/9534.68ac37f7.chunk.js.map +0 -1
- package/adminWww/static/js/9917.28c0dbc2.chunk.js +0 -2
- package/adminWww/static/js/9917.28c0dbc2.chunk.js.map +0 -1
- package/adminWww/static/js/main.c1384a82.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/8038.cacab580.chunk.js","mappings":"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","sources":["dialogs/JsControllerUpdater.tsx","dialogs/JsControllerDialog.tsx","components/BaseSettings/BaseSettingsSystem.tsx","components/BaseSettings/BaseSettingsMultihost.tsx","components/BaseSettings/BaseSettingsObjects.tsx","components/BaseSettings/BaseSettingsStates.tsx","components/BaseSettings/BaseSettingsLog.tsx","components/BaseSettings/BaseSettingsPlugins.tsx","dialogs/BaseSettingsDialog.tsx","components/Hosts/HostEdit.tsx","components/Hosts/HostGeneric.tsx","components/Hosts/HostCard.tsx","components/Hosts/HostRow.tsx","tabs/Hosts.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport ipaddr from 'ipaddr.js';\n\nimport {\n LinearProgress,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from '@mui/material';\n\nimport {\n Close as CloseIcon,\n Refresh as ReloadIcon,\n} from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type ThemeType } from '@iobroker/adapter-react-v5';\n\ninterface NetworkInterface {\n address: string;\n netmask: string;\n family: string;\n mac: string;\n internal: boolean;\n cidr: string;\n}\n\ninterface ServerResponse {\n /** If the update is still running */\n running: boolean;\n stderr: string[];\n stdout: string[];\n /** if installation process succeeded */\n success?: boolean;\n }\n\ninterface JsControllerUpdaterProps {\n socket: AdminConnection;\n hostId: `system.host.${string}`;\n onClose: () => void;\n version: string;\n adminInstance: string;\n onUpdating: (updating: boolean) => void;\n themeType?: ThemeType;\n}\n\ninterface JsControllerUpdaterState {\n response: any;\n error: string | null;\n starting: boolean;\n}\n\nexport default class JsControllerUpdater extends Component<JsControllerUpdaterProps, JsControllerUpdaterState> {\n /** If update is currently in progress */\n private updating = false;\n\n /** Ref to the textarea element where the update information is shown to the user */\n private readonly textareaRef: React.RefObject<HTMLTextAreaElement> = React.createRef();\n\n /** The address of the server to get update information from with protocol and port */\n private link = `${window.location.protocol}//${window.location.host}/`;\n\n /** Interval to poll update status from server */\n private interval: ReturnType<typeof setTimeout> | null;\n\n /** Initial timeout to give server time to start without showing an error */\n private startTimeout: ReturnType<typeof setTimeout> | null;\n\n constructor(props: JsControllerUpdaterProps) {\n super(props);\n\n this.state = {\n response: null,\n error: null,\n starting: true,\n };\n }\n\n /**\n * Calls props.onUpdating if the updating state has changed\n *\n * @param updating target value true if update is in progress\n */\n setUpdating(updating: boolean) {\n if (this.updating !== updating) {\n this.updating = updating;\n this.props.onUpdating(updating);\n }\n }\n\n /**\n * Determine the correct ip address of the server\n * If the current admin instance is running on the host to be updated, we take it from browser, else we try to get information from the host object\n */\n async findIpAddress() {\n // Controller to update: this.props.hostId\n // Current admin instance: this.props.adminInstance = 'admin.X'\n // read settings of admin.X\n const instanceObj: ioBroker.InstanceObject = await this.props.socket.getObject(`system.adapter.${this.props.adminInstance}`) as any as ioBroker.InstanceObject;\n if (instanceObj.common.host === this.props.hostId) {\n return;\n }\n\n // we are updating some slave => try to find the common ip address\n const host = await this.props.socket.getObject(this.props.hostId);\n const settings = await this.props.socket.readBaseSettings(this.props.hostId);\n let hostIp = settings?.config?.objects?.host;\n\n if (!hostIp || hostIp === 'localhost') {\n return;\n }\n\n hostIp = ipaddr.parse(hostIp).toString();\n\n if (!host?.native?.hardware?.networkInterfaces) {\n return;\n }\n\n // find common ip address in host.native.hardware.networkInterfaces\n for (const networkInterface of Object.values(host.native.hardware.networkInterfaces)) {\n (networkInterface as NetworkInterface[]).find(addr => {\n // addr = {\n // \"address\": \"192.168.178.45\",\n // \"netmask\": \"255.255.255.0\",\n // \"family\": \"IPv4\",\n // \"mac\": \"00:2e:5c:68:15:e1\",\n // \"internal\": false,\n // \"cidr\": \"192.168.178.45/24\"\n // }\n try {\n const iIP = ipaddr.parseCIDR(addr.cidr).toString();\n if (addr.internal === false && hostIp.match(iIP)) {\n this.link = `${window.location.protocol}//${\n addr.family === 'IPv6' ? `[${addr.address}]` : addr.address\n }:${window.location.port}`;\n }\n } catch {\n // ignore\n }\n return false;\n });\n }\n }\n\n /**\n * Lifecycle hook called if component mounts\n * We try to get the correct ip address on mount and start the update immediately\n */\n async componentDidMount(): Promise<void> {\n try {\n await this.findIpAddress();\n } catch (e) {\n console.error(`Cannot find ip address: ${e.message}`);\n }\n\n try {\n // send update command to js-controller\n await this.props.socket.upgradeController(\n this.props.hostId,\n this.props.version,\n parseInt(this.props.adminInstance.split('.').pop(), 10),\n );\n } catch (e) {\n console.error(`Cannot update controller: ${e.message}`);\n this.setState({ error: I18n.t('Not updatable'), starting: false });\n this.setUpdating(false);\n return;\n }\n\n this.setUpdating(true);\n this.interval = setInterval(() => this.checkStatus(), 1_000); // poll every second\n\n this.startTimeout = setTimeout(() => {\n this.startTimeout = null;\n this.setState({ starting: false });\n }, 10_000); // give 10 seconds to controller to start update\n }\n\n /**\n * Lifecycle hook called if component will unmount\n * Clearing intervals and timers here\n */\n componentWillUnmount() {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n\n if (this.startTimeout) {\n clearTimeout(this.startTimeout);\n this.startTimeout = null;\n }\n }\n\n /**\n * Request the current status from the server and show it in the textarea\n */\n async checkStatus(): Promise<void> {\n console.log(`Request update status from: ${this.link}`);\n\n try {\n const res = await fetch(this.link);\n\n const plainBody = await res.text();\n console.log(`Received status: ${plainBody}`);\n\n const response: ServerResponse = JSON.parse(plainBody);\n\n // sometimes stderr has only one empty string in it\n if (response?.stderr) {\n response.stderr = response.stderr.filter((line: string) => line.trim());\n }\n if (response && !response.running && response.success && response.stdout) {\n response.stdout.push('');\n response.stdout.push('---------------------------------------------------');\n response.stdout.push(I18n.t('%s was successfully updated to %s', 'js-controller', this.props.version));\n } else if (response?.stdout) {\n response.stdout.unshift('');\n response.stdout.unshift('---------------------------------------------------');\n response.stdout.unshift(I18n.t('updating %s to %s...', 'js-controller', this.props.version));\n }\n this.setState({ response, error: null }, () => {\n if (response && !response.running) {\n this.setUpdating(false);\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n } else if (response?.running) {\n this.setUpdating(true);\n }\n\n // scroll down\n if (this.textareaRef.current) {\n setTimeout(() => (this.textareaRef.current.scrollTop = this.textareaRef.current.scrollHeight), 100);\n }\n });\n } catch (e) {\n if (!this.state.starting) {\n this.setState({ error: e.toString() }, () => this.setUpdating(false));\n }\n }\n }\n\n /**\n * Render the UI\n */\n render(): React.JSX.Element {\n return (\n <Dialog\n onClose={(_e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.props.onClose();\n }\n }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n >\n <DialogTitle>{I18n.t('Updating %s...', 'js-controller')}</DialogTitle>\n <DialogContent style={{ height: 400, padding: '0 20px', overflow: 'hidden' }}>\n {(!this.state.response || this.state.response.running) && !this.state.error ?\n <LinearProgress /> : null}\n {this.state.response || this.state.error ? <textarea\n ref={this.textareaRef}\n style={{\n width: '100%',\n height: '100%',\n resize: 'none',\n background: this.props.themeType === 'dark' ? '#000' : '#fff',\n color: this.props.themeType === 'dark' ? '#EEE' : '#111',\n boxSizing: 'border-box',\n fontFamily:\n 'Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace',\n border: this.state.response?.success\n ? '2px solid green'\n : this.state.error ||\n (this.state.response &&\n !this.state.response.running &&\n !this.state.response.success)\n ? '2px solid red'\n : undefined,\n }}\n value={\n this.state.error\n ? this.state.error\n : this.state.response.stderr && this.state.response.stderr.length\n ? this.state.response.stderr.join('\\n')\n : this.state.response.stdout.join('\\n')\n }\n readOnly\n /> : null}\n </DialogContent>\n <DialogActions>\n <Button\n id=\"js-controller-updater-close\"\n variant=\"contained\"\n disabled={this.state.starting || (!this.state.error && this.state.response?.running)}\n onClick={() => {\n if (this.state.response?.success) {\n window.location.reload();\n }\n this.props.onClose();\n }}\n color={this.state.response?.success ? 'primary' : 'grey'}\n startIcon={this.state.response?.success ? <ReloadIcon /> : <CloseIcon />}\n >\n {this.state.response?.success ? I18n.t('Reload') : I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport {\n Accordion, AccordionDetails, AccordionSummary,\n Card, DialogTitle, IconButton,\n Button,\n Dialog,\n DialogActions,\n DialogContent, Box,\n} from '@mui/material';\n\nimport {\n ExpandMore as ExpandMoreIcon,\n Description as DescriptionIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport {\n I18n, Utils, IconCopy,\n type IobTheme,\n} from '@iobroker/adapter-react-v5';\nimport { CONTROLLER_CHANGELOG_URL } from '@/helpers/utils';\n\nconst styles: Record<string, any> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n padding: 10,\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 // },\n h1: {\n fontWeight: 500,\n fontSize: 35,\n margin: '10px 0',\n },\n h2: (theme: IobTheme) => ({\n p: '10px 7px',\n fontSize: 25,\n fontWeight: 300,\n borderRadius: '3px',\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n h22: (theme: IobTheme) => ({\n p: 0,\n m: 0,\n fontSize: 25,\n fontWeight: 300,\n borderRadius: '3px',\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n standardText: {\n fontSize: 15,\n margin: '10px 0',\n '& > a': {\n textDecoration: 'none',\n color: '#1e88e5',\n },\n },\n standardTextSmall: {\n fontSize: 12,\n color: 'black',\n },\n standardTextSmall2: {\n fontSize: 12,\n },\n pre: {\n whiteSpace: 'pre-wrap',\n background: '#e4e3e3',\n padding: 10,\n borderRadius: 3,\n position: 'relative',\n },\n copyButton: {\n color: 'black',\n position: 'absolute',\n right: 10,\n top: 4,\n },\n comment: {\n color: '#00000078',\n },\n accordionSummary: {\n background: '#4dabf5',\n borderRadius: '3px',\n '& .MuiAccordionSummary-content': {\n m: 0,\n },\n },\n accordionDetails:{\n display: 'flex',\n flexDirection: 'column',\n },\n code: (theme: IobTheme) => ({\n backgroundColor: theme.palette.mode === 'dark' ? '#123456' : '#93bbe7',\n p: '0 3px 0 3px',\n }),\n copyButtonSmall: {\n width: 31,\n height: 16,\n },\n};\n\nfunction removeChapter(text: string, remove: string, mustContain: string): string {\n const lines = text.split('\\n');\n const newLines = [];\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].toLowerCase();\n if (line.startsWith('##')) {\n found = line.includes(remove.toLowerCase()) && (!mustContain || !line.includes(mustContain.toLowerCase()));\n }\n\n if (!found) {\n newLines.push(lines[i]);\n }\n }\n\n return newLines.join('\\n');\n}\n\ninterface HostInfoShort {\n location: string;\n os: string;\n}\n\ninterface JsControllerDialogProps {\n socket: any;\n hostId: string;\n version: string;\n onClose: () => void;\n}\n\nconst JsControllerDialog = ({\n socket, hostId, version, onClose,\n}: JsControllerDialogProps) => {\n const [readme, setReadme] = useState<(string | React.JSX.Element)[] | null>(null);\n const [location, setLocation] = useState('');\n const [os, setOS] = useState('');\n\n const copyTextToClipboard = (text: string) => {\n Utils.copyToClipboard(text);\n window.alert(I18n.t('Copied'));\n };\n\n useEffect(() => {\n if (!hostId || typeof hostId !== 'string') {\n console.error(`Invalid hostId: \"${hostId}\" with type ${typeof hostId}`);\n }\n\n if ((!location || !os) && hostId && typeof hostId === 'string') {\n socket.getHostInfoShort(hostId)\n .then((data: HostInfoShort) => {\n if (data.location && data.location !== location) {\n setLocation(data.location);\n }\n // win32, linux, darwin, freebsd, android\n if (data.os && data.os !== os) {\n setOS(data.os);\n }\n\n fetch(`https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${I18n.getLanguage()}/controller-upgrade.md`)\n .then(response => response.text())\n .then(_readme => {\n const _os = data.os || os;\n const _location = (data.location || location).replace(/\\\\/g, '/');\n if (_os === 'win32') {\n _readme = removeChapter(_readme, 'linux', 'windows');\n } else {\n _readme = removeChapter(_readme, 'windows', 'linux');\n }\n _readme = _readme.replace(/cd \\/opt\\/iobroker/g, `cd ${_location}`);\n _readme = _readme.replace(/cd C:\\\\iobroker/g, `cd ${_location}`);\n _readme = _readme.replace(/x\\.y\\.z/g, version);\n const readmeLines = _readme.split('<!-- copy');\n\n const parts: (string | React.JSX.Element)[] = [];\n readmeLines.forEach(chapter => {\n if (chapter.includes('-->')) {\n const parts_ = chapter.split('-->');\n let button = parts_[0];\n const text = parts_[1];\n let small = false;\n if (button.startsWith(' small')) {\n button = button.replace(/^ {2}small /, '');\n small = true;\n }\n button = button.replace(/^\\n\\r/, '').replace(/^\\n/, '');\n if (small) {\n parts.push(<IconButton\n key={`b${parts.length}`}\n onClick={() => copyTextToClipboard(button)}\n >\n <IconCopy />\n </IconButton>);\n } else {\n parts.push(<Button\n key={`b${parts.length}`}\n variant=\"contained\"\n onClick={() => copyTextToClipboard(button)}\n startIcon={<IconCopy />}\n >\n {I18n.t('Copy to clipboard')}\n </Button>);\n }\n parts.push(text);\n } else {\n parts.push(chapter);\n }\n });\n\n setReadme(parts);\n });\n })\n .catch((e: string) =>\n window.alert(`Cannot get information about host \"${hostId}\": ${e}`));\n }\n }, [location, os, socket, version, hostId]);\n\n const renderReadme = () => <>\n {readme.map((text, i) => (typeof text === 'object' ? text : <ReactMarkdown\n key={`t_${i}`}\n components={{\n // eslint-disable-next-line react/no-unstable-nested-components,@typescript-eslint/no-unused-vars\n em: ({ ...props }) => <IconButton\n style={styles.copyButtonSmall}\n onClick={() => copyTextToClipboard((props.children as string[])[0].toString())}\n >\n <IconCopy />\n </IconButton>,\n // eslint-disable-next-line react/no-unstable-nested-components,@typescript-eslint/no-unused-vars\n a: ({ children, ...props }) =>\n <a style={{ color: 'inherit' }} {...props}>{children}</a>,\n // eslint-disable-next-line react/no-unstable-nested-components,@typescript-eslint/no-unused-vars\n code: ({\n children, ref, ...props\n }) => <Box\n component=\"code\"\n sx={styles.code}\n ref={ref as React.RefObject<HTMLElement>}\n {...props}\n >\n {children}\n </Box>,\n }}\n >\n {text}\n </ReactMarkdown>))}\n </>;\n\n const renderText = () => <Card style={styles.root}>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.')}</Box>\n\n <Box component=\"h2\" sx={styles.h2}>{I18n.t('General information for all platforms')}</Box>\n <Box component=\"div\" sx={styles.standardText}>\n {I18n.t('For an update from js-controller 1.x to 2.x please always read the information at')}\n {' '}\n <a\n href=\"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n forum\n </a>\n.\n </Box>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('Otherwise please update the slaves first with an update of master-slave systems and the master last!')}</Box>\n {os !== 'win32' && <>\n <Box component=\"h2\" sx={styles.h2}>{I18n.t('Linux/macOS (new installer)')}</Box>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('This is the recommended option')}</Box>\n\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('Please execute the following commands in an SSH shell (console):')}</Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `iob backup\niob stop\niob update\niob upgrade self\niob start`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>iob stop</div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob fix</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n <div style={styles.standardTextSmall}>iob start</div>\n </pre>\n <div style={styles.standardTextSmall2}>{I18n.t('or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.')}</div>\n <div style={styles.standardTextSmall2}>{I18n.t('If the upgrade command displays Access Rights / Permission errors, then please use the install fixer')}</div>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard('curl -sL https://iobroker.net/fix.sh | bash -');\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>curl -sL https://iobroker.net/fix.sh | bash -</div>\n </pre>\n <div style={styles.standardTextSmall2}>{I18n.t('to fix these issues and upgrade command run again.')}</div>\n\n <Box component=\"h2\" sx={styles.h2}>{I18n.t('Linux/macOS (manually installed)')}</Box>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('A manual installation usually takes place under root as user and therefore a \"sudo\" is necessary before the commands.')}</Box>\n\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('Please execute the following commands in an SSH shell (console):')}</Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${location || '/opt/iobroker'}\niob backup\niob stop\niob update\niob fix\niob upgrade self\niob start\n`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\ncd\n {location || '/opt/iobroker'}\n </div>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>iob stop</div>\n <div style={styles.standardTextSmall}>iob fix</div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n <div style={styles.standardTextSmall}>iob start</div>\n </pre>\n\n <div style={styles.standardTextSmall2}>{I18n.t('or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.')}</div>\n <div style={styles.standardTextSmall2}>{I18n.t('If the upgrade command displays permissions / permissions errors, fix them. Sometimes \"sudo\" is not enough and you have to run the installation as a real root (previously simply sudo su -).')}</div>\n </>}\n {os === 'win32' && <>\n <Box component=\"h2\" sx={styles.h2}>{I18n.t('Windows')}</Box>\n <Box component=\"div\" sx={styles.standardText}>\n {I18n.t('For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page ')}\n <a\n rel=\"noreferrer\"\n href=\"https://www.iobroker.net/#en/download\"\n target=\"_blank\"\n >\n https://www.iobroker.net/#en/download\n </a>\n {I18n.t(' and make the update with it. With the Windows Installer, previously manually installed servers or installations from other operating systems can be migrated to Windows and updated.')}\n </Box>\n\n <Box component=\"h2\" sx={styles.h2}>{I18n.t('Windows (manually installed)')}</Box>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('A manual installation is done with administrator rights. Please start a cmd.exe command line window as an administrator (right-click on cmd.exe and execute as administrator) and execute the following commands:')}</Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}\niob backup\niob stop\niob status\niob update\niob upgrade self\n`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\ncd\n {(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}\n {' '}\n {!location ? I18n.t('(or where ioBroker was installed)') : null}\n </div>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>\niob stop\n {I18n.t('to stop the ioBroker service')}\n </div>\n <div style={styles.standardTextSmall}>\niob status\n {I18n.t('to check if ioBroker has finished')}\n </div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n </pre>\n <div style={styles.standardTextSmall2}>{I18n.t('Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.')}</div>\n </>}\n <Accordion style={{ paddingTop: 14 }}>\n <AccordionSummary\n sx={styles.accordionSummary}\n expandIcon={<ExpandMoreIcon />}\n >\n <Box component=\"h2\" sx={styles.h22}>{I18n.t('Emergency Linux / macOS / Windows')}</Box>\n </AccordionSummary>\n <AccordionDetails\n style={styles.accordionDetails}\n >\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('(manual reinstallation, if somehow nothing works after the update)')}</Box>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('On Windows first please call in the start menu under \"ioBroker\" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.')}</Box>\n\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).')}</Box>\n\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('If there are problems with access rights when running on Linux the command has to be changed slightly:')}</Box>\n\n <div style={styles.standardTextSmall2}>{I18n.t('For systems created with the new Linux installer:')}</div>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${os === 'win32' ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\') : (location || '/opt/iobroker')}\nsudo -u iobroker -H npm install iobroker.js-controller`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\ncd\n {os === 'win32' ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\') : (location || '/opt/iobroker')}\n </div>\n <div style={styles.standardTextSmall}>sudo -u iobroker -H npm install iobroker.js-controller</div>\n </pre>\n <div style={styles.standardTextSmall2}>{I18n.t('For systems installed manually under Linux, prefix sudo or run as root.')}</div>\n <Box component=\"div\" sx={styles.standardText}>{I18n.t('This way is only necessary in very few cases and please consult the forum beforehand!')}</Box>\n </AccordionDetails>\n </Accordion>\n </Card>;\n\n return <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>{I18n.t('js-controller upgrade instructions')}</DialogTitle>\n <DialogContent style={readme ? null : styles.overflowHidden} dividers>\n {readme ? renderReadme() : renderText()}\n </DialogContent>\n <DialogActions>\n <Button\n id=\"js-controller-dialog-changelog\"\n variant=\"contained\"\n onClick={() => {\n window.open(CONTROLLER_CHANGELOG_URL, '_blank');\n }}\n color=\"grey\"\n startIcon={<DescriptionIcon />}\n >\n {I18n.t('Show whole changelog')}\n </Button>\n <Button\n id=\"js-controller-dialog-ok\"\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"primary\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>;\n};\n\nexport default JsControllerDialog;\n","import React, { createRef, Component } from 'react';\n\nimport {\n Grid2,\n FormControlLabel,\n Checkbox,\n TextField,\n Paper,\n} from '@mui/material';\n\nimport { withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 'calc(100% - 16px)',\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n RAM: {\n width: 400,\n marginRight: 8,\n },\n};\n\nexport interface SystemSettings {\n memoryLimitMB?: number;\n hostname?: string;\n statisticsInterval?: number;\n checkDiskInterval?: number;\n instanceStartInterval?: number;\n compact?: boolean;\n allowShellCommands?: boolean;\n memLimitWarn?: number;\n memLimitError?: number;\n noChmod?: boolean;\n}\n\ninterface BaseSettingsSystemProps {\n t: Translate;\n onChange: (settings: SystemSettings) => void;\n settings: SystemSettings;\n currentHost: string;\n}\n\ninterface BaseSettingsSystemState {\n memoryLimitMB: number;\n hostname: string;\n statisticsInterval: number;\n checkDiskInterval: number;\n instanceStartInterval: number;\n compact: boolean;\n allowShellCommands: boolean;\n memLimitWarn: number;\n memLimitError: number;\n noChmod: boolean;\n}\n\nclass BaseSettingsSystem extends Component<BaseSettingsSystemProps, BaseSettingsSystemState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsSystemProps) {\n super(props);\n\n const settings: SystemSettings = this.props.settings || {};\n\n this.state = {\n memoryLimitMB: settings.memoryLimitMB || 0,\n hostname: settings.hostname || '',\n statisticsInterval: settings.statisticsInterval || 15_000,\n checkDiskInterval: settings.checkDiskInterval || 300_000,\n instanceStartInterval: settings.instanceStartInterval || 2_000,\n compact: settings.compact || false,\n allowShellCommands: settings.allowShellCommands || false,\n memLimitWarn: settings.memLimitWarn || 100,\n memLimitError: settings.memLimitError || 50,\n noChmod: settings.noChmod || false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current?.focus();\n }\n\n onChange() {\n this.props.onChange({\n memoryLimitMB: this.state.memoryLimitMB,\n hostname: this.state.hostname,\n statisticsInterval: this.state.statisticsInterval,\n checkDiskInterval: this.state.checkDiskInterval,\n noChmod: this.state.noChmod,\n instanceStartInterval: this.state.instanceStartInterval,\n compact: this.state.compact,\n allowShellCommands: this.state.allowShellCommands,\n memLimitWarn: this.state.memLimitWarn,\n memLimitError: this.state.memLimitError,\n });\n }\n\n render() {\n return <Paper style={styles.paper}>\n <Grid2 style={styles.gridSettings}>\n <Grid2 container direction=\"column\">\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Host name')}\n style={styles.controlItem}\n value={this.state.hostname || this.props.currentHost.replace('system.host.', '')}\n onChange={e => this.setState({ hostname: e.target.value }, () => this.onChange())}\n helperText={this.props.t('You can change the host name, but be aware, that all instances must be assigned anew')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Check disk space interval')}\n style={styles.controlItem}\n value={this.state.checkDiskInterval}\n type=\"number\"\n slotProps={{ htmlInput: { min: 1000 } }}\n onChange={e => this.setState({ checkDiskInterval: parseInt(e.target.value, 10) }, () => this.onChange())}\n helperText={this.props.t('How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Instance statistics update interval')}\n style={styles.controlItem}\n value={this.state.statisticsInterval}\n type=\"number\"\n slotProps={{ htmlInput: { min: 5000 } }}\n onChange={e => this.setState({ statisticsInterval: parseInt(e.target.value, 10) }, () => this.onChange())}\n helperText={this.props.t('How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms')}\n />\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.compact}\n onChange={e => this.setState({ compact: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('Compact mode')}\n />\n <div>{ this.props.t('When enabled adapter instances can run in one or few processes to save RAM usage.') }</div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.allowShellCommands}\n onChange={e => this.setState({ allowShellCommands: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('Allow shell\\'s commands')}\n />\n <div>{ this.props.t('Allow execution of sendToHost(\"shell\", \"cli command\")') }</div>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Limit RAM size for controller')}\n style={styles.controlItem}\n value={this.state.memoryLimitMB}\n type=\"number\"\n onChange={e => this.setState({ memoryLimitMB: parseInt(e.target.value, 10) }, () => this.onChange())}\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <Grid2 container direction=\"row\" style={styles.controlItem}>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Show warning im log if RAM less than')}\n style={styles.RAM}\n value={this.state.memLimitWarn}\n type=\"number\"\n onChange={e => this.setState({ memLimitWarn: parseInt(e.target.value, 10) }, () => this.onChange())}\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Show error in log if RAM less than')}\n style={styles.RAM}\n value={this.state.memLimitError}\n type=\"number\"\n onChange={e => this.setState({ memLimitError: parseInt(e.target.value, 10) }, () => this.onChange())}\n helperText={this.props.t('MB')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsSystem);\n","import React, { createRef, Component } from 'react';\n\nimport {\n Grid2,\n FormControlLabel,\n Checkbox,\n TextField,\n Paper,\n} from '@mui/material';\n\nimport { type AdminConnection, withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, React.CSSProperties> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 'calc(100% - 16px)',\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n RAM: {\n width: 400,\n marginRight: 8,\n },\n};\n\nexport interface MultihostSettings {\n enabled?: boolean;\n secure?: boolean;\n password?: string;\n}\n\ninterface BaseSettingsMultihostProps {\n t: Translate;\n onChange: (settings: MultihostSettings) => void;\n settings: MultihostSettings;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsMultihostState {\n enabled: boolean;\n secure: boolean;\n password?: string;\n}\n\nclass BaseSettingsMultihost extends Component<BaseSettingsMultihostProps, BaseSettingsMultihostState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsMultihostProps) {\n super(props);\n\n const settings: MultihostSettings = this.props.settings || {};\n\n this.state = {\n enabled: settings.enabled || false,\n secure: settings.secure || true,\n password: '',\n };\n\n if (settings.password) {\n this.props.socket.decrypt(settings.password)\n .then((plainPass: string) =>\n this.setState({ password: plainPass }));\n }\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current?.focus();\n }\n\n onChange() {\n const newState: BaseSettingsMultihostState = {\n enabled: this.state.enabled,\n secure: this.state.secure,\n };\n\n if (this.state.password) {\n this.props.socket.encrypt(this.state.password)\n .then((encodedPass: string) => {\n newState.password = encodedPass;\n this.props.onChange(newState);\n });\n } else {\n this.props.onChange(newState);\n }\n }\n\n render() {\n return <Paper style={styles.paper}>\n <form style={styles.form} noValidate autoComplete=\"off\">\n <Grid2 style={styles.gridSettings}>\n <Grid2 container direction=\"column\">\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.enabled}\n onChange={e => this.setState({ enabled: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('Allow slave connections')}\n />\n <div>{ this.props.t('When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.')}</div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.secure}\n onChange={e => this.setState({ secure: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('With password')}\n />\n <div>{ this.props.t('Ask password by connection establishment') }</div>\n </Grid2>\n { this.state.secure ? <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Multi-host password')}\n style={styles.controlItem}\n value={this.state.password}\n type=\"password\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e => this.setState({ password: e.target.value }, () => this.onChange())}\n />\n </Grid2> : null }\n </Grid2>\n </Grid2>\n </form>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsMultihost);\n","import React, { createRef, Component } from 'react';\n\nimport {\n Grid2,\n InputLabel,\n FormControlLabel,\n Checkbox,\n Select,\n Tooltip,\n TextField,\n FormGroup,\n MenuItem,\n FormHelperText,\n FormControl,\n Paper,\n Switch,\n LinearProgress, Box,\n} from '@mui/material';\n\nimport {\n withWidth,\n Confirm as DialogConfirm,\n type IobTheme,\n type Translate,\n} from '@iobroker/adapter-react-v5';\nimport { type AdminConnection } from '@iobroker/socket-client';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: 8,\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: 16,\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: (theme: IobTheme) => ({\n p: 1,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200',\n }),\n};\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000,\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000,\n },\n};\n\nexport interface SettingsObjects {\n type?: 'file' | 'jsonl' | 'redis';\n host?: string;\n port?: number;\n pass?: string;\n connectTimeout?: number;\n writeFileInterval?: number;\n dataDir?: string;\n options?: {\n auth_pass: string;\n retry_max_delay: number;\n retry_max_count: number;\n db: number;\n family: number;\n };\n backup?: {\n disabled: boolean;\n files: number;\n hours: number;\n period: number;\n path: string;\n };\n jsonlOptions?: {\n autoCompress: {\n sizeFactor: number;\n sizeFactorMinimumSize: number;\n };\n throttleFS: {\n intervalMs: number;\n maxBufferedCommands: number;\n };\n };\n noFileCache?: boolean;\n}\n\ninterface BaseSettingsObjectsProps {\n t: Translate;\n onChange: (settings: SettingsObjects) => void;\n settings: SettingsObjects;\n currentHost: string;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsObjectsState {\n type: 'file' | 'jsonl' | 'redis';\n host: string;\n port: number | string;\n connectTimeout: number | string;\n writeFileInterval: number | string;\n dataDir: string;\n options_auth_pass: string;\n options_retry_max_delay: number | string;\n options_retry_max_count: number | string;\n options_db: number | string;\n options_family: number | string;\n backup_disabled: boolean;\n backup_files: number | string;\n backup_hours: number | string;\n backup_period: number | string;\n backup_path: string;\n jsonlOptions_autoCompress_sizeFactor: number | string;\n jsonlOptions_autoCompress_sizeFactorMinimumSize: number | string;\n jsonlOptions_throttleFS_intervalMs: number | string;\n jsonlOptions_throttleFS_maxBufferedCommands: number | string;\n textIP: boolean;\n IPs: string[];\n loading: boolean;\n showWarningDialog: boolean;\n toConfirmType: '' | 'file' | 'jsonl' | 'redis';\n originalDBType: 'file' | 'jsonl' | 'redis';\n noFileCache: boolean;\n}\n\nclass BaseSettingsObjects extends Component<BaseSettingsObjectsProps, BaseSettingsObjectsState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsObjectsProps) {\n super(props);\n\n const settings: SettingsObjects = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : (settings.host || '127.0.0.1'),\n port: settings.port || 9001,\n noFileCache: settings.noFileCache || false,\n dataDir: settings.dataDir || '',\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize: settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP: Array.isArray(settings.host) || !!(settings.host || '').match(/[^.\\d]/) || (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.props.socket.getIpAddresses(this.props.currentHost)\n .then(_IPs => {\n const IPs = [..._IPs];\n if (!IPs.includes('0.0.0.0')) {\n IPs.push('0.0.0.0');\n }\n if (!IPs.includes('127.0.0.1')) {\n IPs.push('127.0.0.1');\n }\n let textIP: boolean = !!this.state.host.match(/[^.\\d]/) || (this.state.host || '').includes(',');\n if (!textIP && !IPs.includes(this.state.host)) {\n textIP = true;\n }\n this.setState({ IPs, loading: false, textIP }, () =>\n this.focusRef.current && this.focusRef.current.focus());\n });\n }\n\n onChange() {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port as string, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout as string, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval as string, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay as string, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count as string, 10),\n db: parseInt(this.state.options_db as string, 10),\n family: parseInt(this.state.options_family as string, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files as string, 10),\n hours: parseInt(this.state.backup_hours as string, 10),\n period: parseInt(this.state.backup_period as string, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor as string, 10),\n sizeFactorMinimumSize: parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string, 10),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs as string, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands as string, 10),\n },\n },\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning() {\n if (this.state.showWarningDialog) {\n return <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState(\n { type: this.state.toConfirmType || 'file', showWarningDialog: false, port },\n () => this.onChange(),\n );\n } else {\n this.setState({ showWarningDialog: false });\n }\n }}\n />;\n }\n return null;\n }\n\n render() {\n return <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3 style={styles.dangerZoneHeader} title={this.props.t('Invalid settings in these fields could lead to dead host')}>{this.props.t('Danger zone')}</h3>\n <Box component=\"p\" sx={styles.warning}>{this.props.t('base_settings_hint')}</Box>\n <Grid2 container direction=\"column\">\n <Grid2>\n <Tooltip title={this.props.t('switch_db_note')} slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({ toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis', showWarningDialog: true });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState(\n { type: e.target.value, port },\n () => this.onChange(),\n );\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{this.props.t('File')}</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid2>\n\n <Grid2 style={{ paddingLeft: 8 }}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e => this.setState({ textIP: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid2>\n\n <Grid2>\n {this.state.textIP ?\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n :\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n >\n { this.state.IPs.map(ip => <MenuItem key={ip} value={ip}>{ip === '0.0.0.0' ? `0.0.0.0 [${this.props.t('All addresses')}]` : ip}</MenuItem>) }\n </Select>\n </FormControl>}\n </Grid2>\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.port}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 1,\n max: 65535,\n },\n }}\n onChange={e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={this.props.t('Port')}\n />\n </Grid2>\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.dataDir}\n helperText={this.props.t('Optional. Always relative to iobroker.js-controller/')}\n onChange={e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={this.props.t('Directory path')}\n />\n </Grid2> : null}\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_auth_pass}\n type=\"password\"\n helperText={this.props.t('Optional')}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e => this.setState({ options_auth_pass: e.target.value }, () => this.onChange())}\n label={this.state.type === 'redis' ? this.props.t('Redis password') : this.props.t('Connection password')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2 container direction=\"column\">\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.connectTimeout}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 200,\n },\n }}\n onChange={e => this.setState({ connectTimeout: e.target.value }, () => this.onChange())}\n label={this.props.t('Connect timeout')}\n />\n </Grid2> : null}\n\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <FormControl component=\"fieldset\" variant=\"standard\" style={styles.controlItem}>\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.noFileCache}\n onChange={e => this.setState({ noFileCache: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('No file cache')}\n />\n </FormGroup>\n <FormHelperText>{this.props.t('Always read files from disk and do not cache them in RAM. Used for debugging.')}</FormHelperText>\n </FormControl>\n </Grid2> : null}\n\n {this.state.type === 'file' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.writeFileInterval}\n helperText={this.props.t('How often the data from RAM will be saved on disk in ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 200,\n },\n }}\n onChange={e => this.setState({ writeFileInterval: e.target.value }, () => this.onChange())}\n label={this.props.t('Store file interval')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_delay}\n type=\"number\"\n helperText={this.props.t('Maximum delay between connection attempts')}\n onChange={e => this.setState({ options_retry_max_delay: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_count}\n type=\"number\"\n helperText={this.props.t('Maximum number of connection retries')}\n onChange={e => this.setState({ options_retry_max_count: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum count')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_db}\n type=\"number\"\n helperText={this.props.t('Used for sentinels')}\n onChange={e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={this.props.t('DB number')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e => this.setState({ options_family: e.target.value }, () => this.onChange())}\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Used for sentinels')}</FormHelperText>\n </FormControl>\n </Grid2> : null }\n\n {this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactor}\n type=\"number\"\n slotProps={{ htmlInput: { min: 2 } }}\n helperText={this.props.t('The JSONL DB is append-only and will contain unnecessary entries after a while.')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2> : null}\n\n {this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2> : null}\n\n {this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_intervalMs}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('Write to the database file no more than every X milliseconds')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () => this.onChange())}\n label={this.props.t('Minimal write interval')}\n />\n </Grid2> : null}\n\n {this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_maxBufferedCommands}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_maxBufferedCommands: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2> : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <FormControl component=\"fieldset\" variant=\"standard\" style={styles.controlItem}>\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e => this.setState({ backup_disabled: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>{this.props.t('By every write the backup of object.json will be created.')}</FormHelperText>\n </FormControl>\n </Grid2> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t('Minimal number of backup files, after the deletion will be executed according to the backup time settings')}\n onChange={e => this.setState({ backup_files: e.target.value }, () => this.onChange())}\n label={this.props.t('Number of files')}\n />\n </Grid2> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t('All backups older than these hours will be deleted, but only if the number of files is greater than of the files number')}\n onChange={e => this.setState({ backup_hours: e.target.value }, () => this.onChange())}\n label={this.props.t('Backup hours')}\n />\n </Grid2> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t('By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0')}\n onChange={e => this.setState({ backup_period: e.target.value }, () => this.onChange())}\n label={this.props.t('How often')}\n />\n </Grid2> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t('Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.')}\n onChange={e => this.setState({ backup_path: e.target.value }, () => this.onChange())}\n label={this.props.t('Path')}\n />\n </Grid2> : null}\n </Grid2>\n </Grid2>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsObjects);\n","import React, { createRef, Component } from 'react';\n\nimport {\n Grid2,\n FormControlLabel,\n Checkbox,\n TextField,\n Paper,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n Tooltip,\n FormHelperText,\n FormGroup,\n Switch,\n LinearProgress, Box,\n} from '@mui/material';\n\nimport {\n Confirm as DialogConfirm,\n withWidth,\n type IobTheme,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { type AdminConnection } from '@iobroker/socket-client';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: 8,\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: 16,\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: (theme: IobTheme) => ({\n p: 1,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200',\n }),\n};\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000,\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000,\n },\n};\n\nexport interface SettingsStates {\n type?: 'file' | 'jsonl' | 'redis';\n host?: string;\n port?: number;\n pass?: string;\n connectTimeout?: number;\n writeFileInterval?: number;\n dataDir?: string;\n options?: {\n auth_pass: string;\n retry_max_delay: number;\n retry_max_count: number;\n db: number;\n family: number;\n };\n backup?: {\n disabled: boolean;\n files: number;\n hours: number;\n period: number;\n path: string;\n };\n jsonlOptions?: {\n autoCompress: {\n sizeFactor: number;\n sizeFactorMinimumSize: number;\n };\n throttleFS: {\n intervalMs: number;\n maxBufferedCommands: number;\n };\n };\n noFileCache?: boolean;\n}\n\ninterface BaseSettingsStatesProps {\n t: Translate;\n onChange: (settings: SettingsStates) => void;\n settings: SettingsStates;\n currentHost: string;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsStatesState {\n type: 'file' | 'jsonl' | 'redis';\n host: string;\n port: number | string;\n connectTimeout: number | string;\n writeFileInterval: number | string;\n dataDir: string;\n options_auth_pass: string;\n options_retry_max_delay: number | string;\n options_retry_max_count: number | string;\n options_db: number | string;\n options_family: number | string;\n backup_disabled: boolean;\n backup_files: number | string;\n backup_hours: number | string;\n backup_period: number | string;\n backup_path: string;\n jsonlOptions_autoCompress_sizeFactor: number | string;\n jsonlOptions_autoCompress_sizeFactorMinimumSize: number | string;\n jsonlOptions_throttleFS_intervalMs: number | string;\n jsonlOptions_throttleFS_maxBufferedCommands: number | string;\n textIP: boolean;\n IPs: string[];\n loading: boolean;\n showWarningDialog: boolean;\n toConfirmType: '' | 'file' | 'jsonl' | 'redis';\n originalDBType: 'file' | 'jsonl' | 'redis';\n noFileCache: boolean;\n}\n\nclass BaseSettingsStates extends Component<BaseSettingsStatesProps, BaseSettingsStatesState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsStatesProps) {\n super(props);\n\n const settings: SettingsStates = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : (settings.host || '127.0.0.1'),\n port: settings.port || 9000,\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n dataDir: settings.dataDir || '',\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize: settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP: Array.isArray(settings.host) || !!(settings.host || '').match(/[^.\\d]/) || (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n noFileCache: settings.noFileCache || false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.props.socket.getIpAddresses(this.props.currentHost)\n .then(_IPs => {\n const IPs = [..._IPs];\n if (!IPs.includes('0.0.0.0')) {\n IPs.push('0.0.0.0');\n }\n if (!IPs.includes('127.0.0.1')) {\n IPs.push('127.0.0.1');\n }\n let textIP: boolean = !!this.state.host.match(/[^.\\d]/) || (this.state.host || '').includes(',');\n if (!textIP && !IPs.includes(this.state.host)) {\n textIP = true;\n }\n this.setState({ IPs, loading: false, textIP }, () =>\n this.focusRef.current && this.focusRef.current.focus());\n });\n }\n\n onChange() {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port as string, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout as string, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval as string, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay as string, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count as string, 10),\n db: parseInt(this.state.options_db as string, 10),\n family: parseInt(this.state.options_family as string, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files as string, 10),\n hours: parseInt(this.state.backup_hours as string, 10),\n period: parseInt(this.state.backup_period as string, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor as string, 10),\n sizeFactorMinimumSize: parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string, 10),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs as string, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands as string, 10),\n },\n },\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning() {\n if (this.state.showWarningDialog) {\n return <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState(\n { type: this.state.toConfirmType || 'file', showWarningDialog: false, port },\n () => this.onChange(),\n );\n } else {\n this.setState({ showWarningDialog: false });\n }\n }}\n />;\n }\n return null;\n }\n\n render() {\n return <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3 style={styles.dangerZoneHeader} title={this.props.t('Invalid settings in these fields could lead to dead host')}>{this.props.t('Danger zone')}</h3>\n <Box component=\"p\" sx={styles.warning}>{this.props.t('base_settings_hint')}</Box>\n <Grid2 container direction=\"column\">\n <Grid2>\n <Tooltip title={this.props.t('switch_db_note')} slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{ this.props.t('Type') }</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({ toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis', showWarningDialog: true });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState(\n { type: e.target.value, port },\n () => this.onChange(),\n );\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{ this.props.t('File') }</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid2>\n\n <Grid2 style={{ paddingLeft: 8 }}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e => this.setState({ textIP: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid2>\n\n <Grid2>\n {this.state.textIP ?\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n :\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n >\n {this.state.IPs.map(ip => <MenuItem\n key={ip}\n value={ip}\n >\n {ip === '0.0.0.0' ? `0.0.0.0 [${this.props.t('All addresses')}]` : ip}\n </MenuItem>)}\n </Select>\n </FormControl>}\n </Grid2>\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.port}\n type=\"number\"\n slotProps={{ htmlInput: { min: 1, max: 65535 } }}\n onChange={e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={this.props.t('Port')}\n />\n </Grid2>\n\n {this.state.type === 'file' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.dataDir}\n helperText={this.props.t('Optional. Always relative to iobroker.js-controller/')}\n onChange={e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={this.props.t('Directory path')}\n />\n </Grid2> : null }\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_auth_pass}\n type=\"password\"\n helperText={this.props.t('Optional')}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e => this.setState({ options_auth_pass: e.target.value }, () => this.onChange())}\n label={this.state.type === 'redis' ? this.props.t('Redis password') : this.props.t('Connection password')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2 container direction=\"column\">\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.connectTimeout}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{ htmlInput: { min: 200 } }}\n onChange={e => this.setState({ connectTimeout: e.target.value }, () => this.onChange())}\n label={this.props.t('Connect timeout')}\n />\n </Grid2> : null }\n\n { this.state.type === 'file' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.writeFileInterval}\n helperText={this.props.t('How often the data from RAM will be saved on disk in ms')}\n type=\"number\"\n slotProps={{ htmlInput: { min: 200 } }}\n onChange={e => this.setState({ writeFileInterval: e.target.value }, () => this.onChange())}\n label={this.props.t('Store file interval')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_delay}\n type=\"number\"\n helperText={this.props.t('Maximum delay between connection attempts')}\n onChange={e => this.setState({ options_retry_max_delay: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_count}\n type=\"number\"\n helperText={this.props.t('Maximum number of connection retries')}\n onChange={e => this.setState({ options_retry_max_count: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum count')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_db}\n type=\"number\"\n helperText={this.props.t('Used for sentinels')}\n onChange={e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={this.props.t('DB number')}\n />\n </Grid2> : null }\n\n { this.state.type === 'redis' ? <Grid2>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{ this.props.t('Family number') }</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e => this.setState({ options_family: e.target.value }, () => this.onChange())}\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{ this.props.t('Used for sentinels') }</FormHelperText>\n </FormControl>\n </Grid2> : null }\n\n { this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactor}\n type=\"number\"\n slotProps={{ htmlInput: { min: 2 } }}\n helperText={this.props.t('The JSONL DB is append-only and will contain unnecessary entries after a while.')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2> : null }\n\n { this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2> : null }\n\n { this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_intervalMs}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('Write to the database file no more than every X milliseconds')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () => this.onChange())}\n label={this.props.t('Minimal write interval')}\n />\n </Grid2> : null }\n\n { this.state.type === 'jsonl' ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_maxBufferedCommands}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t('Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_maxBufferedCommands: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2> : null }\n\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid2>\n <FormControl component=\"fieldset\" style={styles.controlItem} variant=\"standard\">\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e => this.setState({ backup_disabled: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>{ this.props.t('By every write the backup of object.json will be created.') }</FormHelperText>\n </FormControl>\n </Grid2> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t('Minimal number of backup files, after the deletion will be executed according to the backup time settings')}\n onChange={e => this.setState({ backup_files: e.target.value }, () => this.onChange())}\n label={this.props.t('Number of files')}\n />\n </Grid2> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t('All backups older than these hours will be deleted, but only if the number of files is greater than of the files number')}\n onChange={e => this.setState({ backup_hours: e.target.value }, () => this.onChange())}\n label={this.props.t('Backup hours')}\n />\n </Grid2> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t('By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0')}\n onChange={e => this.setState({ backup_period: e.target.value }, () => this.onChange())}\n label={this.props.t('How often')}\n />\n </Grid2> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t('Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.')}\n onChange={e => this.setState({ backup_path: e.target.value }, () => this.onChange())}\n label={this.props.t('Path')}\n />\n </Grid2> : null }\n </Grid2>\n </Grid2>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsStates);\n","import React, { createRef, Component } from 'react';\n\nimport {\n Grid2,\n InputLabel,\n FormControlLabel,\n Checkbox,\n Select,\n TextField,\n FormHelperText,\n Button,\n MenuItem,\n Toolbar,\n FormControl,\n Paper,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Typography,\n Fab,\n} from '@mui/material';\n\n// Icons\nimport {\n ExpandMore as ExpandMoreIcon,\n Add as IconPlus,\n Delete as IconDelete,\n Language as IconHttp,\n InsertDriveFile as IconFile,\n Computer as IconSyslog,\n Send as IconStream,\n} from '@mui/icons-material';\nimport { withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\nimport IconSeq from '../../assets/seq.png';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n padding: 8,\n },\n gridSettings: (theme: IobTheme) => ({\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n width: '100%',\n overflow: 'auto',\n }),\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n delButton: {\n position: 'absolute',\n top: 2,\n right: 48,\n },\n addButton: {\n marginRight: 8,\n },\n buttonIcon: {\n height: 24,\n },\n headingIcon: {\n height: 24,\n marginRight: 8,\n },\n};\n\ninterface TransportSettings {\n type: string;\n enabled: boolean;\n level?: string;\n host?: string;\n port?: number | string;\n protocol?: string;\n path?: string;\n facility?: string;\n localhost?: string;\n sysLogType?: string;\n app_name?: string;\n eol?: string;\n filename?: string;\n fileext?: string;\n maxSize?: number | string;\n maxFiles?: number | string;\n stream?: string;\n silent?: boolean;\n serverUrl?: string;\n apiKey?: string;\n auth?: string;\n ssl?: boolean;\n}\n\nexport interface SettingsLog {\n transport?: Record<string, TransportSettings>;\n level?: string;\n maxDays?: number;\n noStdout?: boolean;\n}\n\ninterface BaseSettingsLogProps {\n t: Translate;\n onChange: (settings: SettingsLog) => void;\n settings: SettingsLog;\n}\n\ninterface BaseSettingsLogState {\n level: string;\n maxDays: number | string;\n noStdout: boolean;\n transport: Record<string, TransportSettings>;\n expanded: string[];\n}\n\nclass BaseSettingsLog extends Component<BaseSettingsLogProps, BaseSettingsLogState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsLogProps) {\n super(props);\n\n const settings: SettingsLog = this.props.settings || {};\n settings.transport = settings.transport || {};\n Object.keys(settings.transport).forEach(id => {\n if (settings.transport[id].type === 'file') {\n const multiplier = typeof settings.transport[id].maxSize === 'string' ? ((settings.transport[id].maxSize as string).includes('k') ? 0.1 : ((settings.transport[id].maxSize as string).includes('g') ? 10 : 1)) : 1;\n settings.transport[id].maxSize = (parseInt(settings.transport[id].maxSize as string, 10) || 0) * multiplier;\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].maxFiles = settings.transport[id].maxFiles || 0;\n } else if (settings.transport[id].type === 'syslog') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '';\n settings.transport[id].facility = settings.transport[id].facility || '';\n settings.transport[id].sysLogType = settings.transport[id].sysLogType || '';\n settings.transport[id].app_name = settings.transport[id].app_name || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'http') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || 'None';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (settings.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'seq') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].serverUrl = settings.transport[id].serverUrl || '';\n settings.transport[id].apiKey = settings.transport[id].apiKey || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.state = {\n level: settings.level || 'info',\n maxDays: settings.maxDays || 7,\n noStdout: settings.noStdout || true,\n transport: settings.transport || {},\n expanded: [],\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current?.focus();\n }\n\n onChange() {\n const settings: SettingsLog = {\n level: this.state.level,\n maxDays: parseInt(this.state.maxDays as string, 10),\n noStdout: this.state.noStdout,\n transport: {},\n };\n\n Object.keys(this.state.transport).forEach(id => {\n settings.transport[id] = JSON.parse(JSON.stringify(this.state.transport[id])) as TransportSettings;\n\n if (this.state.transport[id].type === 'file') {\n settings.transport[id].maxSize = parseInt(settings.transport[id].maxSize as string, 10) || null;\n if (settings.transport[id].maxSize) {\n // 'k', 'm', or 'g'\n settings.transport[id].maxSize = `${settings.transport[id].maxSize.toString()}m`;\n }\n settings.transport[id].maxFiles = parseInt(settings.transport[id].maxFiles as string, 10) || null;\n } else if (this.state.transport[id].type === 'syslog') {\n if (!settings.transport[id].port) {\n delete settings.transport[id].port;\n }\n if (!settings.transport[id].path) {\n delete settings.transport[id].path;\n }\n if (!settings.transport[id].sysLogType) {\n delete settings.transport[id].sysLogType;\n }\n if (!settings.transport[id].app_name) {\n delete settings.transport[id].app_name;\n }\n if (!settings.transport[id].eol) {\n delete settings.transport[id].eol;\n }\n } else if (this.state.transport[id].type === 'http') {\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = parseInt(settings.transport[id].port as string, 10) || 80;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || '';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (this.state.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || 'info';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.props.onChange(settings);\n }\n\n onDelete(id: string) {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n delete transport[id];\n this.setState({ transport }, () => this.onChange());\n }\n\n renderEnabled(name: string) {\n return <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].enabled}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].enabled = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('Enabled')}\n />\n </Grid2>;\n }\n\n renderLogLevel(name: string) {\n return this.state.transport[name].enabled ? <Grid2>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].level || '_'}\n renderValue={() => this.state.transport[name].level || this.props.t('default')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].level = e.target.value === '_' ? '' : e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"_\">{this.props.t('default')}</MenuItem>\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Level of messages that this transport should log (default: level set on parent logger)')}</FormHelperText>\n </FormControl>\n </Grid2> : null;\n }\n\n renderSyslog(name: string) {\n return <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconSyslog style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab size=\"small\" style={styles.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2 container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('The host running syslogd, defaults to localhost')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t('The port on the host that syslog is running on, defaults to syslogd\\'s default port(514/UDP).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Protocol')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].protocol}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].protocol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"udp4\">udp4</MenuItem>\n <MenuItem value=\"tcp4\">tcp4</MenuItem>\n <MenuItem value=\"unix\">unix</MenuItem>\n <MenuItem value=\"unix-connect\">unix-connect</MenuItem>\n </Select>\n </FormControl>\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t('The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Path')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].facility}\n helperText={this.props.t('Syslog facility to use (Default: local0).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].facility = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Facility')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].localhost}\n helperText={this.props.t('Host to indicate that log messages are coming from (Default: localhost).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].localhost = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Log name')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].sysLogType}\n helperText={this.props.t('The type of the syslog protocol to use (Default: BSD).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].sysLogType = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('SysLog Type')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].app_name}\n helperText={this.props.t('The name of the application (Default: process.title).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].app_name = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Application name')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t('The end of line character to be added to the end of the message (Default: Message without modifications).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('End of line char')}\n />\n </Grid2> : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>;\n }\n\n renderFile(name: string): React.JSX.Element {\n return <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary style={{ background: 'rgba(128, 128, 128, 0.3)' }} expandIcon={<ExpandMoreIcon />}>\n <IconFile style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab size=\"small\" style={styles.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2 container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].filename}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].filename = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2> : null}\n\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].fileext}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].fileext = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File extension')}\n />\n </Grid2> : null}\n\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].maxSize}\n type=\"number\"\n helperText={this.props.t('MB')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxSize = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Maximal size of one file')}\n />\n </Grid2> : null}\n\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].maxFiles}\n type=\"number\"\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxFiles = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Maximal number of files')}\n />\n </Grid2> : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>;\n }\n\n renderHttp(name: string) {\n return <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconHttp style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab size=\"small\" style={styles.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2 container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('Remote host of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Host')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t('Remote port of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t('Remote URI of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Path')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].auth}\n helperText={this.props.t('An object representing the username and password for HTTP Basic Auth')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].auth = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Auth')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].ssl}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].ssl = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('SSL')}\n />\n </Grid2> : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>;\n }\n\n renderStream(name: string) {\n return <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconStream style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab size=\"small\" style={styles.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2 container direction=\"column\">\n {this.renderEnabled(name)}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].stream}\n helperText={this.props.t('any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].stream = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].silent}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].silent = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('Silent')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t('Line-ending character to use. (default: os.EOL).)')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('EOL')}\n />\n </Grid2> : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>;\n }\n\n renderSEQ(name: string) {\n return <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <img style={styles.headingIcon} src={IconSeq} alt=\"seq\" />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab size=\"small\" style={styles.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2 container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].serverUrl}\n helperText={this.props.t('The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted.')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].serverUrl = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Server URL')}\n />\n </Grid2> : null}\n {this.state.transport[name].enabled ? <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].apiKey}\n helperText={this.props.t('The apiKey of the seq system')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].apiKey = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('API key')}\n />\n </Grid2> : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>;\n }\n\n add(type: string) {\n if (type === 'file') {\n let i = 1;\n\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n filename: 'log/iobroker',\n fileext: '.log',\n maxSize: 0,\n maxFiles: 0,\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'syslog') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 0,\n protocol: 'udp4',\n path: '',\n facility: '',\n localhost: 'iobroker',\n sysLogType: '',\n app_name: '',\n eol: '',\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'http') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 80,\n path: '/',\n auth: 'None',\n ssl: false,\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'stream') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n stream: '/dev/null',\n level: 'info',\n silent: false,\n eol: '',\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'seq') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n level: 'info',\n serverUrl: 'http://IP:PORT',\n apiKey: '',\n };\n this.setState({ transport }, () => this.onChange());\n }\n }\n\n render() {\n return <Paper style={styles.paper}>\n <Grid2 sx={styles.gridSettings}>\n <Grid2 container direction=\"column\">\n <Grid2>\n <FormControl style={styles.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.level}\n onChange={e => this.setState({ level: e.target.value }, () => this.onChange())}\n >\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.maxDays}\n helperText={this.props.t('Every day one file')}\n type=\"number\"\n onChange={e => this.setState({ maxDays: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum number of days')}\n />\n </Grid2>\n <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.noStdout}\n onChange={e => this.setState({ noStdout: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('No stdout outputs')}\n />\n </Grid2>\n {Object.keys(this.state.transport).map(id => {\n switch (this.state.transport[id].type) {\n case 'syslog':\n return this.renderSyslog(id);\n\n case 'file':\n return this.renderFile(id);\n\n case 'http':\n return this.renderHttp(id);\n\n case 'stream':\n return this.renderStream(id);\n\n case 'seq':\n return this.renderSEQ(id);\n\n default:\n return null;\n }\n })}\n </Grid2>\n </Grid2>\n <Toolbar>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('file')}\n startIcon={<IconPlus />}\n >\n <IconFile style={styles.buttonIcon} />\n {this.props.t('File log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('syslog')}\n startIcon={<IconPlus />}\n >\n <IconSyslog style={styles.buttonIcon} />\n {this.props.t('Syslog')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('http')}\n startIcon={<IconPlus />}\n >\n <IconHttp style={styles.buttonIcon} />\n {this.props.t('HTTP log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('stream')}\n startIcon={<IconPlus />}\n >\n <IconStream style={styles.buttonIcon} />\n {this.props.t('Stream log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('seq')}\n startIcon={<IconPlus />}\n >\n <img src={IconSeq} style={styles.buttonIcon} alt=\"seq\" />\n {this.props.t('SEQ log')}\n </Button>\n </Toolbar>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsLog);\n","import React, { Component } from 'react';\n\nimport { Paper } from '@mui/material';\n\nimport {\n withWidth,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n title: {\n width: '100%',\n height: 32,\n },\n divWithoutTitle: {\n width: '100%',\n height: 'calc(100% - 32px)',\n border: '2px solid #00000000',\n },\n error: {\n border: '2px solid #FF0000',\n },\n};\n\nexport interface PluginsSettings {\n [key: string]: any;\n}\n\ninterface BaseSettingsPluginsProps {\n t: Translate;\n onChange: (settings: PluginsSettings) => void;\n settings: PluginsSettings;\n themeType: ThemeType;\n}\ninterface BaseSettingsPluginsState {\n settings: string;\n error?: boolean;\n}\n\nclass BaseSettingsPlugins extends Component<BaseSettingsPluginsProps, BaseSettingsPluginsState> {\n constructor(props: BaseSettingsPluginsProps) {\n super(props);\n\n this.state = {\n settings: JSON.stringify(this.props.settings || {}, null, 2),\n error: false,\n };\n }\n\n onChange(value: string) {\n const newState: BaseSettingsPluginsState = { settings: value };\n try {\n const settings = JSON.parse(value);\n\n if (this.state.error) {\n newState.error = false;\n }\n\n this.setState(newState, () => this.props.onChange(settings));\n } catch {\n newState.error = true;\n this.setState(newState);\n }\n }\n\n render() {\n return <Paper style={styles.paper}>\n <div style={styles.title}>{this.props.t('For future use')}</div>\n <div style={{ ...styles.divWithoutTitle, ...(this.state.error ? styles.error : undefined) }}>\n <Editor\n // mode=\"json\"\n themeType={this.props.themeType}\n value={this.state.settings}\n onChange={newValue => this.onChange(newValue)}\n />\n </div>\n </Paper>;\n }\n}\n\nexport default withWidth()(BaseSettingsPlugins);\n","import React, { Component } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n AppBar,\n Tab,\n Tabs,\n Button,\n LinearProgress,\n Box,\n} from '@mui/material';\n\nimport {\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n Confirm as ConfirmDialog,\n withWidth,\n type ThemeType,\n type IobTheme, type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport BaseSettingsSystem, { type SystemSettings } from '../components/BaseSettings/BaseSettingsSystem';\nimport BaseSettingsMultihost, { type MultihostSettings } from '../components/BaseSettings/BaseSettingsMultihost';\nimport BaseSettingsObjects, { type SettingsObjects } from '../components/BaseSettings/BaseSettingsObjects';\nimport BaseSettingsStates, { type SettingsStates } from '../components/BaseSettings/BaseSettingsStates';\nimport BaseSettingsLog, { type SettingsLog } from '../components/BaseSettings/BaseSettingsLog';\nimport BaseSettingsPlugins, { type PluginsSettings } from '../components/BaseSettings/BaseSettingsPlugins';\n\n// icons\n\nconst styles: Record<string, any> = {\n content: {\n height: 500,\n overflow: 'hidden',\n },\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'auto',\n }),\n selected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }),\n};\n\ninterface BaseSettingsDialogProps {\n t: Translate;\n currentHost: string;\n currentHostName: string;\n socket: AdminConnection;\n themeType: ThemeType;\n onClose: () => void;\n}\n\ninterface BaseSettingsDialogState {\n currentTab: number;\n hasChanges: string[];\n currentHost: string;\n loading: boolean;\n confirmExit: boolean;\n showRestart: boolean;\n system: SystemSettings;\n multihostService?: MultihostSettings;\n objects?: SettingsObjects;\n states: SettingsStates;\n log: SettingsLog;\n plugins: PluginsSettings;\n dnsResolution: 'verbatim' | 'ipv4first';\n dataDir: string;\n saving: boolean;\n}\n\nclass BaseSettingsDialog extends Component<BaseSettingsDialogProps, BaseSettingsDialogState> {\n originalSettings: any;\n\n constructor(props: BaseSettingsDialogProps) {\n super(props);\n this.state = {\n currentTab: 0,\n hasChanges: [],\n currentHost: this.props.currentHost,\n loading: true,\n confirmExit: false,\n showRestart: false,\n\n system: null,\n multihostService: null,\n objects: null,\n states: null,\n log: null,\n plugins: null,\n dnsResolution: 'ipv4first',\n dataDir: '',\n saving: false,\n };\n }\n\n componentDidMount() {\n this.getSettings(this.state.currentHost);\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 }\n return null;\n }\n\n renderRestartDialog() {\n if (this.state.showRestart) {\n return <ConfirmDialog\n title={this.props.t('Please confirm')}\n text={<>\n <div>{this.props.t('Restart works only if controller started as system service.')}</div>\n <div>{this.props.t('Would you like to restart the controller for your changes to take effect?')}</div>\n </>}\n ok={this.props.t('Restart')}\n cancel={this.props.t('No restart')}\n onClose={result =>\n this.setState({ showRestart: false }, () => {\n if (result) {\n this.props.socket.restartController(this.props.currentHost)\n .then(() =>\n setTimeout(() => // reload admin\n window.location.reload(), 500))\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }\n\n this.props.onClose();\n })}\n />;\n }\n return null;\n }\n\n getSettings(host: string) {\n this.props.socket.readBaseSettings(host || this.state.currentHost)\n .then(settings => {\n const answer = settings as { config?: ioBroker.IoBrokerJson; isActive?: boolean };\n if (answer?.config) {\n this.originalSettings = JSON.parse(JSON.stringify(answer.config));\n this.setState({\n system: answer.config.system,\n multihostService: answer.config.multihostService,\n objects: answer.config.objects,\n states: answer.config.states,\n log: answer.config.log,\n plugins: answer.config.plugins,\n dnsResolution: answer.config.dnsResolution || 'ipv4first',\n dataDir: answer.config.dataDir,\n });\n }\n });\n }\n\n onSave(host?: string) {\n const settings = {\n system: this.state.system,\n multihostService: this.state.multihostService,\n objects: this.state.objects,\n states: this.state.states,\n log: this.state.log,\n plugins: this.state.plugins,\n };\n\n // merge with some new settings, that may be not yet supported by Admin\n const newSettings = { ...this.originalSettings, ...settings };\n\n this.setState({ saving: true }, () => {\n this.props.socket.writeBaseSettings(host || this.state.currentHost, newSettings)\n .then(() => {\n this.originalSettings = JSON.parse(JSON.stringify(settings));\n // ask about restart\n this.setState({ hasChanges: [], showRestart: true, saving: false });\n })\n .catch(error => {\n window.alert(`Cannot save settings: ${error}`);\n this.setState({ saving: false });\n });\n });\n }\n\n updateSettings(name: keyof BaseSettingsDialogState, settings: any) {\n const hasChanges = [...this.state.hasChanges];\n const changed = JSON.stringify(this.originalSettings[name]) !== JSON.stringify(settings);\n\n const pos = hasChanges.indexOf(name);\n if (changed && pos === -1) {\n hasChanges.push(name);\n } else if (!changed && pos !== -1) {\n hasChanges.splice(pos, 1);\n }\n\n this.setState({ [name]: settings, hasChanges } as any);\n }\n\n renderSystem() {\n const name = 'system';\n return <BaseSettingsSystem\n settings={this.state[name]}\n t={this.props.t}\n currentHost={this.props.currentHost}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderMultihost() {\n const name = 'multihostService';\n return <BaseSettingsMultihost\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderObjects() {\n const name = 'objects';\n return <BaseSettingsObjects\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderStates() {\n const name = 'states';\n return <BaseSettingsStates\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderLog() {\n const name = 'log';\n return <BaseSettingsLog\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderPlugins() {\n const name = 'plugins';\n return <BaseSettingsPlugins\n settings={this.state[name]}\n t={this.props.t}\n themeType={this.props.themeType}\n onChange={(settings: any) =>\n this.updateSettings(name, settings)}\n />;\n }\n\n render() {\n return <Dialog\n style={styles.dialog}\n open={!0}\n onClose={() => false}\n fullWidth\n maxWidth=\"xl\"\n aria-labelledby=\"base-settings-dialog-title\"\n >\n <DialogTitle id=\"base-settings-dialog-title\">\n {this.props.t('Host Base Settings')}\n:\n {' '}\n {this.props.currentHostName || this.props.currentHost}\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Tabs\n value={this.state.currentTab}\n onChange={(event, newTab) => this.setState({ currentTab: newTab })}\n aria-label=\"system tabs\"\n indicatorColor=\"secondary\"\n >\n <Tab label={this.props.t('System')} id=\"system-tab\" aria-controls=\"simple-tabpanel-0\" sx={{ '&.Mui-selected': styles.selected }} />\n <Tab\n label={this.props.t('Multi-host')}\n id=\"multihost-tab\"\n sx={{ '&.Mui-selected': styles.selected }}\n aria-controls=\"simple-tabpanel-1\"\n />\n <Tab label={this.props.t('Objects')} id=\"objects-tab\" aria-controls=\"simple-tabpanel-3\" sx={{ '&.Mui-selected': styles.selected }} />\n <Tab label={this.props.t('States')} id=\"states-tab\" aria-controls=\"simple-tabpanel-4\" sx={{ '&.Mui-selected': styles.selected }} />\n <Tab label={this.props.t('Log')} id=\"log-tab\" aria-controls=\"simple-tabpanel-5\" sx={{ '&.Mui-selected': styles.selected }} />\n <Tab label={this.props.t('Plugins')} id=\"plugins-tab\" aria-controls=\"simple-tabpanel-6\" sx={{ '&.Mui-selected': styles.selected }} />\n </Tabs>\n </AppBar>\n {this.state.loading ? <LinearProgress /> : null}\n {!this.state.loading && this.state.currentTab === 0 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderSystem()}</Box> : null}\n {!this.state.loading && this.state.currentTab === 1 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderMultihost()}</Box> : null}\n {!this.state.loading && this.state.currentTab === 2 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderObjects()}</Box> : null}\n {!this.state.loading && this.state.currentTab === 3 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderStates()}</Box> : null}\n {!this.state.loading && this.state.currentTab === 4 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderLog()}</Box> : null}\n {!this.state.loading && this.state.currentTab === 5 ?\n <Box component=\"div\" sx={styles.tabPanel}>{this.renderPlugins()}</Box> : null}\n {this.renderConfirmDialog()}\n {this.renderRestartDialog()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!this.state.hasChanges.length || 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 color=\"grey\"\n disabled={this.state.saving}\n onClick={() => (this.state.hasChanges.length ? this.setState({ confirmExit: true }) : this.props.onClose())}\n startIcon={<CloseIcon />}\n >\n {this.state.hasChanges.length ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nexport default withWidth()(BaseSettingsDialog);\n","import React, { Component } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Tooltip, InputAdornment,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport {\n Close as IconClose,\n Check as IconCheck,\n Add as IconAdd,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { UploadImage, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n error: {\n border: '2px solid #FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n dialog: {\n height: 'calc(100% - 64px)',\n },\n button: {\n marginTop: 20,\n marginLeft: 8,\n },\n funcDivEdit: {\n width: '100%',\n },\n funcEditName: {\n display: 'inline-block',\n width: 85,\n },\n funcEdit: {\n width: 400,\n },\n marginTop: {\n marginTop: 20,\n },\n commonTabWrapper: {\n flexFlow: 'wrap',\n display: 'flex',\n },\n commonWrapper: {\n width: 500,\n minWidth: 300,\n },\n flexDrop: {\n width: '100%',\n maxWidth: 500,\n margin: 'auto',\n display: 'flex',\n },\n marginBlock: {\n marginTop: 20,\n },\n buttonAdd: {\n minWidth: 150,\n },\n textField: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n top: 20,\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: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n color: {\n width: 70,\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n tabsPadding: {\n padding: '0px 24px',\n },\n};\n\ninterface HostEditProps {\n obj: ioBroker.HostObject;\n onClose: (newObj?: ioBroker.HostObject) => void;\n t: Translate;\n}\n\ninterface HostEditState {\n text: string;\n error: boolean;\n changed: boolean;\n}\n\nclass HostEdit extends Component<HostEditProps, HostEditState> {\n private readonly originalObj: string;\n\n constructor(props: HostEditProps) {\n super(props);\n\n this.state = {\n text: JSON.stringify(this.props.obj, null, 2),\n error: false,\n changed: false,\n };\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n prepareObject(value: string): ioBroker.HostObject | null {\n value = value || this.state.text;\n try {\n const obj: ioBroker.HostObject = JSON.parse(value) as ioBroker.HostObject;\n obj._id = this.props.obj._id; // do not allow change of id\n return obj;\n } catch {\n return null;\n }\n }\n\n onChange(value: string) {\n const newState: Partial<HostEditState> = { text: value };\n const json = this.prepareObject(value);\n if (json) {\n newState.changed = this.originalObj !== JSON.stringify(json, null, 2);\n if (this.state.error) {\n newState.error = false;\n }\n } else {\n newState.error = true;\n }\n this.setState(newState as HostEditState);\n }\n\n onUpdate() {\n try {\n const obj = JSON.parse(this.state.text) as ioBroker.HostObject;\n obj._id = this.props.obj._id; // do not allow change of id\n this.props.onClose(obj);\n } catch {\n // ignore\n }\n }\n\n setCommonItem(json: ioBroker.HostObject, name: string, value: any) {\n (json.common as Record<string, any>)[name] = value;\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n removeCommonItem(json: ioBroker.HostObject, name: string) {\n delete (json.common as Record<string, any>).common[name];\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n buttonAddKey(nameKey: string, cb: () => void) {\n const { t } = this.props;\n return <div\n style={styles.marginBlock}\n >\n <Button\n style={styles.buttonAdd}\n variant=\"contained\"\n color=\"secondary\"\n onClick={cb}\n startIcon={<IconAdd />}\n >\n {t(`Add ${nameKey}`)}\n </Button>\n </div>;\n }\n\n buttonRemoveKey(nameKey: string, cb: () => void) {\n const { t } = this.props;\n return <Tooltip title={t(`Remove ${nameKey}`)} slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}>\n <Box component=\"div\" sx={styles.close} onClick={cb} />\n </Tooltip>;\n }\n\n renderCommonEdit() {\n try {\n const json = JSON.parse(this.state.text);\n const disabled = false;\n const { t } = this.props;\n return <div style={styles.commonTabWrapper}>\n <div style={styles.commonWrapper}>\n {typeof json.common.title !== 'undefined' ?\n <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('title')}\n style={{ ...styles.marginBlock, ...styles.textField }}\n fullWidth\n value={json.common.title}\n onChange={el => this.setCommonItem(json, 'title', el.target.value)}\n slotProps={{\n input: {\n endAdornment: json.common.title ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'title', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n /> :\n this.buttonAddKey('title', () => this.setCommonItem(json, 'title', ''))}\n {typeof json.common.color !== 'undefined' ?\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n disabled={disabled}\n style={{ ...styles.marginBlock, ...styles.color }}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)}\n slotProps={{\n input: {\n endAdornment: json.common.color ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'color', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </div> :\n this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))}\n </div>\n {typeof json.common.icon !== 'undefined' ?\n <div style={styles.flexDrop}>\n <UploadImage\n disabled={disabled}\n crop\n maxSize={256 * 1024}\n icon={json.common.icon}\n removeIconFunc={() => this.setCommonItem(json, 'icon', '')}\n onChange={base64 => this.setCommonItem(json, 'icon', base64)}\n />\n {this.buttonRemoveKey('icon', () => this.removeCommonItem(json, 'icon'))}\n </div> :\n <div style={styles.flexDrop}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </div>}\n </div>;\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n render() {\n // const withAlias = this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state';\n\n return <Dialog\n sx={{ '& .MuiDialog-paper': styles.dialog }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n fullScreen={false}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n >\n <DialogTitle id=\"edit-value-dialog-title\">\n {this.props.t('Edit host settings')}\n:\n <span style={styles.id}>{this.props.obj._id}</span>\n </DialogTitle>\n <DialogContent>\n {this.renderCommonEdit()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.error || !this.state.changed}\n onClick={() => this.onUpdate()}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {this.props.t('Write')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nexport default HostEdit;\n","import React, { Component } from 'react';\nimport semver from 'semver';\n\nimport {\n Avatar, Badge, Box,\n FormControl,\n FormHelperText,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Tooltip,\n} from '@mui/material';\n\nimport {\n Refresh as RefreshIcon,\n Delete as DeleteIcon,\n Cached as CachedIcon,\n Build as BuildIcon,\n Edit as EditIcon,\n BugReport as BugReportIcon,\n Info as InfoIcon,\n Warning as WarningIcon,\n Error as ErrorIcon,\n} from '@mui/icons-material';\n\nimport { BiChevronDown, BiChevronUp } from 'react-icons/bi';\n\nimport {\n amber, blue, green, grey, red,\n} from '@mui/material/colors';\n\nimport {\n Utils, IconCopy, type AdminConnection,\n type IobTheme, type ThemeType, type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type NotificationAnswer } from '@/Workers/HostsWorker';\nimport AdapterUpdateDialog, { type News } from '@/dialogs/AdapterUpdateDialog';\nimport JsControllerUpdater from '@/dialogs/JsControllerUpdater';\nimport JsControllerDialog from '@/dialogs/JsControllerDialog';\nimport BaseSettingsDialog from '@/dialogs/BaseSettingsDialog';\nimport { CONTROLLER_CHANGELOG_URL } from '@/helpers/utils';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport AdminUtils from '../../AdminUtils';\nimport HostEdit from './HostEdit';\nimport CustomModal from '../CustomModal';\n\nexport const 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)';\nexport const boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nexport const blinkClasses = `\n @keyframes newValueAnimationHostDark {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #fff;\n }\n }\n @keyframes newValueAnimationHostLight {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #fff;\n }\n }\n .newValueHost-dark {\n animation: newValueAnimationHostDark 2s ease-in-out;\n }\n .newValueHost-light {\n animation: newValueAnimationHostLight 2s ease-in-out;\n }\n @keyframes colors {\n 0% {\n left: -51px;\n }\n 100% {\n left: 101%;\n }\n }\n @keyframes warning {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.7;\n }\n }\n @keyframes red {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.8;\n }\n }\n @keyframes onBlink-keys-dark {\n 0% {\n color: #264d72;\n }\n 80% {\n color: #3679be;\n }\n 100% {\n color: #fff;\n }\n }\n @keyframes onBlink-keys-light {\n 0% {\n color: #3679be;\n }\n 80% {\n color: #264d72;\n }\n 100% {\n color: #000;\n }\n }\n .onBlick-light {\n animation: onBlink-keys-light 2s ease-in-out;\n animation-iteration-count: 2;\n font-size: 12px;\n margin-left: 4px;\n }\n .onBlick-dark {\n animation: onBlink-keys-dark 2s ease-in-out;\n animation-iteration-count: 2;\n font-size: 12px;\n margin-left: 4px;\n }\n @keyframes height {\n 0% {\n height: 0;\n },\n 100% {\n height: 160px;\n }\n }\n`;\n\nexport const genericStyles: Record<string, any> = {\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 collapseOff: {\n height: 0,\n },\n footerBlock: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n p: '10px',\n display: 'flex',\n justifyContent: 'space-between',\n }),\n hidden: {\n display: 'none',\n },\n\n emptyButton: {\n width: 48,\n },\n greenText: (theme: IobTheme) => ({\n color: theme.palette.success.dark,\n }),\n wrapperAvailable: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonUpdate: {\n border: `1px solid ${green[700]}`,\n padding: '2px 7px',\n borderRadius: '5px',\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 debug: {\n backgroundColor: grey[700],\n },\n info: {\n backgroundColor: blue[700],\n },\n warn: {\n backgroundColor: amber[700],\n },\n error: {\n backgroundColor: red[700],\n },\n smallAvatar: {\n width: 24,\n height: 24,\n },\n formControl: {\n display: 'flex',\n },\n baseSettingsButton: {\n transform: 'rotate(45deg)',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst arrayLogLevel = ['silly', 'debug', 'info', 'warn', 'error'];\n\nfunction toggleClassName(el: HTMLElement, name: string) {\n const classNames = el.className.split(' ');\n const pos = classNames.indexOf(name);\n if (pos !== -1) {\n classNames.splice(pos, 1);\n el.className = classNames.join(' ');\n }\n classNames.push(name);\n // el.className = classNames.join(' ');\n setTimeout(_classNames => (el.className = _classNames), 100, classNames.join(' '));\n}\n\nfunction getLogLevelIcon(level: ioBroker.LogLevel | ''): React.JSX.Element | null {\n if (level === 'debug') {\n return <BugReportIcon />;\n }\n if (level === 'info') {\n return <InfoIcon />;\n }\n if (level === 'warn') {\n return <WarningIcon />;\n }\n if (level === 'error') {\n return <ErrorIcon />;\n }\n return null;\n}\n\nexport interface HostGenericProps {\n adminInstance: string;\n alive: boolean;\n available: string;\n executeCommandRemove: () => void;\n expertMode: boolean;\n hostData: Record<string, any> | string;\n hostId: `system.host.${string}`;\n host: ioBroker.HostObject;\n hostsWorker: HostsWorker;\n isCurrentHost: boolean;\n jsControllerInfo: RepoAdapterObject;\n lang: ioBroker.Languages;\n noTranslation: boolean;\n onUpdating: (isUpdating: boolean) => void;\n showAdaptersWarning: (notifications: Record<string, NotificationAnswer>, hostId: string) => void;\n socket: AdminConnection;\n systemConfig: ioBroker.SystemConfigObject;\n t: Translate;\n theme: IobTheme;\n themeType: ThemeType;\n toggleTranslation: () => void;\n}\n\nexport interface HostGenericState {\n logLevel: ioBroker.LogLevel | '';\n logLevelSelect: ioBroker.LogLevel | '';\n errorHost: { notifications: NotificationAnswer | null; count: number };\n openDialogLogLevel: boolean;\n hostUpdateDialog: boolean;\n updateAvailable: boolean;\n instructionDialog: boolean;\n updateDialog: boolean;\n baseSettingsDialog: boolean;\n editDialog: boolean;\n changeLog: string | null;\n}\n\nexport default abstract class HostGeneric<TProps extends HostGenericProps, TState extends HostGenericState> extends Component<TProps, TState> {\n static formatInfo: Record<string, (value: any, t: Translate) => string> = {\n Uptime: AdminUtils.formatSeconds,\n 'System uptime': AdminUtils.formatSeconds,\n RAM: AdminUtils.formatRam,\n Speed: AdminUtils.formatSpeed,\n 'Disk size': AdminUtils.formatBytes,\n 'Disk free': AdminUtils.formatBytes,\n };\n\n protected readonly refEvents = React.createRef<HTMLDivElement>();\n\n protected readonly refWarning = React.createRef<HTMLDivElement>();\n\n protected readonly refCpu = React.createRef<HTMLDivElement>();\n\n protected readonly refMem = React.createRef<HTMLDivElement>();\n\n protected readonly refUptime = React.createRef<HTMLDivElement>();\n\n private outputCache = '-';\n\n private inputCache = '-';\n\n private cpuCache = '- %';\n\n private memCache = '- %';\n\n private uptimeCache = '-';\n\n private diskFreeCache = 1;\n\n private diskSizeCache = 1;\n\n private diskWarningCache = 1;\n\n constructor(props: TProps) {\n super(props);\n this.state = {\n logLevel: '',\n logLevelSelect: '',\n errorHost: { notifications: null, count: 0 },\n openDialogLogLevel: false,\n hostUpdateDialog: false,\n updateAvailable: false,\n instructionDialog: false,\n updateDialog: false,\n baseSettingsDialog: false,\n editDialog: false,\n changeLog: null,\n } as TState;\n }\n\n /**\n * Get the initial disk states to show problems with disk usage\n */\n async getInitialDiskStates(): Promise<void> {\n const diskWarningState = await this.props.socket.getState(`${this.props.hostId}.diskWarning`);\n this.diskWarningCache = diskWarningState?.val as number ?? this.diskWarningCache;\n\n const diskFreeState = await this.props.socket.getState(`${this.props.hostId}.diskFree`);\n this.diskFreeCache = diskFreeState?.val as number ?? this.diskFreeCache;\n\n const diskSizeState = await this.props.socket.getState(`${this.props.hostId}.diskSize`);\n this.diskSizeCache = diskSizeState?.val as number ?? this.diskSizeCache;\n }\n\n notificationHandler = (notifications: Record<string, NotificationAnswer>) =>\n notifications &&\n notifications[this.props.hostId] &&\n this.setState({ errorHost: { notifications: notifications[this.props.hostId], count: this.calculateWarning(notifications[this.props.hostId]) } });\n\n readChangeLog() {\n if (!this.state.changeLog) {\n fetch(CONTROLLER_CHANGELOG_URL.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/'))\n .then(response => response.text())\n .then(data => this.setState({ changeLog: data }))\n .catch(e => console.error(`Cannot read changelog: ${e}`));\n }\n }\n\n componentDidMount() {\n this.props.hostsWorker.registerNotificationHandler(this.notificationHandler);\n\n this.props.hostsWorker\n .getNotifications(this.props.hostId)\n .then(notifications => this.notificationHandler(notifications));\n\n this.props.socket.subscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n this.props.socket.subscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n this.props.socket.subscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n this.props.socket.subscribeState(`${this.props.hostId}.mem`, this.memFunc);\n this.props.socket.subscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n this.getInitialDiskStates()\n .finally(async () => {\n await this.props.socket.subscribeState(`${this.props.hostId}.diskFree`, this.warningFunc);\n await this.props.socket.subscribeState(`${this.props.hostId}.diskSize`, this.warningFunc);\n await this.props.socket.subscribeState(`${this.props.hostId}.diskWarning`, this.warningFunc);\n });\n\n this.props.socket.subscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n componentWillUnmount() {\n this.props.hostsWorker.unregisterNotificationHandler(this.notificationHandler);\n this.props.socket.unsubscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.mem`, this.memFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskFree`, this.warningFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskSize`, this.warningFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskWarning`, this.warningFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n eventsInputFunc = (id: string, input: ioBroker.State) => {\n this.inputCache = input && input.val !== null ? `⇥${input.val}` : '-';\n if (this.refEvents.current) {\n this.refEvents.current.innerHTML = `${this.inputCache} / ${this.outputCache}`;\n toggleClassName(this.refEvents.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n eventsOutputFunc = (id: string, output: ioBroker.State) => {\n this.outputCache = output && output.val !== null ? `↦${output.val}` : '-';\n if (this.refEvents.current) {\n this.refEvents.current.innerHTML = `${this.inputCache} / ${this.outputCache}`;\n toggleClassName(this.refEvents.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n warningFunc = (name_: string, state: ioBroker.State) => {\n if (name_.endsWith('diskFree')) {\n this.diskFreeCache = (state?.val as number) || 0;\n } else if (name_.endsWith('diskSize')) {\n this.diskSizeCache = (state?.val as number) || 0;\n } else if (name_.endsWith('diskWarning')) {\n this.diskWarningCache = (state?.val as number) || 0;\n }\n const warning = (this.diskFreeCache / this.diskSizeCache) * 100 <= this.diskWarningCache;\n if (this.refWarning.current) {\n if (warning) {\n this.refWarning.current.setAttribute('title', this.props.t('Warning: Free space on disk is low'));\n this.refWarning.current.classList.add('warning');\n } else {\n this.refWarning.current.removeAttribute('title');\n this.refWarning.current.classList.remove('warning');\n }\n }\n };\n\n cpuFunc = (id: string, state: ioBroker.State) => {\n this.cpuCache = this.formatValue(state, '%');\n if (this.refCpu.current) {\n this.refCpu.current.innerHTML = this.cpuCache;\n toggleClassName(this.refCpu.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n memFunc = (id: string, state: ioBroker.State) => {\n this.memCache = this.formatValue(state, '%');\n if (this.refMem.current) {\n this.refMem.current.innerHTML = this.memCache;\n toggleClassName(this.refMem.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n uptimeFunc = (id: string, state: ioBroker.State) => {\n if (state?.val) {\n const d = Math.floor((state.val as number) / (3600 * 24));\n const h = Math.floor(((state.val as number) % (3600 * 24)) / 3600);\n this.uptimeCache = d ? `${d}d${h}h` : `${h}h`; // TODO translate\n }\n if (this.refUptime.current) {\n this.refUptime.current.innerHTML = this.uptimeCache;\n toggleClassName(this.refUptime.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n calculateWarning(notifications: NotificationAnswer | null) {\n if (!notifications) {\n return 0;\n }\n const { result } = notifications;\n let count = 0;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n const obj = result.system.categories;\n Object.keys(obj).forEach(nameTab => Object.keys(obj[nameTab].instances).forEach(() => count++));\n }\n return count;\n }\n\n formatValue(state: ioBroker.State, unit: string) {\n if (!state || state.val === null || state.val === undefined) {\n return `-${unit ? ` ${unit}` : ''}`;\n }\n if (this.props.systemConfig.common.isFloatComma) {\n return state.val.toString().replace('.', ',') + (unit ? ` ${unit}` : '');\n }\n return state.val + (unit ? ` ${unit}` : '');\n }\n\n logLevelFunc = (id: string, state: ioBroker.State) => {\n if (state) {\n this.setState({ logLevel: state.val as ioBroker.LogLevel, logLevelSelect: state.val as ioBroker.LogLevel });\n }\n };\n\n renderDialogLogLevel() {\n if (!this.state.openDialogLogLevel) {\n return null;\n }\n return <CustomModal\n theme={this.props.theme}\n title={this.props.t('Edit log level rule for %s', this.props.host.common.name)}\n onApply={() => {\n this.props.socket.setState(`${this.props.hostId}.logLevel`, this.state.logLevelSelect)\n .catch(e => window.alert(`Cannot set log level: ${e}`));\n this.setState({ openDialogLogLevel: false });\n }}\n onClose={() => this.setState({ openDialogLogLevel: false, logLevelSelect: this.state.logLevel })}\n >\n <FormControl style={{ ...genericStyles.formControl, marginTop: 8 }} variant=\"outlined\">\n <InputLabel>{this.props.t('log level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.logLevelSelect}\n fullWidth\n onChange={el => this.setState({ logLevelSelect: el.target.value as ioBroker.LogLevel })}\n >\n {arrayLogLevel.map(el => (\n <MenuItem key={el} value={el}>\n {this.props.t(el)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl style={genericStyles.formControl} variant=\"outlined\">\n <FormHelperText>\n {this.props.t('Log level will be reset to the saved level after the restart of the controller')}\n </FormHelperText>\n <FormHelperText>\n {this.props.t('You can set the log level permanently in the base host settings')}\n <BuildIcon style={genericStyles.baseSettingsButton} />\n </FormHelperText>\n </FormControl>\n </CustomModal>;\n }\n\n onCopy() {\n const text = [];\n if (this.refCpu.current) {\n text.push(`CPU: ${this.refCpu.current.innerHTML}`);\n }\n if (this.refMem.current) {\n text.push(`RAM: ${this.refMem.current.innerHTML}`);\n }\n if (this.refUptime.current) {\n text.push(`${this.props.t('Uptime')}: ${this.refUptime.current.innerHTML}`);\n }\n text.push(`${this.props.t('Available')}: ${this.props.available}`);\n text.push(`${this.props.t('Installed')}: ${this.props.host.common.installedVersion}`);\n if (this.refEvents.current) {\n text.push(`${this.props.t('Events')}: ${this.refEvents.current.innerHTML}`);\n }\n\n if (this.props.hostData && typeof this.props.hostData === 'object') {\n const data: Record<string, any> = this.props.hostData;\n Object.keys(data).map(value =>\n text.push(\n `${this.props.t(value)}: ${HostGeneric.formatInfo[value] ? HostGeneric.formatInfo[value](data[value], this.props.t) : data[value] || '--'}`,\n ));\n }\n\n Utils.copyToClipboard(text.join('\\n'));\n window.alert(this.props.t('Copied'));\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderUpdateButton(upgradeAvailable: boolean, style?: React.CSSProperties) {\n return upgradeAvailable ? <Tooltip\n title={this.props.t('Update')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <Box\n component=\"div\"\n onClick={event => {\n event.stopPropagation();\n this.openHostUpdateDialog();\n }}\n sx={genericStyles.buttonUpdate}\n >\n <IconButton style={genericStyles.buttonUpdateIcon} size=\"small\">\n <RefreshIcon />\n </IconButton>\n <span style={{ color: green[700] }}>{this.props.available}</span>\n </Box>\n </Tooltip>\n :\n <span style={style}>{this.props.available}</span>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHostBaseEdit() {\n return this.props.expertMode ? <Tooltip\n title={this.props.t('Host Base Settings')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={e => {\n e.stopPropagation();\n this.setState({ baseSettingsDialog: true });\n }}\n >\n <BuildIcon style={genericStyles.baseSettingsButton} />\n </IconButton>\n </div>\n </Tooltip> : null;\n }\n\n /**\n * Render a button to extend the component in general the component can be extended by clicking anywhere on it\n * However, it is used as an additional indicator that it is expandable\n */\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderExtendButton(\n /** if host is expanded */\n open: boolean,\n ) {\n return <Tooltip title={this.props.t(open ? 'collapse' : 'Expand')} slotProps={{ popper: { sx: genericStyles.tooltip } }}>\n <div>\n <IconButton\n size=\"large\"\n >\n {open ? <BiChevronUp /> : <BiChevronDown />}\n </IconButton>\n </div>\n </Tooltip>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRestartButton() {\n return <Tooltip title={this.props.t('Restart host')} slotProps={{ popper: { sx: genericStyles.tooltip } }}>\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={event => {\n event.stopPropagation();\n this.props.socket.restartController(this.props.hostId)\n .catch((err: string) => window.alert(`Cannot restart: ${err}`));\n }}\n >\n <CachedIcon />\n </IconButton>\n </div>\n </Tooltip>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderEditButton() {\n return <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ editDialog: true });\n }}\n >\n <EditIcon />\n </IconButton>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRemoveButton() {\n return !this.props.alive && !this.props.isCurrentHost ? <Tooltip\n title={this.props.alive || this.props.isCurrentHost ? this.props.t('You cannot delete host, when it is alive') : this.props.t('Remove')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.props.executeCommandRemove();\n }}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n :\n <div style={genericStyles.emptyButton} />;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderCopyButton(style?: React.CSSProperties) {\n return <Tooltip title={this.props.t('Copy')} slotProps={{ popper: { sx: genericStyles.tooltip } }}>\n <IconButton\n size=\"large\"\n onClick={() => this.onCopy()}\n style={style}\n >\n <IconCopy />\n </IconButton>\n </Tooltip>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderLogLevel() {\n return <Tooltip\n title={`${this.props.t('loglevel')} ${this.state.logLevel}`}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ openDialogLogLevel: true });\n }}\n >\n <Avatar style={{ ...genericStyles.smallAvatar, ...genericStyles[this.state.logLevel] }}>\n {getLogLevelIcon(this.state.logLevel)}\n </Avatar>\n </IconButton>\n </Tooltip>;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderNotificationsBadge(children?: React.ReactNode, styled?: boolean): React.JSX.Element {\n return <Badge\n sx={styled ? {\n right: -3,\n top: 13,\n padding: '0 4px',\n } : undefined}\n title={this.props.t('Hosts notifications')}\n badgeContent={this.state.errorHost.count}\n style={genericStyles.badge}\n color=\"error\"\n onClick={e => {\n e.stopPropagation();\n this.props.showAdaptersWarning({ [this.props.hostId]: this.state.errorHost.notifications }, this.props.hostId);\n }}\n >\n {children}\n </Badge>;\n }\n\n async openHostUpdateDialog() {\n const updateAvailable = await this.props.socket.checkFeatureSupported('CONTROLLER_UI_UPGRADE');\n\n this.setState({\n hostUpdateDialog: true,\n updateAvailable,\n });\n\n this.readChangeLog();\n }\n\n renderHostUpdateDialog() {\n if (!this.state.hostUpdateDialog) {\n return null;\n }\n\n return <AdapterUpdateDialog\n adapter={this.props.host.common.name}\n adapterObject={this.props.jsControllerInfo}\n t={this.props.t}\n textUpdate={this.state.updateAvailable ? this.props.t('Start update') : this.props.t('Show instructions')}\n textInstruction={this.props.t('Show whole changelog')}\n rightDependencies\n news={this.getNews()}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n onUpdate={async () => {\n if (this.state.updateAvailable) {\n this.setState({ hostUpdateDialog: false, updateDialog: true });\n } else {\n this.setState({ hostUpdateDialog: false, instructionDialog: true });\n }\n }}\n theme={this.props.theme}\n installedVersion={this.props.host.common.installedVersion}\n onInstruction={() => {\n window.open(CONTROLLER_CHANGELOG_URL, '_blank');\n }}\n onClose={() => this.setState({ hostUpdateDialog: false })}\n />;\n }\n\n renderUpdateDialog() {\n if (this.state.updateAvailable && this.state.updateDialog) {\n return <JsControllerUpdater\n socket={this.props.socket}\n hostId={this.props.hostId}\n version={this.props.jsControllerInfo.version}\n onClose={() => this.setState({ updateDialog: false })}\n adminInstance={this.props.adminInstance}\n onUpdating={(isUpdating: boolean) => this.props.onUpdating(isUpdating)}\n themeType={this.props.themeType}\n />;\n }\n\n if (this.state.instructionDialog) {\n return <JsControllerDialog\n socket={this.props.socket}\n hostId={this.props.hostId}\n version={this.props.jsControllerInfo.version}\n onClose={() => this.setState({ instructionDialog: false })}\n />;\n }\n\n return null;\n }\n\n static extractNews(changelog: string, version: string): string {\n const lines = changelog.split('\\n');\n let news = '';\n let started = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('## ')) {\n if (started) {\n break;\n }\n if (lines[i].startsWith(`## ${version}`)) {\n started = true;\n }\n } else if (started) {\n news += `${lines[i].replace(/^\\*\\s*/, '').replace(/^\\(\\w+\\)\\s*/, '')}\\n`;\n }\n }\n return news;\n }\n\n getNews(all?: boolean): News[] {\n const adapter = this.props.jsControllerInfo;\n const installed = this.props.host.common.installedVersion;\n const news: News[] = [];\n\n if (installed && adapter?.news) {\n Object.keys(adapter.news).forEach(version => {\n try {\n if (semver.gt(version, installed) || all) {\n let downloaded = false;\n let newsText: string = this.props.noTranslation ?\n adapter.news[version].en : (adapter.news[version][this.props.lang] || adapter.news[version].en) as string;\n\n if (adapter.news[version].en === 'see CHANGELOG.md' && this.state.changeLog) {\n // try to find news in CHANGELOG\n const found = HostGeneric.extractNews(this.state.changeLog, version);\n if (found) {\n newsText = found;\n downloaded = true;\n }\n }\n\n news.push({\n version,\n news: newsText,\n downloaded,\n });\n }\n } catch {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed}\"`);\n }\n });\n }\n\n return news;\n }\n\n baseSettingsSettingsDialog() {\n if (!this.state.baseSettingsDialog) {\n return null;\n }\n\n return <BaseSettingsDialog\n key=\"base\"\n currentHost={this.props.hostId}\n themeType={this.props.themeType}\n currentHostName={this.props.host.common.name}\n onClose={() => this.setState({ baseSettingsDialog: false })}\n lang={this.props.lang}\n socket={this.props.socket}\n t={this.props.t}\n />;\n }\n\n renderEditObjectDialog() {\n if (!this.state.editDialog) {\n return null;\n }\n\n return <HostEdit\n obj={this.props.host}\n t={this.props.t}\n onClose={obj => this.setState({ editDialog: false }, () => {\n if (obj) {\n this.props.socket.setObject(obj._id, obj)\n .then(() => this.forceUpdate())\n .catch(e => alert(`Cannot write object: ${e}`));\n }\n })}\n />;\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderDialogs() {\n return <>\n {this.renderDialogLogLevel()}\n {this.renderHostUpdateDialog()}\n {this.renderUpdateDialog()}\n {this.renderEditObjectDialog()}\n {this.baseSettingsSettingsDialog()}\n </>;\n }\n}\n","import React from 'react';\n\nimport {\n Box,\n Card,\n CardContent,\n CardMedia,\n Fab, Skeleton,\n Typography,\n} from '@mui/material';\n\nimport {\n MoreVert as MoreVertIcon,\n} from '@mui/icons-material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/AdminUtils';\nimport HostGeneric, {\n boxShadow,\n boxShadowHover,\n genericStyles,\n type HostGenericProps,\n type HostGenericState,\n} from './HostGeneric';\n\nexport const styles: Record<string, any> = {\n ...genericStyles,\n root: (theme: IobTheme) => ({\n position: 'relative',\n m: '10px',\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 '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black',\n },\n animation: '$warning 2.5s ease-in-out infinite alternate',\n },\n }),\n imageBlock: {\n minHeight: 60,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n },\n fab: {\n position: 'absolute',\n bottom: -20,\n width: 40,\n height: 40,\n right: 20,\n },\n\n collapse: {\n height: '100%',\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: 20,\n height: 20,\n opacity: 0.9,\n cursor: 'pointer',\n position: 'relative',\n ml: 'auto',\n mb: '10px',\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n onOffLine: {\n alignSelf: 'center',\n width: '100%',\n height: 4,\n // borderRadius: 20,\n },\n adapter: (theme: IobTheme) => ({\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: 'middle',\n pl: 1,\n pt: 2,\n color: theme.palette.mode === 'dark' ? '#333' : '#555',\n }),\n cardContentInfo: (theme: IobTheme) => ({\n overflow: 'auto',\n paddingTop: 0,\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n }),\n cardContentH5: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n paddingBottom: '10px !important',\n },\n marginTop10: {\n marginTop: 10,\n },\n displayFlex: {\n display: 'flex',\n },\n marginLeft5: {\n marginLeft: 5,\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n instanceStateNotAlive1: {\n backgroundColor: 'rgba(192, 192, 192, 0.4)',\n },\n green: {\n background: '#00ce00',\n // border: '1px solid #014a00',\n position: 'relative',\n },\n red: {\n background: '#da0000',\n // border: '1px solid #440202',,\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n dotLine: {\n width: 50,\n height: '100%',\n background:\n 'linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n left: -11,\n // boxShadow: '12px 29px 81px 0px rgb(0 0 0 / 75%)',\n // animation: '$colors 3s ease-in-out infinite'\n },\n\n versionDate: {\n alignSelf: 'center',\n },\n\n cardContentDiv: {\n position: 'sticky',\n right: 0,\n top: 0,\n paddingTop: 10,\n },\n badge: {\n cursor: 'pointer',\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n ml: '4px',\n },\n marginRight: {\n marginRight: 'auto',\n },\n ul: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 16,\n paddingRight: 8,\n },\n value: {\n marginLeft: 5,\n },\n label: {\n fontWeight: 'bold',\n },\n};\n\ninterface HostCardProps extends HostGenericProps {\n hidden?: boolean;\n}\n\ninterface HostCardState extends HostGenericState {\n openCollapse?: boolean;\n}\n\nclass HostCard extends HostGeneric<HostCardProps, HostCardState> {\n getHostDescriptionAll() {\n if (!this.props.hostData) {\n return <Skeleton />;\n }\n\n if (typeof this.props.hostData === 'string') {\n return this.props.hostData;\n }\n\n if (!this.props.hostData || typeof this.props.hostData !== 'object') {\n return <ul key=\"ul\" style={styles.ul}>\n <Skeleton />\n </ul>;\n }\n\n return <ul key=\"ul\" style={styles.ul}>\n {Object.keys(this.props.hostData).map(value => <li key={value}>\n <span style={styles.black}>\n <span style={styles.label}>\n {this.props.t(value)}\n :\n {' '}\n </span>\n <span style={styles.value}>\n {HostGeneric.formatInfo[value] ?\n HostGeneric.formatInfo[value]((this.props.hostData as Record<string, any>)[value], this.props.t) :\n ((this.props.hostData as Record<string, any>)[value] || '--')}\n </span>\n </span>\n </li>)}\n </ul>;\n }\n\n render() {\n const upgradeAvailable = (this.props.isCurrentHost || this.props.alive) && AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return <Card key={this.props.hostId} sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden)}>\n {this.renderDialogs()}\n {this.state.openCollapse && <div style={{ ...styles.collapse, ...(!this.state.openCollapse ? styles.collapseOff : undefined) }}>\n <CardContent sx={styles.cardContentInfo}>\n <div\n style={styles.cardContentDiv}\n onClick={() => this.setState({ openCollapse: false })}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={() => this.setState({ openCollapse: false })}\n />\n </div>\n {description}\n </CardContent>\n <Box component=\"div\" sx={styles.footerBlock} />\n </div>}\n <div style={{ ...styles.onOffLine, ...(this.props.alive ? styles.green : styles.red) }}>\n {this.props.alive && <div style={styles.dotLine} />}\n </div>\n <div\n ref={this.refWarning}\n style={{\n ...styles.imageBlock,\n ...(!this.props.alive ? styles.instanceStateNotAlive1 : undefined),\n background: this.props.host.common.color || 'inherit',\n }}\n >\n <CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n style={Utils.getStyle(\n this.props.theme,\n styles.adapter,\n { color: (this.props.host.common.color && Utils.invertColor(this.props.host.common.color, true)) || 'inherit' },\n )}\n >\n {this.renderNotificationsBadge(this.props.host.common.name, true)}\n </Box>\n {!this.state.openCollapse ? <Fab\n disabled={typeof description === 'string'}\n onClick={() => this.setState({ openCollapse: true })}\n style={styles.fab}\n color=\"primary\"\n aria-label=\"add\"\n title={this.props.t('Click for more')}\n >\n <MoreVertIcon />\n </Fab> : null}\n </div>\n <CardContent style={styles.cardContentH5}>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div style={styles.displayFlex}>\n <span style={styles.label}>CPU:</span>\n <div ref={this.refCpu} style={styles.value}>\n - %\n </div>\n </div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div style={styles.displayFlex}>\n <span style={styles.label}>RAM:</span>\n <div ref={this.refMem} style={styles.value}>\n - %\n </div>\n </div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div style={styles.displayFlex}>\n <span style={styles.label}>\n {this.props.t('Uptime')}\n :\n </span>\n <div ref={this.refUptime} style={styles.value}>\n -d -h\n </div>\n </div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\" style={styles.wrapperAvailable}>\n <span style={styles.label}>\n {this.props.t('Available')}\n {' '}\n js-controller:\n </span>\n <Box\n component=\"div\"\n sx={{ ...(upgradeAvailable ? styles.greenText : undefined), ...styles.curdContentFlexCenter }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n <span style={styles.label}>\n {this.props.t('Installed')}\n {' '}\n js-controller:\n </span>\n <span style={styles.value}>{this.props.host.common.installedVersion}</span>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div style={styles.displayFlex}>\n <span style={styles.label}>\n {this.props.t('Events')}\n :\n </span>\n <div ref={this.refEvents} style={styles.value}>- / -</div>\n </div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography component=\"span\" style={styles.enableButton}>\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel && this.renderLogLevel()}\n {this.renderRemoveButton()}\n {this.renderCopyButton()}\n </Typography>\n </div>\n </CardContent>\n </Card>;\n }\n}\n\nexport default HostCard;\n","import React from 'react';\n\nimport {\n Box,\n CardContent,\n CardMedia, Skeleton,\n Typography,\n} from '@mui/material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/AdminUtils';\nimport HostGeneric, {\n boxShadow, boxShadowHover, genericStyles,\n type HostGenericProps, type HostGenericState,\n} from './HostGeneric';\n\nconst styles: Record<string, any> = {\n ...genericStyles,\n root: (theme: IobTheme) => ({\n position: 'relative',\n m: '7px',\n background: theme.palette.background.default,\n boxShadow,\n // display: 'flex',\n overflow: 'hidden',\n transition: 'box-shadow 0.5s,height 0.3s',\n '&:hover': {\n boxShadow: boxShadowHover,\n },\n }),\n imageBlock: {\n marginRight: 6,\n minHeight: 60,\n width: '100%',\n maxWidth: 300,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n alignItems: 'baseline',\n },\n collapse: {\n height: 200,\n backgroundColor: 'rgba(128, 128, 128, 0.1)',\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 collapseOn: {\n animation: 'height 1s',\n },\n onOff: {\n alignSelf: 'center',\n width: 4,\n height: '100%',\n // borderRadius: 20,\n // position: 'absolute',\n // top: 5,\n // right: 5,\n },\n host: (theme: IobTheme) => ({\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n paddingLeft: '8px',\n alignSelf: 'center',\n color: theme.palette.mode === 'dark' ? '#ddd' : '#222',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n cardContentH5: {\n height: '100%',\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n padding: '10px !important',\n alignItems: 'center',\n },\n marginTop10: {\n // marginTop: 10\n marginLeft: 'auto',\n display: 'flex',\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n green: {\n background: '#00ce00',\n position: 'relative',\n overflow: 'hidden',\n },\n dotLine: {\n width: 10,\n height: 20,\n background:\n 'linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n top: -21,\n // animation: '$colors 3s ease-in-out infinite'\n },\n red: {\n background: '#da0000',\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n\n flex: {\n flex: 1,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n cardContentInfo: {\n overflow: 'auto',\n paddingTop: 0,\n justifyContent: 'center',\n display: 'flex',\n height: '100%',\n position: 'relative',\n // alignItems: 'center'\n },\n cursorNoDrop: {\n cursor: 'no-drop !important',\n },\n wrapperFlex: {\n display: 'flex',\n cursor: 'pointer',\n '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black',\n },\n animation: '$warning 2.5s ease-in-out infinite alternate',\n },\n '@media screen and (max-width: 500px)': {\n flexDirection: 'column',\n },\n },\n wrapperColor: {\n position: 'relative',\n overflow: 'hidden',\n },\n hidden1100: {\n '@media screen and (max-width: 1100px)': {\n display: 'none !important',\n },\n },\n hidden800: {\n '@media screen and (max-width: 800px)': {\n display: 'none !important',\n },\n },\n hidden600: {\n '@media screen and (max-width: 600px)': {\n display: 'none !important',\n },\n },\n badge: {\n top: 14,\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n },\n wrapperInfo: {\n display: 'flex',\n flexFlow: 'wrap',\n width: '100%',\n justifyContent: 'space-around',\n },\n wrapperBlockItem: {\n display: 'flex',\n flexFlow: 'nowrap',\n whiteSpace: 'nowrap',\n margin: 10,\n },\n bold: {\n fontWeight: 'bold',\n },\n nowrap: {\n display: 'flex',\n flexFlow: 'nowrap',\n flex: 1,\n whiteSpace: 'nowrap',\n marginRight: 5,\n },\n cell: {\n // paddingLeft: 6,\n },\n};\n\ninterface HostRowProps extends HostGenericProps {\n hidden?: boolean;\n}\n\ninterface HostRowState extends HostGenericState {\n openCollapse?: boolean;\n}\n\nclass HostRow extends HostGeneric<HostRowProps, HostRowState> {\n renderValue(value: string) {\n if (typeof this.props.hostData !== 'object') {\n return null;\n }\n return <div style={styles.wrapperBlockItem} key={value}>\n <span style={{ ...styles.bold, ...styles.nowrap }}>\n {this.props.t(value)}\n :\n {' '}\n </span>\n {(HostGeneric.formatInfo[value] ? HostGeneric.formatInfo[value](this.props.hostData[value], this.props.t) : this.props.hostData[value] || '--')}\n </div>;\n }\n\n getHostDescriptionAll() {\n if (!this.props.hostData) {\n return <Skeleton />;\n }\n\n if (typeof this.props.hostData === 'string') {\n return this.props.hostData;\n }\n\n return <div style={styles.wrapperInfo}>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ?\n Object.keys(this.props.hostData).map((value, idx) => idx < 5 && this.renderValue(value)) : <Skeleton />}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ? Object.keys(this.props.hostData).map((value, idx) => idx > 4 && idx < 10 &&\n this.renderValue(value)) : <Skeleton />}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' && Object.keys(this.props.hostData).map((value, idx) => idx > 10 &&\n this.renderValue(value))}\n </div>\n </div>;\n }\n\n render() {\n const upgradeAvailable = (this.props.isCurrentHost || this.props.alive) && AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles.root,\n this.props.hidden && styles.hidden,\n {\n border: `2px solid ${this.props.host.common.color || 'inherit'}`,\n borderRadius: '5px',\n },\n )}\n key={this.props.hostId}\n >\n {this.renderDialogs()}\n <Box\n component=\"div\"\n sx={{ ...styles.wrapperFlex, ...(!this.props.alive ? styles.cursorNoDrop : undefined) }}\n onClick={this.state.openDialogLogLevel ? null : () => this.setState({ openCollapse: !this.state.openCollapse })}\n >\n <div style={styles.wrapperColor}>\n <div style={{ ...styles.onOff, ...(this.props.alive ? styles.green : styles.red) }} />\n {this.props.alive && <div style={styles.dotLine} />}\n </div>\n <div\n ref={this.refWarning}\n style={{ ...styles.imageBlock, background: this.props.host.common.color || 'inherit' }}\n >\n {this.renderNotificationsBadge(<CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />, true)}\n <div\n style={Utils.getStyle(\n this.props.theme,\n styles.host,\n { color: (this.props.host.common.color && Utils.invertColor(this.props.host.common.color, true)) || 'inherit' },\n )}\n >\n {this.props.host.common.name}\n </div>\n </div>\n <CardContent sx={{ '&.MuiCardContent-root': styles.cardContentH5 }}>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refCpu}>- %</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refMem}>- %</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refUptime}>-/-</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden1100 }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n {this.props.host.common.installedVersion}\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden1100, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <Box\n component=\"div\"\n sx={{ ...(upgradeAvailable ? styles.greenText : undefined), ...styles.curdContentFlexCenter }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden600, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refEvents}>- / -</div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography component=\"span\" style={styles.enableButton}>\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel ? this.renderLogLevel() : <div style={styles.emptyButton} />}\n {this.renderRemoveButton()}\n {this.renderExtendButton(this.state.openCollapse)}\n </Typography>\n </div>\n </CardContent>\n </Box>\n {typeof description === 'object' && <div\n style={{\n ...styles.collapse,\n ...(!this.state.openCollapse ? styles.collapseOff : styles.collapseOn),\n }}\n onClick={event => event.stopPropagation()}\n >\n <CardContent style={styles.cardContentInfo}>\n {description}\n {this.renderCopyButton({ height: 44, width: 44 })}\n </CardContent>\n <Box component=\"div\" sx={styles.footerBlock} />\n </div>}\n </Box>;\n }\n}\n\nexport default HostRow;\n","import React, { Component } from 'react';\n\nimport {\n IconButton,\n Tooltip,\n InputAdornment,\n LinearProgress,\n TextField, Box,\n} from '@mui/material';\n\nimport {\n Refresh as RefreshIcon,\n ViewList as ViewListIcon,\n ViewModule as ViewModuleIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport {\n withWidth,\n Utils,\n TabHeader,\n TabContent,\n TabContainer,\n type AdminConnection,\n type IobTheme,\n type ThemeType, type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from '@/dialogs/SlowConnectionWarningDialog';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport type { NotificationAnswer, HostAliveEvent, HostEvent } from '@/Workers/HostsWorker';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport { blinkClasses } from '@/components/Hosts/HostGeneric';\nimport HostCard from '../components/Hosts/HostCard';\nimport HostRow from '../components/Hosts/HostRow';\n\nconst styles: Record<string, any> = {\n grow: {\n flexGrow: 1,\n },\n cards: {\n display: 'flex',\n flexFlow: 'wrap',\n justifyContent: 'center',\n },\n tabHeaderWrapper: {\n height: 30,\n display: 'flex',\n margin: 7,\n },\n tabHeaderFirstItem: {\n width: 306,\n paddingLeft: 30,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItem: {\n flex: 1,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItemButton: {\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n widthButtons: {\n width: 240,\n },\n tabFlex: {\n display: 'flex',\n flex: 1,\n padding: '0 10px',\n },\n bold: {\n fontWeight: 'bold',\n },\n marginRight: {\n marginRight: 'auto',\n },\n notStableRepo: (theme: IobTheme) => ({\n background: theme.palette.mode === 'dark' ? '#8a7e00' : '#fdee20',\n color: '#000',\n fontSize: 14,\n padding: '2px 8px',\n borderRadius: '5px',\n }),\n hidden1100: {\n '@media screen and (max-width: 1100px)': {\n display: 'none !important',\n },\n },\n hidden800: {\n '@media screen and (max-width: 800px)': {\n display: 'none !important',\n },\n },\n hidden600: {\n '@media screen and (max-width: 600px)': {\n display: 'none !important',\n },\n },\n jsController: {\n fontSize: 12,\n opacity: 0.4,\n display: 'block',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst wordCache: Record<string, string> = {};\n\n/**\n * Preprocess host data to harmonize information\n *\n * @param hostData Host data from controller\n */\nfunction preprocessHostData(hostData: Record<string, any>): void {\n if (hostData.dockerInformation?.isDocker) {\n let dockerString = hostData.dockerInformation.isOfficial ? 'official image' : 'unofficial image';\n\n if (hostData.dockerInformation.isOfficial) {\n dockerString += ` - ${hostData.dockerInformation.officialVersion}`;\n }\n\n hostData.Platform = `${hostData.Platform} (${dockerString})`;\n }\n\n delete hostData.dockerInformation;\n}\n\ninterface HostsProps {\n t: Translate;\n expertMode: boolean;\n socket: AdminConnection;\n systemConfig: ioBroker.SystemConfigObject;\n executeCommand: (command: string) => void;\n hostsWorker: HostsWorker;\n showAdaptersWarning: (notifications: Record<string, NotificationAnswer>, hostId: string) => void;\n theme: IobTheme;\n noTranslation: boolean;\n toggleTranslation: () => void;\n currentHost: string;\n adminInstance: string;\n onUpdating: (updating: boolean) => void;\n themeType: ThemeType;\n lang: ioBroker.Languages;\n}\n\ninterface HostsState {\n repository: Record<string, RepoAdapterObject>;\n viewMode: boolean;\n alive: Record<`system.host.${string}`, boolean>;\n hosts: ioBroker.HostObject[];\n hostsData: Record<`system.host.${string}`, Record<string, any> | string>;\n filterText: string;\n showSlowConnectionWarning: boolean;\n readTimeoutMs: number;\n}\n\n// every tab should get their data itself from server\nclass Hosts extends Component<HostsProps, HostsState> {\n constructor(props: HostsProps) {\n super(props);\n\n this.state = {\n viewMode: ((window as any)._localStorage as Storage || window.localStorage).getItem('Hosts.viewMode') === 'true',\n alive: {},\n hosts: [],\n repository: {},\n hostsData: {},\n filterText: ((window as any)._localStorage as Storage || window.localStorage).getItem('Hosts.filterText') || '',\n showSlowConnectionWarning: false,\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n };\n }\n\n // cache translations\n t = (word: string, arg1?: any, arg2?: any): string => {\n if (arg1 !== undefined && arg2 !== undefined && !wordCache[`${word} ${arg1} ${arg2}`]) {\n wordCache[`${word} ${arg1} ${arg2}`] = this.props.t(word, arg1, arg2);\n } else if (arg1 !== undefined && !wordCache[`${word} ${arg1}`]) {\n wordCache[`${word} ${arg1}`] = this.props.t(word, arg1);\n } else if (!wordCache[word]) {\n wordCache[word] = this.props.t(word);\n }\n\n return arg1 !== undefined && arg2 !== undefined ? wordCache[`${word} ${arg1} ${arg2}`] : (arg1 !== undefined ? wordCache[`${word} ${arg1}`] : wordCache[word]);\n };\n\n async componentDidMount() {\n this.readInfo()\n .then(() => {\n this.props.hostsWorker.registerHandler(this.updateHosts);\n this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive);\n });\n }\n\n componentWillUnmount() {\n this.props.hostsWorker.unregisterHandler(this.updateHosts);\n this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive);\n }\n\n getHostsData(hosts: ioBroker.HostObject[], _alive: Record<string, boolean>): Promise<Record<string, Record<string, any> | string>> {\n const promises: Promise<{ id: `system.host.${string}`; data: Record<string, any> | string}>[] = [];\n\n for (let h = 0; h < hosts.length; h++) {\n if (_alive[hosts[h]._id]) {\n const promise = this.props.socket.getHostInfo(hosts[h]._id, null, this.state.readTimeoutMs)\n .catch((error: string) => {\n console.error(`Cannot get getHostInfo: ${error}`);\n if (error.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return { id: hosts[h]._id as `system.host.${string}`, data: error.toString() };\n })\n .then((data: Record<string, any>) => {\n preprocessHostData(data);\n return { id: hosts[h]._id as `system.host.${string}`, data };\n });\n promises.push(promise);\n } else {\n promises.push(Promise.resolve({ id: hosts[h]._id as `system.host.${string}`, data: 'offline' }));\n }\n }\n\n return Promise.all(promises)\n .then(results => {\n const _hostsData: Record<string, Record<string, any> | string> = {};\n results.forEach(res => _hostsData[res.id] = res.data);\n return _hostsData;\n });\n }\n\n readInfo() {\n return this.props.socket.getHosts(true)\n .then(hosts => this.props.socket.getRepository(this.props.currentHost, { update: false }, false, this.state.readTimeoutMs)\n .then(async repository => {\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n\n for (let h = 0; h < hosts.length; h++) {\n const aliveValue = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n alive[hosts[h]._id] = !aliveValue ? false : !!aliveValue.val;\n }\n\n const hostsData = await this.getHostsData(hosts, alive);\n const newState: Partial<HostsState> = {\n alive,\n hosts,\n hostsData,\n repository,\n };\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n this.setState(newState as HostsState);\n })\n .catch(e => {\n window.alert(`Cannot getRepository: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }));\n }\n\n updateHosts = (events: HostEvent[]) => {\n const hosts: ioBroker.HostObject[] = JSON.parse(JSON.stringify(this.state.hosts));\n const alive: Record<`system.host.${string}`, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n\n Promise.all(events.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 const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id as `system.host.${string}`] = !!state?.val;\n // new\n hosts.push(event.obj);\n }\n }))\n .then(() => {\n const newState: Partial<HostsState> = { hosts, alive };\n\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n\n this.setState(newState as HostsState);\n });\n };\n\n updateHostsAlive = (events: HostAliveEvent[]) => {\n const alive: Record<`system.host.${string}`, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n events.forEach(event => {\n if (event.type === 'deleted') {\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 }\n };\n\n getPanelsOrRows() {\n const items = this.renderHosts()\n .filter(host => host);\n\n return items.length ? items : this.t('All items are filtered out');\n }\n\n renderSlowConnectionWarning() {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n return <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={this.t}\n onClose={async readTimeoutMs => {\n this.setState({ showSlowConnectionWarning: false });\n if (readTimeoutMs) {\n this.setState({ readTimeoutMs });\n await this.readInfo();\n }\n }}\n />;\n }\n\n renderHosts() {\n return this.state.hosts.map(host => {\n if (this.state.filterText && !host.common.name.toLowerCase().includes(this.state.filterText.toLowerCase())) {\n return null;\n }\n const HostElement = this.state.viewMode ? HostCard : HostRow;\n\n return <HostElement\n key={host._id}\n adminInstance={this.props.adminInstance}\n alive={this.state.alive[host._id]}\n available={this.state.repository['js-controller']?.version || '-'}\n executeCommandRemove={() => this.props.executeCommand(`host remove ${host.common.name}`)}\n expertMode={this.props.expertMode}\n host={host}\n hostData={this.state.hostsData[host._id]}\n hostId={host._id as `system.host.${string}`}\n hostsWorker={this.props.hostsWorker}\n isCurrentHost={this.props.currentHost === host._id}\n jsControllerInfo={this.state.repository['js-controller']}\n lang={this.props.lang}\n noTranslation={this.props.noTranslation}\n onUpdating={this.props.onUpdating}\n showAdaptersWarning={this.props.showAdaptersWarning}\n socket={this.props.socket}\n systemConfig={this.props.systemConfig}\n t={this.t}\n theme={this.props.theme}\n themeType={this.props.themeType}\n toggleTranslation={this.props.toggleTranslation}\n />;\n });\n }\n\n renderTableHeader() {\n return <div style={styles.tabHeaderWrapper}>\n <div style={styles.tabHeaderFirstItem}>\n {this.t('Name:')}\n </div>\n <div style={styles.tabFlex}>\n {/* <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden600)}>{t('Title:')}</div> */}\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n CPU\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n RAM\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n {this.t('Uptime')}\n </Box>\n <Box component=\"div\" sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100)}>\n {this.t('Installed')}\n <div style={styles.jsController}>js-controller</div>\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100)}\n >\n {this.t('Available')}\n <div style={styles.jsController}>js-controller</div>\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden600)}\n >\n {this.t('Events')}\n </Box>\n <div\n style={{\n ...styles.tabHeaderItemButton,\n width: this.props.expertMode ? 292 : 244,\n }}\n />\n </div>\n </div>;\n }\n\n render() {\n if (!this.state.hosts.length) {\n return <LinearProgress />;\n }\n\n return <TabContainer>\n <style>{blinkClasses}</style>\n {this.renderSlowConnectionWarning()}\n <TabHeader>\n <Tooltip title={this.t('Show / hide List')} slotProps={{ popper: { sx: styles.tooltip } }}>\n <IconButton\n size=\"large\"\n onClick={() => {\n ((window as any)._localStorage as Storage || window.localStorage).setItem('Hosts.viewMode', this.state.viewMode ? 'false' : 'true');\n this.setState({ viewMode: !this.state.viewMode });\n }}\n >\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip title={this.t('Reload')} slotProps={{ popper: { sx: styles.tooltip } }}>\n <IconButton size=\"large\" onClick={() => this.forceUpdate()}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div style={styles.grow} />\n {this.state.hosts.length > 2 ? <TextField\n variant=\"standard\"\n label={this.t('Filter')}\n style={{ margin: '5px 0' }}\n value={this.state.filterText}\n onChange={event => {\n ((window as any)._localStorage as Storage || window.localStorage).setItem('Hosts.viewMode', event.target.value);\n this.setState({ filterText: event.target.value });\n }}\n slotProps={{\n input: {\n endAdornment: this.state.filterText ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n ((window as any)._localStorage as Storage || window.localStorage).setItem('Hosts.viewMode', '');\n this.setState({ filterText: '' });\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n /> : null}\n <div style={styles.grow} />\n </TabHeader>\n <TabContent overflow=\"auto\">\n {!Utils.isStableRepository(this.props.systemConfig.common.activeRepo) ?\n <Box component=\"div\" sx={styles.notStableRepo}>{this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}</Box> : null}\n <div style={this.state.viewMode ? styles.cards : undefined}>\n {!this.state.viewMode && this.renderTableHeader()}\n {this.getPanelsOrRows()}\n </div>\n </TabContent>\n </TabContainer>;\n }\n}\n\nexport default withWidth()(Hosts);\n"],"names":["JsControllerUpdater","Component","constructor","props","super","updating","textareaRef","React","link","window","location","protocol","host","interval","startTimeout","this","state","response","error","starting","setUpdating","onUpdating","findIpAddress","_settings$config","_settings$config$obje","_host$native","_host$native$hardware","socket","getObject","adminInstance","common","hostId","settings","readBaseSettings","hostIp","config","objects","ipaddr","toString","native","hardware","networkInterfaces","networkInterface","Object","values","find","addr","iIP","cidr","internal","match","family","address","port","componentDidMount","e","console","message","upgradeController","version","parseInt","split","pop","setState","I18n","t","setInterval","checkStatus","setTimeout","componentWillUnmount","clearInterval","clearTimeout","log","res","fetch","plainBody","text","JSON","parse","stderr","filter","line","trim","running","success","stdout","push","unshift","current","scrollTop","scrollHeight","render","_this$state$response","_this$state$response2","_this$state$response4","_this$state$response5","_this$state$response6","_jsxs","Dialog","onClose","_e","reason","open","maxWidth","fullWidth","children","_jsx","DialogTitle","DialogContent","style","height","padding","overflow","LinearProgress","ref","width","resize","background","themeType","color","boxSizing","fontFamily","border","undefined","value","length","join","readOnly","DialogActions","Button","id","variant","disabled","onClick","_this$state$response3","reload","startIcon","ReloadIcon","CloseIcon","styles","root","display","flexDirection","paper","overflowHidden","h1","fontWeight","fontSize","margin","h2","theme","p","borderRadius","palette","mode","h22","m","standardText","textDecoration","standardTextSmall","standardTextSmall2","pre","whiteSpace","position","copyButton","right","top","comment","accordionSummary","accordionDetails","code","backgroundColor","copyButtonSmall","removeChapter","remove","mustContain","lines","newLines","found","i","toLowerCase","startsWith","includes","_ref","readme","setReadme","useState","setLocation","os","setOS","copyTextToClipboard","Utils","copyToClipboard","alert","useEffect","getHostInfoShort","then","data","getLanguage","_readme","_os","_location","replace","readmeLines","parts","forEach","chapter","parts_","button","small","IconButton","IconCopy","catch","sx","dividers","_Fragment","map","ReactMarkdown","components","em","_ref2","a","_ref3","_ref4","Box","component","Card","href","target","rel","size","Accordion","paddingTop","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","CONTROLLER_CHANGELOG_URL","DescriptionIcon","maxHeight","controlItem","marginBottom","marginRight","marginLeft","RAM","BaseSettingsSystem","focusRef","memoryLimitMB","hostname","statisticsInterval","checkDiskInterval","instanceStartInterval","compact","allowShellCommands","memLimitWarn","memLimitError","noChmod","createRef","_this$focusRef$curren","focus","onChange","Paper","Grid2","gridSettings","container","direction","TextField","label","currentHost","helperText","type","slotProps","htmlInput","min","FormControlLabel","control","Checkbox","checked","withWidth","BaseSettingsMultihost","enabled","secure","password","decrypt","plainPass","newState","encrypt","encodedPass","form","noValidate","autoComplete","input","dangerZone","dangerZoneHeader","paddingLeft","paddingBottom","marginTop","warning","DEFAULT_JSONL_OPTIONS","autoCompress","sizeFactor","sizeFactorMinimumSize","throttleFS","intervalMs","maxBufferedCommands","BaseSettingsObjects","options","auth_pass","retry_max_delay","retry_max_count","db","backup","files","hours","period","path","jsonlOptions","Array","isArray","noFileCache","dataDir","connectTimeout","writeFileInterval","options_auth_pass","pass","options_retry_max_delay","options_retry_max_count","options_db","options_family","backup_disabled","backup_files","backup_hours","backup_period","backup_path","jsonlOptions_autoCompress_sizeFactor","jsonlOptions_autoCompress_sizeFactorMinimumSize","jsonlOptions_throttleFS_intervalMs","jsonlOptions_throttleFS_maxBufferedCommands","textIP","IPs","loading","showWarningDialog","toConfirmType","originalDBType","getIpAddresses","_IPs","renderWarning","DialogConfirm","title","result","Tooltip","popper","pointerEvents","FormControl","InputLabel","Select","MenuItem","Switch","ip","max","FormGroup","FormHelperText","BaseSettingsStates","mixins","toolbar","minHeight","delButton","addButton","buttonIcon","headingIcon","BaseSettingsLog","transport","keys","multiplier","maxSize","level","maxFiles","facility","sysLogType","app_name","eol","auth","ssl","stream","silent","serverUrl","apiKey","maxDays","noStdout","expanded","stringify","onDelete","renderEnabled","name","renderLogLevel","renderValue","renderSyslog","pos","indexOf","splice","IconSyslog","Typography","heading","Fab","IconDelete","localhost","renderFile","IconFile","filename","fileext","renderHttp","IconHttp","renderStream","IconStream","renderSEQ","src","IconSeq","alt","add","Toolbar","IconPlus","divWithoutTitle","BaseSettingsPlugins","Editor","newValue","content","tabPanel","selected","BaseSettingsDialog","originalSettings","currentTab","hasChanges","confirmExit","showRestart","system","multihostService","states","plugins","dnsResolution","saving","getSettings","renderConfirmDialog","ConfirmDialog","renderRestartDialog","ok","cancel","restartController","answer","onSave","newSettings","writeBaseSettings","updateSettings","changed","renderSystem","renderMultihost","renderObjects","renderStates","renderLog","renderPlugins","dialog","currentHostName","AppBar","Tabs","event","newTab","indicatorColor","Tab","CheckIcon","fontStyle","funcDivEdit","funcEditName","funcEdit","commonTabWrapper","flexFlow","commonWrapper","minWidth","flexDrop","marginBlock","buttonAdd","textField","flex","close","opacity","cursor","transition","transform","left","buttonRemoveWrapper","zIndex","tabsPadding","HostEdit","originalObj","obj","prepareObject","_id","json","onUpdate","setCommonItem","removeCommonItem","buttonAddKey","nameKey","cb","IconAdd","buttonRemoveKey","renderCommonEdit","el","endAdornment","InputAdornment","icon","UploadImage","crop","removeIconFunc","base64","fullScreen","IconCheck","IconClose","boxShadow","boxShadowHover","genericStyles","img","backgroundSize","collapseOff","footerBlock","default","justifyContent","hidden","emptyButton","greenText","dark","wrapperAvailable","alignItems","buttonUpdate","green","buttonUpdateIcon","debug","grey","info","blue","warn","amber","red","smallAvatar","formControl","baseSettingsButton","tooltip","arrayLogLevel","toggleClassName","classNames","className","_classNames","HostGeneric","refEvents","refWarning","refCpu","refMem","refUptime","outputCache","inputCache","cpuCache","memCache","uptimeCache","diskFreeCache","diskSizeCache","diskWarningCache","notificationHandler","notifications","errorHost","count","calculateWarning","eventsInputFunc","val","innerHTML","eventsOutputFunc","output","warningFunc","name_","endsWith","setAttribute","classList","removeAttribute","cpuFunc","formatValue","memFunc","uptimeFunc","d","Math","floor","h","logLevelFunc","logLevel","logLevelSelect","openDialogLogLevel","hostUpdateDialog","updateAvailable","instructionDialog","updateDialog","baseSettingsDialog","editDialog","changeLog","getInitialDiskStates","diskWarningState","getState","diskFreeState","diskSizeState","readChangeLog","hostsWorker","registerNotificationHandler","getNotifications","subscribeState","finally","async","unregisterNotificationHandler","unsubscribeState","categories","nameTab","instances","unit","systemConfig","isFloatComma","renderDialogLogLevel","CustomModal","onApply","BuildIcon","onCopy","available","installedVersion","hostData","formatInfo","renderUpdateButton","upgradeAvailable","stopPropagation","openHostUpdateDialog","RefreshIcon","renderHostBaseEdit","expertMode","alive","renderExtendButton","BiChevronUp","BiChevronDown","renderRestartButton","err","CachedIcon","renderEditButton","EditIcon","renderRemoveButton","isCurrentHost","executeCommandRemove","DeleteIcon","renderCopyButton","Avatar","BugReportIcon","InfoIcon","WarningIcon","ErrorIcon","renderNotificationsBadge","styled","Badge","badgeContent","badge","showAdaptersWarning","checkFeatureSupported","renderHostUpdateDialog","AdapterUpdateDialog","adapter","adapterObject","jsControllerInfo","textUpdate","textInstruction","rightDependencies","news","getNews","toggleTranslation","noTranslation","onInstruction","renderUpdateDialog","isUpdating","JsControllerDialog","extractNews","changelog","started","all","installed","semver","downloaded","newsText","en","lang","baseSettingsSettingsDialog","renderEditObjectDialog","setObject","forceUpdate","renderDialogs","Uptime","AdminUtils","formatSeconds","formatRam","Speed","formatSpeed","formatBytes","animation","imageBlock","fab","bottom","collapse","ml","mb","onOffLine","alignSelf","verticalAlign","pl","pt","cardContentInfo","cardContentH5","marginTop10","displayFlex","marginLeft5","enableButton","instanceStateNotAlive1","dotLine","versionDate","cardContentDiv","curdContentFlexCenter","ul","paddingRight","getHostDescriptionAll","black","Skeleton","description","getStyle","openCollapse","CardContent","CardMedia","image","invertColor","MoreVertIcon","collapseOn","onOff","textOverflow","cursorNoDrop","wrapperFlex","wrapperColor","hidden1100","hidden800","hidden600","wrapperInfo","wrapperBlockItem","bold","nowrap","cell","idx","grow","flexGrow","cards","tabHeaderWrapper","tabHeaderFirstItem","tabHeaderItem","tabHeaderItemButton","widthButtons","tabFlex","notStableRepo","jsController","wordCache","preprocessHostData","_hostData$dockerInfor","dockerInformation","isDocker","dockerString","isOfficial","officialVersion","Platform","Hosts","word","arg1","arg2","updateHosts","events","hosts","Promise","elementFind","index","filterText","updateHostsAlive","viewMode","_localStorage","localStorage","getItem","repository","hostsData","showSlowConnectionWarning","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","readInfo","registerHandler","registerAliveHandler","unregisterHandler","unregisterAliveHandler","getHostsData","_alive","promises","promise","getHostInfo","resolve","results","_hostsData","getHosts","getRepository","update","aliveValue","getPanelsOrRows","items","renderHosts","renderSlowConnectionWarning","SlowConnectionWarningDialog","_this$state$repositor","HostElement","HostCard","HostRow","executeCommand","renderTableHeader","TabContainer","TabHeader","setItem","ViewModuleIcon","ViewListIcon","TabContent","isStableRepository","activeRepo"],"sourceRoot":""}
|