iobroker.admin 7.4.4 → 7.4.8
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 +10 -8
- package/adminWww/asset-manifest.json +37 -37
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/1737.08641cc2.chunk.js +3 -0
- package/adminWww/static/js/1737.08641cc2.chunk.js.map +1 -0
- package/adminWww/static/js/1892.3c30ecff.chunk.js.map +1 -1
- package/adminWww/static/js/{288.20da45b9.chunk.js → 288.23e8413f.chunk.js} +2 -2
- package/adminWww/static/js/288.23e8413f.chunk.js.map +1 -0
- package/adminWww/static/js/2930.8e88fcf2.chunk.js.LICENSE.txt +1 -1
- package/adminWww/static/js/2930.8e88fcf2.chunk.js.map +1 -1
- package/adminWww/static/js/3363.a4c36649.chunk.js.map +1 -1
- package/adminWww/static/js/3834.d81ffc60.chunk.js +2 -0
- package/adminWww/static/js/3834.d81ffc60.chunk.js.map +1 -0
- package/adminWww/static/js/4289.cbde8e52.chunk.js +2 -0
- package/adminWww/static/js/4289.cbde8e52.chunk.js.map +1 -0
- package/adminWww/static/js/471.8a82d825.chunk.js.map +1 -1
- package/adminWww/static/js/4720.6112531a.chunk.js +2 -0
- package/adminWww/static/js/4720.6112531a.chunk.js.map +1 -0
- package/adminWww/static/js/5503.a4ce73d8.chunk.js +3 -0
- package/adminWww/static/js/5503.a4ce73d8.chunk.js.map +1 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js +2 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js.map +1 -0
- package/adminWww/static/js/{6361.48a28196.chunk.js → 6361.ec86271d.chunk.js} +2 -2
- package/adminWww/static/js/6361.ec86271d.chunk.js.map +1 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js +3 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js.map +1 -0
- package/adminWww/static/js/6853.ff130602.chunk.js +2 -0
- package/adminWww/static/js/6853.ff130602.chunk.js.map +1 -0
- package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +1 -1
- package/adminWww/static/js/7424.223daaa3.chunk.js +2 -0
- package/adminWww/static/js/7424.223daaa3.chunk.js.map +1 -0
- package/adminWww/static/js/{8144.ae502bba.chunk.js → 8144.5989b02c.chunk.js} +3 -3
- package/adminWww/static/js/8144.5989b02c.chunk.js.map +1 -0
- package/adminWww/static/js/8387.2cb15163.chunk.js.map +1 -1
- package/adminWww/static/js/9072.4505ce12.chunk.js +2 -0
- package/adminWww/static/js/9072.4505ce12.chunk.js.map +1 -0
- package/adminWww/static/js/9086.a4fdc813.chunk.js +2 -0
- package/adminWww/static/js/9086.a4fdc813.chunk.js.map +1 -0
- package/adminWww/static/js/9228.cf388444.chunk.js +3 -0
- package/adminWww/static/js/9228.cf388444.chunk.js.map +1 -0
- package/adminWww/static/js/9701.2178b9bd.chunk.js +2 -0
- package/adminWww/static/js/9701.2178b9bd.chunk.js.map +1 -0
- package/adminWww/static/js/9731.b09a7023.chunk.js +3 -0
- package/adminWww/static/js/{9731.f67b583c.chunk.js.LICENSE.txt → 9731.b09a7023.chunk.js.LICENSE.txt} +1 -1
- package/adminWww/static/js/9731.b09a7023.chunk.js.map +1 -0
- package/adminWww/static/js/main.a833ed54.js +2 -0
- package/adminWww/static/js/main.a833ed54.js.map +1 -0
- package/build-backend/main.js +1 -1
- package/build-backend/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +5 -5
- package/adminWww/static/js/288.20da45b9.chunk.js.map +0 -1
- package/adminWww/static/js/38.e125c16b.chunk.js +0 -3
- package/adminWww/static/js/38.e125c16b.chunk.js.map +0 -1
- package/adminWww/static/js/3834.2e04eb51.chunk.js +0 -2
- package/adminWww/static/js/3834.2e04eb51.chunk.js.map +0 -1
- package/adminWww/static/js/4289.e9a5790f.chunk.js +0 -2
- package/adminWww/static/js/4289.e9a5790f.chunk.js.map +0 -1
- package/adminWww/static/js/4720.4bbc23ec.chunk.js +0 -2
- package/adminWww/static/js/4720.4bbc23ec.chunk.js.map +0 -1
- package/adminWww/static/js/5503.751d48e4.chunk.js +0 -3
- package/adminWww/static/js/5503.751d48e4.chunk.js.map +0 -1
- package/adminWww/static/js/5687.c249e41f.chunk.js +0 -2
- package/adminWww/static/js/5687.c249e41f.chunk.js.map +0 -1
- package/adminWww/static/js/6361.48a28196.chunk.js.map +0 -1
- package/adminWww/static/js/6603.614b4df4.chunk.js +0 -3
- package/adminWww/static/js/6603.614b4df4.chunk.js.map +0 -1
- package/adminWww/static/js/6853.f9170a75.chunk.js +0 -2
- package/adminWww/static/js/6853.f9170a75.chunk.js.map +0 -1
- package/adminWww/static/js/7424.98e61818.chunk.js +0 -2
- package/adminWww/static/js/7424.98e61818.chunk.js.map +0 -1
- package/adminWww/static/js/7863.92e61020.chunk.js +0 -2
- package/adminWww/static/js/7863.92e61020.chunk.js.map +0 -1
- package/adminWww/static/js/8144.ae502bba.chunk.js.map +0 -1
- package/adminWww/static/js/9072.4eaaedc2.chunk.js +0 -2
- package/adminWww/static/js/9072.4eaaedc2.chunk.js.map +0 -1
- package/adminWww/static/js/9228.3ce3911c.chunk.js +0 -3
- package/adminWww/static/js/9228.3ce3911c.chunk.js.map +0 -1
- package/adminWww/static/js/9701.b2813984.chunk.js +0 -2
- package/adminWww/static/js/9701.b2813984.chunk.js.map +0 -1
- package/adminWww/static/js/9731.f67b583c.chunk.js +0 -3
- package/adminWww/static/js/9731.f67b583c.chunk.js.map +0 -1
- package/adminWww/static/js/main.11639e29.js +0 -2
- package/adminWww/static/js/main.11639e29.js.map +0 -1
- /package/adminWww/static/js/{38.e125c16b.chunk.js.LICENSE.txt → 1737.08641cc2.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{5503.751d48e4.chunk.js.LICENSE.txt → 5503.a4ce73d8.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{6603.614b4df4.chunk.js.LICENSE.txt → 6603.ee9b0df5.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{8144.ae502bba.chunk.js.LICENSE.txt → 8144.5989b02c.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{9228.3ce3911c.chunk.js.LICENSE.txt → 9228.cf388444.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/8387.2cb15163.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, type JSX } from 'react';\nimport ipaddr from 'ipaddr.js';\n\nimport { LinearProgress, Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material';\n\nimport { Close as CloseIcon, Refresh as ReloadIcon } 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): void {\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 the browser, else we try to get information from the host object\n */\n async findIpAddress(): Promise<void> {\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(\n `system.adapter.${this.props.adminInstance}`,\n )) 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(): void {\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(): 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 />\n ) : null}\n {this.state.response || this.state.error ? (\n <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 />\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, type JSX } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n DialogTitle,\n IconButton,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Box,\n} from '@mui/material';\n\nimport { ExpandMore as ExpandMoreIcon, Description as DescriptionIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, Utils, IconCopy, type IobTheme } 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 = ({ socket, hostId, version, onClose }: JsControllerDialogProps): JSX.Element => {\n const [readme, setReadme] = useState<(string | JSX.Element)[] | null>(null);\n const [location, setLocation] = useState('');\n const [os, setOS] = useState('');\n\n const copyTextToClipboard = (text: string): void => {\n Utils.copyToClipboard(text);\n window.alert(I18n.t('Copied'));\n };\n\n useEffect((): void => {\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\n .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 void fetch(\n `https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${I18n.getLanguage()}/controller-upgrade.md`,\n )\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 | 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(\n <IconButton\n key={`b${parts.length}`}\n onClick={() => copyTextToClipboard(button)}\n >\n <IconCopy />\n </IconButton>,\n );\n } else {\n parts.push(\n <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 }\n parts.push(text);\n } else {\n parts.push(chapter);\n }\n });\n\n setReadme(parts);\n });\n })\n .catch((e: string) => window.alert(`Cannot get information about host \"${hostId}\": ${e}`));\n }\n }, [location, os, socket, version, hostId]);\n\n const renderReadme = (): JSX.Element => (\n <>\n {readme.map((text, i) =>\n typeof text === 'object' ? (\n text\n ) : (\n <ReactMarkdown\n key={`t_${i}`}\n components={{\n em: ({ ...props }) => (\n <IconButton\n style={styles.copyButtonSmall}\n onClick={() => copyTextToClipboard((props.children as string[])[0].toString())}\n >\n <IconCopy />\n </IconButton>\n ),\n a: ({ children, ...props }) => (\n <a\n style={{ color: 'inherit' }}\n {...props}\n >\n {children}\n </a>\n ),\n code: ({ 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 >\n {text}\n </ReactMarkdown>\n ),\n )}\n </>\n );\n\n const renderText = (): JSX.Element => (\n <Card style={styles.root}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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.',\n )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('General information for all platforms')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('For an update from js-controller 1.x to 2.x please always read the information at')}{' '}\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\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'Otherwise please update the slaves first with an update of master-slave systems and the master last!',\n )}\n </Box>\n {os !== 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (new installer)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('This is the recommended option')}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </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}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'If the upgrade command displays Access Rights / Permission errors, then please use the install fixer',\n )}\n </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}>\n {I18n.t('to fix these issues and upgrade command run again.')}\n </div>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'A manual installation usually takes place under root as user and therefore a \"sudo\" is necessary before the commands.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </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}>\n cd\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}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n '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 -).',\n )}\n </div>\n </>\n )}\n {os === 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page ',\n )}\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(\n ' 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 )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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:',\n )}\n </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}>\n cd\n {(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}{' '}\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}>\n iob stop\n {I18n.t('to stop the ioBroker service')}\n </div>\n <div style={styles.standardTextSmall}>\n iob 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}>\n {I18n.t(\n 'Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.',\n )}\n </div>\n </>\n )}\n <Accordion style={{ paddingTop: 14 }}>\n <AccordionSummary\n sx={styles.accordionSummary}\n expandIcon={<ExpandMoreIcon />}\n >\n <Box\n component=\"h2\"\n sx={styles.h22}\n >\n {I18n.t('Emergency Linux / macOS / Windows')}\n </Box>\n </AccordionSummary>\n <AccordionDetails style={styles.accordionDetails}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('(manual reinstallation, if somehow nothing works after the update)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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).',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'If there are problems with access rights when running on Linux the command has to be changed slightly:',\n )}\n </Box>\n\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems created with the new Linux installer:')}\n </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}>\n cd\n {os === 'win32'\n ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')\n : location || '/opt/iobroker'}\n </div>\n <div style={styles.standardTextSmall}>\n sudo -u iobroker -H npm install iobroker.js-controller\n </div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems installed manually under Linux, prefix sudo or run as root.')}\n </div>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'This way is only necessary in very few cases and please consult the forum beforehand!',\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n </Card>\n );\n\n return (\n <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\n style={readme ? null : styles.overflowHidden}\n dividers\n >\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};\n\nexport default JsControllerDialog;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } 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(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\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(\n 'You can change the host name, but be aware, that all instances must be assigned anew',\n )}\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 =>\n this.setState({ checkDiskInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n '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 />\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 =>\n this.setState({ statisticsInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n 'How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms',\n )}\n />\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.compact}\n onChange={e =>\n this.setState({ compact: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Compact mode')}\n />\n <div>\n {this.props.t(\n 'When enabled adapter instances can run in one or few processes to save RAM usage.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.allowShellCommands}\n onChange={e =>\n this.setState({ allowShellCommands: e.target.checked }, () =>\n this.onChange(),\n )\n }\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 =>\n this.setState({ memoryLimitMB: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <Grid2\n container\n direction=\"row\"\n style={styles.controlItem}\n >\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 =>\n this.setState({ memLimitWarn: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\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 =>\n this.setState({ memLimitError: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsSystem);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } 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 void this.props.socket\n .decrypt(settings.password)\n .then((plainPass: string) => this.setState({ password: plainPass }));\n }\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\n const newState: BaseSettingsMultihostState = {\n enabled: this.state.enabled,\n secure: this.state.secure,\n };\n\n if (this.state.password) {\n void this.props.socket.encrypt(this.state.password).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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.enabled}\n onChange={e =>\n this.setState({ enabled: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Allow slave connections')}\n />\n <div>\n {this.props.t(\n 'When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.secure}\n onChange={e =>\n this.setState({ secure: e.target.checked }, () => this.onChange())\n }\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 ? (\n <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 =>\n this.setState({ password: e.target.value }, () => this.onChange())\n }\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </form>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsMultihost);\n","import React, { createRef, Component, type JSX } 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,\n Box,\n} from '@mui/material';\n\nimport { withWidth, DialogConfirm, type IobTheme, type Translate } 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:\n 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:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (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(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).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(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\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(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\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(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={(result: boolean) => {\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 }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\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 =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\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\n style={styles.controlItem}\n variant=\"standard\"\n >\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 => (\n <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 ))}\n </Select>\n </FormControl>\n )}\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' ? (\n <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>\n ) : 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 =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <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 =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.noFileCache}\n onChange={e =>\n this.setState({ noFileCache: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No file cache')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t(\n 'Always read files from disk and do not cache them in RAM. Used for debugging.',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <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 =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\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>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsObjects);\n","import React, { createRef, Component, type JSX } 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,\n Box,\n} from '@mui/material';\n\nimport { DialogConfirm, withWidth, type IobTheme, type Translate } 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:\n 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:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (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(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).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(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\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(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\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(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={(result: boolean) => {\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 }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\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 =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\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\n style={styles.controlItem}\n variant=\"standard\"\n >\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 => (\n <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 ))}\n </Select>\n </FormControl>\n )}\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' ? (\n <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>\n ) : 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 =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <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 =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <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 =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\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>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n style={styles.controlItem}\n variant=\"standard\"\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsStates);\n","import React, { createRef, Component, type JSX } 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 =\n typeof settings.transport[id].maxSize === 'string'\n ? (settings.transport[id].maxSize as string).includes('k')\n ? 0.1\n : (settings.transport[id].maxSize as string).includes('g')\n ? 10\n : 1\n : 1;\n settings.transport[id].maxSize =\n (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(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\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): void {\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): JSX.Element {\n return (\n <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\n renderLogLevel(name: string): JSX.Element | null {\n return this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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>\n {this.props.t(\n 'Level of messages that this transport should log (default: level set on parent logger)',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null;\n }\n\n renderSyslog(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconSyslog style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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(\n \"The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP).\",\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t(\n 'The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].localhost}\n helperText={this.props.t(\n 'Host to indicate that log messages are coming from (Default: localhost).',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t(\n 'The end of line character to be added to the end of the message (Default: Message without modifications).',\n )}\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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderFile(name: string): JSX.Element {\n return (\n <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\n style={{ background: 'rgba(128, 128, 128, 0.3)' }}\n expandIcon={<ExpandMoreIcon />}\n >\n <IconFile style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderHttp(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconHttp style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].auth}\n helperText={this.props.t(\n 'An object representing the username and password for HTTP Basic Auth',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderStream(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconStream style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].stream}\n helperText={this.props.t(\n '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 )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderSEQ(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <img\n style={styles.headingIcon}\n src={IconSeq}\n alt=\"seq\"\n />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].serverUrl}\n helperText={this.props.t(\n '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 )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n findFreeName(type: string): string {\n for (let i = 1; ; i++) {\n if (!Object.keys(this.state.transport).find(id => id === type + i)) {\n return type + i;\n }\n }\n }\n\n add(type: string): void {\n if (type === 'file') {\n const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 sx={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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 =>\n this.setState({ noStdout: e.target.checked }, () => this.onChange())\n }\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\n src={IconSeq}\n style={styles.buttonIcon}\n alt=\"seq\"\n />\n {this.props.t('SEQ log')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsLog);\n","import React, { Component, type JSX } from 'react';\n\nimport { Paper } from '@mui/material';\n\nimport { withWidth, type ThemeType, type Translate } 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): void {\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(): JSX.Element {\n return (\n <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}\n\nexport default withWidth()(BaseSettingsPlugins);\n","import React, { Component, type JSX } 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 { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n DialogConfirm,\n withWidth,\n type ThemeType,\n type IobTheme,\n 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';\nimport AdminUtils from '@/helpers/AdminUtils';\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 async componentDidMount(): Promise<void> {\n await this.getSettings(this.state.currentHost);\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <DialogConfirm\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n renderRestartDialog(): JSX.Element | null {\n if (this.state.showRestart) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={\n <>\n <div>{this.props.t('Restart works only if controller started as system service.')}</div>\n <div>\n {this.props.t(\n 'Would you like to restart the controller for your changes to take effect?',\n )}\n </div>\n </>\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\n .restartController(this.props.currentHost)\n .then(() =>\n setTimeout(\n () =>\n // reload admin\n window.location.reload(),\n 500,\n ),\n )\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }\n\n this.props.onClose();\n })\n }\n />\n );\n }\n return null;\n }\n\n async getSettings(host: string): Promise<void> {\n const settings = await this.props.socket.readBaseSettings(host || this.state.currentHost);\n const answer = settings as { config?: ioBroker.IoBrokerJson; isActive?: boolean };\n\n if (answer?.config) {\n this.originalSettings = AdminUtils.clone(answer.config);\n this.setState({\n loading: false,\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 onSave(host?: string): void {\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\n .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): void {\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(): JSX.Element {\n const name = 'system';\n return (\n <BaseSettingsSystem\n settings={this.state[name]}\n t={this.props.t}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderMultihost(): JSX.Element {\n const name = 'multihostService';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderObjects(): JSX.Element {\n const name = 'objects';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderStates(): JSX.Element {\n const name = 'states';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderLog(): JSX.Element {\n const name = 'log';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderPlugins(): JSX.Element {\n const name = 'plugins';\n return (\n <BaseSettingsPlugins\n settings={this.state[name]}\n t={this.props.t}\n themeType={this.props.themeType}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n render(): JSX.Element {\n return (\n <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')}: {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\n label={this.props.t('System')}\n id=\"system-tab\"\n aria-controls=\"simple-tabpanel-0\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\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\n label={this.props.t('Objects')}\n id=\"objects-tab\"\n aria-controls=\"simple-tabpanel-3\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('States')}\n id=\"states-tab\"\n aria-controls=\"simple-tabpanel-4\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Log')}\n id=\"log-tab\"\n aria-controls=\"simple-tabpanel-5\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Plugins')}\n id=\"plugins-tab\"\n aria-controls=\"simple-tabpanel-6\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n </Tabs>\n </AppBar>\n {this.state.loading ? <LinearProgress /> : null}\n {!this.state.loading && this.state.currentTab === 0 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderSystem()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 1 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderMultihost()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 2 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderObjects()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 3 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderStates()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 4 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderLog()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 5 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderPlugins()}\n </Box>\n ) : null}\n {this.renderDialogConfirm()}\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={() =>\n this.state.hasChanges.length ? this.setState({ confirmExit: true }) : this.props.onClose()\n }\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}\n\nexport default withWidth()(BaseSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, Add as IconAdd, Close as CloseIcon } 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): void {\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(): void {\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): void {\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): void {\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): JSX.Element {\n const { t } = this.props;\n return (\n <div style={styles.marginBlock}>\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\n buttonRemoveKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <Tooltip\n title={t(`Remove ${nameKey}`)}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={cb}\n />\n </Tooltip>\n );\n }\n\n renderCommonEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const disabled = false;\n const { t } = this.props;\n return (\n <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 ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'title', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n ) : (\n this.buttonAddKey('title', () => this.setCommonItem(json, 'title', ''))\n )}\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 ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'color', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </div>\n ) : (\n this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n )}\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 ) : (\n <div style={styles.flexDrop}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </div>\n )}\n </div>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n render(): JSX.Element {\n return (\n <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')}:<span style={styles.id}>{this.props.obj._id}</span>\n </DialogTitle>\n <DialogContent>{this.renderCommonEdit()}</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}\n\nexport default HostEdit;\n","import React, { Component } from 'react';\nimport semver from 'semver';\n\nimport {\n Avatar,\n Badge,\n 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 { amber, blue, green, grey, red } from '@mui/material/colors';\n\nimport {\n Utils,\n IconCopy,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n 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 type { NotificationsCount } from '@/types';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport HostEdit from './HostEdit';\nimport CustomModal from '../CustomModal';\n\nexport const boxShadow =\n '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): void {\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 hostNotifications: { notifications: NotificationAnswer | null } & NotificationsCount;\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<\n TProps extends HostGenericProps,\n TState extends HostGenericState,\n> 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 hostNotifications: { notifications: null, warning: 0, other: 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>): void =>\n notifications &&\n notifications[this.props.hostId] &&\n this.setState({\n hostNotifications: {\n notifications: notifications[this.props.hostId],\n ...HostGeneric.calculateWarning(notifications[this.props.hostId]),\n },\n });\n\n readChangeLog(): void {\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(): void {\n this.props.hostsWorker.registerNotificationHandler(this.notificationHandler);\n\n void this.props.hostsWorker\n .getNotifications(this.props.hostId)\n .then(notifications => this.notificationHandler(notifications));\n\n void this.props.socket.subscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n void this.props.socket.subscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.mem`, this.memFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n void this.getInitialDiskStates().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 void this.props.socket.subscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n componentWillUnmount(): void {\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): void => {\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): void => {\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): void => {\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): void => {\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): void => {\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): void => {\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 static calculateWarning(notifications: NotificationAnswer | null): NotificationsCount {\n const count = { warning: 0, other: 0 };\n\n if (!notifications) {\n return count;\n }\n const { result } = notifications;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n const obj = result.system.categories;\n\n for (const category of Object.values(obj)) {\n Object.keys(category.instances).forEach(() =>\n category.severity === 'alert' ? count.warning++ : count.other++,\n );\n }\n }\n return count;\n }\n\n formatValue(state: ioBroker.State, unit: string): 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): void => {\n if (state) {\n this.setState({ logLevel: state.val as ioBroker.LogLevel, logLevelSelect: state.val as ioBroker.LogLevel });\n }\n };\n\n renderDialogLogLevel(): React.JSX.Element {\n if (!this.state.openDialogLogLevel) {\n return null;\n }\n return (\n <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\n .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\n style={{ ...genericStyles.formControl, marginTop: 8 }}\n variant=\"outlined\"\n >\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\n key={el}\n value={el}\n >\n {this.props.t(el)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={genericStyles.formControl}\n variant=\"outlined\"\n >\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\n onCopy(): void {\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\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): React.JSX.Element {\n return upgradeAvailable ? (\n <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 return this.openHostUpdateDialog();\n }}\n sx={genericStyles.buttonUpdate}\n >\n <IconButton\n style={genericStyles.buttonUpdateIcon}\n size=\"small\"\n >\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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHostBaseEdit(): React.JSX.Element | null {\n return this.props.expertMode ? (\n <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>\n ) : 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 ): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t(open ? 'collapse' : 'Expand')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton size=\"large\">{open ? <BiChevronUp /> : <BiChevronDown />}</IconButton>\n </div>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRestartButton(): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Restart host')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={event => {\n event.stopPropagation();\n this.props.socket\n .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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderEditButton(): React.JSX.Element {\n return (\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ editDialog: true });\n }}\n >\n <EditIcon />\n </IconButton>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRemoveButton(): React.JSX.Element {\n return !this.props.alive && !this.props.isCurrentHost ? (\n <Tooltip\n title={\n this.props.alive || this.props.isCurrentHost\n ? this.props.t('You cannot delete host, when it is alive')\n : this.props.t('Remove')\n }\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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderCopyButton(style?: React.CSSProperties): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Copy')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.onCopy()}\n style={style}\n >\n <IconCopy />\n </IconButton>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderLogLevel(): React.JSX.Element {\n return (\n <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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderNotificationsBadge(children?: React.ReactNode, styled?: boolean): React.JSX.Element {\n return (\n <Badge\n sx={\n styled\n ? {\n right: -3,\n top: 13,\n padding: '0 4px',\n cursor: 'pointer',\n }\n : { cursor: 'pointer' }\n }\n title={this.props.t('Hosts notifications')}\n badgeContent={this.state.hostNotifications.warning + this.state.hostNotifications.other}\n style={genericStyles.badge}\n color={this.state.hostNotifications.warning > 0 ? 'error' : 'secondary'}\n onClick={e => {\n e.stopPropagation();\n this.props.showAdaptersWarning(\n { [this.props.hostId]: this.state.hostNotifications.notifications },\n this.props.hostId,\n );\n }}\n >\n {children}\n </Badge>\n );\n }\n\n async openHostUpdateDialog(): Promise<void> {\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(): React.JSX.Element | null {\n if (!this.state.hostUpdateDialog) {\n return null;\n }\n\n return (\n <AdapterUpdateDialog\n adapter={this.props.host.common.name}\n adapterObject={this.props.jsControllerInfo}\n t={this.props.t}\n textUpdate={\n this.state.updateAvailable ? this.props.t('Start update') : this.props.t('Show instructions')\n }\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={() => {\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\n renderUpdateDialog(): React.JSX.Element | null {\n if (this.state.updateAvailable && this.state.updateDialog) {\n return (\n <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\n if (this.state.instructionDialog) {\n return (\n <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\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\n : adapter.news[version][this.props.lang] || adapter.news[version].en;\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(): React.JSX.Element | null {\n if (!this.state.baseSettingsDialog) {\n return null;\n }\n\n return (\n <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\n renderEditObjectDialog(): React.JSX.Element | null {\n if (!this.state.editDialog) {\n return null;\n }\n\n return (\n <HostEdit\n obj={this.props.host}\n t={this.props.t}\n onClose={obj =>\n this.setState({ editDialog: false }, () => {\n if (obj) {\n this.props.socket\n .setObject(obj._id, obj)\n .then(() => this.forceUpdate())\n .catch(e => alert(`Cannot write object: ${e}`));\n }\n })\n }\n />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderDialogs(): React.JSX.Element {\n return (\n <>\n {this.renderDialogLogLevel()}\n {this.renderHostUpdateDialog()}\n {this.renderUpdateDialog()}\n {this.renderEditObjectDialog()}\n {this.baseSettingsSettingsDialog()}\n </>\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Box, Card, CardContent, CardMedia, Fab, Skeleton, Typography } from '@mui/material';\n\nimport { MoreVert as MoreVertIcon } from '@mui/icons-material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/helpers/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(): JSX.Element | string {\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 (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n <Skeleton />\n </ul>\n );\n }\n\n return (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n {Object.keys(this.props.hostData).map(value => (\n <li key={value}>\n <span style={styles.black}>\n <span style={styles.label}>{this.props.t(value)}: </span>\n <span style={styles.value}>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](\n (this.props.hostData as Record<string, any>)[value],\n this.props.t,\n )\n : (this.props.hostData as Record<string, any>)[value] || '--'}\n </span>\n </span>\n </li>\n ))}\n </ul>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Card\n key={this.props.hostId}\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden)}\n >\n {this.renderDialogs()}\n {this.state.openCollapse && (\n <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\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\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(this.props.theme, styles.adapter, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n 'inherit',\n })}\n >\n {this.renderNotificationsBadge(this.props.host.common.name, true)}\n </Box>\n {!this.state.openCollapse ? (\n <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>\n ) : null}\n </div>\n <CardContent style={styles.cardContentH5}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>CPU:</span>\n <div\n ref={this.refCpu}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>RAM:</span>\n <div\n ref={this.refMem}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Uptime')}:</span>\n <div\n ref={this.refUptime}\n style={styles.value}\n >\n -d -h\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n style={styles.wrapperAvailable}\n >\n <span style={styles.label}>{this.props.t('Available')} js-controller:</span>\n <Box\n component=\"div\"\n sx={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n <span style={styles.label}>{this.props.t('Installed')} js-controller:</span>\n <span style={styles.value}>{this.props.host.common.installedVersion}</span>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Events')}:</span>\n <div\n ref={this.refEvents}\n style={styles.value}\n >\n - / -\n </div>\n </div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography\n component=\"span\"\n style={styles.enableButton}\n >\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}\n\nexport default HostCard;\n","import React, { type JSX } from 'react';\n\nimport { Box, CardContent, CardMedia, Skeleton, Typography } from '@mui/material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/helpers/AdminUtils';\nimport HostGeneric, {\n boxShadow,\n boxShadowHover,\n genericStyles,\n type HostGenericProps,\n 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: 215,\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): JSX.Element | null {\n if (typeof this.props.hostData !== 'object') {\n return null;\n }\n return (\n <div\n style={styles.wrapperBlockItem}\n key={value}\n >\n <span style={{ ...styles.bold, ...styles.nowrap }}>{this.props.t(value)}: </span>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](this.props.hostData[value], this.props.t)\n : this.props.hostData[value] || '--'}\n </div>\n );\n }\n\n getHostDescriptionAll(): JSX.Element | string {\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 (\n <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))\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ? (\n Object.keys(this.props.hostData).map(\n (value, idx) => idx > 4 && idx < 10 && this.renderValue(value),\n )\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData &&\n typeof this.props.hostData === 'object' &&\n Object.keys(this.props.hostData).map((value, idx) => idx > 10 && this.renderValue(value))}\n </div>\n </div>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden, {\n border: `2px solid ${this.props.host.common.color || 'inherit'}`,\n borderRadius: '5px',\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={\n this.state.openDialogLogLevel\n ? null\n : () => this.setState({ openCollapse: !this.state.openCollapse })\n }\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(\n <CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />,\n true,\n )}\n <div\n style={Utils.getStyle(this.props.theme, styles.host, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n '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={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\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\n component=\"span\"\n style={styles.enableButton}\n >\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel ? (\n this.renderLogLevel()\n ) : (\n <div style={styles.emptyButton} />\n )}\n {this.renderRemoveButton()}\n {this.renderExtendButton(this.state.openCollapse)}\n </Typography>\n </div>\n </CardContent>\n </Box>\n {typeof description === 'object' && (\n <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\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\n </Box>\n );\n }\n}\n\nexport default HostRow;\n","import React, { Component, type JSX } from 'react';\n\nimport { IconButton, Tooltip, InputAdornment, LinearProgress, TextField, Box } 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,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from '@/dialogs/SlowConnectionWarningDialog';\nimport type HostsWorker from '@/Workers/HostsWorker';\n// eslint-disable-next-line no-duplicate-imports\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';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\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 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 whiteSpace: 'nowrap',\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:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Hosts.viewMode') ===\n 'true',\n alive: {},\n hosts: [],\n repository: {},\n hostsData: {},\n filterText:\n (((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\n ? wordCache[`${word} ${arg1} ${arg2}`]\n : arg1 !== undefined\n ? wordCache[`${word} ${arg1}`]\n : wordCache[word];\n };\n\n componentDidMount(): void {\n void this.readInfo().then(() => {\n this.props.hostsWorker.registerHandler(this.updateHosts);\n this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.updateHosts);\n this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive);\n }\n\n getHostsData(\n hosts: ioBroker.HostObject[],\n _alive: Record<string, boolean>,\n ): 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\n .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, data: error.toString() };\n })\n .then((data: Record<string, any>) => {\n preprocessHostData(data);\n return { id: hosts[h]._id, data };\n });\n promises.push(promise);\n } else {\n promises.push(Promise.resolve({ id: hosts[h]._id, data: 'offline' }));\n }\n }\n\n return Promise.all(promises).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(): Promise<void> {\n return this.props.socket.getHosts(true).then(hosts =>\n this.props.socket\n .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: unknown): void => {\n window.alert(`Cannot getRepository: ${e as Error}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }),\n );\n }\n\n updateHosts = (events: HostEvent[]): void => {\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 void Promise.all(\n events.map(async event => {\n const elementIndex = hosts.findIndex(host => host._id === event.id);\n if (elementIndex !== -1) {\n if (event.obj) {\n // updated\n hosts[elementIndex] = event.obj;\n } else {\n // deleted\n hosts.splice(elementIndex, 1);\n }\n } else {\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!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[]): void => {\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(): string | JSX.Element[] {\n const items = this.renderHosts().filter(host => host);\n\n return items.length ? items : this.t('All items are filtered out');\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n return (\n <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\n renderHosts(): (JSX.Element | null)[] {\n return this.state.hosts.map(host => {\n if (\n this.state.filterText &&\n !host.common.name.toLowerCase().includes(this.state.filterText.toLowerCase())\n ) {\n return null;\n }\n const HostElement = this.state.viewMode ? HostCard : HostRow;\n\n return (\n <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}\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\n renderTableHeader(): JSX.Element {\n const fontSize = window.innerWidth < 100 ? 10 : window.innerWidth < 1200 ? 12 : 14;\n return (\n <div style={styles.tabHeaderWrapper}>\n <div style={styles.tabHeaderFirstItem}>{this.t('Name:')}</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, { fontSize })}\n >\n CPU\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800, { fontSize })}\n >\n RAM\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800, { fontSize })}\n >\n {this.t('Uptime')}\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100, { fontSize })}\n >\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, { fontSize })}\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, { fontSize })}\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\n render(): JSX.Element {\n if (!this.state.hosts.length) {\n return <LinearProgress />;\n }\n\n return (\n <TabContainer>\n <style>{blinkClasses}</style>\n {this.renderSlowConnectionWarning()}\n <TabHeader>\n <Tooltip\n title={this.t('Show / hide List')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Hosts.viewMode',\n this.state.viewMode ? 'false' : 'true',\n );\n this.setState({ viewMode: !this.state.viewMode });\n }}\n >\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip\n title={this.t('Reload')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.forceUpdate()}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div style={styles.grow} />\n {this.state.hosts.length > 2 ? (\n <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(\n 'Hosts.viewMode',\n event.target.value,\n );\n this.setState({ filterText: event.target.value });\n }}\n slotProps={{\n input: {\n endAdornment: this.state.filterText ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (\n ((window as any)._localStorage as Storage) ||\n window.localStorage\n ).setItem('Hosts.viewMode', '');\n this.setState({ filterText: '' });\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\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 sx={{ marginX: 2, width: 'calc(100% - 32px)', alignSelf: 'center' }}>\n <InfoBox type={'warning'}>\n {this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}\n </InfoBox>\n </Box>\n ) : 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}\n\nexport default withWidth()(Hosts);\n"],"names":["JsControllerUpdater","Component","constructor","props","super","updating","textareaRef","React","link","concat","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","_unused","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","assign","_objectDestructuringEmpty","a","_ref3","_objectWithoutProperties","_excluded","_objectSpread","_ref4","_excluded2","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","findFreeName","add","Toolbar","IconPlus","divWithoutTitle","BaseSettingsPlugins","Editor","newValue","content","tabPanel","selected","BaseSettingsDialog","originalSettings","currentTab","hasChanges","confirmExit","showRestart","system","multihostService","states","plugins","dnsResolution","saving","getSettings","renderDialogConfirm","renderRestartDialog","ok","cancel","restartController","answer","AdminUtils","clone","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","_unused2","setCommonItem","removeCommonItem","buttonAddKey","nameKey","cb","IconAdd","buttonRemoveKey","renderCommonEdit","el","endAdornment","InputAdornment","icon","UploadImage","crop","removeIconFunc","base64","_unused3","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","hostNotifications","calculateWarning","eventsInputFunc","val","innerHTML","eventsOutputFunc","output","warningFunc","name_","endsWith","setAttribute","classList","removeAttribute","cpuFunc","formatValue","memFunc","uptimeFunc","d","Math","floor","h","logLevelFunc","logLevel","logLevelSelect","other","openDialogLogLevel","hostUpdateDialog","updateAvailable","instructionDialog","updateDialog","baseSettingsDialog","editDialog","changeLog","getInitialDiskStates","diskWarningState","getState","diskFreeState","diskSizeState","readChangeLog","hostsWorker","registerNotificationHandler","getNotifications","subscribeState","finally","async","unregisterNotificationHandler","unsubscribeState","count","categories","category","instances","severity","unit","systemConfig","isFloatComma","renderDialogLogLevel","CustomModal","onApply","BuildIcon","onCopy","available","installedVersion","hostData","formatInfo","renderUpdateButton","upgradeAvailable","event","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","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","jsController","wordCache","preprocessHostData","_hostData$dockerInfor","dockerInformation","isDocker","dockerString","isOfficial","officialVersion","Platform","Hosts","word","arg1","arg2","updateHosts","events","hosts","Promise","elementIndex","findIndex","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","innerWidth","TabContainer","TabHeader","setItem","ViewModuleIcon","ViewListIcon","TabContent","isStableRepository","activeRepo","marginX","InfoBox"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"static/js/8387.2cb15163.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, type JSX } from 'react';\nimport ipaddr from 'ipaddr.js';\n\nimport { LinearProgress, Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material';\n\nimport { Close as CloseIcon, Refresh as ReloadIcon } 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): void {\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 the browser, else we try to get information from the host object\n */\n async findIpAddress(): Promise<void> {\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(\n `system.adapter.${this.props.adminInstance}`,\n )) 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(): void {\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(): 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 />\n ) : null}\n {this.state.response || this.state.error ? (\n <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 />\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, type JSX } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n DialogTitle,\n IconButton,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Box,\n} from '@mui/material';\n\nimport { ExpandMore as ExpandMoreIcon, Description as DescriptionIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, Utils, IconCopy, type IobTheme } 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 = ({ socket, hostId, version, onClose }: JsControllerDialogProps): JSX.Element => {\n const [readme, setReadme] = useState<(string | JSX.Element)[] | null>(null);\n const [location, setLocation] = useState('');\n const [os, setOS] = useState('');\n\n const copyTextToClipboard = (text: string): void => {\n Utils.copyToClipboard(text);\n window.alert(I18n.t('Copied'));\n };\n\n useEffect((): void => {\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\n .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 void fetch(\n `https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${I18n.getLanguage()}/controller-upgrade.md`,\n )\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 | 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(\n <IconButton\n key={`b${parts.length}`}\n onClick={() => copyTextToClipboard(button)}\n >\n <IconCopy />\n </IconButton>,\n );\n } else {\n parts.push(\n <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 }\n parts.push(text);\n } else {\n parts.push(chapter);\n }\n });\n\n setReadme(parts);\n });\n })\n .catch((e: string) => window.alert(`Cannot get information about host \"${hostId}\": ${e}`));\n }\n }, [location, os, socket, version, hostId]);\n\n const renderReadme = (): JSX.Element => (\n <>\n {readme.map((text, i) =>\n typeof text === 'object' ? (\n text\n ) : (\n <ReactMarkdown\n key={`t_${i}`}\n components={{\n em: ({ ...props }) => (\n <IconButton\n style={styles.copyButtonSmall}\n onClick={() => copyTextToClipboard((props.children as string[])[0].toString())}\n >\n <IconCopy />\n </IconButton>\n ),\n a: ({ children, ...props }) => (\n <a\n style={{ color: 'inherit' }}\n {...props}\n >\n {children}\n </a>\n ),\n code: ({ 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 >\n {text}\n </ReactMarkdown>\n ),\n )}\n </>\n );\n\n const renderText = (): JSX.Element => (\n <Card style={styles.root}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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.',\n )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('General information for all platforms')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('For an update from js-controller 1.x to 2.x please always read the information at')}{' '}\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\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'Otherwise please update the slaves first with an update of master-slave systems and the master last!',\n )}\n </Box>\n {os !== 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (new installer)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('This is the recommended option')}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </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}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'If the upgrade command displays Access Rights / Permission errors, then please use the install fixer',\n )}\n </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}>\n {I18n.t('to fix these issues and upgrade command run again.')}\n </div>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'A manual installation usually takes place under root as user and therefore a \"sudo\" is necessary before the commands.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </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}>\n cd\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}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n '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 -).',\n )}\n </div>\n </>\n )}\n {os === 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page ',\n )}\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(\n ' 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 )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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:',\n )}\n </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}>\n cd\n {(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}{' '}\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}>\n iob stop\n {I18n.t('to stop the ioBroker service')}\n </div>\n <div style={styles.standardTextSmall}>\n iob 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}>\n {I18n.t(\n 'Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.',\n )}\n </div>\n </>\n )}\n <Accordion style={{ paddingTop: 14 }}>\n <AccordionSummary\n sx={styles.accordionSummary}\n expandIcon={<ExpandMoreIcon />}\n >\n <Box\n component=\"h2\"\n sx={styles.h22}\n >\n {I18n.t('Emergency Linux / macOS / Windows')}\n </Box>\n </AccordionSummary>\n <AccordionDetails style={styles.accordionDetails}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('(manual reinstallation, if somehow nothing works after the update)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n '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).',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'If there are problems with access rights when running on Linux the command has to be changed slightly:',\n )}\n </Box>\n\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems created with the new Linux installer:')}\n </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}>\n cd\n {os === 'win32'\n ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')\n : location || '/opt/iobroker'}\n </div>\n <div style={styles.standardTextSmall}>\n sudo -u iobroker -H npm install iobroker.js-controller\n </div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems installed manually under Linux, prefix sudo or run as root.')}\n </div>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'This way is only necessary in very few cases and please consult the forum beforehand!',\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n </Card>\n );\n\n return (\n <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\n style={readme ? null : styles.overflowHidden}\n dividers\n >\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};\n\nexport default JsControllerDialog;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } 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(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\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(\n 'You can change the host name, but be aware, that all instances must be assigned anew',\n )}\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 =>\n this.setState({ checkDiskInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n '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 />\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 =>\n this.setState({ statisticsInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n 'How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms',\n )}\n />\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.compact}\n onChange={e =>\n this.setState({ compact: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Compact mode')}\n />\n <div>\n {this.props.t(\n 'When enabled adapter instances can run in one or few processes to save RAM usage.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.allowShellCommands}\n onChange={e =>\n this.setState({ allowShellCommands: e.target.checked }, () =>\n this.onChange(),\n )\n }\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 =>\n this.setState({ memoryLimitMB: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <Grid2\n container\n direction=\"row\"\n style={styles.controlItem}\n >\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 =>\n this.setState({ memLimitWarn: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\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 =>\n this.setState({ memLimitError: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsSystem);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } 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 void this.props.socket\n .decrypt(settings.password)\n .then((plainPass: string) => this.setState({ password: plainPass }));\n }\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\n const newState: BaseSettingsMultihostState = {\n enabled: this.state.enabled,\n secure: this.state.secure,\n };\n\n if (this.state.password) {\n void this.props.socket.encrypt(this.state.password).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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.enabled}\n onChange={e =>\n this.setState({ enabled: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Allow slave connections')}\n />\n <div>\n {this.props.t(\n 'When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.secure}\n onChange={e =>\n this.setState({ secure: e.target.checked }, () => this.onChange())\n }\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 ? (\n <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 =>\n this.setState({ password: e.target.value }, () => this.onChange())\n }\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </form>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsMultihost);\n","import React, { createRef, Component, type JSX } 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,\n Box,\n} from '@mui/material';\n\nimport { withWidth, DialogConfirm, type IobTheme, type Translate } 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:\n 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:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (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(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).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(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\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(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\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(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={(result: boolean) => {\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 }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\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 =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\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\n style={styles.controlItem}\n variant=\"standard\"\n >\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 => (\n <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 ))}\n </Select>\n </FormControl>\n )}\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' ? (\n <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>\n ) : 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 =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <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 =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.noFileCache}\n onChange={e =>\n this.setState({ noFileCache: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No file cache')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t(\n 'Always read files from disk and do not cache them in RAM. Used for debugging.',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <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 =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\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>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsObjects);\n","import React, { createRef, Component, type JSX } 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,\n Box,\n} from '@mui/material';\n\nimport { DialogConfirm, withWidth, type IobTheme, type Translate } 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:\n 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:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (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(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).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(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\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(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\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(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={(result: boolean) => {\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 }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\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 =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\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\n style={styles.controlItem}\n variant=\"standard\"\n >\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 => (\n <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 ))}\n </Select>\n </FormControl>\n )}\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' ? (\n <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>\n ) : 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 =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <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 =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <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 =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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 =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <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>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\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>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <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(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n style={styles.controlItem}\n variant=\"standard\"\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsStates);\n","import React, { createRef, Component, type JSX } 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 =\n typeof settings.transport[id].maxSize === 'string'\n ? (settings.transport[id].maxSize as string).includes('k')\n ? 0.1\n : (settings.transport[id].maxSize as string).includes('g')\n ? 10\n : 1\n : 1;\n settings.transport[id].maxSize =\n (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(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\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): void {\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): JSX.Element {\n return (\n <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\n renderLogLevel(name: string): JSX.Element | null {\n return this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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>\n {this.props.t(\n 'Level of messages that this transport should log (default: level set on parent logger)',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null;\n }\n\n renderSyslog(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconSyslog style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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(\n \"The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP).\",\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t(\n 'The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].localhost}\n helperText={this.props.t(\n 'Host to indicate that log messages are coming from (Default: localhost).',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t(\n 'The end of line character to be added to the end of the message (Default: Message without modifications).',\n )}\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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderFile(name: string): JSX.Element {\n return (\n <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\n style={{ background: 'rgba(128, 128, 128, 0.3)' }}\n expandIcon={<ExpandMoreIcon />}\n >\n <IconFile style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderHttp(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconHttp style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].auth}\n helperText={this.props.t(\n 'An object representing the username and password for HTTP Basic Auth',\n )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderStream(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconStream style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].stream}\n helperText={this.props.t(\n '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 )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderSEQ(name: string): JSX.Element {\n return (\n <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\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <img\n style={styles.headingIcon}\n src={IconSeq}\n alt=\"seq\"\n />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].serverUrl}\n helperText={this.props.t(\n '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 )}\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>\n ) : null}\n {this.state.transport[name].enabled ? (\n <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>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n findFreeName(type: string): string {\n for (let i = 1; ; i++) {\n if (!Object.keys(this.state.transport).find(id => id === type + i)) {\n return type + i;\n }\n }\n }\n\n add(type: string): void {\n if (type === 'file') {\n const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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 const name = this.findFreeName(type);\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(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 sx={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\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 =>\n this.setState({ noStdout: e.target.checked }, () => this.onChange())\n }\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\n src={IconSeq}\n style={styles.buttonIcon}\n alt=\"seq\"\n />\n {this.props.t('SEQ log')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsLog);\n","import React, { Component, type JSX } from 'react';\n\nimport { Paper } from '@mui/material';\n\nimport { withWidth, type ThemeType, type Translate } 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): void {\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(): JSX.Element {\n return (\n <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}\n\nexport default withWidth()(BaseSettingsPlugins);\n","import React, { Component, type JSX } 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 { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n DialogConfirm,\n withWidth,\n type ThemeType,\n type IobTheme,\n 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';\nimport AdminUtils from '@/helpers/AdminUtils';\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 async componentDidMount(): Promise<void> {\n await this.getSettings(this.state.currentHost);\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <DialogConfirm\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n renderRestartDialog(): JSX.Element | null {\n if (this.state.showRestart) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={\n <>\n <div>{this.props.t('Restart works only if controller started as system service.')}</div>\n <div>\n {this.props.t(\n 'Would you like to restart the controller for your changes to take effect?',\n )}\n </div>\n </>\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\n .restartController(this.props.currentHost)\n .then(() =>\n setTimeout(\n () =>\n // reload admin\n window.location.reload(),\n 500,\n ),\n )\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }\n\n this.props.onClose();\n })\n }\n />\n );\n }\n return null;\n }\n\n async getSettings(host: string): Promise<void> {\n const settings = await this.props.socket.readBaseSettings(host || this.state.currentHost);\n const answer = settings as { config?: ioBroker.IoBrokerJson; isActive?: boolean };\n\n if (answer?.config) {\n this.originalSettings = AdminUtils.clone(answer.config);\n this.setState({\n loading: false,\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 onSave(host?: string): void {\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\n .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): void {\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(): JSX.Element {\n const name = 'system';\n return (\n <BaseSettingsSystem\n settings={this.state[name]}\n t={this.props.t}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderMultihost(): JSX.Element {\n const name = 'multihostService';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderObjects(): JSX.Element {\n const name = 'objects';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderStates(): JSX.Element {\n const name = 'states';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderLog(): JSX.Element {\n const name = 'log';\n return (\n <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) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderPlugins(): JSX.Element {\n const name = 'plugins';\n return (\n <BaseSettingsPlugins\n settings={this.state[name]}\n t={this.props.t}\n themeType={this.props.themeType}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n render(): JSX.Element {\n return (\n <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')}: {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\n label={this.props.t('System')}\n id=\"system-tab\"\n aria-controls=\"simple-tabpanel-0\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\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\n label={this.props.t('Objects')}\n id=\"objects-tab\"\n aria-controls=\"simple-tabpanel-3\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('States')}\n id=\"states-tab\"\n aria-controls=\"simple-tabpanel-4\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Log')}\n id=\"log-tab\"\n aria-controls=\"simple-tabpanel-5\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Plugins')}\n id=\"plugins-tab\"\n aria-controls=\"simple-tabpanel-6\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n </Tabs>\n </AppBar>\n {this.state.loading ? <LinearProgress /> : null}\n {!this.state.loading && this.state.currentTab === 0 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderSystem()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 1 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderMultihost()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 2 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderObjects()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 3 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderStates()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 4 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderLog()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 5 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderPlugins()}\n </Box>\n ) : null}\n {this.renderDialogConfirm()}\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={() =>\n this.state.hasChanges.length ? this.setState({ confirmExit: true }) : this.props.onClose()\n }\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}\n\nexport default withWidth()(BaseSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, Add as IconAdd, Close as CloseIcon } 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): void {\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(): void {\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): void {\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): void {\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): JSX.Element {\n const { t } = this.props;\n return (\n <div style={styles.marginBlock}>\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\n buttonRemoveKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <Tooltip\n title={t(`Remove ${nameKey}`)}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={cb}\n />\n </Tooltip>\n );\n }\n\n renderCommonEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const disabled = false;\n const { t } = this.props;\n return (\n <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 ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'title', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n ) : (\n this.buttonAddKey('title', () => this.setCommonItem(json, 'title', ''))\n )}\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 ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'color', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </div>\n ) : (\n this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n )}\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 ) : (\n <div style={styles.flexDrop}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </div>\n )}\n </div>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n render(): JSX.Element {\n return (\n <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')}:<span style={styles.id}>{this.props.obj._id}</span>\n </DialogTitle>\n <DialogContent>{this.renderCommonEdit()}</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}\n\nexport default HostEdit;\n","import React, { Component } from 'react';\nimport semver from 'semver';\n\nimport {\n Avatar,\n Badge,\n 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 { amber, blue, green, grey, red } from '@mui/material/colors';\n\nimport {\n Utils,\n IconCopy,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport type { HostsWorker, 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 type { NotificationsCount } from '@/types';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport HostEdit from './HostEdit';\nimport CustomModal from '../CustomModal';\n\nexport const boxShadow =\n '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): void {\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 hostNotifications: { notifications: NotificationAnswer | null } & NotificationsCount;\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<\n TProps extends HostGenericProps,\n TState extends HostGenericState,\n> 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 hostNotifications: { notifications: null, warning: 0, other: 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>): void =>\n notifications &&\n notifications[this.props.hostId] &&\n this.setState({\n hostNotifications: {\n notifications: notifications[this.props.hostId],\n ...HostGeneric.calculateWarning(notifications[this.props.hostId]),\n },\n });\n\n readChangeLog(): void {\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(): void {\n this.props.hostsWorker.registerNotificationHandler(this.notificationHandler);\n\n void this.props.hostsWorker\n .getNotifications(this.props.hostId)\n .then(notifications => this.notificationHandler(notifications));\n\n void this.props.socket.subscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n void this.props.socket.subscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.mem`, this.memFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n void this.getInitialDiskStates().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 void this.props.socket.subscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n componentWillUnmount(): void {\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): void => {\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): void => {\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): void => {\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): void => {\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): void => {\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): void => {\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 static calculateWarning(notifications: NotificationAnswer | null): NotificationsCount {\n const count = { warning: 0, other: 0 };\n\n if (!notifications) {\n return count;\n }\n const { result } = notifications;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n const obj = result.system.categories;\n\n for (const category of Object.values(obj)) {\n Object.keys(category.instances).forEach(() =>\n category.severity === 'alert' ? count.warning++ : count.other++,\n );\n }\n }\n return count;\n }\n\n formatValue(state: ioBroker.State, unit: string): 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): void => {\n if (state) {\n this.setState({ logLevel: state.val as ioBroker.LogLevel, logLevelSelect: state.val as ioBroker.LogLevel });\n }\n };\n\n renderDialogLogLevel(): React.JSX.Element {\n if (!this.state.openDialogLogLevel) {\n return null;\n }\n return (\n <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\n .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\n style={{ ...genericStyles.formControl, marginTop: 8 }}\n variant=\"outlined\"\n >\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\n key={el}\n value={el}\n >\n {this.props.t(el)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={genericStyles.formControl}\n variant=\"outlined\"\n >\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\n onCopy(): void {\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\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): React.JSX.Element {\n return upgradeAvailable ? (\n <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 return this.openHostUpdateDialog();\n }}\n sx={genericStyles.buttonUpdate}\n >\n <IconButton\n style={genericStyles.buttonUpdateIcon}\n size=\"small\"\n >\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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHostBaseEdit(): React.JSX.Element | null {\n return this.props.expertMode ? (\n <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>\n ) : 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 ): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t(open ? 'collapse' : 'Expand')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton size=\"large\">{open ? <BiChevronUp /> : <BiChevronDown />}</IconButton>\n </div>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRestartButton(): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Restart host')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={event => {\n event.stopPropagation();\n this.props.socket\n .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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderEditButton(): React.JSX.Element {\n return (\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ editDialog: true });\n }}\n >\n <EditIcon />\n </IconButton>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRemoveButton(): React.JSX.Element {\n return !this.props.alive && !this.props.isCurrentHost ? (\n <Tooltip\n title={\n this.props.alive || this.props.isCurrentHost\n ? this.props.t('You cannot delete host, when it is alive')\n : this.props.t('Remove')\n }\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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderCopyButton(style?: React.CSSProperties): React.JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Copy')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.onCopy()}\n style={style}\n >\n <IconCopy />\n </IconButton>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderLogLevel(): React.JSX.Element {\n return (\n <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\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderNotificationsBadge(children?: React.ReactNode, styled?: boolean): React.JSX.Element {\n return (\n <Badge\n sx={\n styled\n ? {\n right: -3,\n top: 13,\n padding: '0 4px',\n cursor: 'pointer',\n }\n : { cursor: 'pointer' }\n }\n title={this.props.t('Hosts notifications')}\n badgeContent={this.state.hostNotifications.warning + this.state.hostNotifications.other}\n style={genericStyles.badge}\n color={this.state.hostNotifications.warning > 0 ? 'error' : 'secondary'}\n onClick={e => {\n e.stopPropagation();\n this.props.showAdaptersWarning(\n { [this.props.hostId]: this.state.hostNotifications.notifications },\n this.props.hostId,\n );\n }}\n >\n {children}\n </Badge>\n );\n }\n\n async openHostUpdateDialog(): Promise<void> {\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(): React.JSX.Element | null {\n if (!this.state.hostUpdateDialog) {\n return null;\n }\n\n return (\n <AdapterUpdateDialog\n adapter={this.props.host.common.name}\n adapterObject={this.props.jsControllerInfo}\n t={this.props.t}\n textUpdate={\n this.state.updateAvailable ? this.props.t('Start update') : this.props.t('Show instructions')\n }\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={() => {\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\n renderUpdateDialog(): React.JSX.Element | null {\n if (this.state.updateAvailable && this.state.updateDialog) {\n return (\n <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\n if (this.state.instructionDialog) {\n return (\n <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\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\n : adapter.news[version][this.props.lang] || adapter.news[version].en;\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(): React.JSX.Element | null {\n if (!this.state.baseSettingsDialog) {\n return null;\n }\n\n return (\n <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\n renderEditObjectDialog(): React.JSX.Element | null {\n if (!this.state.editDialog) {\n return null;\n }\n\n return (\n <HostEdit\n obj={this.props.host}\n t={this.props.t}\n onClose={obj =>\n this.setState({ editDialog: false }, () => {\n if (obj) {\n this.props.socket\n .setObject(obj._id, obj)\n .then(() => this.forceUpdate())\n .catch(e => alert(`Cannot write object: ${e}`));\n }\n })\n }\n />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderDialogs(): React.JSX.Element {\n return (\n <>\n {this.renderDialogLogLevel()}\n {this.renderHostUpdateDialog()}\n {this.renderUpdateDialog()}\n {this.renderEditObjectDialog()}\n {this.baseSettingsSettingsDialog()}\n </>\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Box, Card, CardContent, CardMedia, Fab, Skeleton, Typography } from '@mui/material';\n\nimport { MoreVert as MoreVertIcon } from '@mui/icons-material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/helpers/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(): JSX.Element | string {\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 (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n <Skeleton />\n </ul>\n );\n }\n\n return (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n {Object.keys(this.props.hostData).map(value => (\n <li key={value}>\n <span style={styles.black}>\n <span style={styles.label}>{this.props.t(value)}: </span>\n <span style={styles.value}>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](\n (this.props.hostData as Record<string, any>)[value],\n this.props.t,\n )\n : (this.props.hostData as Record<string, any>)[value] || '--'}\n </span>\n </span>\n </li>\n ))}\n </ul>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Card\n key={this.props.hostId}\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden)}\n >\n {this.renderDialogs()}\n {this.state.openCollapse && (\n <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\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\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(this.props.theme, styles.adapter, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n 'inherit',\n })}\n >\n {this.renderNotificationsBadge(this.props.host.common.name, true)}\n </Box>\n {!this.state.openCollapse ? (\n <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>\n ) : null}\n </div>\n <CardContent style={styles.cardContentH5}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>CPU:</span>\n <div\n ref={this.refCpu}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>RAM:</span>\n <div\n ref={this.refMem}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Uptime')}:</span>\n <div\n ref={this.refUptime}\n style={styles.value}\n >\n -d -h\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n style={styles.wrapperAvailable}\n >\n <span style={styles.label}>{this.props.t('Available')} js-controller:</span>\n <Box\n component=\"div\"\n sx={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n <span style={styles.label}>{this.props.t('Installed')} js-controller:</span>\n <span style={styles.value}>{this.props.host.common.installedVersion}</span>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Events')}:</span>\n <div\n ref={this.refEvents}\n style={styles.value}\n >\n - / -\n </div>\n </div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography\n component=\"span\"\n style={styles.enableButton}\n >\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}\n\nexport default HostCard;\n","import React, { type JSX } from 'react';\n\nimport { Box, CardContent, CardMedia, Skeleton, Typography } from '@mui/material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/helpers/AdminUtils';\nimport HostGeneric, {\n boxShadow,\n boxShadowHover,\n genericStyles,\n type HostGenericProps,\n 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: 215,\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): JSX.Element | null {\n if (typeof this.props.hostData !== 'object') {\n return null;\n }\n return (\n <div\n style={styles.wrapperBlockItem}\n key={value}\n >\n <span style={{ ...styles.bold, ...styles.nowrap }}>{this.props.t(value)}: </span>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](this.props.hostData[value], this.props.t)\n : this.props.hostData[value] || '--'}\n </div>\n );\n }\n\n getHostDescriptionAll(): JSX.Element | string {\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 (\n <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))\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ? (\n Object.keys(this.props.hostData).map(\n (value, idx) => idx > 4 && idx < 10 && this.renderValue(value),\n )\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData &&\n typeof this.props.hostData === 'object' &&\n Object.keys(this.props.hostData).map((value, idx) => idx > 10 && this.renderValue(value))}\n </div>\n </div>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden, {\n border: `2px solid ${this.props.host.common.color || 'inherit'}`,\n borderRadius: '5px',\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={\n this.state.openDialogLogLevel\n ? null\n : () => this.setState({ openCollapse: !this.state.openCollapse })\n }\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(\n <CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />,\n true,\n )}\n <div\n style={Utils.getStyle(this.props.theme, styles.host, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n '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={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\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\n component=\"span\"\n style={styles.enableButton}\n >\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel ? (\n this.renderLogLevel()\n ) : (\n <div style={styles.emptyButton} />\n )}\n {this.renderRemoveButton()}\n {this.renderExtendButton(this.state.openCollapse)}\n </Typography>\n </div>\n </CardContent>\n </Box>\n {typeof description === 'object' && (\n <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\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\n </Box>\n );\n }\n}\n\nexport default HostRow;\n","import React, { Component, type JSX } from 'react';\n\nimport { IconButton, Tooltip, InputAdornment, LinearProgress, TextField, Box } 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,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from '@/dialogs/SlowConnectionWarningDialog';\nimport type { HostsWorker, 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';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\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 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 whiteSpace: 'nowrap',\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:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Hosts.viewMode') ===\n 'true',\n alive: {},\n hosts: [],\n repository: {},\n hostsData: {},\n filterText:\n (((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\n ? wordCache[`${word} ${arg1} ${arg2}`]\n : arg1 !== undefined\n ? wordCache[`${word} ${arg1}`]\n : wordCache[word];\n };\n\n componentDidMount(): void {\n void this.readInfo().then(() => {\n this.props.hostsWorker.registerHandler(this.updateHosts);\n this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.updateHosts);\n this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive);\n }\n\n getHostsData(\n hosts: ioBroker.HostObject[],\n _alive: Record<string, boolean>,\n ): 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\n .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, data: error.toString() };\n })\n .then((data: Record<string, any>) => {\n preprocessHostData(data);\n return { id: hosts[h]._id, data };\n });\n promises.push(promise);\n } else {\n promises.push(Promise.resolve({ id: hosts[h]._id, data: 'offline' }));\n }\n }\n\n return Promise.all(promises).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(): Promise<void> {\n return this.props.socket.getHosts(true).then(hosts =>\n this.props.socket\n .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: unknown): void => {\n window.alert(`Cannot getRepository: ${e as Error}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }),\n );\n }\n\n updateHosts = (events: HostEvent[]): void => {\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 void Promise.all(\n events.map(async event => {\n const elementIndex = hosts.findIndex(host => host._id === event.id);\n if (elementIndex !== -1) {\n if (event.obj) {\n // updated\n hosts[elementIndex] = event.obj;\n } else {\n // deleted\n hosts.splice(elementIndex, 1);\n }\n } else {\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!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[]): void => {\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(): string | JSX.Element[] {\n const items = this.renderHosts().filter(host => host);\n\n return items.length ? items : this.t('All items are filtered out');\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n return (\n <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\n renderHosts(): (JSX.Element | null)[] {\n return this.state.hosts.map(host => {\n if (\n this.state.filterText &&\n !host.common.name.toLowerCase().includes(this.state.filterText.toLowerCase())\n ) {\n return null;\n }\n const HostElement = this.state.viewMode ? HostCard : HostRow;\n\n return (\n <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}\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\n renderTableHeader(): JSX.Element {\n const fontSize = window.innerWidth < 100 ? 10 : window.innerWidth < 1200 ? 12 : 14;\n return (\n <div style={styles.tabHeaderWrapper}>\n <div style={styles.tabHeaderFirstItem}>{this.t('Name:')}</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, { fontSize })}\n >\n CPU\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800, { fontSize })}\n >\n RAM\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800, { fontSize })}\n >\n {this.t('Uptime')}\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100, { fontSize })}\n >\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, { fontSize })}\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, { fontSize })}\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\n render(): JSX.Element {\n if (!this.state.hosts.length) {\n return <LinearProgress />;\n }\n\n return (\n <TabContainer>\n <style>{blinkClasses}</style>\n {this.renderSlowConnectionWarning()}\n <TabHeader>\n <Tooltip\n title={this.t('Show / hide List')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Hosts.viewMode',\n this.state.viewMode ? 'false' : 'true',\n );\n this.setState({ viewMode: !this.state.viewMode });\n }}\n >\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip\n title={this.t('Reload')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.forceUpdate()}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div style={styles.grow} />\n {this.state.hosts.length > 2 ? (\n <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(\n 'Hosts.viewMode',\n event.target.value,\n );\n this.setState({ filterText: event.target.value });\n }}\n slotProps={{\n input: {\n endAdornment: this.state.filterText ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (\n ((window as any)._localStorage as Storage) ||\n window.localStorage\n ).setItem('Hosts.viewMode', '');\n this.setState({ filterText: '' });\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\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 sx={{ marginX: 2, width: 'calc(100% - 32px)', alignSelf: 'center' }}>\n <InfoBox type={'warning'}>\n {this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}\n </InfoBox>\n </Box>\n ) : 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}\n\nexport default withWidth()(Hosts);\n"],"names":["JsControllerUpdater","Component","constructor","props","super","updating","textareaRef","React","link","concat","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","_unused","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","assign","_objectDestructuringEmpty","a","_ref3","_objectWithoutProperties","_excluded","_objectSpread","_ref4","_excluded2","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","findFreeName","add","Toolbar","IconPlus","divWithoutTitle","BaseSettingsPlugins","Editor","newValue","content","tabPanel","selected","BaseSettingsDialog","originalSettings","currentTab","hasChanges","confirmExit","showRestart","system","multihostService","states","plugins","dnsResolution","saving","getSettings","renderDialogConfirm","renderRestartDialog","ok","cancel","restartController","answer","AdminUtils","clone","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","_unused2","setCommonItem","removeCommonItem","buttonAddKey","nameKey","cb","IconAdd","buttonRemoveKey","renderCommonEdit","el","endAdornment","InputAdornment","icon","UploadImage","crop","removeIconFunc","base64","_unused3","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","hostNotifications","calculateWarning","eventsInputFunc","val","innerHTML","eventsOutputFunc","output","warningFunc","name_","endsWith","setAttribute","classList","removeAttribute","cpuFunc","formatValue","memFunc","uptimeFunc","d","Math","floor","h","logLevelFunc","logLevel","logLevelSelect","other","openDialogLogLevel","hostUpdateDialog","updateAvailable","instructionDialog","updateDialog","baseSettingsDialog","editDialog","changeLog","getInitialDiskStates","diskWarningState","getState","diskFreeState","diskSizeState","readChangeLog","hostsWorker","registerNotificationHandler","getNotifications","subscribeState","finally","async","unregisterNotificationHandler","unsubscribeState","count","categories","category","instances","severity","unit","systemConfig","isFloatComma","renderDialogLogLevel","CustomModal","onApply","BuildIcon","onCopy","available","installedVersion","hostData","formatInfo","renderUpdateButton","upgradeAvailable","event","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","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","jsController","wordCache","preprocessHostData","_hostData$dockerInfor","dockerInformation","isDocker","dockerString","isOfficial","officialVersion","Platform","Hosts","word","arg1","arg2","updateHosts","events","hosts","Promise","elementIndex","findIndex","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","innerWidth","TabContainer","TabHeader","setItem","ViewModuleIcon","ViewListIcon","TabContent","isStableRepository","activeRepo","marginX","InfoBox"],"sourceRoot":""}
|