@iobroker/adapter-react-v5 7.4.1 → 7.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/build/Components/FileBrowser.js +1 -1
- package/build/Components/FileBrowser.js.map +1 -1
- package/build/Components/IconDeviceType.js +1 -1
- package/build/Components/IconDeviceType.js.map +1 -1
- package/build/Components/IconPicker.js +0 -1
- package/build/Components/IconPicker.js.map +1 -1
- package/build/Components/Image.js.map +1 -1
- package/build/Components/IobUri.d.ts +14 -0
- package/build/Components/IobUri.js +168 -0
- package/build/Components/IobUri.js.map +1 -0
- package/build/Components/Logo.js +4 -4
- package/build/Components/Logo.js.map +1 -1
- package/build/Components/ObjectBrowser.d.ts +8 -6
- package/build/Components/ObjectBrowser.js +1 -1
- package/build/Components/ObjectBrowser.js.map +1 -1
- package/build/Components/Schedule.d.ts +1 -1
- package/build/Components/Schedule.js.map +1 -1
- package/build/Components/TextWithIcon.js +0 -1
- package/build/Components/TextWithIcon.js.map +1 -1
- package/build/Components/Utils.js +1 -3
- package/build/Components/Utils.js.map +1 -1
- package/build/Dialogs/SelectID.d.ts +2 -2
- package/build/Dialogs/SelectID.js +1 -1
- package/build/Dialogs/SelectID.js.map +1 -1
- package/build/GenericApp.js +1 -1
- package/build/GenericApp.js.map +1 -1
- package/build/LegacyConnection.d.ts +4 -7
- package/build/LegacyConnection.js +84 -159
- package/build/LegacyConnection.js.map +1 -1
- package/build/index.d.ts +3 -2
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/types.d.ts +80 -0
- package/i18n/de.json +450 -0
- package/i18n/en.json +450 -0
- package/i18n/es.json +450 -0
- package/i18n/fr.json +450 -0
- package/i18n/it.json +450 -0
- package/i18n/nl.json +450 -0
- package/i18n/pl.json +450 -0
- package/i18n/pt.json +450 -0
- package/i18n/ru.json +450 -0
- package/i18n/uk.json +450 -0
- package/i18n/zh-cn.json +450 -0
- package/package.json +14 -13
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Component, type JSX } from 'react';
|
|
8
8
|
import type { Connection } from '../Connection';
|
|
9
|
-
import type
|
|
9
|
+
import { type ObjectBrowserColumn, type ObjectBrowserCustomFilter } from '../Components/ObjectBrowser';
|
|
10
10
|
import type { IobTheme } from '../types';
|
|
11
11
|
export interface SelectIDFilters {
|
|
12
12
|
id?: string;
|
|
@@ -37,7 +37,7 @@ interface DialogSelectIDProps {
|
|
|
37
37
|
/** optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons'] */
|
|
38
38
|
columns?: ObjectBrowserColumn[];
|
|
39
39
|
/** Object types to show; default: 'state' only */
|
|
40
|
-
types?:
|
|
40
|
+
types?: ioBroker.ObjectType | ioBroker.ObjectType[];
|
|
41
41
|
/** The language. */
|
|
42
42
|
lang?: ioBroker.Languages;
|
|
43
43
|
/** The socket connection. */
|
|
@@ -9,7 +9,7 @@ import React, { Component } from 'react';
|
|
|
9
9
|
import { Button, DialogTitle, DialogContent, DialogActions, Dialog } from '@mui/material';
|
|
10
10
|
import { Cancel as IconCancel, Check as IconOk } from '@mui/icons-material';
|
|
11
11
|
import { I18n } from '../i18n';
|
|
12
|
-
import { ObjectBrowser } from '../Components/ObjectBrowser';
|
|
12
|
+
import { ObjectBrowser, } from '../Components/ObjectBrowser';
|
|
13
13
|
export class DialogSelectID extends Component {
|
|
14
14
|
dialogName;
|
|
15
15
|
filters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectID.js","sourceRoot":"./src/","sources":["Dialogs/SelectID.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2023 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React, { Component, type JSX } from 'react';\n\nimport { Button, DialogTitle, DialogContent, DialogActions, Dialog } from '@mui/material';\n\nimport { Cancel as IconCancel, Check as IconOk } from '@mui/icons-material';\n\nimport type { Connection } from '../Connection';\n\nimport { I18n } from '../i18n';\nimport { ObjectBrowser, type ObjectBrowserFilter } from '../Components/ObjectBrowser';\nimport type { ObjectBrowserColumn, ObjectBrowserCustomFilter, ObjectBrowserType } from '../Components/types';\nimport type { IobTheme } from '../types';\n\nexport interface SelectIDFilters {\n id?: string;\n name?: string;\n room?: string;\n func?: string;\n role?: string;\n type?: string;\n custom?: string;\n}\n\ninterface DialogSelectIDProps {\n /** The internal name of the dialog; default: \"default\". Used to store settings in local storage */\n dialogName?: string;\n /** The dialog title; default: Please select object ID... (translated) */\n title?: string;\n /** Set to true to allow the selection of multiple IDs. */\n multiSelect?: boolean;\n /** Show folders before any leaves. */\n foldersFirst?: boolean;\n /** Path prefix for images (default: '.') */\n imagePrefix?: string;\n /** @deprecated same as imagePrefix */\n prefix?: string;\n /** Show the expert button */\n showExpertButton?: boolean;\n /** Force expert mode */\n expertMode?: boolean;\n /** optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons'] */\n columns?: ObjectBrowserColumn[];\n /** Object types to show; default: 'state' only */\n types?: ObjectBrowserType | ObjectBrowserType[];\n /** The language. */\n lang?: ioBroker.Languages;\n /** The socket connection. */\n socket: Connection;\n /** Can't objects be edited? (default: true) */\n notEditable?: boolean;\n /** Theme name. */\n themeName?: string;\n /** Theme type: dark or light */\n themeType?: string;\n /** The theme object */\n theme: IobTheme;\n /** The date format for the date columns */\n dateFormat?: string;\n /** Is use comma or point for displaying of float numbers */\n isFloatComma?: boolean;\n /** Custom filter. */\n customFilter?: ObjectBrowserCustomFilter;\n /** The selected IDs. */\n selected?: string | string[];\n /** The ok button text; default: OK (translated) */\n ok?: string;\n /** The cancel button text; default: Cancel (translated) */\n cancel?: string;\n /** Close handler that is always called when the dialog is closed. */\n onClose: () => void;\n /** Handler that is called when the user presses OK. */\n onOk: (selected: string | string[] | undefined, name: string) => void;\n /**\n * Function to filter out all unnecessary objects. Can be string or function.\n * It cannot be used together with \"types\".\n * Example for function: `obj => obj.common?.type === 'boolean'` to show only boolean states\n * In case of string, it must look like `obj.common && obj.common.type === 'boolean'`\n */\n filterFunc?: string | ((obj: ioBroker.Object) => boolean);\n /** predefined filter fields, like {\"id\":\"\",\"name\":\"\",\"room\":\"\",\"func\":\"\",\"role\":\"level\",\"type\":\"\",\"custom\":\"\"} */\n filters?: SelectIDFilters;\n /** Show elements only of this root ID */\n root?: string;\n}\n\ninterface DialogSelectIDState {\n selected: string[];\n name: string;\n}\n\nexport class DialogSelectID extends Component<DialogSelectIDProps, DialogSelectIDState> {\n private readonly dialogName: string;\n\n private filters: ObjectBrowserFilter;\n\n private readonly filterFunc?: (obj: ioBroker.Object) => boolean;\n\n constructor(props: DialogSelectIDProps) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = `SelectID.${this.dialogName}`;\n\n const filters: string = ((window as any)._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(filters);\n } catch {\n this.filters = {};\n }\n\n if (props.filters) {\n this.filters = { ...this.filters, ...(props.filters || {}) };\n }\n\n let selected = this.props.selected || [];\n if (!Array.isArray(selected)) {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n if (props.filterFunc) {\n if (typeof props.filterFunc === 'string') {\n try {\n this.filterFunc = new Function('obj', props.filterFunc) as (obj: ioBroker.Object) => boolean;\n } catch {\n console.error(`Cannot parse filter function: \"obj => ${props.filterFunc}\"`);\n this.filterFunc = undefined;\n }\n } else {\n this.filterFunc = props.filterFunc;\n }\n }\n\n this.state = {\n selected,\n name: '',\n };\n }\n\n handleCancel(): void {\n this.props.onClose();\n }\n\n handleOk(): void {\n this.props.onOk(this.props.multiSelect ? this.state.selected : this.state.selected[0] || '', this.state.name);\n this.props.onClose();\n }\n\n render(): JSX.Element {\n let title;\n if (this.state.name || this.state.selected.length) {\n if (this.state.selected.length === 1) {\n title = [\n <span key=\"selected\">\n {I18n.t('ra_Selected')}\n \n </span>,\n <span\n key=\"id\"\n style={{ fontWeight: 'bold', fontStyle: 'italic' }}\n >\n {(this.state.name || this.state.selected[0]) +\n (this.state.name ? ` [${this.state.selected[0]}]` : '')}\n </span>,\n ];\n } else {\n title = [\n <span key=\"selected\">\n {I18n.t('ra_Selected')}\n \n </span>,\n <span\n key=\"id\"\n style={{ fontWeight: 'bold', fontStyle: 'italic' }}\n >\n {I18n.t('%s items', this.state.selected.length.toString())}\n </span>,\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return (\n <Dialog\n onClose={() => {}}\n maxWidth={false}\n sx={{\n '& .MuiDialog-paper': {\n height: '95%',\n p: '4px',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n },\n }}\n fullWidth\n open={!0}\n aria-labelledby=\"ar_dialog_selectid_title\"\n >\n <DialogTitle\n id=\"ar_dialog_selectid_title\"\n style={{\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }}\n >\n {title}\n </DialogTitle>\n <DialogContent\n style={{\n height: '100%',\n overflow: 'hidden',\n padding: '8px 4px',\n }}\n >\n <ObjectBrowser\n foldersFirst={this.props.foldersFirst}\n imagePrefix={this.props.imagePrefix || this.props.prefix} // prefix is for back compatibility\n dateFormat={this.props.dateFormat}\n defaultFilters={this.filters}\n dialogName={this.dialogName}\n isFloatComma={this.props.isFloatComma}\n showExpertButton={\n this.props.showExpertButton !== undefined ? this.props.showExpertButton : true\n }\n expertMode={this.props.expertMode}\n // style={{ width: '100%', height: '100%' }}\n columns={this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val']}\n types={\n this.props.types\n ? Array.isArray(this.props.types)\n ? this.props.types\n : [this.props.types]\n : ['state']\n }\n root={this.props.root}\n t={I18n.t}\n lang={this.props.lang || I18n.getLanguage()}\n socket={this.props.socket}\n selected={this.state.selected}\n multiSelect={this.props.multiSelect}\n notEditable={this.props.notEditable === undefined ? true : this.props.notEditable}\n // name={this.state.name}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n customFilter={this.props.customFilter}\n onFilterChanged={(filterConfig: ObjectBrowserFilter) => {\n this.filters = filterConfig;\n ((window as any)._localStorage || window.localStorage).setItem(\n this.dialogName,\n JSON.stringify(filterConfig),\n );\n }}\n onSelect={(_selected: string | string[], name: string, isDouble?: boolean) => {\n let selected: string[];\n if (!Array.isArray(_selected)) {\n selected = [_selected];\n } else {\n selected = _selected;\n }\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({ selected, name }, () => isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n }}\n filterFunc={this.filterFunc}\n title=\"\"\n classes={{}}\n />\n </DialogContent>\n <DialogActions>\n <Button\n id={`ar_dialog_selectid_ok_${this.props.dialogName || ''}`}\n variant=\"contained\"\n onClick={() => this.handleOk()}\n startIcon={<IconOk />}\n disabled={!this.state.selected.length}\n color=\"primary\"\n >\n {this.props.ok || I18n.t('ra_Ok')}\n </Button>\n <Button\n id={`ar_dialog_selectid_cancel_${this.props.dialogName || ''}`}\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.handleCancel()}\n startIcon={<IconCancel />}\n >\n {this.props.cancel || I18n.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectID.js","sourceRoot":"./src/","sources":["Dialogs/SelectID.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2023 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React, { Component, type JSX } from 'react';\n\nimport { Button, DialogTitle, DialogContent, DialogActions, Dialog } from '@mui/material';\n\nimport { Cancel as IconCancel, Check as IconOk } from '@mui/icons-material';\n\nimport type { Connection } from '../Connection';\n\nimport { I18n } from '../i18n';\nimport {\n ObjectBrowser,\n type ObjectBrowserFilter,\n type ObjectBrowserColumn,\n type ObjectBrowserCustomFilter,\n} from '../Components/ObjectBrowser';\nimport type { IobTheme } from '../types';\n\nexport interface SelectIDFilters {\n id?: string;\n name?: string;\n room?: string;\n func?: string;\n role?: string;\n type?: string;\n custom?: string;\n}\n\ninterface DialogSelectIDProps {\n /** The internal name of the dialog; default: \"default\". Used to store settings in local storage */\n dialogName?: string;\n /** The dialog title; default: Please select object ID... (translated) */\n title?: string;\n /** Set to true to allow the selection of multiple IDs. */\n multiSelect?: boolean;\n /** Show folders before any leaves. */\n foldersFirst?: boolean;\n /** Path prefix for images (default: '.') */\n imagePrefix?: string;\n /** @deprecated same as imagePrefix */\n prefix?: string;\n /** Show the expert button */\n showExpertButton?: boolean;\n /** Force expert mode */\n expertMode?: boolean;\n /** optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons'] */\n columns?: ObjectBrowserColumn[];\n /** Object types to show; default: 'state' only */\n types?: ioBroker.ObjectType | ioBroker.ObjectType[];\n /** The language. */\n lang?: ioBroker.Languages;\n /** The socket connection. */\n socket: Connection;\n /** Can't objects be edited? (default: true) */\n notEditable?: boolean;\n /** Theme name. */\n themeName?: string;\n /** Theme type: dark or light */\n themeType?: string;\n /** The theme object */\n theme: IobTheme;\n /** The date format for the date columns */\n dateFormat?: string;\n /** Is use comma or point for displaying of float numbers */\n isFloatComma?: boolean;\n /** Custom filter. */\n customFilter?: ObjectBrowserCustomFilter;\n /** The selected IDs. */\n selected?: string | string[];\n /** The ok button text; default: OK (translated) */\n ok?: string;\n /** The cancel button text; default: Cancel (translated) */\n cancel?: string;\n /** Close handler that is always called when the dialog is closed. */\n onClose: () => void;\n /** Handler that is called when the user presses OK. */\n onOk: (selected: string | string[] | undefined, name: string) => void;\n /**\n * Function to filter out all unnecessary objects. Can be string or function.\n * It cannot be used together with \"types\".\n * Example for function: `obj => obj.common?.type === 'boolean'` to show only boolean states\n * In case of string, it must look like `obj.common && obj.common.type === 'boolean'`\n */\n filterFunc?: string | ((obj: ioBroker.Object) => boolean);\n /** predefined filter fields, like {\"id\":\"\",\"name\":\"\",\"room\":\"\",\"func\":\"\",\"role\":\"level\",\"type\":\"\",\"custom\":\"\"} */\n filters?: SelectIDFilters;\n /** Show elements only of this root ID */\n root?: string;\n}\n\ninterface DialogSelectIDState {\n selected: string[];\n name: string;\n}\n\nexport class DialogSelectID extends Component<DialogSelectIDProps, DialogSelectIDState> {\n private readonly dialogName: string;\n\n private filters: ObjectBrowserFilter;\n\n private readonly filterFunc?: (obj: ioBroker.Object) => boolean;\n\n constructor(props: DialogSelectIDProps) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = `SelectID.${this.dialogName}`;\n\n const filters: string = ((window as any)._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(filters);\n } catch {\n this.filters = {};\n }\n\n if (props.filters) {\n this.filters = { ...this.filters, ...(props.filters || {}) };\n }\n\n let selected = this.props.selected || [];\n if (!Array.isArray(selected)) {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n if (props.filterFunc) {\n if (typeof props.filterFunc === 'string') {\n try {\n this.filterFunc = new Function('obj', props.filterFunc) as (obj: ioBroker.Object) => boolean;\n } catch {\n console.error(`Cannot parse filter function: \"obj => ${props.filterFunc}\"`);\n this.filterFunc = undefined;\n }\n } else {\n this.filterFunc = props.filterFunc;\n }\n }\n\n this.state = {\n selected,\n name: '',\n };\n }\n\n handleCancel(): void {\n this.props.onClose();\n }\n\n handleOk(): void {\n this.props.onOk(this.props.multiSelect ? this.state.selected : this.state.selected[0] || '', this.state.name);\n this.props.onClose();\n }\n\n render(): JSX.Element {\n let title;\n if (this.state.name || this.state.selected.length) {\n if (this.state.selected.length === 1) {\n title = [\n <span key=\"selected\">\n {I18n.t('ra_Selected')}\n \n </span>,\n <span\n key=\"id\"\n style={{ fontWeight: 'bold', fontStyle: 'italic' }}\n >\n {(this.state.name || this.state.selected[0]) +\n (this.state.name ? ` [${this.state.selected[0]}]` : '')}\n </span>,\n ];\n } else {\n title = [\n <span key=\"selected\">\n {I18n.t('ra_Selected')}\n \n </span>,\n <span\n key=\"id\"\n style={{ fontWeight: 'bold', fontStyle: 'italic' }}\n >\n {I18n.t('%s items', this.state.selected.length.toString())}\n </span>,\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return (\n <Dialog\n onClose={() => {}}\n maxWidth={false}\n sx={{\n '& .MuiDialog-paper': {\n height: '95%',\n p: '4px',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n },\n }}\n fullWidth\n open={!0}\n aria-labelledby=\"ar_dialog_selectid_title\"\n >\n <DialogTitle\n id=\"ar_dialog_selectid_title\"\n style={{\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }}\n >\n {title}\n </DialogTitle>\n <DialogContent\n style={{\n height: '100%',\n overflow: 'hidden',\n padding: '8px 4px',\n }}\n >\n <ObjectBrowser\n foldersFirst={this.props.foldersFirst}\n imagePrefix={this.props.imagePrefix || this.props.prefix} // prefix is for back compatibility\n dateFormat={this.props.dateFormat}\n defaultFilters={this.filters}\n dialogName={this.dialogName}\n isFloatComma={this.props.isFloatComma}\n showExpertButton={\n this.props.showExpertButton !== undefined ? this.props.showExpertButton : true\n }\n expertMode={this.props.expertMode}\n // style={{ width: '100%', height: '100%' }}\n columns={this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val']}\n types={\n this.props.types\n ? Array.isArray(this.props.types)\n ? this.props.types\n : [this.props.types]\n : ['state']\n }\n root={this.props.root}\n t={I18n.t}\n lang={this.props.lang || I18n.getLanguage()}\n socket={this.props.socket}\n selected={this.state.selected}\n multiSelect={this.props.multiSelect}\n notEditable={this.props.notEditable === undefined ? true : this.props.notEditable}\n // name={this.state.name}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n customFilter={this.props.customFilter}\n onFilterChanged={(filterConfig: ObjectBrowserFilter) => {\n this.filters = filterConfig;\n ((window as any)._localStorage || window.localStorage).setItem(\n this.dialogName,\n JSON.stringify(filterConfig),\n );\n }}\n onSelect={(_selected: string | string[], name: string, isDouble?: boolean) => {\n let selected: string[];\n if (!Array.isArray(_selected)) {\n selected = [_selected];\n } else {\n selected = _selected;\n }\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({ selected, name }, () => isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n }}\n filterFunc={this.filterFunc}\n title=\"\"\n classes={{}}\n />\n </DialogContent>\n <DialogActions>\n <Button\n id={`ar_dialog_selectid_ok_${this.props.dialogName || ''}`}\n variant=\"contained\"\n onClick={() => this.handleOk()}\n startIcon={<IconOk />}\n disabled={!this.state.selected.length}\n color=\"primary\"\n >\n {this.props.ok || I18n.t('ra_Ok')}\n </Button>\n <Button\n id={`ar_dialog_selectid_cancel_${this.props.dialogName || ''}`}\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.handleCancel()}\n startIcon={<IconCancel />}\n >\n {this.props.cancel || I18n.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n"]}
|
package/build/GenericApp.js
CHANGED
|
@@ -274,7 +274,7 @@ export class GenericApp extends Router {
|
|
|
274
274
|
}
|
|
275
275
|
});
|
|
276
276
|
}
|
|
277
|
-
waitPromise =
|
|
277
|
+
waitPromise = waitPromise instanceof Promise ? waitPromise : Promise.resolve();
|
|
278
278
|
void waitPromise.then(() => {
|
|
279
279
|
if (instanceObj) {
|
|
280
280
|
this.common = instanceObj?.common;
|
package/build/GenericApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericApp.js","sourceRoot":"./src/","sources":["GenericApp.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React, { type JSX } from 'react';\nimport { PROGRESS, Connection, type AdminConnection } from '@iobroker/socket-client';\nimport * as Sentry from '@sentry/browser';\n\nimport { Snackbar, IconButton } from '@mui/material';\n\nimport { Close as IconClose } from '@mui/icons-material';\n\nimport { printPrompt } from './Prompt';\nimport { Theme } from './Theme';\nimport { Loader } from './Components/Loader';\nimport { Router } from './Components/Router';\nimport { Utils } from './Components/Utils';\nimport { SaveCloseButtons } from './Components/SaveCloseButtons';\nimport { DialogConfirm } from './Dialogs/Confirm';\nimport { I18n } from './i18n';\nimport { DialogError } from './Dialogs/Error';\nimport type {\n GenericAppProps,\n GenericAppState,\n GenericAppSettings,\n ThemeName,\n ThemeType,\n IobTheme,\n Width,\n} from './types';\n\nimport { dictionary } from './dictionary';\n\ndeclare global {\n /** If config has been changed */\n // eslint-disable-next-line no-var\n var changed: boolean;\n\n interface Window {\n io: any;\n SocketClient: any;\n adapterName: undefined | string;\n socketUrl: undefined | string;\n oldAlert: any;\n changed: boolean;\n $iframeDialog: {\n close?: () => void;\n };\n }\n}\n\n// import './index.css';\nconst cssStyle = `\nhtml {\n height: 100%;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n/* scrollbar */\n::-webkit-scrollbar-track {\n background-color: #ccc;\n border-radius: 5px;\n}\n\n::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n background-color: #ccc;\n}\n\n::-webkit-scrollbar-thumb {\n background-color: #575757;\n border-radius: 5px;\n}\n\n#root {\n height: 100%;\n}\n\n.App {\n height: 100%;\n}\n\n@keyframes glow {\n from {\n background-color: initial;\n }\n to {\n background-color: #58c458;\n }\n}\n`;\n\nexport class GenericApp<\n TProps extends GenericAppProps = GenericAppProps,\n TState extends GenericAppState = GenericAppState,\n> extends Router<TProps, TState> {\n protected socket: AdminConnection;\n\n protected readonly instance: number;\n\n protected readonly adapterName: string;\n\n protected readonly instanceId: string;\n\n protected readonly newReact: boolean;\n\n protected encryptedFields: string[];\n\n protected readonly sentryDSN: string | undefined;\n\n private alertDialogRendered: boolean;\n\n private _secret: string | undefined;\n\n protected _systemConfig: ioBroker.SystemConfigCommon | undefined;\n\n // it is not readonly\n private savedNative: Record<string, any>;\n\n protected common: ioBroker.InstanceCommon | null = null;\n\n private sentryStarted: boolean = false;\n\n private sentryInited: boolean = false;\n\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: TProps, settings?: GenericAppSettings) {\n const ConnectionClass = (props.Connection ||\n settings?.Connection ||\n Connection) as unknown as typeof AdminConnection;\n // const ConnectionClass = props.Connection === 'admin' || settings.Connection = 'admin' ? AdminConnection : (props.Connection || settings.Connection || Connection);\n\n if (!window.document.getElementById('generic-app-iobroker-component')) {\n const style = window.document.createElement('style');\n style.setAttribute('id', 'generic-app-iobroker-component');\n style.innerHTML = cssStyle;\n window.document.head.appendChild(style);\n }\n\n // Remove `!Connection.isWeb() && window.adapterName !== 'material'` when iobroker.socket will support native ws\n if (!GenericApp.isWeb() && window.io && window.location.port === '3000') {\n try {\n const io = new window.SocketClient();\n delete window.io;\n window.io = io;\n } catch {\n // ignore\n }\n }\n\n super(props);\n\n printPrompt();\n\n const query = (window.location.search || '').replace(/^\\?/, '').replace(/#.*$/, '');\n const args: Record<string, string | boolean> = {};\n query\n .trim()\n .split('&')\n .filter(t => t.trim())\n .forEach(b => {\n const parts = b.split('=');\n args[parts[0]] = parts.length === 2 ? parts[1] : true;\n if (args[parts[0]] === 'true') {\n args[parts[0]] = true;\n } else if (args[parts[0]] === 'false') {\n args[parts[0]] = false;\n }\n });\n\n // extract instance from URL\n this.instance =\n settings?.instance ??\n props.instance ??\n (args.instance !== undefined\n ? parseInt(args.instance as string, 10) || 0\n : parseInt(window.location.search.slice(1), 10) || 0);\n // extract adapter name from URL\n const tmp = window.location.pathname.split('/');\n this.adapterName =\n settings?.adapterName || props.adapterName || window.adapterName || tmp[tmp.length - 2] || 'iot';\n this.instanceId = `system.adapter.${this.adapterName}.${this.instance}`;\n this.newReact = args.newReact === true; // it is admin5\n\n const location = Router.getLocation();\n location.tab =\n location.tab ||\n ((window as any)._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) ||\n '';\n\n const themeInstance = this.createTheme();\n\n this.state = Object.assign(\n this.state || {}, // keep the existing state\n {\n selectedTab:\n ((window as any)._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) || '',\n selectedTabNum: -1,\n native: {},\n errorText: '',\n changed: false,\n connected: false,\n loaded: false,\n isConfigurationError: '',\n expertMode: false,\n toast: '',\n theme: themeInstance,\n themeName: this.getThemeName(themeInstance),\n themeType: this.getThemeType(themeInstance),\n bottomButtons: (settings && settings.bottomButtons) === false ? false : props?.bottomButtons !== false,\n width: GenericApp.getWidth(),\n confirmClose: false,\n _alert: false,\n _alertType: 'info',\n _alertMessage: '',\n },\n ) as TState;\n\n // init translations\n const translations: Record<ioBroker.Languages, Record<string, string>> = dictionary;\n\n // merge together\n if (settings?.translations) {\n Object.keys(settings.translations).forEach(lang => {\n if (settings.translations) {\n translations[lang as ioBroker.Languages] = Object.assign(\n translations[lang as ioBroker.Languages],\n settings.translations[lang as ioBroker.Languages] || {},\n );\n }\n });\n } else if (props.translations) {\n Object.keys(props.translations).forEach(lang => {\n if (props.translations) {\n translations[lang as ioBroker.Languages] = Object.assign(\n translations[lang as ioBroker.Languages],\n props.translations[lang as ioBroker.Languages] || {},\n );\n }\n });\n }\n\n I18n.setTranslations(translations);\n\n this.savedNative = {}; // to detect if the config changed\n\n this.encryptedFields = props.encryptedFields || settings?.encryptedFields || [];\n\n this.sentryDSN = (settings && settings.sentryDSN) || props.sentryDSN;\n\n if (window.socketUrl) {\n if (window.socketUrl.startsWith(':')) {\n window.socketUrl = `${window.location.protocol}//${window.location.hostname}${window.socketUrl}`;\n } else if (!window.socketUrl.startsWith('http://') && !window.socketUrl.startsWith('https://')) {\n window.socketUrl = `${window.location.protocol}//${window.socketUrl}`;\n }\n }\n\n this.alertDialogRendered = false;\n\n window.oldAlert = window.alert;\n window.alert = message => {\n if (!this.alertDialogRendered) {\n window.oldAlert(message);\n return;\n }\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n\n // @ts-expect-error either make props in ConnectionProps required or the constructor needs to accept than as they are (means adapt socket-client)\n this.socket = new ConnectionClass({\n ...(props?.socket || settings?.socket),\n name: this.adapterName,\n doNotLoadAllObjects: settings?.doNotLoadAllObjects,\n onProgress: (progress: PROGRESS) => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({ connected: false });\n } else if (progress === PROGRESS.READY) {\n this.setState({ connected: true });\n } else {\n this.setState({ connected: true });\n }\n },\n onReady: (/* objects, scripts */) => {\n I18n.setLanguage(this.socket.systemLang);\n\n // subscribe because of language and expert mode\n this.socket\n .subscribeObject('system.config', this.onSystemConfigChanged)\n .then(() => this.getSystemConfig())\n .then(obj => {\n this._secret =\n (typeof obj !== 'undefined' && obj.native && obj.native.secret) || 'Zgfr56gFe87jJOM';\n this._systemConfig = obj?.common || ({} as ioBroker.SystemConfigCommon);\n return this.socket.getObject(this.instanceId);\n })\n .then(async obj => {\n let waitPromise;\n const instanceObj: ioBroker.InstanceObject | null | undefined = obj as\n | ioBroker.InstanceObject\n | null\n | undefined;\n\n const sentryPluginEnabled = (\n await this.socket.getState(`${this.instanceId}.plugins.sentry.enabled`)\n )?.val;\n\n const sentryEnabled =\n sentryPluginEnabled !== false &&\n this._systemConfig?.diag !== 'none' &&\n instanceObj?.common &&\n instanceObj.common.name &&\n instanceObj.common.version &&\n // @ts-expect-error will be extended in js-controller TODO: (BF: 2024.05.30) this is redundant to state `${this.instanceId}.plugins.sentry.enabled`, remove this in future when admin sets the state correctly\n !instanceObj.common.disableDataReporting &&\n window.location.host !== 'localhost:3000';\n\n // activate sentry plugin\n if (!this.sentryStarted && this.sentryDSN && sentryEnabled) {\n this.sentryStarted = true;\n\n Sentry.init({\n dsn: this.sentryDSN,\n release: `iobroker.${instanceObj.common.name}@${instanceObj.common.version}`,\n integrations: [Sentry.dedupeIntegration()],\n });\n\n console.log('Sentry initialized');\n }\n\n // read UUID and init sentry with it.\n // for backward compatibility it will be processed separately from the above logic: some adapters could still have this.sentryDSN as undefined\n if (!this.sentryInited && sentryEnabled) {\n this.sentryInited = true;\n\n waitPromise = this.socket.getObject('system.meta.uuid').then(uuidObj => {\n if (uuidObj && uuidObj.native && uuidObj.native.uuid) {\n const scope = Sentry.getCurrentScope();\n scope.setUser({ id: uuidObj.native.uuid });\n }\n });\n }\n\n waitPromise = (waitPromise instanceof Promise) ? waitPromise : Promise.resolve();\n\n void waitPromise.then(() => {\n if (instanceObj) {\n this.common = instanceObj?.common;\n this.onPrepareLoad(instanceObj.native, instanceObj.encryptedNative); // decode all secrets\n this.savedNative = JSON.parse(JSON.stringify(instanceObj.native));\n this.setState(\n { native: instanceObj.native, loaded: true, expertMode: this.getExpertMode() },\n () => this.onConnectionReady && this.onConnectionReady(),\n );\n } else {\n console.warn('Cannot load instance settings');\n this.setState(\n {\n native: {},\n loaded: true,\n expertMode: this.getExpertMode(),\n },\n () => this.onConnectionReady && this.onConnectionReady(),\n );\n }\n });\n })\n .catch(e => window.alert(`Cannot settings: ${e}`));\n },\n onError: (err: string) => {\n console.error(err);\n this.showError(err);\n },\n });\n }\n\n /**\n * Checks if this connection is running in a web adapter and not in an admin.\n *\n * @returns True if running in a web adapter or in a socketio adapter.\n */\n static isWeb(): boolean {\n return window.socketUrl !== undefined;\n }\n\n showAlert(message: string, type?: 'info' | 'warning' | 'error' | 'success'): void {\n if (type !== 'error' && type !== 'warning' && type !== 'info' && type !== 'success') {\n type = 'info';\n }\n\n this.setState({\n _alert: true,\n _alertType: type,\n _alertMessage: message,\n });\n }\n\n renderAlertSnackbar(): JSX.Element {\n this.alertDialogRendered = true;\n\n return (\n <Snackbar\n style={\n this.state._alertType === 'error'\n ? { backgroundColor: '#f44336' }\n : this.state._alertType === 'success'\n ? { backgroundColor: '#4caf50' }\n : undefined\n }\n open={this.state._alert}\n autoHideDuration={6000}\n onClose={(_e, reason) => reason !== 'clickaway' && this.setState({ _alert: false })}\n message={this.state._alertMessage}\n />\n );\n }\n\n onSystemConfigChanged = (id: string, obj: ioBroker.AnyObject | null | undefined): void => {\n if (obj && id === 'system.config') {\n if (this.socket.systemLang !== (obj as ioBroker.SystemConfigObject)?.common.language) {\n this.socket.systemLang = (obj as ioBroker.SystemConfigObject)?.common.language || 'en';\n I18n.setLanguage(this.socket.systemLang);\n }\n\n if (this._systemConfig?.expertMode !== !!(obj as ioBroker.SystemConfigObject)?.common?.expertMode) {\n this._systemConfig =\n (obj as ioBroker.SystemConfigObject)?.common || ({} as ioBroker.SystemConfigCommon);\n this.setState({ expertMode: this.getExpertMode() });\n } else {\n this._systemConfig =\n (obj as ioBroker.SystemConfigObject)?.common || ({} as ioBroker.SystemConfigCommon);\n }\n }\n };\n\n /**\n * Called immediately after a component is mounted. Setting state here will trigger re-rendering.\n */\n componentDidMount(): void {\n window.addEventListener('resize', this.onResize, true);\n window.addEventListener('message', this.onReceiveMessage, false);\n super.componentDidMount();\n }\n\n /**\n * Called immediately before a component is destroyed.\n */\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.onResize, true);\n window.removeEventListener('message', this.onReceiveMessage, false);\n super.componentWillUnmount();\n }\n\n onReceiveMessage = (message: { data: string } | null): void => {\n if (message?.data) {\n if (message.data === 'updateTheme') {\n const newThemeName = Utils.getThemeName();\n Utils.setThemeName(Utils.getThemeName());\n\n const newTheme = this.createTheme(newThemeName);\n\n this.setState(\n {\n theme: newTheme,\n themeName: this.getThemeName(newTheme),\n themeType: this.getThemeType(newTheme),\n },\n () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n },\n );\n } else if (message.data === 'updateExpertMode') {\n this.onToggleExpertMode && this.onToggleExpertMode(this.getExpertMode());\n } else if (message.data !== 'chartReady') {\n // if not \"echart ready\" message\n console.debug(\n `Received unknown message: \"${JSON.stringify(message.data)}\". May be it will be processed later`,\n );\n }\n }\n };\n\n private onResize = (): void => {\n this.resizeTimer && clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.setState({ width: GenericApp.getWidth() });\n }, 200);\n };\n\n /**\n * Gets the width depending on the window inner width.\n */\n static getWidth(): Width {\n /**\n * innerWidth |xs sm md lg xl\n * |-------|-------|-------|-------|------>\n * width | xs | sm | md | lg | xl\n */\n\n const SIZES: Record<Width, number> = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n };\n const width = window.innerWidth;\n const keys = Object.keys(SIZES).reverse();\n const widthComputed = keys.find(key => width >= SIZES[key as Width]) as Width;\n\n return widthComputed || 'xs';\n }\n\n /**\n * Get a theme\n *\n * @param name Theme name\n */\n // eslint-disable-next-line class-methods-use-this\n createTheme(name?: ThemeName | null): IobTheme {\n return Theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n */\n // eslint-disable-next-line class-methods-use-this\n getThemeName(currentTheme: IobTheme): ThemeName {\n return currentTheme.name;\n }\n\n /**\n * Get the theme type\n */\n // eslint-disable-next-line class-methods-use-this\n getThemeType(currentTheme: IobTheme): ThemeType {\n return currentTheme.palette.mode;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onThemeChanged(_newThemeName: string): void {}\n\n // eslint-disable-next-line class-methods-use-this\n onToggleExpertMode(_expertMode: boolean): void {}\n\n /**\n * Changes the current theme\n */\n toggleTheme(newThemeName?: ThemeName): void {\n const themeName = this.state.themeName;\n\n // dark => blue => colored => light => dark\n newThemeName =\n newThemeName ||\n (themeName === 'dark'\n ? 'light'\n : themeName === 'blue'\n ? 'light'\n : themeName === 'colored'\n ? 'light'\n : 'dark');\n\n if (newThemeName !== themeName) {\n Utils.setThemeName(newThemeName);\n\n const newTheme = this.createTheme(newThemeName);\n\n this.setState(\n {\n theme: newTheme,\n themeName: this.getThemeName(newTheme),\n themeType: this.getThemeType(newTheme),\n },\n () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName || 'light');\n this.onThemeChanged && this.onThemeChanged(newThemeName || 'light');\n },\n );\n }\n }\n\n /**\n * Gets the system configuration.\n */\n getSystemConfig(): Promise<ioBroker.SystemConfigObject> {\n return this.socket.getSystemConfig();\n }\n\n /**\n * Get current expert mode\n */\n getExpertMode(): boolean {\n return window.sessionStorage.getItem('App.expertMode') === 'true' || !!this._systemConfig?.expertMode;\n }\n\n /**\n * Gets called when the socket.io connection is ready.\n * You can overload this function to execute own commands.\n */\n // eslint-disable-next-line class-methods-use-this\n onConnectionReady(): void {}\n\n /**\n * Encrypts a string.\n */\n encrypt(value: string): string {\n let result = '';\n if (this._secret) {\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(\n this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i),\n );\n }\n }\n return result;\n }\n\n /**\n * Decrypts a string.\n */\n decrypt(value: string): string {\n let result = '';\n if (this._secret) {\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(\n this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i),\n );\n }\n }\n return result;\n }\n\n /**\n * Gets called when the navigation hash changes.\n * You may override this if needed.\n */\n onHashChanged(): void {\n const location = Router.getLocation();\n if (location.tab !== this.state.selectedTab) {\n this.selectTab(location.tab);\n }\n }\n\n /**\n * Selects the given tab.\n */\n selectTab(tab: string, index?: number): void {\n ((window as any)._localStorage || window.localStorage).setItem(`${this.adapterName}-adapter`, tab);\n this.setState({ selectedTab: tab, selectedTabNum: index });\n }\n\n /**\n * Gets called before the settings are saved.\n * You may override this if needed.\n */\n onPrepareSave(settings: Record<string, any>): boolean {\n // here you can encode values\n this.encryptedFields &&\n this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.encrypt(settings[attr]);\n }\n });\n\n return true;\n }\n\n /**\n * Gets called after the settings are loaded.\n * You may override this if needed.\n *\n * @param settings instance settings from native part\n * @param encryptedNative optional list of fields to be decrypted\n */\n onPrepareLoad(settings: Record<string, any>, encryptedNative?: string[]): void {\n // here you can encode values\n this.encryptedFields &&\n this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n encryptedNative &&\n encryptedNative.forEach(attr => {\n this.encryptedFields = this.encryptedFields || [];\n !this.encryptedFields.includes(attr) && this.encryptedFields.push(attr);\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n }\n\n /**\n * Gets the extendable instances.\n */\n async getExtendableInstances(): Promise<ioBroker.InstanceObject[]> {\n try {\n const instances = await this.socket.getObjectViewSystem(\n 'instance',\n 'system.adapter.',\n 'system.adapter.\\u9999',\n );\n return Object.values(instances).filter(instance => !!instance?.common?.webExtendable);\n } catch {\n return [];\n }\n }\n\n /**\n * Gets the IP addresses of the given host.\n */\n async getIpAddresses(host: string): Promise<{ name: string; address: string; family: 'ipv4' | 'ipv6' }[]> {\n const ips = await this.socket.getHostByIp(host || this.common?.host || '');\n // translate names\n const ip4 = ips.find(ip => ip.address === '0.0.0.0');\n if (ip4) {\n ip4.name = `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`;\n }\n const ip6 = ips.find(ip => ip.address === '::');\n if (ip6) {\n ip6.name = `[IPv4] :: - ${I18n.t('ra_Listen on all IPs')}`;\n }\n return ips;\n }\n\n /**\n * Saves the settings to the server.\n *\n * @param isClose True if the user is closing the dialog.\n */\n onSave(isClose?: boolean): void {\n let oldObj: ioBroker.InstanceObject;\n if (this.state.isConfigurationError) {\n this.setState({ errorText: this.state.isConfigurationError });\n return;\n }\n\n this.socket\n .getObject(this.instanceId)\n .then(_oldObj => {\n oldObj = (_oldObj || {}) as ioBroker.InstanceObject;\n\n for (const a in this.state.native) {\n if (Object.prototype.hasOwnProperty.call(this.state.native, a)) {\n if (this.state.native[a] === null) {\n oldObj.native[a] = null;\n } else if (this.state.native[a] !== undefined) {\n oldObj.native[a] = JSON.parse(JSON.stringify(this.state.native[a]));\n } else {\n delete oldObj.native[a];\n }\n }\n }\n\n if (this.state.common) {\n for (const b in this.state.common) {\n if (this.state.common[b] === null) {\n (oldObj as Record<string, any>).common[b] = null;\n } else if (this.state.common[b] !== undefined) {\n (oldObj as Record<string, any>).common[b] = JSON.parse(\n JSON.stringify(this.state.common[b]),\n );\n } else {\n delete (oldObj as Record<string, any>).common[b];\n }\n }\n }\n\n if (this.onPrepareSave(oldObj.native) !== false) {\n return this.socket.setObject(this.instanceId, oldObj);\n }\n\n return Promise.reject(new Error('Invalid configuration'));\n })\n .then(() => {\n this.savedNative = oldObj.native;\n globalThis.changed = false;\n try {\n window.parent.postMessage('nochange', '*');\n } catch {\n // ignore\n }\n\n this.setState({ changed: false });\n isClose && GenericApp.onClose();\n })\n .catch(e => console.error(`Cannot save configuration: ${e}`));\n }\n\n /**\n * Renders the toast.\n */\n renderToast(): JSX.Element | null {\n if (!this.state.toast) {\n return null;\n }\n\n return (\n <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!0}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id' }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"Close\"\n color=\"inherit\"\n className={this.props.classes?.close}\n onClick={() => this.setState({ toast: '' })}\n size=\"large\"\n >\n <IconClose />\n </IconButton>,\n ]}\n />\n );\n }\n\n /**\n * Closes the dialog.\n */\n static onClose(): void {\n if (typeof window.parent !== 'undefined' && window.parent) {\n try {\n if (window.parent.$iframeDialog && typeof window.parent.$iframeDialog.close === 'function') {\n window.parent.$iframeDialog.close();\n } else {\n window.parent.postMessage('close', '*');\n }\n } catch {\n window.parent.postMessage('close', '*');\n }\n }\n }\n\n /**\n * Renders the error dialog.\n */\n renderError(): React.JSX.Element | null {\n if (!this.state.errorText) {\n return null;\n }\n\n return (\n <DialogError\n text={this.state.errorText}\n onClose={() => this.setState({ errorText: '' })}\n />\n );\n }\n\n /**\n * Checks if the configuration has changed.\n *\n * @param native the new state\n */\n getIsChanged(native: Record<string, any>): boolean {\n native = native || this.state.native;\n const isChanged = JSON.stringify(native) !== JSON.stringify(this.savedNative);\n\n globalThis.changed = isChanged;\n\n return isChanged;\n }\n\n /**\n * Gets called when loading the configuration.\n *\n * @param newNative The new configuration object.\n */\n onLoadConfig(newNative: Record<string, any>): void {\n if (JSON.stringify(newNative) !== JSON.stringify(this.state.native)) {\n this.setState({ native: newNative, changed: this.getIsChanged(newNative) });\n }\n }\n\n /**\n * Sets the configuration error.\n */\n setConfigurationError(errorText: string): void {\n if (this.state.isConfigurationError !== errorText) {\n this.setState({ isConfigurationError: errorText });\n }\n }\n\n /**\n * Renders the save and close buttons.\n */\n renderSaveCloseButtons(): React.JSX.Element | null {\n if (!this.state.confirmClose && !this.state.bottomButtons) {\n return null;\n }\n\n return (\n <>\n {this.state.bottomButtons ? (\n <SaveCloseButtons\n theme={this.state.theme}\n newReact={this.newReact}\n noTextOnButtons={\n this.state.width === 'xs' || this.state.width === 'sm' || this.state.width === 'md'\n }\n changed={this.state.changed}\n onSave={isClose => this.onSave(isClose)}\n onClose={() => {\n if (this.state.changed) {\n this.setState({ confirmClose: true });\n } else {\n GenericApp.onClose();\n }\n }}\n />\n ) : null}\n {this.state.confirmClose ? (\n <DialogConfirm\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('ra_Some data are not stored. Discard?')}\n ok={I18n.t('ra_Discard')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isYes => this.setState({ confirmClose: false }, () => isYes && GenericApp.onClose())}\n />\n ) : null}\n </>\n );\n }\n\n private _updateNativeValue(obj: Record<string, any>, attrs: string | string[], value: any): boolean {\n if (typeof attrs !== 'object') {\n attrs = attrs.split('.');\n }\n const attr: string = attrs.shift() || '';\n if (!attrs.length) {\n if (value && typeof value === 'object') {\n if (JSON.stringify(obj[attr]) !== JSON.stringify(value)) {\n obj[attr] = value;\n return true;\n }\n return false;\n }\n if (obj[attr] !== value) {\n obj[attr] = value;\n return true;\n }\n\n return false;\n }\n\n obj[attr] = obj[attr] || {};\n if (typeof obj[attr] !== 'object') {\n throw new Error(`attribute ${attr} is no object, but ${typeof obj[attr]}`);\n }\n return this._updateNativeValue(obj[attr], attrs, value);\n }\n\n /**\n * Update the native value\n *\n * @param attr The attribute name with dots as delimiter.\n * @param value The new value.\n * @param cb Callback which will be called upon completion.\n */\n updateNativeValue(attr: string, value: any, cb?: () => void): void {\n const native = JSON.parse(JSON.stringify(this.state.native));\n if (this._updateNativeValue(native, attr, value)) {\n const changed = this.getIsChanged(native);\n\n if (changed !== this.state.changed) {\n try {\n window.parent.postMessage(changed ? 'change' : 'nochange', '*');\n } catch {\n // ignore\n }\n }\n\n this.setState({ native, changed }, cb);\n }\n }\n\n /**\n * Set the error text to be shown.\n */\n showError(text: string | React.JSX.Element): void {\n this.setState({ errorText: text });\n }\n\n /**\n * Sets the toast to be shown.\n *\n * @param toast Text to be shown.\n */\n showToast(toast: string | React.JSX.Element): void {\n this.setState({ toast });\n }\n\n /**\n * Renders helper dialogs\n */\n renderHelperDialogs(): React.JSX.Element {\n return (\n <>\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n {this.renderAlertSnackbar()}\n </>\n );\n }\n\n /**\n * Renders this component.\n */\n render(): React.JSX.Element {\n if (!this.state.loaded) {\n return <Loader themeType={this.state.themeType} />;\n }\n\n return (\n <div className=\"App\">\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n {this.renderAlertSnackbar()}\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GenericApp.js","sourceRoot":"./src/","sources":["GenericApp.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React, { type JSX } from 'react';\nimport { PROGRESS, Connection, type AdminConnection } from '@iobroker/socket-client';\nimport * as Sentry from '@sentry/browser';\n\nimport { Snackbar, IconButton } from '@mui/material';\n\nimport { Close as IconClose } from '@mui/icons-material';\n\nimport { printPrompt } from './Prompt';\nimport { Theme } from './Theme';\nimport { Loader } from './Components/Loader';\nimport { Router } from './Components/Router';\nimport { Utils } from './Components/Utils';\nimport { SaveCloseButtons } from './Components/SaveCloseButtons';\nimport { DialogConfirm } from './Dialogs/Confirm';\nimport { I18n } from './i18n';\nimport { DialogError } from './Dialogs/Error';\nimport type {\n GenericAppProps,\n GenericAppState,\n GenericAppSettings,\n ThemeName,\n ThemeType,\n IobTheme,\n Width,\n} from './types';\n\nimport { dictionary } from './dictionary';\n\ndeclare global {\n /** If config has been changed */\n // eslint-disable-next-line no-var\n var changed: boolean;\n\n interface Window {\n io: any;\n SocketClient: any;\n adapterName: undefined | string;\n socketUrl: undefined | string;\n oldAlert: any;\n changed: boolean;\n $iframeDialog: {\n close?: () => void;\n };\n }\n}\n\n// import './index.css';\nconst cssStyle = `\nhtml {\n height: 100%;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n/* scrollbar */\n::-webkit-scrollbar-track {\n background-color: #ccc;\n border-radius: 5px;\n}\n\n::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n background-color: #ccc;\n}\n\n::-webkit-scrollbar-thumb {\n background-color: #575757;\n border-radius: 5px;\n}\n\n#root {\n height: 100%;\n}\n\n.App {\n height: 100%;\n}\n\n@keyframes glow {\n from {\n background-color: initial;\n }\n to {\n background-color: #58c458;\n }\n}\n`;\n\nexport class GenericApp<\n TProps extends GenericAppProps = GenericAppProps,\n TState extends GenericAppState = GenericAppState,\n> extends Router<TProps, TState> {\n protected socket: AdminConnection;\n\n protected readonly instance: number;\n\n protected readonly adapterName: string;\n\n protected readonly instanceId: string;\n\n protected readonly newReact: boolean;\n\n protected encryptedFields: string[];\n\n protected readonly sentryDSN: string | undefined;\n\n private alertDialogRendered: boolean;\n\n private _secret: string | undefined;\n\n protected _systemConfig: ioBroker.SystemConfigCommon | undefined;\n\n // it is not readonly\n private savedNative: Record<string, any>;\n\n protected common: ioBroker.InstanceCommon | null = null;\n\n private sentryStarted: boolean = false;\n\n private sentryInited: boolean = false;\n\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: TProps, settings?: GenericAppSettings) {\n const ConnectionClass = (props.Connection ||\n settings?.Connection ||\n Connection) as unknown as typeof AdminConnection;\n // const ConnectionClass = props.Connection === 'admin' || settings.Connection = 'admin' ? AdminConnection : (props.Connection || settings.Connection || Connection);\n\n if (!window.document.getElementById('generic-app-iobroker-component')) {\n const style = window.document.createElement('style');\n style.setAttribute('id', 'generic-app-iobroker-component');\n style.innerHTML = cssStyle;\n window.document.head.appendChild(style);\n }\n\n // Remove `!Connection.isWeb() && window.adapterName !== 'material'` when iobroker.socket will support native ws\n if (!GenericApp.isWeb() && window.io && window.location.port === '3000') {\n try {\n const io = new window.SocketClient();\n delete window.io;\n window.io = io;\n } catch {\n // ignore\n }\n }\n\n super(props);\n\n printPrompt();\n\n const query = (window.location.search || '').replace(/^\\?/, '').replace(/#.*$/, '');\n const args: Record<string, string | boolean> = {};\n query\n .trim()\n .split('&')\n .filter(t => t.trim())\n .forEach(b => {\n const parts = b.split('=');\n args[parts[0]] = parts.length === 2 ? parts[1] : true;\n if (args[parts[0]] === 'true') {\n args[parts[0]] = true;\n } else if (args[parts[0]] === 'false') {\n args[parts[0]] = false;\n }\n });\n\n // extract instance from URL\n this.instance =\n settings?.instance ??\n props.instance ??\n (args.instance !== undefined\n ? parseInt(args.instance as string, 10) || 0\n : parseInt(window.location.search.slice(1), 10) || 0);\n // extract adapter name from URL\n const tmp = window.location.pathname.split('/');\n this.adapterName =\n settings?.adapterName || props.adapterName || window.adapterName || tmp[tmp.length - 2] || 'iot';\n this.instanceId = `system.adapter.${this.adapterName}.${this.instance}`;\n this.newReact = args.newReact === true; // it is admin5\n\n const location = Router.getLocation();\n location.tab =\n location.tab ||\n ((window as any)._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) ||\n '';\n\n const themeInstance = this.createTheme();\n\n this.state = Object.assign(\n this.state || {}, // keep the existing state\n {\n selectedTab:\n ((window as any)._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) || '',\n selectedTabNum: -1,\n native: {},\n errorText: '',\n changed: false,\n connected: false,\n loaded: false,\n isConfigurationError: '',\n expertMode: false,\n toast: '',\n theme: themeInstance,\n themeName: this.getThemeName(themeInstance),\n themeType: this.getThemeType(themeInstance),\n bottomButtons: (settings && settings.bottomButtons) === false ? false : props?.bottomButtons !== false,\n width: GenericApp.getWidth(),\n confirmClose: false,\n _alert: false,\n _alertType: 'info',\n _alertMessage: '',\n },\n ) as TState;\n\n // init translations\n const translations: Record<ioBroker.Languages, Record<string, string>> = dictionary;\n\n // merge together\n if (settings?.translations) {\n Object.keys(settings.translations).forEach(lang => {\n if (settings.translations) {\n translations[lang as ioBroker.Languages] = Object.assign(\n translations[lang as ioBroker.Languages],\n settings.translations[lang as ioBroker.Languages] || {},\n );\n }\n });\n } else if (props.translations) {\n Object.keys(props.translations).forEach(lang => {\n if (props.translations) {\n translations[lang as ioBroker.Languages] = Object.assign(\n translations[lang as ioBroker.Languages],\n props.translations[lang as ioBroker.Languages] || {},\n );\n }\n });\n }\n\n I18n.setTranslations(translations);\n\n this.savedNative = {}; // to detect if the config changed\n\n this.encryptedFields = props.encryptedFields || settings?.encryptedFields || [];\n\n this.sentryDSN = (settings && settings.sentryDSN) || props.sentryDSN;\n\n if (window.socketUrl) {\n if (window.socketUrl.startsWith(':')) {\n window.socketUrl = `${window.location.protocol}//${window.location.hostname}${window.socketUrl}`;\n } else if (!window.socketUrl.startsWith('http://') && !window.socketUrl.startsWith('https://')) {\n window.socketUrl = `${window.location.protocol}//${window.socketUrl}`;\n }\n }\n\n this.alertDialogRendered = false;\n\n window.oldAlert = window.alert;\n window.alert = message => {\n if (!this.alertDialogRendered) {\n window.oldAlert(message);\n return;\n }\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n\n // @ts-expect-error either make props in ConnectionProps required or the constructor needs to accept than as they are (means adapt socket-client)\n this.socket = new ConnectionClass({\n ...(props?.socket || settings?.socket),\n name: this.adapterName,\n doNotLoadAllObjects: settings?.doNotLoadAllObjects,\n onProgress: (progress: PROGRESS) => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({ connected: false });\n } else if (progress === PROGRESS.READY) {\n this.setState({ connected: true });\n } else {\n this.setState({ connected: true });\n }\n },\n onReady: (/* objects, scripts */) => {\n I18n.setLanguage(this.socket.systemLang);\n\n // subscribe because of language and expert mode\n this.socket\n .subscribeObject('system.config', this.onSystemConfigChanged)\n .then(() => this.getSystemConfig())\n .then(obj => {\n this._secret =\n (typeof obj !== 'undefined' && obj.native && obj.native.secret) || 'Zgfr56gFe87jJOM';\n this._systemConfig = obj?.common || ({} as ioBroker.SystemConfigCommon);\n return this.socket.getObject(this.instanceId);\n })\n .then(async obj => {\n let waitPromise;\n const instanceObj: ioBroker.InstanceObject | null | undefined = obj as\n | ioBroker.InstanceObject\n | null\n | undefined;\n\n const sentryPluginEnabled = (\n await this.socket.getState(`${this.instanceId}.plugins.sentry.enabled`)\n )?.val;\n\n const sentryEnabled =\n sentryPluginEnabled !== false &&\n this._systemConfig?.diag !== 'none' &&\n instanceObj?.common &&\n instanceObj.common.name &&\n instanceObj.common.version &&\n // @ts-expect-error will be extended in js-controller TODO: (BF: 2024.05.30) this is redundant to state `${this.instanceId}.plugins.sentry.enabled`, remove this in future when admin sets the state correctly\n !instanceObj.common.disableDataReporting &&\n window.location.host !== 'localhost:3000';\n\n // activate sentry plugin\n if (!this.sentryStarted && this.sentryDSN && sentryEnabled) {\n this.sentryStarted = true;\n\n Sentry.init({\n dsn: this.sentryDSN,\n release: `iobroker.${instanceObj.common.name}@${instanceObj.common.version}`,\n integrations: [Sentry.dedupeIntegration()],\n });\n\n console.log('Sentry initialized');\n }\n\n // read UUID and init sentry with it.\n // for backward compatibility it will be processed separately from the above logic: some adapters could still have this.sentryDSN as undefined\n if (!this.sentryInited && sentryEnabled) {\n this.sentryInited = true;\n\n waitPromise = this.socket.getObject('system.meta.uuid').then(uuidObj => {\n if (uuidObj && uuidObj.native && uuidObj.native.uuid) {\n const scope = Sentry.getCurrentScope();\n scope.setUser({ id: uuidObj.native.uuid });\n }\n });\n }\n\n waitPromise = waitPromise instanceof Promise ? waitPromise : Promise.resolve();\n\n void waitPromise.then(() => {\n if (instanceObj) {\n this.common = instanceObj?.common;\n this.onPrepareLoad(instanceObj.native, instanceObj.encryptedNative); // decode all secrets\n this.savedNative = JSON.parse(JSON.stringify(instanceObj.native));\n this.setState(\n { native: instanceObj.native, loaded: true, expertMode: this.getExpertMode() },\n () => this.onConnectionReady && this.onConnectionReady(),\n );\n } else {\n console.warn('Cannot load instance settings');\n this.setState(\n {\n native: {},\n loaded: true,\n expertMode: this.getExpertMode(),\n },\n () => this.onConnectionReady && this.onConnectionReady(),\n );\n }\n });\n })\n .catch(e => window.alert(`Cannot settings: ${e}`));\n },\n onError: (err: string) => {\n console.error(err);\n this.showError(err);\n },\n });\n }\n\n /**\n * Checks if this connection is running in a web adapter and not in an admin.\n *\n * @returns True if running in a web adapter or in a socketio adapter.\n */\n static isWeb(): boolean {\n return window.socketUrl !== undefined;\n }\n\n showAlert(message: string, type?: 'info' | 'warning' | 'error' | 'success'): void {\n if (type !== 'error' && type !== 'warning' && type !== 'info' && type !== 'success') {\n type = 'info';\n }\n\n this.setState({\n _alert: true,\n _alertType: type,\n _alertMessage: message,\n });\n }\n\n renderAlertSnackbar(): JSX.Element {\n this.alertDialogRendered = true;\n\n return (\n <Snackbar\n style={\n this.state._alertType === 'error'\n ? { backgroundColor: '#f44336' }\n : this.state._alertType === 'success'\n ? { backgroundColor: '#4caf50' }\n : undefined\n }\n open={this.state._alert}\n autoHideDuration={6000}\n onClose={(_e, reason) => reason !== 'clickaway' && this.setState({ _alert: false })}\n message={this.state._alertMessage}\n />\n );\n }\n\n onSystemConfigChanged = (id: string, obj: ioBroker.AnyObject | null | undefined): void => {\n if (obj && id === 'system.config') {\n if (this.socket.systemLang !== (obj as ioBroker.SystemConfigObject)?.common.language) {\n this.socket.systemLang = (obj as ioBroker.SystemConfigObject)?.common.language || 'en';\n I18n.setLanguage(this.socket.systemLang);\n }\n\n if (this._systemConfig?.expertMode !== !!(obj as ioBroker.SystemConfigObject)?.common?.expertMode) {\n this._systemConfig =\n (obj as ioBroker.SystemConfigObject)?.common || ({} as ioBroker.SystemConfigCommon);\n this.setState({ expertMode: this.getExpertMode() });\n } else {\n this._systemConfig =\n (obj as ioBroker.SystemConfigObject)?.common || ({} as ioBroker.SystemConfigCommon);\n }\n }\n };\n\n /**\n * Called immediately after a component is mounted. Setting state here will trigger re-rendering.\n */\n componentDidMount(): void {\n window.addEventListener('resize', this.onResize, true);\n window.addEventListener('message', this.onReceiveMessage, false);\n super.componentDidMount();\n }\n\n /**\n * Called immediately before a component is destroyed.\n */\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.onResize, true);\n window.removeEventListener('message', this.onReceiveMessage, false);\n super.componentWillUnmount();\n }\n\n onReceiveMessage = (message: { data: string } | null): void => {\n if (message?.data) {\n if (message.data === 'updateTheme') {\n const newThemeName = Utils.getThemeName();\n Utils.setThemeName(Utils.getThemeName());\n\n const newTheme = this.createTheme(newThemeName);\n\n this.setState(\n {\n theme: newTheme,\n themeName: this.getThemeName(newTheme),\n themeType: this.getThemeType(newTheme),\n },\n () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n },\n );\n } else if (message.data === 'updateExpertMode') {\n this.onToggleExpertMode && this.onToggleExpertMode(this.getExpertMode());\n } else if (message.data !== 'chartReady') {\n // if not \"echart ready\" message\n console.debug(\n `Received unknown message: \"${JSON.stringify(message.data)}\". May be it will be processed later`,\n );\n }\n }\n };\n\n private onResize = (): void => {\n this.resizeTimer && clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.setState({ width: GenericApp.getWidth() });\n }, 200);\n };\n\n /**\n * Gets the width depending on the window inner width.\n */\n static getWidth(): Width {\n /**\n * innerWidth |xs sm md lg xl\n * |-------|-------|-------|-------|------>\n * width | xs | sm | md | lg | xl\n */\n\n const SIZES: Record<Width, number> = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n };\n const width = window.innerWidth;\n const keys = Object.keys(SIZES).reverse();\n const widthComputed = keys.find(key => width >= SIZES[key as Width]) as Width;\n\n return widthComputed || 'xs';\n }\n\n /**\n * Get a theme\n *\n * @param name Theme name\n */\n // eslint-disable-next-line class-methods-use-this\n createTheme(name?: ThemeName | null): IobTheme {\n return Theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n */\n // eslint-disable-next-line class-methods-use-this\n getThemeName(currentTheme: IobTheme): ThemeName {\n return currentTheme.name;\n }\n\n /**\n * Get the theme type\n */\n // eslint-disable-next-line class-methods-use-this\n getThemeType(currentTheme: IobTheme): ThemeType {\n return currentTheme.palette.mode;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onThemeChanged(_newThemeName: string): void {}\n\n // eslint-disable-next-line class-methods-use-this\n onToggleExpertMode(_expertMode: boolean): void {}\n\n /**\n * Changes the current theme\n */\n toggleTheme(newThemeName?: ThemeName): void {\n const themeName = this.state.themeName;\n\n // dark => blue => colored => light => dark\n newThemeName =\n newThemeName ||\n (themeName === 'dark'\n ? 'light'\n : themeName === 'blue'\n ? 'light'\n : themeName === 'colored'\n ? 'light'\n : 'dark');\n\n if (newThemeName !== themeName) {\n Utils.setThemeName(newThemeName);\n\n const newTheme = this.createTheme(newThemeName);\n\n this.setState(\n {\n theme: newTheme,\n themeName: this.getThemeName(newTheme),\n themeType: this.getThemeType(newTheme),\n },\n () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName || 'light');\n this.onThemeChanged && this.onThemeChanged(newThemeName || 'light');\n },\n );\n }\n }\n\n /**\n * Gets the system configuration.\n */\n getSystemConfig(): Promise<ioBroker.SystemConfigObject> {\n return this.socket.getSystemConfig();\n }\n\n /**\n * Get current expert mode\n */\n getExpertMode(): boolean {\n return window.sessionStorage.getItem('App.expertMode') === 'true' || !!this._systemConfig?.expertMode;\n }\n\n /**\n * Gets called when the socket.io connection is ready.\n * You can overload this function to execute own commands.\n */\n // eslint-disable-next-line class-methods-use-this\n onConnectionReady(): void {}\n\n /**\n * Encrypts a string.\n */\n encrypt(value: string): string {\n let result = '';\n if (this._secret) {\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(\n this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i),\n );\n }\n }\n return result;\n }\n\n /**\n * Decrypts a string.\n */\n decrypt(value: string): string {\n let result = '';\n if (this._secret) {\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(\n this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i),\n );\n }\n }\n return result;\n }\n\n /**\n * Gets called when the navigation hash changes.\n * You may override this if needed.\n */\n onHashChanged(): void {\n const location = Router.getLocation();\n if (location.tab !== this.state.selectedTab) {\n this.selectTab(location.tab);\n }\n }\n\n /**\n * Selects the given tab.\n */\n selectTab(tab: string, index?: number): void {\n ((window as any)._localStorage || window.localStorage).setItem(`${this.adapterName}-adapter`, tab);\n this.setState({ selectedTab: tab, selectedTabNum: index });\n }\n\n /**\n * Gets called before the settings are saved.\n * You may override this if needed.\n */\n onPrepareSave(settings: Record<string, any>): boolean {\n // here you can encode values\n this.encryptedFields &&\n this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.encrypt(settings[attr]);\n }\n });\n\n return true;\n }\n\n /**\n * Gets called after the settings are loaded.\n * You may override this if needed.\n *\n * @param settings instance settings from native part\n * @param encryptedNative optional list of fields to be decrypted\n */\n onPrepareLoad(settings: Record<string, any>, encryptedNative?: string[]): void {\n // here you can encode values\n this.encryptedFields &&\n this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n encryptedNative &&\n encryptedNative.forEach(attr => {\n this.encryptedFields = this.encryptedFields || [];\n !this.encryptedFields.includes(attr) && this.encryptedFields.push(attr);\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n }\n\n /**\n * Gets the extendable instances.\n */\n async getExtendableInstances(): Promise<ioBroker.InstanceObject[]> {\n try {\n const instances = await this.socket.getObjectViewSystem(\n 'instance',\n 'system.adapter.',\n 'system.adapter.\\u9999',\n );\n return Object.values(instances).filter(instance => !!instance?.common?.webExtendable);\n } catch {\n return [];\n }\n }\n\n /**\n * Gets the IP addresses of the given host.\n */\n async getIpAddresses(host: string): Promise<{ name: string; address: string; family: 'ipv4' | 'ipv6' }[]> {\n const ips = await this.socket.getHostByIp(host || this.common?.host || '');\n // translate names\n const ip4 = ips.find(ip => ip.address === '0.0.0.0');\n if (ip4) {\n ip4.name = `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`;\n }\n const ip6 = ips.find(ip => ip.address === '::');\n if (ip6) {\n ip6.name = `[IPv4] :: - ${I18n.t('ra_Listen on all IPs')}`;\n }\n return ips;\n }\n\n /**\n * Saves the settings to the server.\n *\n * @param isClose True if the user is closing the dialog.\n */\n onSave(isClose?: boolean): void {\n let oldObj: ioBroker.InstanceObject;\n if (this.state.isConfigurationError) {\n this.setState({ errorText: this.state.isConfigurationError });\n return;\n }\n\n this.socket\n .getObject(this.instanceId)\n .then(_oldObj => {\n oldObj = (_oldObj || {}) as ioBroker.InstanceObject;\n\n for (const a in this.state.native) {\n if (Object.prototype.hasOwnProperty.call(this.state.native, a)) {\n if (this.state.native[a] === null) {\n oldObj.native[a] = null;\n } else if (this.state.native[a] !== undefined) {\n oldObj.native[a] = JSON.parse(JSON.stringify(this.state.native[a]));\n } else {\n delete oldObj.native[a];\n }\n }\n }\n\n if (this.state.common) {\n for (const b in this.state.common) {\n if (this.state.common[b] === null) {\n (oldObj as Record<string, any>).common[b] = null;\n } else if (this.state.common[b] !== undefined) {\n (oldObj as Record<string, any>).common[b] = JSON.parse(\n JSON.stringify(this.state.common[b]),\n );\n } else {\n delete (oldObj as Record<string, any>).common[b];\n }\n }\n }\n\n if (this.onPrepareSave(oldObj.native) !== false) {\n return this.socket.setObject(this.instanceId, oldObj);\n }\n\n return Promise.reject(new Error('Invalid configuration'));\n })\n .then(() => {\n this.savedNative = oldObj.native;\n globalThis.changed = false;\n try {\n window.parent.postMessage('nochange', '*');\n } catch {\n // ignore\n }\n\n this.setState({ changed: false });\n isClose && GenericApp.onClose();\n })\n .catch(e => console.error(`Cannot save configuration: ${e}`));\n }\n\n /**\n * Renders the toast.\n */\n renderToast(): JSX.Element | null {\n if (!this.state.toast) {\n return null;\n }\n\n return (\n <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!0}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id' }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"Close\"\n color=\"inherit\"\n className={this.props.classes?.close}\n onClick={() => this.setState({ toast: '' })}\n size=\"large\"\n >\n <IconClose />\n </IconButton>,\n ]}\n />\n );\n }\n\n /**\n * Closes the dialog.\n */\n static onClose(): void {\n if (typeof window.parent !== 'undefined' && window.parent) {\n try {\n if (window.parent.$iframeDialog && typeof window.parent.$iframeDialog.close === 'function') {\n window.parent.$iframeDialog.close();\n } else {\n window.parent.postMessage('close', '*');\n }\n } catch {\n window.parent.postMessage('close', '*');\n }\n }\n }\n\n /**\n * Renders the error dialog.\n */\n renderError(): React.JSX.Element | null {\n if (!this.state.errorText) {\n return null;\n }\n\n return (\n <DialogError\n text={this.state.errorText}\n onClose={() => this.setState({ errorText: '' })}\n />\n );\n }\n\n /**\n * Checks if the configuration has changed.\n *\n * @param native the new state\n */\n getIsChanged(native: Record<string, any>): boolean {\n native = native || this.state.native;\n const isChanged = JSON.stringify(native) !== JSON.stringify(this.savedNative);\n\n globalThis.changed = isChanged;\n\n return isChanged;\n }\n\n /**\n * Gets called when loading the configuration.\n *\n * @param newNative The new configuration object.\n */\n onLoadConfig(newNative: Record<string, any>): void {\n if (JSON.stringify(newNative) !== JSON.stringify(this.state.native)) {\n this.setState({ native: newNative, changed: this.getIsChanged(newNative) });\n }\n }\n\n /**\n * Sets the configuration error.\n */\n setConfigurationError(errorText: string): void {\n if (this.state.isConfigurationError !== errorText) {\n this.setState({ isConfigurationError: errorText });\n }\n }\n\n /**\n * Renders the save and close buttons.\n */\n renderSaveCloseButtons(): React.JSX.Element | null {\n if (!this.state.confirmClose && !this.state.bottomButtons) {\n return null;\n }\n\n return (\n <>\n {this.state.bottomButtons ? (\n <SaveCloseButtons\n theme={this.state.theme}\n newReact={this.newReact}\n noTextOnButtons={\n this.state.width === 'xs' || this.state.width === 'sm' || this.state.width === 'md'\n }\n changed={this.state.changed}\n onSave={isClose => this.onSave(isClose)}\n onClose={() => {\n if (this.state.changed) {\n this.setState({ confirmClose: true });\n } else {\n GenericApp.onClose();\n }\n }}\n />\n ) : null}\n {this.state.confirmClose ? (\n <DialogConfirm\n title={I18n.t('ra_Please confirm')}\n text={I18n.t('ra_Some data are not stored. Discard?')}\n ok={I18n.t('ra_Discard')}\n cancel={I18n.t('ra_Cancel')}\n onClose={isYes => this.setState({ confirmClose: false }, () => isYes && GenericApp.onClose())}\n />\n ) : null}\n </>\n );\n }\n\n private _updateNativeValue(obj: Record<string, any>, attrs: string | string[], value: any): boolean {\n if (typeof attrs !== 'object') {\n attrs = attrs.split('.');\n }\n const attr: string = attrs.shift() || '';\n if (!attrs.length) {\n if (value && typeof value === 'object') {\n if (JSON.stringify(obj[attr]) !== JSON.stringify(value)) {\n obj[attr] = value;\n return true;\n }\n return false;\n }\n if (obj[attr] !== value) {\n obj[attr] = value;\n return true;\n }\n\n return false;\n }\n\n obj[attr] = obj[attr] || {};\n if (typeof obj[attr] !== 'object') {\n throw new Error(`attribute ${attr} is no object, but ${typeof obj[attr]}`);\n }\n return this._updateNativeValue(obj[attr], attrs, value);\n }\n\n /**\n * Update the native value\n *\n * @param attr The attribute name with dots as delimiter.\n * @param value The new value.\n * @param cb Callback which will be called upon completion.\n */\n updateNativeValue(attr: string, value: any, cb?: () => void): void {\n const native = JSON.parse(JSON.stringify(this.state.native));\n if (this._updateNativeValue(native, attr, value)) {\n const changed = this.getIsChanged(native);\n\n if (changed !== this.state.changed) {\n try {\n window.parent.postMessage(changed ? 'change' : 'nochange', '*');\n } catch {\n // ignore\n }\n }\n\n this.setState({ native, changed }, cb);\n }\n }\n\n /**\n * Set the error text to be shown.\n */\n showError(text: string | React.JSX.Element): void {\n this.setState({ errorText: text });\n }\n\n /**\n * Sets the toast to be shown.\n *\n * @param toast Text to be shown.\n */\n showToast(toast: string | React.JSX.Element): void {\n this.setState({ toast });\n }\n\n /**\n * Renders helper dialogs\n */\n renderHelperDialogs(): React.JSX.Element {\n return (\n <>\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n {this.renderAlertSnackbar()}\n </>\n );\n }\n\n /**\n * Renders this component.\n */\n render(): React.JSX.Element {\n if (!this.state.loaded) {\n return <Loader themeType={this.state.themeType} />;\n }\n\n return (\n <div className=\"App\">\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n {this.renderAlertSnackbar()}\n </div>\n );\n }\n}\n"]}
|
|
@@ -156,8 +156,6 @@ interface ConnectionProps {
|
|
|
156
156
|
onObjectChange?: ioBroker.ObjectChangeHandler;
|
|
157
157
|
/** Gets called when the system language is determined */
|
|
158
158
|
onLanguage?: (lang: ioBroker.Languages) => void;
|
|
159
|
-
/** Forces the use of the Compact Methods, wich only exists in admin 5 UI. */
|
|
160
|
-
admin5only?: boolean;
|
|
161
159
|
/** The device UUID with which the communication must be established */
|
|
162
160
|
uuid?: string;
|
|
163
161
|
/** Authentication token (used only in cloud) */
|
|
@@ -188,7 +186,7 @@ export declare class LegacyConnection {
|
|
|
188
186
|
private _promises;
|
|
189
187
|
private readonly _instanceSubscriptions;
|
|
190
188
|
private props;
|
|
191
|
-
private doNotLoadAllObjects;
|
|
189
|
+
private readonly doNotLoadAllObjects;
|
|
192
190
|
private readonly doNotLoadACL;
|
|
193
191
|
private states;
|
|
194
192
|
private objects;
|
|
@@ -207,7 +205,6 @@ export declare class LegacyConnection {
|
|
|
207
205
|
private loaded;
|
|
208
206
|
private loadTimer;
|
|
209
207
|
private loadCounter;
|
|
210
|
-
private admin5only;
|
|
211
208
|
private ignoreState;
|
|
212
209
|
private readonly simStates;
|
|
213
210
|
private autoSubscribes;
|
|
@@ -265,7 +262,7 @@ export declare class LegacyConnection {
|
|
|
265
262
|
* @param binary Set to true if the given state is binary and requires Base64 decoding
|
|
266
263
|
* @param cb The callback
|
|
267
264
|
*/
|
|
268
|
-
subscribeState(id: string | string[], binary: boolean | ioBroker.StateChangeHandler | BinaryStateChangeHandler, cb?: ioBroker.StateChangeHandler | BinaryStateChangeHandler): void
|
|
265
|
+
subscribeState(id: string | string[], binary: boolean | ioBroker.StateChangeHandler | BinaryStateChangeHandler, cb?: ioBroker.StateChangeHandler | BinaryStateChangeHandler): Promise<void>;
|
|
269
266
|
/**
|
|
270
267
|
* Subscribe to changes of the given state.
|
|
271
268
|
*/
|
|
@@ -418,7 +415,7 @@ export declare class LegacyConnection {
|
|
|
418
415
|
/**
|
|
419
416
|
* Gets the object with the given id from the server.
|
|
420
417
|
*/
|
|
421
|
-
getObject(id: string): Promise<
|
|
418
|
+
getObject<T = ioBroker.Object>(id: string): Promise<T>;
|
|
422
419
|
/**
|
|
423
420
|
* Get all instances of the given adapter or all instances of all adapters.
|
|
424
421
|
*
|
|
@@ -539,7 +536,7 @@ export declare class LegacyConnection {
|
|
|
539
536
|
* @param start The start ID.
|
|
540
537
|
* @param end The end ID.
|
|
541
538
|
*/
|
|
542
|
-
getObjectViewSystem(type: ioBroker.ObjectType, start: string, end?: string): Promise<Record<string,
|
|
539
|
+
getObjectViewSystem<T = ioBroker.Object>(type: ioBroker.ObjectType, start: string, end?: string): Promise<Record<string, T>>;
|
|
543
540
|
/**
|
|
544
541
|
* @deprecated since version 1.1.15, cause parameter order does not match backend
|
|
545
542
|
*
|