@iobroker/adapter-react-v5 3.2.2 → 3.2.4
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/Components/ColorPicker.d.ts +1 -1
- package/Components/ColorPicker.js +77 -53
- package/Components/ColorPicker.js.map +1 -1
- package/Components/FileBrowser.js +2 -2
- package/Components/FileBrowser.js.map +1 -1
- package/Components/ObjectBrowser.d.ts +21 -24
- package/Components/ObjectBrowser.js +624 -655
- package/Components/ObjectBrowser.js.map +1 -1
- package/Components/Router.js.map +1 -1
- package/Components/TableResize.js.map +1 -1
- package/Components/Utils.js +11 -4
- package/Components/Utils.js.map +1 -1
- package/Dialogs/SelectID.js +6 -6
- package/Dialogs/SelectID.js.map +1 -1
- package/GenericApp.js.map +1 -1
- package/README.md +6 -0
- package/package.json +5 -5
package/Dialogs/SelectID.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectID.js","names":["styles","theme","headerID","fontWeight","fontStyle","dialog","height","dialogMobile","padding","width","maxWidth","maxHeight","content","overflow","contentMobile","titleRoot","whiteSpace","display","textOverflow","DialogSelectID","props","dialogName","filters","window","_localStorage","localStorage","getItem","JSON","parse","e","selected","filter","id","state","name","isMobile","innerWidth","onClose","onOk","multiSelect","title","length","I18n","t","classes","paper","Utils","clsx","root","foldersFirst","imagePrefix","prefix","showExpertButton","undefined","expertMode","columns","types","lang","getLanguage","socket","notEditable","themeName","themeType","customFilter","filterConfig","setItem","stringify","isDouble","setState","handleOk","filterFunc","ok","handleCancel","cancel","React","Component","propTypes","PropTypes","string","object","bool","func","isRequired","isFloatComma","dateFormat","oneOfType","array","statesOnly","_export","withStyles"],"sources":["SelectID.js"],"sourcesContent":["/**\n * Copyright 2018-2022 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 from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport Utils from '../Components/Utils';\nimport I18n from '../i18n';\nimport ObjectBrowser from '../Components/ObjectBrowser';\n\nconst styles = theme => ({\n headerID: {\n fontWeight: 'bold',\n fontStyle: 'italic'\n },\n dialog: {\n height: '95%'\n },\n dialogMobile: {\n padding: 4,\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n height: '100%'\n },\n content: {\n height: '100%',\n overflow: 'hidden'\n },\n contentMobile: {\n padding: '8px 4px'\n },\n titleRoot: {\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }\n});\n\n/**\n * @typedef {object} DialogSelectIDProps\n * @property {string} [dialogName] The internal name of the dialog; default: \"default\"\n * @property {string} [title] The dialog title; default: Please select object ID... (translated)\n * @property {boolean} [multiSelect] Set to true to allow the selection of multiple IDs.\n * @property {boolean} [foldersFirst] Show folders before any leaves.\n * @property {string} [imagePrefix] Prefix (default: '.')\n * @property {boolean} [showExpertButton] Show the expert button?\n * @property {import('../Components/types').ObjectBrowserColumn[]} [columns] Columns to display; default: 'name', 'type', 'role', 'room', 'func', 'val'\n * @property {import('../Components/types').ObjectBrowserType[]} [types] Object types to show; default: 'state' only\n * @property {ioBroker.Languages} [lang] The language.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {boolean} [notEditable] Can't objects be edited? (default: true)\n * @property {string} [themeName] Theme name.\n * @property {string} [themeType] Theme type.\n * @property {import('../Components/types').ObjectBrowserCustomFilter} [customFilter] Custom filter.\n * @property {string | string[]} [selected] The selected IDs.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {() => void} onClose Close handler that is always called when the dialog is closed.\n * @property {(selected: string | string[] | undefined, name: string) => void} onOk Handler that is called when the user presses OK.\n * @property {{headerID: string; dialog: string; content: string}} [classes] The styling class names.\n *\n * @extends {React.Component<DialogSelectIDProps>}\n */\nclass DialogSelectID extends React.Component {\n /**\n * @param {DialogSelectIDProps} props\n */\n constructor(props) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = 'SelectID.' + this.dialogName;\n\n this.filters = (window._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(this.filters);\n } catch (e) {\n this.filters = {};\n }\n\n let selected = this.props.selected || [];\n if (typeof selected !== 'object') {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n this.state = {\n selected,\n name: '',\n isMobile: window.innerWidth < 800\n };\n }\n\n handleCancel() {\n this.props.onClose();\n };\n\n handleOk() {\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() {\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\">{I18n.t('ra_Selected')} </span>,\n <span key=\"id\" className={this.props.classes.headerID}>{\n (this.state.name || this.state.selected) + (this.state.name ? ' [' + this.state.selected + ']' : '')\n }</span>\n ];\n } else {\n title = [\n <span key=\"selected\">{I18n.t('ra_Selected')} </span>,\n <span key=\"id\" className={this.props.classes.headerID}>{\n I18n.t('%s items', this.state.selected.length)\n }</span>\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return <Dialog\n onClose={() => {}}\n maxWidth={false}\n classes={{paper: Utils.clsx(this.props.classes.dialog, this.props.classes.dialogMobile)}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"selectid-dialog-title\"\n >\n <DialogTitle id=\"selectid-dialog-title\" classes={{root: this.props.classes.titleRoot}}>{title}</DialogTitle>\n <DialogContent className={Utils.clsx(this.props.classes.content, this.props.classes.contentMobile)}>\n <ObjectBrowser\n foldersFirst={this.props.foldersFirst}\n imagePrefix={this.props.imagePrefix || this.props.prefix} // prefix is for back compatibility\n defaultFilters={this.filters}\n dialogName={this.dialogName}\n showExpertButton={this.props.showExpertButton !== undefined ? this.props.showExpertButton : true}\n expertMode={this.props.expertMode}\n style={{ width: '100%', height: '100%' }}\n columns={this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val']}\n types={this.props.types || ['state']}\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 customFilter={this.props.customFilter}\n onFilterChanged={filterConfig => {\n this.filters = filterConfig;\n (window._localStorage || window.localStorage).setItem(this.dialogName, JSON.stringify(filterConfig));\n }}\n onSelect={(selected, name, isDouble) => {\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({selected, name}, () =>\n isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n }}\n filterFunc={this.props.filterFunc}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} startIcon={<IconOk />} disabled={!this.state.selected.length} color=\"primary\">{this.props.ok || I18n.t('ra_Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel />}>{this.props.cancel || I18n.t('ra_Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogSelectID.propTypes = {\n dialogName: PropTypes.string, // where to store settings in localStorage\n classes: PropTypes.object,\n notEditable: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onOk: PropTypes.func.isRequired,\n title: PropTypes.string,\n lang: PropTypes.string,\n foldersFirst: PropTypes.bool,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n selected: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array\n ]),\n customFilter: PropTypes.object, // optional {common: {custom: true}} or {common: {custom: 'sql.0'}}\n statesOnly: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n cancel: PropTypes.string,\n imagePrefix: PropTypes.string,\n ok: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n showExpertButton: PropTypes.bool,\n expertMode: PropTypes.bool, // force expert mode\n multiSelect: PropTypes.bool,\n types: PropTypes.array, // optional ['state', 'instance', 'channel']\n columns: PropTypes.array, // optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons']\n\n filterFunc: PropTypes.func, // function to filter out all unnecessary objects. It cannot be used together with \"types\"\n // Example for function: `obj => obj.common && obj.common.type === 'boolean'` to show only boolean states\n};\n\n/** @type {typeof DialogSelectID} */\nconst _export = withStyles(styles)(DialogSelectID);\nexport default _export;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectID.js","names":["styles","headerID","fontWeight","fontStyle","dialog","height","dialogMobile","padding","width","maxWidth","maxHeight","content","overflow","contentMobile","titleRoot","whiteSpace","display","textOverflow","DialogSelectID","props","dialogName","filters","window","_localStorage","localStorage","getItem","JSON","parse","e","selected","filter","id","state","name","isMobile","innerWidth","onClose","onOk","multiSelect","title","length","I18n","t","classes","paper","Utils","clsx","root","foldersFirst","imagePrefix","prefix","showExpertButton","undefined","expertMode","columns","types","lang","getLanguage","socket","notEditable","themeName","themeType","customFilter","filterConfig","setItem","stringify","isDouble","setState","handleOk","filterFunc","ok","handleCancel","cancel","React","Component","propTypes","PropTypes","string","object","bool","func","isRequired","isFloatComma","dateFormat","oneOfType","array","statesOnly","_export","withStyles"],"sources":["SelectID.js"],"sourcesContent":["/**\n * Copyright 2018-2022 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 from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport Utils from '../Components/Utils';\nimport I18n from '../i18n';\nimport ObjectBrowser from '../Components/ObjectBrowser';\n\nconst styles = () => ({\n headerID: {\n fontWeight: 'bold',\n fontStyle: 'italic',\n },\n dialog: {\n height: '95%',\n },\n dialogMobile: {\n padding: 4,\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n height: '100%',\n },\n content: {\n height: '100%',\n overflow: 'hidden',\n },\n contentMobile: {\n padding: '8px 4px',\n },\n titleRoot: {\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n },\n});\n\n/**\n * @typedef {object} DialogSelectIDProps\n * @property {string} [dialogName] The internal name of the dialog; default: \"default\"\n * @property {string} [title] The dialog title; default: Please select object ID... (translated)\n * @property {boolean} [multiSelect] Set to true to allow the selection of multiple IDs.\n * @property {boolean} [foldersFirst] Show folders before any leaves.\n * @property {string} [imagePrefix] Prefix (default: '.')\n * @property {boolean} [showExpertButton] Show the expert button?\n * @property {import('../Components/types').ObjectBrowserColumn[]} [columns] Columns to display; default: 'name', 'type', 'role', 'room', 'func', 'val'\n * @property {import('../Components/types').ObjectBrowserType[]} [types] Object types to show; default: 'state' only\n * @property {ioBroker.Languages} [lang] The language.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {boolean} [notEditable] Can't objects be edited? (default: true)\n * @property {string} [themeName] Theme name.\n * @property {string} [themeType] Theme type.\n * @property {import('../Components/types').ObjectBrowserCustomFilter} [customFilter] Custom filter.\n * @property {string | string[]} [selected] The selected IDs.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {() => void} onClose Close handler that is always called when the dialog is closed.\n * @property {(selected: string | string[] | undefined, name: string) => void} onOk Handler that is called when the user presses OK.\n * @property {{headerID: string; dialog: string; content: string}} [classes] The styling class names.\n *\n * @extends {React.Component<DialogSelectIDProps>}\n */\nclass DialogSelectID extends React.Component {\n /**\n * @param {DialogSelectIDProps} props\n */\n constructor(props) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = `SelectID.${this.dialogName}`;\n\n this.filters = (window._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(this.filters);\n } catch (e) {\n this.filters = {};\n }\n\n let selected = this.props.selected || [];\n if (typeof selected !== 'object') {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n this.state = {\n selected,\n name: '',\n isMobile: window.innerWidth < 800,\n };\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n handleOk() {\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() {\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 key=\"id\" className={this.props.classes.headerID}>\n {(this.state.name || this.state.selected) + (this.state.name ? ` [${this.state.selected}]` : '')}\n </span>,\n ];\n } else {\n title = [\n <span key=\"selected\">\n {I18n.t('ra_Selected')}\n \n </span>,\n <span key=\"id\" className={this.props.classes.headerID}>\n {I18n.t('%s items', this.state.selected.length)}\n </span>,\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return <Dialog\n onClose={() => {}}\n maxWidth={false}\n classes={{ paper: Utils.clsx(this.props.classes.dialog, this.props.classes.dialogMobile) }}\n fullWidth\n open={!0}\n aria-labelledby=\"selectid-dialog-title\"\n >\n <DialogTitle id=\"selectid-dialog-title\" classes={{ root: this.props.classes.titleRoot }}>{title}</DialogTitle>\n <DialogContent className={Utils.clsx(this.props.classes.content, this.props.classes.contentMobile)}>\n <ObjectBrowser\n foldersFirst={this.props.foldersFirst}\n imagePrefix={this.props.imagePrefix || this.props.prefix} // prefix is for back compatibility\n defaultFilters={this.filters}\n dialogName={this.dialogName}\n showExpertButton={this.props.showExpertButton !== undefined ? this.props.showExpertButton : true}\n expertMode={this.props.expertMode}\n style={{ width: '100%', height: '100%' }}\n columns={this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val']}\n types={this.props.types || ['state']}\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 customFilter={this.props.customFilter}\n onFilterChanged={filterConfig => {\n this.filters = filterConfig;\n (window._localStorage || window.localStorage).setItem(this.dialogName, JSON.stringify(filterConfig));\n }}\n onSelect={(selected, name, isDouble) => {\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({ selected, name }, () =>\n isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n }}\n filterFunc={this.props.filterFunc}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} startIcon={<IconOk />} disabled={!this.state.selected.length} color=\"primary\">{this.props.ok || I18n.t('ra_Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel />}>{this.props.cancel || I18n.t('ra_Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogSelectID.propTypes = {\n dialogName: PropTypes.string, // where to store settings in localStorage\n classes: PropTypes.object,\n notEditable: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onOk: PropTypes.func.isRequired,\n title: PropTypes.string,\n lang: PropTypes.string,\n foldersFirst: PropTypes.bool,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n selected: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array,\n ]),\n customFilter: PropTypes.object, // optional {common: {custom: true}} or {common: {custom: 'sql.0'}}\n statesOnly: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n cancel: PropTypes.string,\n imagePrefix: PropTypes.string,\n ok: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n showExpertButton: PropTypes.bool,\n expertMode: PropTypes.bool, // force expert mode\n multiSelect: PropTypes.bool,\n types: PropTypes.array, // optional ['state', 'instance', 'channel']\n columns: PropTypes.array, // optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons']\n\n filterFunc: PropTypes.func, // function to filter out all unnecessary objects. It cannot be used together with \"types\"\n // Example for function: `obj => obj.common && obj.common.type === 'boolean'` to show only boolean states\n};\n\n/** @type {typeof DialogSelectID} */\nconst _export = withStyles(styles)(DialogSelectID);\nexport default _export;\n"],"mappings":"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"}
|
package/GenericApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericApp.js","names":["cssStyle","window","localStorage","getItem","setItem","GenericApp","props","settings","ConnectionClass","Connection","document","getElementById","style","createElement","setAttribute","innerHTML","head","appendChild","isWeb","io","location","port","SocketClient","e","id","obj","socket","systemLang","common","language","I18n","setLanguage","_systemConfig","expertMode","setState","getExpertMode","message","data","newThemeName","Utils","getThemeName","setThemeName","theme","createTheme","themeName","themeType","getThemeType","onThemeChange","onThemeChanged","onToggleExpertMode","console","warn","JSON","stringify","resizeTimer","clearTimeout","setTimeout","width","getWidth","printPrompt","query","search","replace","args","trim","split","filter","t","forEach","b","parts","length","instance","undefined","parseInt","slice","tmp","pathname","adapterName","instanceId","newReact","Router","getLocation","tab","_localStorage","themeInstance","state","selectedTab","selectedTabNum","errorText","changed","connected","loaded","isConfigurationError","toast","bottomButtons","confirmClose","translations","require","Object","keys","lang","assign","setTranslations","savedNative","encryptedFields","sentryDSN","name","doNotLoadAllObjects","onProgress","progress","PROGRESS","CONNECTING","READY","onReady","objects","scripts","subscribeObject","onSystemConfigChanged","then","getSystemConfig","_secret","secret","getObject","instanceObj","waitPromise","sentryEnabled","diag","version","disableDataReporting","host","sentryStarted","Sentry","init","dsn","release","integrations","SentryIntegrations","Dedupe","sentryInited","uuidObj","uuid","configureScope","scope","setUser","Promise","resolve","onPrepareLoad","encryptedNative","parse","onConnectionReady","onError","err","error","showError","addEventListener","onResize","onReceiveMessage","removeEventListener","palette","mode","sessionStorage","value","result","i","String","fromCharCode","charCodeAt","selectTab","index","attr","encrypt","decrypt","includes","push","_socket","emit","doc","rows","item","webExtendable","map","reject","ip","_host","IPs4","address","family","IPs6","hardware","networkInterfaces","eth","inter","isClose","oldObj","_oldObj","a","hasOwnProperty","onPrepareSave","setObject","globalThis","parent","postMessage","onClose","vertical","horizontal","classes","close","native","isChanged","newNative","getIsChanged","onSave","isYes","attrs","shift","Error","_updateNativeValue","cb","text","renderError","renderToast","renderSaveCloseButtons","SIZES","xs","sm","md","lg","xl","innerWidth","reverse","widthComputed","find","key","$iframeDialog","propTypes","PropTypes","string","func","object","array","bool"],"sources":["GenericApp.js"],"sourcesContent":["/**\n * Copyright 2018-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport Connection, { PROGRESS } from './Connection';\nimport PropTypes from 'prop-types';\nimport * as Sentry from '@sentry/browser';\nimport * as SentryIntegrations from '@sentry/integrations';\n\nimport DialogError from './Dialogs/Error';\nimport Snackbar from '@mui/material/Snackbar';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconClose from '@mui/icons-material/Close';\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 ConfirmDialog from './Dialogs/Confirm';\nimport I18n from './i18n';\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\nif (!window.localStorage) {\n window.localStorage = {\n getItem: () => null,\n setItem: () => null,\n };\n}\n\n/**\n * @extends {Router<import('./types').GenericAppProps, import('./types').GenericAppState>}\n */\nclass GenericApp extends Router {\n /**\n * @param {import('./types').GenericAppProps} props\n * @param {import('./types').GenericAppSettings | undefined} settings\n */\n constructor(props, settings) {\n const ConnectionClass = 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 (!ConnectionClass.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 (e) {\n // ignore\n }\n }\n\n super(props);\n\n printPrompt();\n\n let query = (window.location.search || '').replace(/^\\?/, '').replace(/#.*$/, '');\n let args = {};\n query.trim().split('&').filter(t => t.trim()).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 = args.instance !== undefined ? parseInt(args.instance, 10) || 0 : (parseInt(window.location.search.slice(1), 10) || 0);\n // extract adapter name from URL\n const tmp = window.location.pathname.split('/');\n this.adapterName = 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 = location.tab || (window._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) || '';\n\n const themeInstance = this.createTheme();\n\n this.state = {\n selectedTab: (window._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 && props.bottomButtons) === false ? false : true),\n width: GenericApp.getWidth(),\n confirmClose: false,\n };\n\n // init translations\n const translations = {\n 'en': require('./i18n/en.json'),\n 'de': require('./i18n/de.json'),\n 'ru': require('./i18n/ru.json'),\n 'pt': require('./i18n/pt.json'),\n 'nl': require('./i18n/nl.json'),\n 'fr': require('./i18n/fr.json'),\n 'it': require('./i18n/it.json'),\n 'es': require('./i18n/es.json'),\n 'pl': require('./i18n/pl.json'),\n 'uk': require('./i18n/uk.json'),\n 'zh-cn': require('./i18n/zh-cn.json'),\n };\n\n // merge together\n if (settings && settings.translations) {\n Object.keys(settings.translations).forEach(lang => translations[lang] = Object.assign(translations[lang], settings.translations[lang]));\n } else if (props.translations) {\n Object.keys(props.translations).forEach(lang => translations[lang] = Object.assign(translations[lang], props.translations[lang]));\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 this.socket = new ConnectionClass({\n ...(props?.socket || settings?.socket),\n name: this.adapterName,\n doNotLoadAllObjects: settings?.doNotLoadAllObjects,\n onProgress: 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.subscribeObject('system.config', this.onSystemConfigChanged)\n .then(() => this.getSystemConfig())\n .then(obj => {\n this._secret = (typeof obj !== 'undefined' && obj.native && obj.native.secret) || 'Zgfr56gFe87jJOM';\n this._systemConfig = obj?.common || {};\n return this.socket.getObject(this.instanceId);\n })\n .then(instanceObj => {\n let waitPromise;\n\n const sentryEnabled =\n this._systemConfig.diag !== 'none' &&\n instanceObj &&\n instanceObj.common &&\n instanceObj.common.name &&\n instanceObj.common.version &&\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: [\n new SentryIntegrations.Dedupe()\n ]\n });\n }\n\n // read UUID and init sentry with it.\n // for backward compatibility it will be processed separately from 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')\n .then(uuidObj => {\n if (uuidObj && uuidObj.native && uuidObj.native.uuid) {\n Sentry.configureScope(scope =>\n scope.setUser({id: uuidObj.native.uuid}));\n }\n });\n }\n\n waitPromise = waitPromise || Promise.resolve();\n\n waitPromise\n .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({ native: instanceObj.native, loaded: true, expertMode: this.getExpertMode() }, () =>\n this.onConnectionReady && this.onConnectionReady());\n } else {\n console.warn('Cannot load instance settings');\n this.setState({ native: {}, loaded: true, expertMode: this.getExpertMode()},\n () => this.onConnectionReady && this.onConnectionReady());\n }\n });\n });\n },\n onError: err => {\n console.error(err);\n this.showError(err);\n }\n });\n }\n\n onSystemConfigChanged = (id, obj) => {\n if (obj && id === 'system.config') {\n if (this.socket.systemLang !== obj?.common.language) {\n this.socket.systemLang = obj?.common.language || 'en';\n I18n.setLanguage(this.socket.systemLang);\n }\n\n if (this._systemConfig.expertMode !== !!obj?.common?.expertMode) {\n this._systemConfig = obj?.common || {};\n this.setState({ expertMode: this.getExpertMode() });\n } else {\n this._systemConfig = obj?.common || {};\n }\n }\n }\n\n /**\n * Called immediately after a component is mounted. Setting state here will trigger re-rendering.\n */\n componentDidMount() {\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() {\n window.removeEventListener('resize', this.onResize, true);\n window.removeEventListener('message', this.onReceiveMessage, false);\n super.componentWillUnmount();\n }\n\n onReceiveMessage = message => {\n if (message?.data) {\n if (message.data === 'updateTheme') {\n const newThemeName = Utils.getThemeName()\n Utils.setThemeName(Utils.getThemeName());\n\n const theme = this.createTheme(newThemeName);\n\n this.setState({\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme)\n }, () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n });\n } else if (message.data === 'updateExpertMode') {\n this.onToggleExpertMode && this.onToggleExpertMode(this.getExpertMode());\n } else {\n console.warn('Received unknown message: ' + JSON.stringify(message.data));\n }\n }\n };\n\n /**\n * @private\n */\n onResize = () => {\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 * @returns {import('./types').Width}\n */\n static getWidth() {\n /**\n * innerWidth |xs sm md lg xl\n * |-------|-------|-------|-------|------>\n * width | xs | sm | md | lg | xl\n */\n\n const SIZES = {\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]);\n\n return widthComputed || 'xs';\n }\n\n /**\n * Get a theme\n * @param {string} name Theme name\n * @returns {import('./types').Theme}\n */\n createTheme(name = '') {\n return theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n * @param {import('./types').Theme} theme Theme\n * @returns {string} Theme name\n */\n getThemeName(theme) {\n return theme.name;\n }\n\n /**\n * Get the theme type\n * @param {import('./types').Theme} theme Theme\n * @returns {string} Theme type\n */\n getThemeType(theme) {\n return theme.palette.mode;\n }\n\n /**\n * Changes the current theme\n */\n toggleTheme() {\n const themeName = this.state.themeName;\n\n // dark => blue => colored => light => dark\n const newThemeName = themeName === 'dark' ? 'blue' :\n (themeName === 'blue' ? 'colored' :\n (themeName === 'colored' ? 'light' : 'dark'));\n\n Utils.setThemeName(newThemeName);\n\n const theme = this.createTheme(newThemeName);\n\n this.setState({\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme)\n }, () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n });\n }\n\n /**\n * Gets the system configuration.\n * @returns {Promise<ioBroker.OtherObject>}\n */\n getSystemConfig() {\n return this.socket.getSystemConfig();\n }\n\n /**\n * Get current expert mode\n * @returns {boolean}\n */\n getExpertMode() {\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 onConnectionReady() {\n }\n\n /**\n * Encrypts a string.\n * @param {string} value\n * @returns {string}\n */\n encrypt(value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n }\n\n /**\n * Decrypts a string.\n * @param {string} value\n * @returns {string}\n */\n decrypt(value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i));\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() {\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 * @param {string} tab\n * @param {number} [index]\n */\n selectTab(tab, index) {\n (window._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 * @param {Record<string, any>} settings\n */\n onPrepareSave(settings) {\n // here you can encode values\n this.encryptedFields && 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 * @param {Record<string, any>} settings\n * @param {string[]} encryptedNative optional list of fields to be decrypted\n */\n onPrepareLoad(settings, encryptedNative) {\n // here you can encode values\n this.encryptedFields && this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n encryptedNative && 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 * @returns {Promise<any[]>}\n */\n getExtendableInstances() {\n return new Promise(resolve => {\n this.socket._socket.emit('getObjectView', 'system', 'instance', null, (err, doc) => {\n if (err) {\n resolve([]);\n } else {\n resolve(doc.rows\n .filter(item => item.value.common.webExtendable)\n .map(item => item.value)\n );\n }\n });\n });\n }\n\n /**\n * Gets the IP addresses of the given host.\n * @param {string} host\n */\n getIpAddresses(host) {\n return new Promise((resolve, reject) => {\n this.socket._socket.emit('getHostByIp', host || this.common.host, (ip, _host) => {\n const IPs4 = [{ name: `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`, address: '0.0.0.0', family: 'ipv4' }];\n const IPs6 = [{ name: '[IPv6] ::', address: '::', family: 'ipv6' }];\n if (_host) {\n host = _host;\n if (host.native.hardware && host.native.hardware.networkInterfaces) {\n Object.keys(host.native.hardware.networkInterfaces).forEach(eth =>\n host.native.hardware.networkInterfaces[eth].forEach(inter => {\n if (inter.family !== 'IPv6') {\n IPs4.push({ name: `[${inter.family}] ${inter.address} - ${eth}`, address: inter.address, family: 'ipv4' });\n } else {\n IPs6.push({ name: `[${inter.family}] ${inter.address} - ${eth}`, address: inter.address, family: 'ipv6' });\n }\n }));\n }\n IPs6.forEach(ip => IPs4.push(ip));\n }\n resolve(IPs4);\n });\n });\n }\n\n /**\n * Saves the settings to the server.\n * @param {boolean} isClose True if the user is closing the dialog.\n */\n onSave(isClose) {\n let oldObj;\n if (this.state.isConfigurationError) {\n this.setState({ errorText: this.state.isConfigurationError });\n return;\n }\n\n this.socket.getObject(this.instanceId)\n .then(_oldObj => {\n oldObj = _oldObj || {};\n\n for (const a in this.state.native) {\n if (this.state.native.hasOwnProperty(a)) {\n if (this.state.native[a] === null) {\n oldObj.native[a] = null;\n } else\n 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.common[b] = null;\n } else\n if (this.state.common[b] !== undefined) {\n oldObj.common[b] = JSON.parse(JSON.stringify(this.state.common[b]));\n } else {\n delete oldObj.common[b];\n }\n }\n }\n\n if (this.onPrepareSave(oldObj.native) !== false) {\n return this.socket.setObject(this.instanceId, oldObj);\n } else {\n return Promise.reject('Invalid configuration');\n }\n })\n .then(() => {\n this.savedNative = oldObj.native;\n globalThis.changed = false;\n try {\n window.parent.postMessage('nochange', '*');\n } catch (e) {\n // ignore\n }\n\n this.setState({ changed: false });\n isClose && GenericApp.onClose();\n })\n .catch(e => {\n console.error(`Cannot save configuration: ${e}`);\n });\n }\n\n /**\n * Renders the toast.\n * @returns {JSX.Element | null} The JSX element.\n */\n renderToast() {\n if (!this.state.toast) {\n return null;\n }\n\n return <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={true}\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 <IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n /**\n * Closes the dialog.\n * @private\n */\n static onClose() {\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 (e) {\n window.parent.postMessage('close', '*');\n }\n }\n }\n\n /**\n * Renders the error dialog.\n * @returns {JSX.Element | null} The JSX element.\n */\n renderError() {\n if (!this.state.errorText) {\n return null;\n } else {\n return <DialogError text={this.state.errorText} onClose={() => this.setState({ errorText: '' })}/>;\n }\n }\n\n /**\n * Checks if the configuration has changed.\n * @param {Record<string, any>} [native] the new state\n */\n getIsChanged(native) {\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 * @param {Record<string, any>} newNative The new configuration object.\n */\n onLoadConfig(newNative) {\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 * @param {string} errorText\n */\n setConfigurationError(errorText) {\n if (this.state.isConfigurationError !== errorText) {\n this.setState({ isConfigurationError: errorText });\n }\n }\n\n /**\n * Renders the save and close buttons.\n * @returns {JSX.Element | undefined} The JSX element.\n */\n renderSaveCloseButtons() {\n if (!this.state.confirmClose && !this.state.bottomButtons) {\n return null;\n }\n\n return <>\n {this.state.bottomButtons ? <SaveCloseButtons\n theme={this.state.theme}\n newReact={this.newReact}\n noTextOnButtons={this.state.width === 'xs' || this.state.width === 'sm' || this.state.width === 'md'}\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 /> : null}\n {this.state.confirmClose ? <ConfirmDialog\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 =>\n this.setState({ confirmClose: false }, () =>\n isYes && GenericApp.onClose())}\n /> : null}\n </>;\n }\n\n /**\n * @private\n * @param {Record<string, any>} obj\n * @param {any} attrs\n * @param {any} value\n * @returns {boolean | undefined}\n */\n _updateNativeValue(obj, attrs, value) {\n if (typeof attrs !== 'object') {\n attrs = attrs.split('.');\n }\n const attr = 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 } else if (obj[attr] !== value) {\n obj[attr] = value;\n return true;\n } else {\n return false;\n }\n\n } else {\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 /**\n * Update the native value\n * @param {string} attr The attribute name with dots as delimiter.\n * @param {any} value The new value.\n * @param {(() => void)} [cb] Callback which will be called upon completion.\n */\n updateNativeValue(attr, value, cb) {\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 (e) {\n // ignore\n }\n }\n\n this.setState({ native, changed }, cb);\n }\n }\n\n /**\n * Set the error text to be shown.\n * @param {string | JSX.Element} text\n */\n showError(text) {\n this.setState({ errorText: text });\n }\n\n /**\n * Sets the toast to be shown.\n * @param {string} toast\n */\n showToast(toast) {\n this.setState({ toast });\n }\n\n /**\n * Renders this component.\n * @returns {JSX.Element} The JSX element.\n */\n render() {\n if (!this.state.loaded) {\n return <Loader theme={this.state.themeType}/>;\n }\n\n return <div className=\"App\">\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n </div>;\n }\n}\n\nGenericApp.propTypes = {\n adapterName: PropTypes.string, // (optional) name of adapter\n onThemeChange: PropTypes.func, // (optional) called by theme change\n socket: PropTypes.object, // (optional) socket information (host, port)\n encryptedFields: PropTypes.array, // (optional) list of native attributes, that must be encrypted\n bottomButtons: PropTypes.bool, // If the bottom buttons (Save/Close) must be shown\n Connection: PropTypes.object, // If the bottom buttons (Save/Close) must be shown\n};\n\nexport default GenericApp;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GenericApp.js","names":["cssStyle","window","localStorage","getItem","setItem","GenericApp","props","settings","ConnectionClass","Connection","document","getElementById","style","createElement","setAttribute","innerHTML","head","appendChild","isWeb","io","location","port","SocketClient","e","id","obj","socket","systemLang","common","language","I18n","setLanguage","_systemConfig","expertMode","setState","getExpertMode","message","data","newThemeName","Utils","getThemeName","setThemeName","theme","createTheme","themeName","themeType","getThemeType","onThemeChange","onThemeChanged","onToggleExpertMode","console","warn","JSON","stringify","resizeTimer","clearTimeout","setTimeout","width","getWidth","printPrompt","query","search","replace","args","trim","split","filter","t","forEach","b","parts","length","instance","undefined","parseInt","slice","tmp","pathname","adapterName","instanceId","newReact","Router","getLocation","tab","_localStorage","themeInstance","state","selectedTab","selectedTabNum","errorText","changed","connected","loaded","isConfigurationError","toast","bottomButtons","confirmClose","translations","require","Object","keys","lang","assign","setTranslations","savedNative","encryptedFields","sentryDSN","name","doNotLoadAllObjects","onProgress","progress","PROGRESS","CONNECTING","READY","onReady","objects","scripts","subscribeObject","onSystemConfigChanged","then","getSystemConfig","_secret","secret","getObject","instanceObj","waitPromise","sentryEnabled","diag","version","disableDataReporting","host","sentryStarted","Sentry","init","dsn","release","integrations","SentryIntegrations","Dedupe","sentryInited","uuidObj","uuid","configureScope","scope","setUser","Promise","resolve","onPrepareLoad","encryptedNative","parse","onConnectionReady","onError","err","error","showError","addEventListener","onResize","onReceiveMessage","removeEventListener","palette","mode","sessionStorage","value","result","i","String","fromCharCode","charCodeAt","selectTab","index","attr","encrypt","decrypt","includes","push","_socket","emit","doc","rows","item","webExtendable","map","reject","ip","_host","IPs4","address","family","IPs6","hardware","networkInterfaces","eth","inter","isClose","oldObj","_oldObj","a","hasOwnProperty","onPrepareSave","setObject","globalThis","parent","postMessage","onClose","vertical","horizontal","classes","close","native","isChanged","newNative","getIsChanged","onSave","isYes","attrs","shift","Error","_updateNativeValue","cb","text","renderError","renderToast","renderSaveCloseButtons","SIZES","xs","sm","md","lg","xl","innerWidth","reverse","widthComputed","find","key","$iframeDialog","propTypes","PropTypes","string","func","object","array","bool"],"sources":["GenericApp.js"],"sourcesContent":["/**\n * Copyright 2018-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\nimport React from 'react';\nimport Connection, { PROGRESS } from './Connection';\nimport PropTypes from 'prop-types';\nimport * as Sentry from '@sentry/browser';\nimport * as SentryIntegrations from '@sentry/integrations';\n\nimport DialogError from './Dialogs/Error';\nimport Snackbar from '@mui/material/Snackbar';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconClose from '@mui/icons-material/Close';\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 ConfirmDialog from './Dialogs/Confirm';\nimport I18n from './i18n';\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\nif (!window.localStorage) {\n window.localStorage = {\n getItem: () => null,\n setItem: () => null,\n };\n}\n\n/**\n * @extends {Router<import('./types').GenericAppProps, import('./types').GenericAppState>}\n */\nclass GenericApp extends Router {\n /**\n * @param {import('./types').GenericAppProps} props\n * @param {import('./types').GenericAppSettings | undefined} settings\n */\n constructor(props, settings) {\n const ConnectionClass = 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 (!ConnectionClass.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 (e) {\n // ignore\n }\n }\n\n super(props);\n\n printPrompt();\n\n let query = (window.location.search || '').replace(/^\\?/, '').replace(/#.*$/, '');\n let args = {};\n query.trim().split('&').filter(t => t.trim()).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 = args.instance !== undefined ? parseInt(args.instance, 10) || 0 : (parseInt(window.location.search.slice(1), 10) || 0);\n // extract adapter name from URL\n const tmp = window.location.pathname.split('/');\n this.adapterName = 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 = location.tab || (window._localStorage || window.localStorage).getItem(`${this.adapterName}-adapter`) || '';\n\n const themeInstance = this.createTheme();\n\n this.state = {\n selectedTab: (window._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 && props.bottomButtons) === false ? false : true),\n width: GenericApp.getWidth(),\n confirmClose: false,\n };\n\n // init translations\n const translations = {\n 'en': require('./i18n/en.json'),\n 'de': require('./i18n/de.json'),\n 'ru': require('./i18n/ru.json'),\n 'pt': require('./i18n/pt.json'),\n 'nl': require('./i18n/nl.json'),\n 'fr': require('./i18n/fr.json'),\n 'it': require('./i18n/it.json'),\n 'es': require('./i18n/es.json'),\n 'pl': require('./i18n/pl.json'),\n 'uk': require('./i18n/uk.json'),\n 'zh-cn': require('./i18n/zh-cn.json'),\n };\n\n // merge together\n if (settings && settings.translations) {\n Object.keys(settings.translations).forEach(lang => translations[lang] = Object.assign(translations[lang], settings.translations[lang]));\n } else if (props.translations) {\n Object.keys(props.translations).forEach(lang => translations[lang] = Object.assign(translations[lang], props.translations[lang]));\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 this.socket = new ConnectionClass({\n ...(props?.socket || settings?.socket),\n name: this.adapterName,\n doNotLoadAllObjects: settings?.doNotLoadAllObjects,\n onProgress: 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.subscribeObject('system.config', this.onSystemConfigChanged)\n .then(() => this.getSystemConfig())\n .then(obj => {\n this._secret = (typeof obj !== 'undefined' && obj.native && obj.native.secret) || 'Zgfr56gFe87jJOM';\n this._systemConfig = obj?.common || {};\n return this.socket.getObject(this.instanceId);\n })\n .then(instanceObj => {\n let waitPromise;\n\n const sentryEnabled =\n this._systemConfig.diag !== 'none' &&\n instanceObj &&\n instanceObj.common &&\n instanceObj.common.name &&\n instanceObj.common.version &&\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: [\n new SentryIntegrations.Dedupe()\n ]\n });\n }\n\n // read UUID and init sentry with it.\n // for backward compatibility it will be processed separately from 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')\n .then(uuidObj => {\n if (uuidObj && uuidObj.native && uuidObj.native.uuid) {\n Sentry.configureScope(scope =>\n scope.setUser({id: uuidObj.native.uuid}));\n }\n });\n }\n\n waitPromise = waitPromise || Promise.resolve();\n\n waitPromise\n .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({ native: instanceObj.native, loaded: true, expertMode: this.getExpertMode() }, () =>\n this.onConnectionReady && this.onConnectionReady());\n } else {\n console.warn('Cannot load instance settings');\n this.setState({ native: {}, loaded: true, expertMode: this.getExpertMode()},\n () => this.onConnectionReady && this.onConnectionReady());\n }\n });\n });\n },\n onError: err => {\n console.error(err);\n this.showError(err);\n }\n });\n }\n\n onSystemConfigChanged = (id, obj) => {\n if (obj && id === 'system.config') {\n if (this.socket.systemLang !== obj?.common.language) {\n this.socket.systemLang = obj?.common.language || 'en';\n I18n.setLanguage(this.socket.systemLang);\n }\n\n if (this._systemConfig.expertMode !== !!obj?.common?.expertMode) {\n this._systemConfig = obj?.common || {};\n this.setState({ expertMode: this.getExpertMode() });\n } else {\n this._systemConfig = obj?.common || {};\n }\n }\n }\n\n /**\n * Called immediately after a component is mounted. Setting state here will trigger re-rendering.\n */\n componentDidMount() {\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() {\n window.removeEventListener('resize', this.onResize, true);\n window.removeEventListener('message', this.onReceiveMessage, false);\n super.componentWillUnmount();\n }\n\n onReceiveMessage = message => {\n if (message?.data) {\n if (message.data === 'updateTheme') {\n const newThemeName = Utils.getThemeName()\n Utils.setThemeName(Utils.getThemeName());\n\n const theme = this.createTheme(newThemeName);\n\n this.setState({\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme)\n }, () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n });\n } else if (message.data === 'updateExpertMode') {\n this.onToggleExpertMode && this.onToggleExpertMode(this.getExpertMode());\n } else {\n console.warn('Received unknown message: ' + JSON.stringify(message.data));\n }\n }\n };\n\n /**\n * @private\n */\n onResize = () => {\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 * @returns {import('./types').Width}\n */\n static getWidth() {\n /**\n * innerWidth |xs sm md lg xl\n * |-------|-------|-------|-------|------>\n * width | xs | sm | md | lg | xl\n */\n\n const SIZES = {\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]);\n\n return widthComputed || 'xs';\n }\n\n /**\n * Get a theme\n * @param {string} name Theme name\n * @returns {import('./types').Theme}\n */\n createTheme(name = '') {\n return theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n * @param {import('./types').Theme} theme Theme\n * @returns {string} Theme name\n */\n getThemeName(theme) {\n return theme.name;\n }\n\n /**\n * Get the theme type\n * @param {import('./types').Theme} theme Theme\n * @returns {string} Theme type\n */\n getThemeType(theme) {\n return theme.palette.mode;\n }\n\n /**\n * Changes the current theme\n */\n toggleTheme() {\n const themeName = this.state.themeName;\n\n // dark => blue => colored => light => dark\n const newThemeName = themeName === 'dark' ? 'blue' :\n (themeName === 'blue' ? 'colored' :\n (themeName === 'colored' ? 'light' : 'dark'));\n\n Utils.setThemeName(newThemeName);\n\n const theme = this.createTheme(newThemeName);\n\n this.setState({\n theme,\n themeName: this.getThemeName(theme),\n themeType: this.getThemeType(theme)\n }, () => {\n this.props.onThemeChange && this.props.onThemeChange(newThemeName);\n this.onThemeChanged && this.onThemeChanged(newThemeName);\n });\n }\n\n /**\n * Gets the system configuration.\n * @returns {Promise<ioBroker.OtherObject>}\n */\n getSystemConfig() {\n return this.socket.getSystemConfig();\n }\n\n /**\n * Get current expert mode\n * @returns {boolean}\n */\n getExpertMode() {\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 onConnectionReady() {\n }\n\n /**\n * Encrypts a string.\n * @param {string} value\n * @returns {string}\n */\n encrypt(value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n }\n\n /**\n * Decrypts a string.\n * @param {string} value\n * @returns {string}\n */\n decrypt(value) {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(this._secret[i % this._secret.length].charCodeAt(0) ^ value.charCodeAt(i));\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() {\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 * @param {string} tab\n * @param {number} [index]\n */\n selectTab(tab, index) {\n (window._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 * @param {Record<string, any>} settings\n */\n onPrepareSave(settings) {\n // here you can encode values\n this.encryptedFields && 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 * @param {Record<string, any>} settings\n * @param {string[]} encryptedNative optional list of fields to be decrypted\n */\n onPrepareLoad(settings, encryptedNative) {\n // here you can encode values\n this.encryptedFields && this.encryptedFields.forEach(attr => {\n if (settings[attr]) {\n settings[attr] = this.decrypt(settings[attr]);\n }\n });\n encryptedNative && 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 * @returns {Promise<any[]>}\n */\n getExtendableInstances() {\n return new Promise(resolve => {\n this.socket._socket.emit('getObjectView', 'system', 'instance', null, (err, doc) => {\n if (err) {\n resolve([]);\n } else {\n resolve(doc.rows\n .filter(item => item.value.common.webExtendable)\n .map(item => item.value)\n );\n }\n });\n });\n }\n\n /**\n * Gets the IP addresses of the given host.\n * @param {string} host\n */\n getIpAddresses(host) {\n return new Promise((resolve, reject) => {\n this.socket._socket.emit('getHostByIp', host || this.common.host, (ip, _host) => {\n const IPs4 = [{ name: `[IPv4] 0.0.0.0 - ${I18n.t('ra_Listen on all IPs')}`, address: '0.0.0.0', family: 'ipv4' }];\n const IPs6 = [{ name: '[IPv6] ::', address: '::', family: 'ipv6' }];\n if (_host) {\n host = _host;\n if (host.native.hardware && host.native.hardware.networkInterfaces) {\n Object.keys(host.native.hardware.networkInterfaces).forEach(eth =>\n host.native.hardware.networkInterfaces[eth].forEach(inter => {\n if (inter.family !== 'IPv6') {\n IPs4.push({ name: `[${inter.family}] ${inter.address} - ${eth}`, address: inter.address, family: 'ipv4' });\n } else {\n IPs6.push({ name: `[${inter.family}] ${inter.address} - ${eth}`, address: inter.address, family: 'ipv6' });\n }\n }));\n }\n IPs6.forEach(ip => IPs4.push(ip));\n }\n resolve(IPs4);\n });\n });\n }\n\n /**\n * Saves the settings to the server.\n * @param {boolean} isClose True if the user is closing the dialog.\n */\n onSave(isClose) {\n let oldObj;\n if (this.state.isConfigurationError) {\n this.setState({ errorText: this.state.isConfigurationError });\n return;\n }\n\n this.socket.getObject(this.instanceId)\n .then(_oldObj => {\n oldObj = _oldObj || {};\n\n for (const a in this.state.native) {\n if (this.state.native.hasOwnProperty(a)) {\n if (this.state.native[a] === null) {\n oldObj.native[a] = null;\n } else\n 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.common[b] = null;\n } else\n if (this.state.common[b] !== undefined) {\n oldObj.common[b] = JSON.parse(JSON.stringify(this.state.common[b]));\n } else {\n delete oldObj.common[b];\n }\n }\n }\n\n if (this.onPrepareSave(oldObj.native) !== false) {\n return this.socket.setObject(this.instanceId, oldObj);\n } else {\n return Promise.reject('Invalid configuration');\n }\n })\n .then(() => {\n this.savedNative = oldObj.native;\n globalThis.changed = false;\n try {\n window.parent.postMessage('nochange', '*');\n } catch (e) {\n // ignore\n }\n\n this.setState({ changed: false });\n isClose && GenericApp.onClose();\n })\n .catch(e => {\n console.error(`Cannot save configuration: ${e}`);\n });\n }\n\n /**\n * Renders the toast.\n * @returns {JSX.Element | null} The JSX element.\n */\n renderToast() {\n if (!this.state.toast) {\n return null;\n }\n\n return <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={true}\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 <IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n /**\n * Closes the dialog.\n * @private\n */\n static onClose() {\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 (e) {\n window.parent.postMessage('close', '*');\n }\n }\n }\n\n /**\n * Renders the error dialog.\n * @returns {JSX.Element | null} The JSX element.\n */\n renderError() {\n if (!this.state.errorText) {\n return null;\n } else {\n return <DialogError text={this.state.errorText} onClose={() => this.setState({ errorText: '' })}/>;\n }\n }\n\n /**\n * Checks if the configuration has changed.\n * @param {Record<string, any>} [native] the new state\n */\n getIsChanged(native) {\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 * @param {Record<string, any>} newNative The new configuration object.\n */\n onLoadConfig(newNative) {\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 * @param {string} errorText\n */\n setConfigurationError(errorText) {\n if (this.state.isConfigurationError !== errorText) {\n this.setState({ isConfigurationError: errorText });\n }\n }\n\n /**\n * Renders the save and close buttons.\n * @returns {JSX.Element | undefined} The JSX element.\n */\n renderSaveCloseButtons() {\n if (!this.state.confirmClose && !this.state.bottomButtons) {\n return null;\n }\n\n return <>\n {this.state.bottomButtons ? <SaveCloseButtons\n theme={this.state.theme}\n newReact={this.newReact}\n noTextOnButtons={this.state.width === 'xs' || this.state.width === 'sm' || this.state.width === 'md'}\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 /> : null}\n {this.state.confirmClose ? <ConfirmDialog\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 =>\n this.setState({ confirmClose: false }, () =>\n isYes && GenericApp.onClose())}\n /> : null}\n </>;\n }\n\n /**\n * @private\n * @param {Record<string, any>} obj\n * @param {any} attrs\n * @param {any} value\n * @returns {boolean | undefined}\n */\n _updateNativeValue(obj, attrs, value) {\n if (typeof attrs !== 'object') {\n attrs = attrs.split('.');\n }\n const attr = 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 } else if (obj[attr] !== value) {\n obj[attr] = value;\n return true;\n } else {\n return false;\n }\n\n } else {\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 /**\n * Update the native value\n * @param {string} attr The attribute name with dots as delimiter.\n * @param {any} value The new value.\n * @param {(() => void)} [cb] Callback which will be called upon completion.\n */\n updateNativeValue(attr, value, cb) {\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 (e) {\n // ignore\n }\n }\n\n this.setState({ native, changed }, cb);\n }\n }\n\n /**\n * Set the error text to be shown.\n * @param {string | JSX.Element} text\n */\n showError(text) {\n this.setState({ errorText: text });\n }\n\n /**\n * Sets the toast to be shown.\n * @param {string} toast\n */\n showToast(toast) {\n this.setState({ toast });\n }\n\n /**\n * Renders this component.\n * @returns {JSX.Element} The JSX element.\n */\n render() {\n if (!this.state.loaded) {\n return <Loader theme={this.state.themeType}/>;\n }\n\n return <div className=\"App\">\n {this.renderError()}\n {this.renderToast()}\n {this.renderSaveCloseButtons()}\n </div>;\n }\n}\n\nGenericApp.propTypes = {\n adapterName: PropTypes.string, // (optional) name of adapter\n onThemeChange: PropTypes.func, // (optional) called by theme change\n socket: PropTypes.object, // (optional) socket information (host, port)\n encryptedFields: PropTypes.array, // (optional) list of native attributes, that must be encrypted\n bottomButtons: PropTypes.bool, // If the bottom buttons (Save/Close) must be shown\n Connection: PropTypes.object, // If the bottom buttons (Save/Close) must be shown\n};\n\nexport default GenericApp;\n"],"mappings":"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"}
|
package/README.md
CHANGED
|
@@ -643,6 +643,12 @@ If you still have questions, try to find an answer [here](https://mui.com/guides
|
|
|
643
643
|
-->
|
|
644
644
|
|
|
645
645
|
## Changelog
|
|
646
|
+
### 3.2.4 (2022-11-03)
|
|
647
|
+
* (bluefox) Added support for alfa channel for `invertColor`
|
|
648
|
+
|
|
649
|
+
### 3.2.3 (2022-10-26)
|
|
650
|
+
* (bluefox) Corrected expert mode for object browser
|
|
651
|
+
|
|
646
652
|
### 3.2.2 (2022-10-25)
|
|
647
653
|
* (bluefox) Added support of prefixes for translations
|
|
648
654
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iobroker/adapter-react-v5",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"description": "React classes to develop admin interfaces for ioBroker with react.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "bluefox",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"homepage": "https://github.com/ioBroker/adapter-react-v5#readme",
|
|
28
28
|
"devDependencies": {},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@emotion/react": "^11.10.
|
|
31
|
-
"@emotion/styled": "^11.10.
|
|
30
|
+
"@emotion/react": "^11.10.5",
|
|
31
|
+
"@emotion/styled": "^11.10.5",
|
|
32
32
|
"@mui/icons-material": "^5.10.9",
|
|
33
|
-
"@mui/material": "^5.10.
|
|
34
|
-
"@mui/styles": "^5.10.
|
|
33
|
+
"@mui/material": "^5.10.12",
|
|
34
|
+
"@mui/styles": "^5.10.10",
|
|
35
35
|
"@mui/x-date-pickers": "5.0.2",
|
|
36
36
|
"react-cropper": "^2.1.8",
|
|
37
37
|
"@sentry/browser": "^7.16.0",
|