iobroker.admin 7.4.8 → 7.4.9

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.
Files changed (30) hide show
  1. package/README.md +5 -5
  2. package/adminWww/asset-manifest.json +15 -15
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/js/{288.23e8413f.chunk.js → 288.18e82468.chunk.js} +2 -2
  5. package/adminWww/static/js/{288.23e8413f.chunk.js.map → 288.18e82468.chunk.js.map} +1 -1
  6. package/adminWww/static/js/4289.a5fc8b2e.chunk.js +2 -0
  7. package/adminWww/static/js/4289.a5fc8b2e.chunk.js.map +1 -0
  8. package/adminWww/static/js/6853.6655ed69.chunk.js +2 -0
  9. package/adminWww/static/js/6853.6655ed69.chunk.js.map +1 -0
  10. package/adminWww/static/js/{7137.7b5ca6b5.chunk.js → 7137.c988b7e1.chunk.js} +2 -2
  11. package/adminWww/static/js/7137.c988b7e1.chunk.js.map +1 -0
  12. package/adminWww/static/js/{7424.223daaa3.chunk.js → 7424.5cf79afc.chunk.js} +2 -2
  13. package/adminWww/static/js/7424.5cf79afc.chunk.js.map +1 -0
  14. package/adminWww/static/js/9823.8a42dea5.chunk.js +3 -0
  15. package/adminWww/static/js/9823.8a42dea5.chunk.js.map +1 -0
  16. package/adminWww/static/js/{main.a833ed54.js → main.dbb63dc9.js} +2 -2
  17. package/adminWww/static/js/{main.a833ed54.js.map → main.dbb63dc9.js.map} +1 -1
  18. package/build-backend/main.js +5 -0
  19. package/build-backend/main.js.map +1 -1
  20. package/io-package.json +14 -14
  21. package/package.json +4 -4
  22. package/adminWww/static/js/4289.cbde8e52.chunk.js +0 -2
  23. package/adminWww/static/js/4289.cbde8e52.chunk.js.map +0 -1
  24. package/adminWww/static/js/6853.ff130602.chunk.js +0 -2
  25. package/adminWww/static/js/6853.ff130602.chunk.js.map +0 -1
  26. package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +0 -1
  27. package/adminWww/static/js/7424.223daaa3.chunk.js.map +0 -1
  28. package/adminWww/static/js/9823.f3f5cd8c.chunk.js +0 -3
  29. package/adminWww/static/js/9823.f3f5cd8c.chunk.js.map +0 -1
  30. /package/adminWww/static/js/{9823.f3f5cd8c.chunk.js.LICENSE.txt → 9823.8a42dea5.chunk.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/7137.7b5ca6b5.chunk.js","mappings":"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Y,GAEhBwgB,WAAY,CACR5gB,UAAW,0CAEf6gB,UAAW,CACP9B,UAAW,UAEf+B,WAAY,CACRz2B,SAAU,IACVkF,UAAW,MAiBnB,MAAMwxB,EAAgB,CAClB,SACA,qBACA,qBACA,iBACA,cACA,cACA,mBACA,qBACA,cACA,oBACA,mBACA,eACA,cACA,mBACA,mBACA,QACA,OACA,WACA,kBACA,aACA,eACA,cACA,YACA,OACA,YACA,kBACA,uBACA,wBACA,yBACA,yBACA,sBACA,wBACA,8BACA,+BACA,8BACA,sBACA,eACA,eACA,gBACA,gBACA,UACA,WACA,YACA,YACA,cACA,eACA,cACA,OACA,QACA,aACA,cACA,mBACA,kBACA,wBACA,kBACA,yBACA,gBACA,4BACA,qBACA,iBACA,mBACA,wBACA,kBACA,oBACA,aACA,cACA,eACA,cACA,eACA,qBACA,OACA,WACA,YACA,gBACA,sBACA,gBACA,cACA,gBACA,cACA,kBACA,oBACA,aACA,iBACA,sBACA,gBACA,qBACA,gBACA,cACA,cACA,aACA,aACA,oBACA,qBACA,aACA,mBACA,eACA,iBACA,eACA,aACA,cACA,cACA,cACA,YACA,YACA,yBACA,gBACA,eACA,oBACA,qBACA,qBACA,sBACA,cACA,eACA,cACA,gBACA,eACA,cACA,gBACA,QACA,SACA,gBACA,cACA,cACA,eACA,mBACA,qBACA,cACA,mBACA,oBACA,oBACA,qBACA,wBACA,oBACA,qBACA,eACA,oBACA,OACA,aACA,WACA,MACA,YACA,YACA,UACA,WACA,QACA,gBACA,cACA,oBACA,mBACA,eACA,gBACA,gBACA,gBACA,kBACA,2BACA,2BACA,uBACA,kCACA,kCACA,iBACA,aACA,aACA,YACA,qBACA,sBACA,qBACA,sBACA,mBACA,mBACA,mBACA,wBACA,mBACA,qBACA,sBACA,iBACA,iBACA,qBACA,qBACA,iBACA,aACA,YACA,iBACA,cACA,0BACA,yBACA,uBACA,sBACA,6BACA,qCACA,iCACA,2BACA,uCACA,4BACA,2BACA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","sources":["components/CustomModal.tsx","components/Object/ObjectCustomEditor.tsx","components/Object/utils.tsx","components/Object/ObjectHistoryData.tsx","components/Object/ObjectChart.tsx","dialogs/ObjectCustomDialog.tsx","components/Object/ObjectBrowserValue.tsx","components/Object/ObjectBrowserEditObject.tsx","components/Object/ObjectBrowserEditRole.tsx","dialogs/ObjectAddNewObject.tsx","dialogs/ObjectEditOfAccessControl.tsx","dialogs/ObjectViewFileDialog.tsx","dialogs/ObjectAliasEditor.tsx","tabs/Objects.tsx"],"sourcesContent":["import React, { useEffect, useState, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n TextField,\n Button,\n InputAdornment,\n type Breakpoint,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface CustomModalProps {\n icon?: React.FC<{ style?: React.CSSProperties }>;\n onClose: () => void;\n children?: JSX.Element | JSX.Element[];\n title?: string;\n titleButtonClose?: string;\n titleButtonApply?: string;\n onApply?: (value: string | number) => void;\n fullWidth?: boolean;\n maxWidth?: Breakpoint;\n applyButton?: boolean;\n disableApplyIfNotChanged?: boolean;\n overflowHidden?: boolean;\n help?: string;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n textInput?: boolean;\n defaultValue?: string | number;\n progress?: boolean;\n disableApply?: boolean;\n theme: IobTheme;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n disableApplyIfNotChanged,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n disableApply,\n theme,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon: React.FC<{ style?: React.CSSProperties }> | null = null;\n\n if (icon) {\n Icon = icon;\n }\n\n const languageButtonActive = Utils.getStyle(theme, styles.languageButtonActive);\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? languageButtonActive : undefined) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n style={{ ...(overflowHidden ? styles.overflowHidden : undefined), ...styles.content, paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"standard\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n slotProps={{\n input: {\n endAdornment: value ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setValue('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {(applyButton === undefined || applyButton) && (\n <Button\n startIcon={<CheckIcon />}\n disabled={disableApply || progress || (disableApplyIfNotChanged && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","import React, { createRef, Component, type RefObject, type JSX } from 'react';\nimport JSON5 from 'json5';\n\nimport {\n LinearProgress,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Paper,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\n// Icons\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';\n\nimport { withWidth, DialogError, DialogConfirm, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport { ConfigGeneric, JsonConfigComponent, type ConfigItemPanel } from '@iobroker/json-config';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport type { BasicComponentProps } from '@/types';\n\nconst styles: Record<string, React.CSSProperties> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n headingIcon: {\n marginRight: 5,\n width: 32,\n height: 32,\n },\n titleEnabled: {\n float: 'right',\n fontSize: 16,\n color: '#7ff57f',\n textTransform: 'uppercase',\n fontWeight: 'bold',\n paddingLeft: 20,\n },\n scrollDiv: {\n width: '100%',\n height: '100%', // `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'auto',\n },\n fullWidth: {\n width: '100%',\n },\n enabledControl: {\n width: 130,\n display: 'inline-block',\n verticalAlign: 'top',\n },\n customControls: {\n width: 'calc(100% - 130px)',\n maxWidth: 800,\n display: 'inline-block',\n verticalAlign: 'top',\n paddingTop: 16,\n },\n\n accordionOdd: {\n // backgroundColor: 'rgba(128, 128, 128, 0.2)'\n },\n accordionEven: {\n backgroundColor: 'rgba(128, 128, 128, 0.1)',\n },\n\n accordionHeaderOdd: {\n backgroundColor: 'rgba(128, 128, 128, 0.2)',\n },\n accordionHeaderEven: {\n backgroundColor: 'rgba(128, 128, 128, 0.3)',\n },\n\n accordionHeaderEnabledOdd: {\n backgroundColor: 'rgba(128, 255, 128, 0.2)',\n },\n accordionHeaderEnabledEven: {\n backgroundColor: 'rgba(128, 255, 128, 0.2)',\n },\n\n enabledVisible: {\n display: 'inline-block',\n },\n enabledInvisible: {\n display: 'none',\n },\n};\n\nconst URL_PREFIX = '.'; // or './' or 'http://localhost:8081' for debug\n\ninterface ObjectCustomEditorProps extends BasicComponentProps {\n objects: Record<string, ioBroker.Object>;\n /** All adapter instances that support custom attribute */\n customsInstances: string[];\n objectIDs: string[];\n registerSaveFunc: (cb?: () => void) => void;\n onProgress: (progress: boolean) => void;\n onError: (err?: boolean) => void;\n data: Record<string, any>;\n originalData: Record<string, any>;\n systemConfig?: ioBroker.SystemConfigObject;\n onChange: (hasChanges?: boolean, update?: boolean) => void;\n reportChangedIds: (changedIds: string[]) => void;\n theme: IobTheme;\n}\n\ninterface ObjectCustomEditorState {\n newValues: Record<string, any>;\n loaded: boolean;\n hasChanges?: string;\n expanded: string[];\n progress?: number;\n maxOids: number;\n confirmed: boolean;\n showConfirmation: boolean;\n error?: boolean;\n systemConfig?: ioBroker.SystemConfigObject;\n}\n\ninterface JsonConfigStorage {\n json?: ConfigItemPanel | null;\n instanceObjs?: Record<string, ioBroker.InstanceObject>;\n disabled?: boolean;\n}\n\nclass ObjectCustomEditor extends Component<ObjectCustomEditorProps, ObjectCustomEditorState> {\n private readonly changedIds: string[];\n\n private readonly scrollDivRef: React.RefObject<HTMLDivElement>;\n\n private readonly jsonConfigs: Record<string, null | JsonConfigStorage>;\n\n private readonly refTemplate: Record<string, RefObject<HTMLDivElement>>;\n\n private readonly customObj: ioBroker.AnyObject;\n\n private commonConfig: Record<string, any> = {};\n\n private cb?: () => void;\n\n private cachedNewValues?: Record<string, any>;\n\n constructor(props: ObjectCustomEditorProps) {\n super(props);\n\n let expanded: string[];\n try {\n expanded = JSON.parse(\n ((window as any)._localStorage || window.localStorage).getItem('App.customsExpanded') || '[]',\n );\n } catch {\n expanded = [];\n }\n\n this.changedIds = [];\n\n this.state = {\n loaded: false,\n expanded,\n newValues: {},\n confirmed: false,\n showConfirmation: false,\n maxOids: 0,\n systemConfig: this.props.systemConfig,\n };\n\n this.scrollDivRef = createRef();\n\n this.jsonConfigs = {};\n\n this.refTemplate = {};\n this.props.customsInstances.map(id => (this.refTemplate[id] = createRef()));\n\n this.customObj =\n this.props.objectIDs.length > 1\n ? ({ common: { custom: {} }, native: {} } as ioBroker.AnyObject)\n : AdminUtils.deepClone(this.props.objects[this.props.objectIDs[0]] || null);\n\n if (this.customObj) {\n void this.loadAllCustoms().then(() => {\n this.commonConfig = this.getCommonConfig();\n this.setState({ loaded: true, newValues: {} });\n });\n }\n }\n\n async componentDidMount(): Promise<void> {\n if (!this.state.systemConfig) {\n this.setState({ systemConfig: await this.props.socket.getCompactSystemConfig() });\n }\n\n if (this.props.registerSaveFunc) {\n this.props.registerSaveFunc(this.onSave);\n }\n }\n\n componentWillUnmount(): void {\n if (this.props.registerSaveFunc) {\n this.props.registerSaveFunc();\n }\n }\n\n async loadAllCustoms(): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const id of this.props.customsInstances) {\n if (id === '_') {\n continue;\n }\n\n const adapter = id.replace(/\\.\\d+$/, '').replace('system.adapter.', '');\n if (this.jsonConfigs[adapter] === undefined) {\n this.jsonConfigs[adapter] = null;\n promises.push(this.getCustomTemplate(adapter));\n }\n }\n\n await Promise.all(promises);\n\n this.props.customsInstances.forEach(id => {\n const adapter = id.replace(/\\.\\d+$/, '').replace('system.adapter.', '');\n if (this.jsonConfigs[adapter]) {\n this.jsonConfigs[adapter].instanceObjs = this.jsonConfigs[adapter].instanceObjs || {};\n this.jsonConfigs[adapter].instanceObjs[id] = {\n _id: id as `system.adapter.${string}.${number}`,\n common: JSON.parse(JSON.stringify(this.props.objects[`system.adapter.${id}`]?.common)),\n native: JSON.parse(JSON.stringify(this.props.objects[`system.adapter.${id}`]?.native)),\n type: 'instance',\n instanceObjects: [],\n objects: [],\n };\n }\n });\n }\n\n async getCustomTemplate(adapter: string): Promise<void> {\n const ad = this.props.objects[`system.adapter.${adapter}`]\n ? AdminUtils.deepClone(this.props.objects[`system.adapter.${adapter}`])\n : null;\n\n if (!ad) {\n console.error(`Cannot find adapter \"${adapter}\"`);\n return;\n }\n AdminUtils.fixAdminUI(ad);\n\n if (ad.common?.adminUI.custom === 'json') {\n try {\n const exist = await this.props.socket.fileExists(`${adapter}.admin`, 'jsonCustom.json5');\n if (exist) {\n await this.props.socket.readFile(`${adapter}.admin`, 'jsonCustom.json5');\n }\n let jsonText: string;\n const json: {\n file: string;\n mimeType: string;\n } = await this.props.socket.readFile(`${adapter}.admin`, 'jsonCustom.json');\n\n if (json.file !== undefined) {\n jsonText = json.file;\n } else {\n // @ts-expect-error deprecated, but still possible\n jsonText = json;\n }\n let jsonSchema: ConfigItemPanel;\n try {\n jsonSchema = JSON5.parse(jsonText);\n this.jsonConfigs[adapter] = this.jsonConfigs[adapter] || {};\n this.jsonConfigs[adapter].json = jsonSchema;\n } catch (e) {\n console.error(`Cannot parse jsonConfig of ${adapter}: ${e}`);\n window.alert(`Cannot parse jsonConfig of ${adapter}: ${e}`);\n }\n\n await JsonConfigComponent.loadI18n(this.props.socket, jsonSchema.i18n, adapter);\n return;\n } catch (e1) {\n console.error(`Cannot load jsonConfig of ${adapter}: ${e1}`);\n window.alert(`Cannot load jsonConfig of ${adapter}: ${e1}`);\n }\n }\n console.error(`Adapter ${adapter} is not yet supported by this version of admin`);\n window.alert(`Adapter ${adapter} is not yet supported by this version of admin`);\n }\n\n // See configGeneric _executeCustom\n _executeCustom(\n func: string | { func: string; alsoDependsOn: string[] },\n data: Record<string, any>,\n customObj: Record<string, any>,\n instanceObj: ioBroker.InstanceObject,\n items: Record<string, any>,\n attr: string,\n processed: string[],\n ): boolean | undefined {\n if (processed.includes(attr)) {\n return undefined;\n }\n processed.push(attr);\n\n let alsoDependsOn: string[] = [];\n let strFunc: string;\n\n if (func && typeof func === 'object') {\n alsoDependsOn = func.alsoDependsOn || [];\n if (typeof alsoDependsOn === 'string') {\n alsoDependsOn = [alsoDependsOn];\n }\n strFunc = func.func;\n } else {\n strFunc = func as string;\n }\n\n alsoDependsOn.forEach(_attr => {\n if (!items[_attr]) {\n console.error(`[JsonConfigComponent] attribute \"${_attr}\" does not exist!`);\n } else if (!items[_attr].defaultFunc) {\n console.error(\n `[JsonConfigComponent] attribute \"${_attr}\" is not required to be includes in \"alsoDependsOn\" while has static value!`,\n );\n } else {\n const result = this._executeCustom(\n items[_attr].defaultFunc,\n data,\n customObj,\n instanceObj,\n items,\n _attr,\n processed,\n );\n if (result !== undefined) {\n data[_attr] = result;\n }\n }\n });\n\n if (!strFunc) {\n data[attr] = items[attr].default === undefined ? null : items[attr].default;\n } else {\n try {\n // eslint-disable-next-line no-new-func\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n strFunc.includes('return') ? strFunc : `return ${strFunc}`,\n );\n data[attr] = f(\n data || this.props.data,\n this.props.originalData,\n this.props.systemConfig,\n instanceObj,\n customObj,\n this.props.socket,\n );\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n console.error(`Cannot execute ${func}: ${e}`);\n data[attr] = !items[attr] || items[attr].default === undefined ? null : items[attr].default;\n }\n }\n\n return data[attr];\n }\n\n static flattenItems(items: Record<string, any>, _result: Record<string, any> = {}): Record<string, any> {\n if (items) {\n Object.keys(items).forEach(attr => {\n if (items[attr].items) {\n ObjectCustomEditor.flattenItems(items[attr].items, _result);\n } else {\n _result[attr] = items[attr];\n }\n });\n }\n\n return _result;\n }\n\n getDefaultValues(instance: string, obj: Record<string, any>): Record<string, any> {\n const defaultValues: Record<string, any> = { enabled: false };\n const adapter = instance.split('.')[0];\n\n if (this.jsonConfigs[adapter] && !this.jsonConfigs[adapter].disabled) {\n const items = ObjectCustomEditor.flattenItems(this.jsonConfigs[adapter].json.items);\n\n if (items) {\n const processed: string[] = [];\n const attrs = Object.keys(items).filter(attr => items[attr]);\n // first init simple defaults\n attrs.forEach(attr => {\n if (!items[attr].defaultFunc && items[attr].default !== undefined) {\n defaultValues[attr] = items[attr].default;\n }\n });\n\n // now init default that must be calculated\n attrs.forEach((attr): void => {\n if (items[attr].defaultFunc) {\n this._executeCustom(\n items[attr].defaultFunc,\n defaultValues,\n obj,\n this.jsonConfigs[adapter].instanceObjs[instance],\n items,\n attr,\n processed,\n );\n }\n });\n }\n }\n\n return defaultValues;\n }\n\n getCommonConfig(): Record<string, any> {\n const ids = this.props.objectIDs || [];\n const objects = this.props.objects;\n\n const commons: Record<string, any> = {};\n\n // calculate common settings\n this.props.customsInstances.forEach(inst => {\n const adapter = inst.split('.')[0];\n if (this.jsonConfigs[adapter] && this.jsonConfigs[adapter].disabled) {\n return;\n }\n commons[inst] = {};\n ids.forEach(id => {\n const customObj = objects[id];\n const custom = customObj?.common?.custom ? customObj.common.custom[inst] || null : null;\n\n if (custom) {\n Object.keys(custom).forEach(_attr => {\n // remove all temporary values\n if (_attr.startsWith('_')) {\n return;\n }\n if (commons[inst][_attr] === undefined) {\n commons[inst][_attr] = custom[_attr];\n } else if (commons[inst][_attr] !== custom[_attr]) {\n // different\n if (!Array.isArray(commons[inst][_attr])) {\n commons[inst][_attr] = [commons[inst][_attr]];\n }\n\n if (!commons[inst][_attr].includes(custom[_attr])) {\n commons[inst][_attr].push(custom[_attr]);\n }\n }\n });\n } else {\n // const adapter = inst.split('.')[0];\n // Calculate defaults for this object\n const _default = this.getDefaultValues(inst, customObj);\n _default.enabled = false;\n\n Object.keys(_default).forEach(_attr => {\n if (_attr.startsWith('_')) {\n return;\n }\n if (commons[inst][_attr] === undefined) {\n commons[inst][_attr] = _default[_attr];\n } else if (commons[inst][_attr] !== _default[_attr]) {\n // different\n if (!Array.isArray(commons[inst][_attr])) {\n commons[inst][_attr] = [commons[inst][_attr]];\n }\n\n if (!commons[inst][_attr].includes(_default[_attr])) {\n commons[inst][_attr].push(_default[_attr]);\n }\n }\n });\n }\n });\n\n // sort all \"different\" arrays\n Object.keys(commons[inst]).forEach(attr => {\n if (Array.isArray(commons[inst][attr])) {\n commons[inst][attr].sort();\n }\n });\n });\n\n return commons;\n }\n\n isChanged(newValues: Record<string, any>): string | undefined {\n newValues = newValues || this.state.newValues;\n return Object.keys(newValues).find(\n instance =>\n newValues[instance] === null ||\n (newValues[instance] && Object.keys(newValues[instance]).find(attr => !attr.startsWith('_'))),\n );\n }\n\n combineNewAndOld(instance: string, ignoreUnderscore = false): Record<string, any> {\n const data = { ...(this.commonConfig[instance] || {}), ...(this.state.newValues[instance] || {}) };\n\n if (ignoreUnderscore) {\n Object.keys(data).forEach(attr => {\n if (attr.startsWith('_')) {\n delete data[attr];\n }\n });\n }\n\n if (this.state.newValues[instance] === null) {\n data.enabled = false;\n }\n return data;\n }\n\n renderOneCustom(\n instance: string,\n instanceObj: ioBroker.InstanceObject,\n customObj: ioBroker.AnyObject,\n i: number,\n ): JSX.Element | null {\n const adapter = instance.split('.')[0];\n\n const icon = `${URL_PREFIX}/adapter/${adapter}/${this.props.objects[`system.adapter.${adapter}`].common.icon}`;\n // could be: true, false, [true, false]\n const enabled =\n this.state.newValues[instance] !== undefined &&\n (!this.state.newValues[instance] || this.state.newValues[instance].enabled !== undefined)\n ? !!(this.state.newValues[instance] && this.state.newValues[instance].enabled)\n : this.state.newValues[instance] === null\n ? false\n : this.commonConfig[instance].enabled;\n const isIndeterminate =\n Array.isArray(enabled) &&\n (!this.state.newValues[instance] || this.state.newValues[instance].enabled === undefined);\n\n const disabled = this.jsonConfigs[adapter]?.json?.disabled;\n\n const data = this.combineNewAndOld(instance);\n\n if (disabled && this.jsonConfigs[adapter].json.hidden === true) {\n return null;\n }\n\n if (typeof this.jsonConfigs[adapter].json.hidden === 'string') {\n // evaluate function\n if (\n this._executeCustom(\n this.jsonConfigs[adapter].json.hidden as string,\n data,\n customObj,\n instanceObj,\n this.jsonConfigs[adapter].json.items,\n 'enabled',\n [],\n )\n ) {\n return null;\n }\n }\n\n let help = null;\n if (disabled && this.jsonConfigs[adapter].json.help) {\n if (typeof this.jsonConfigs[adapter].json.help === 'object') {\n help =\n (this.jsonConfigs[adapter].json.help as Record<ioBroker.Languages, string>)[this.props.lang] ||\n (this.jsonConfigs[adapter].json.help as Record<ioBroker.Languages, string>).en;\n } else {\n help = this.props.t(this.jsonConfigs[adapter].json.help as string);\n }\n }\n\n return (\n <Accordion\n key={instance}\n id={`Accordion_${instance}`}\n style={i % 2 ? styles.accordionOdd : styles.accordionEven}\n expanded={this.state.expanded.includes(instance)}\n ref={this.refTemplate[instance]}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(instance);\n if (pos === -1) {\n expanded.push(instance);\n } else {\n expanded.splice(pos, 1);\n }\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.customsExpanded',\n JSON.stringify(expanded),\n );\n if (pos === -1) {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.customsLastExpanded',\n instance,\n );\n }\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n data-id={instance}\n style={\n i % 2\n ? enabled\n ? styles.accordionHeaderEnabledOdd\n : styles.accordionHeaderOdd\n : enabled\n ? styles.accordionHeaderEnabledEven\n : styles.accordionHeaderEven\n }\n >\n <img\n src={icon}\n style={styles.headingIcon}\n alt=\"\"\n />\n <Typography style={styles.heading}>{this.props.t('Settings %s', instance)}</Typography>\n <div\n className=\"titleEnabled\"\n style={{\n ...styles.titleEnabled,\n ...(enabled ? styles.enabledVisible : styles.enabledInvisible),\n }}\n >\n {this.props.t('Enabled')}\n </div>\n </AccordionSummary>\n <AccordionDetails>\n <div style={styles.enabledControl}>\n <FormControlLabel\n style={styles.formControl}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!enabled}\n disabled={!!disabled}\n onChange={e => {\n this.cachedNewValues = this.cachedNewValues || this.state.newValues;\n const newValues = AdminUtils.deepClone(this.cachedNewValues);\n\n newValues[instance] = newValues[instance] || {};\n if (isIndeterminate || e.target.checked) {\n newValues[instance].enabled = true;\n } else if (enabled) {\n if (this.commonConfig[instance].enabled) {\n newValues[instance] = null;\n } else {\n delete newValues[instance];\n }\n } else {\n delete newValues[instance];\n }\n this.cachedNewValues = newValues;\n this.setState({ newValues, hasChanges: this.isChanged(newValues) }, () => {\n this.cachedNewValues = undefined;\n if (this.props.onChange) {\n this.props.onChange(!!this.state.hasChanges);\n }\n });\n }}\n />\n }\n label={this.props.t('Enabled')}\n />\n </div>\n <div style={styles.customControls}>\n {!disabled && (enabled || isIndeterminate) && this.state.systemConfig ? (\n <JsonConfigComponent\n instanceObj={instanceObj}\n customObj={customObj as ioBroker.Object}\n custom\n adapterName={adapter}\n instance={parseInt(instance?.split('.').pop() ?? '0', 10) || 0}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n multiEdit={this.props.objectIDs.length > 1}\n schema={this.jsonConfigs[adapter].json}\n data={data}\n isFloatComma={this.props.systemConfig.common.isFloatComma}\n dateFormat={this.props.systemConfig.common.dateFormat}\n onError={(error: boolean) =>\n this.setState({ error }, () => this.props.onError && this.props.onError(error))\n }\n onValueChange={(attr: string, value: any) => {\n this.cachedNewValues = this.cachedNewValues || this.state.newValues;\n console.log(`${attr} => ${value}`);\n const newValues = AdminUtils.deepClone(this.cachedNewValues);\n newValues[instance] = newValues[instance] || {};\n if (\n JSON.stringify(ConfigGeneric.getValue(this.commonConfig?.[instance], attr)) ===\n JSON.stringify(value)\n ) {\n ConfigGeneric.setValue(newValues[instance], attr, null);\n if (!Object.keys(newValues[instance]).length) {\n delete newValues[instance];\n }\n } else {\n ConfigGeneric.setValue(newValues[instance], attr, value);\n }\n this.cachedNewValues = newValues;\n this.setState({ newValues, hasChanges: this.isChanged(newValues) }, () => {\n this.cachedNewValues = undefined;\n if (this.props.onChange) {\n this.props.onChange(!!this.state.hasChanges);\n }\n });\n }}\n />\n ) : null}\n\n {help}\n </div>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderErrorMessage(): JSX.Element {\n return (\n !!this.state.error && (\n <DialogError\n title={this.props.t('Error')}\n text={this.state.error ? 'Error' : ''}\n onClose={() => this.setState({ error: false })}\n />\n )\n );\n }\n\n getObject(\n objects: Record<string, ioBroker.AnyObject>,\n oldObjects: Record<string, ioBroker.AnyObject>,\n id: string,\n ): Record<string, any> {\n if (objects[id]) {\n return Promise.resolve(objects[id]);\n }\n return this.props.socket.getObject(id).then((obj: ioBroker.AnyObject) => {\n oldObjects[id] = AdminUtils.deepClone(obj);\n objects[id] = obj;\n return obj;\n });\n }\n\n saveOneState(ids: string[], cb: () => void, _objects?: any, _oldObjects?: any): void {\n _objects = _objects || {};\n _oldObjects = _oldObjects || {};\n\n if (!ids?.length) {\n // save all objects\n const keys: string[] = Object.keys(_objects);\n if (!keys.length) {\n this.setState({ maxOids: 0 }, () => this.props.onProgress(false));\n if (cb) {\n cb();\n }\n } else {\n this.setState({\n progress: Math.round(((this.state.maxOids - keys.length) / this.state.maxOids) * 50) + 50,\n });\n const id = keys.shift();\n if (JSON.stringify(_objects[id].common) !== JSON.stringify(_oldObjects[id].common)) {\n if (!this.changedIds.includes(id)) {\n this.changedIds.push(id);\n }\n\n void this.props.socket.setObject(id, _objects[id]).then(async () => {\n delete _objects[id];\n delete _oldObjects[id];\n this.props.objects[id] = await this.props.socket.getObject(id);\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n });\n return;\n }\n delete _objects[id];\n delete _oldObjects[id];\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n }\n } else {\n const maxOids = this.state.maxOids || ids.length;\n\n if (this.state.maxOids === null) {\n this.setState({ maxOids: ids.length }, () => this.props.onProgress(true));\n }\n\n // 0 - 50\n this.setState({ progress: Math.round(((maxOids - ids.length) / maxOids) * 50) });\n\n const id = ids.shift();\n this.getObject(_objects, _oldObjects, id).then((obj: Record<string, any>) => {\n if (!obj) {\n window.alert(`Invalid object ${id}`);\n return;\n }\n\n // remove all disabled commons\n if (obj.common?.custom) {\n Object.keys(obj.common.custom).forEach(ins => {\n if (!obj.common.custom[ins] || !obj.common.custom[ins].enabled) {\n obj.common.custom[ins] = null;\n }\n });\n }\n\n const instances = Object.keys(this.state.newValues);\n\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n // const adapter = instance.split('.')[0];\n const newValues = this.combineNewAndOld(instance, true);\n\n if (newValues.enabled === false) {\n if (obj.common?.custom?.[instance]) {\n obj.common.custom[instance] = null; // here must be null and not deleted, so controller can remove it\n }\n } else if (newValues.enabled) {\n obj.common = obj.common || {};\n if (Array.isArray(newValues.enabled)) {\n if (\n !obj.common.custom ||\n !obj.common.custom[instance] ||\n !obj.common.custom[instance].enabled\n ) {\n // leave this object disabled\n if (obj.common.custom && obj.common.custom[instance]) {\n obj.common.custom[instance] = null;\n }\n continue; // instance disabled\n }\n }\n\n obj.common.custom = obj.common.custom || {};\n\n if (!obj.common.custom[instance] || !obj.common.custom[instance].enabled) {\n // provide defaults\n const _default = this.getDefaultValues(instance, obj);\n obj.common.custom[instance] = JSON.parse(JSON.stringify(_default || {}));\n // remove all temporary values\n Object.keys(obj.common.custom[instance]).forEach(attr => {\n if (attr.startsWith('_')) {\n delete obj.common.custom[instance][attr];\n }\n });\n }\n\n const isMultiEdit = this.props.objectIDs.length > 1;\n\n obj.common.custom[instance].enabled = true;\n\n Object.keys(newValues).forEach(attr => {\n // if not different\n if (!attr.startsWith('_')) {\n // if we have an array, it is still the data of multiple different fields (multiEdit) do not override issue#2359\n if (Array.isArray(newValues[attr]) && isMultiEdit) {\n return;\n }\n\n obj.common.custom[instance][attr] = newValues[attr];\n }\n });\n }\n }\n\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n });\n }\n }\n\n renderConfirmationDialog(): JSX.Element | null {\n if (!this.state.showConfirmation) {\n return null;\n }\n return (\n <DialogConfirm\n text={this.props.t(\n 'The changes will be applied to %s states. Are you sure?',\n this.props.objectIDs.length.toString(),\n )}\n ok={this.props.t('Yes')}\n onClose={result => {\n if (result) {\n this.setState({ showConfirmation: false, confirmed: true }, () => {\n const cb = this.cb;\n this.cb = undefined;\n this.onSave(cb);\n });\n } else {\n this.cb = undefined;\n this.setState({ showConfirmation: false });\n }\n }}\n />\n );\n }\n\n onSave = (cb?: () => void): void => {\n if (this.props.objectIDs.length > 10 && !this.state.confirmed) {\n this.cb = cb;\n this.setState({ showConfirmation: true });\n } else {\n this.saveOneState([...this.props.objectIDs], () => {\n this.cachedNewValues = {};\n this.commonConfig = this.getCommonConfig();\n this.setState({ confirmed: false, hasChanges: undefined, newValues: {} }, () => {\n this.props.reportChangedIds(this.changedIds);\n this.props.onChange(false, true);\n if (cb) {\n setTimeout(() => cb(), 100);\n }\n });\n });\n }\n };\n\n render(): JSX.Element {\n if (this.customObj === null) {\n return <div style={{ color: '#F55', fontSize: 32 }}>{this.props.t('Object does not exist!')}</div>;\n }\n if (!this.state.loaded) {\n return <LinearProgress />;\n }\n let index = 0;\n\n return (\n <Paper style={styles.paper}>\n {this.state.maxOids > 1 && (\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={this.state.progress}\n />\n )}\n <div\n style={styles.scrollDiv}\n ref={this.scrollDivRef}\n >\n {this.state.maxOids === 0 &&\n Object.values(this.jsonConfigs).map(jsonConfig => {\n if (jsonConfig) {\n return Object.keys(jsonConfig.instanceObjs).map(instance =>\n this.renderOneCustom(\n instance,\n jsonConfig.instanceObjs[instance],\n this.customObj,\n index++,\n ),\n );\n }\n return null;\n })}\n </div>\n {this.renderErrorMessage()}\n {this.renderConfirmationDialog()}\n </Paper>\n );\n }\n}\n\nexport default withWidth()(ObjectCustomEditor);\n","import {\n fr as frLocale,\n ru as ruLocale,\n enUS as enLocale,\n es as esLocale,\n pl as plLocale,\n pt as ptLocale,\n it as itLocale,\n zhCN as cnLocale,\n ptBR as brLocale,\n de as deLocale,\n uk as ukLocale,\n nl as nlLocale,\n} from 'date-fns/locale';\n\nexport const localeMap = {\n en: enLocale,\n fr: frLocale,\n ru: ruLocale,\n de: deLocale,\n es: esLocale,\n br: brLocale,\n nl: nlLocale,\n it: itLocale,\n pt: ptLocale,\n pl: plLocale,\n uk: ukLocale,\n 'zh-cn': cnLocale,\n};\n","import React, { Component, type JSX } from 'react';\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { LocalizationProvider, TimePicker, DatePicker } from '@mui/x-date-pickers';\n\nimport {\n Paper,\n LinearProgress,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n Toolbar,\n IconButton,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Button,\n FormControlLabel,\n Checkbox,\n TableHead,\n TableRow,\n TableCell,\n TextField,\n TableBody,\n TableContainer,\n Box,\n} from '@mui/material';\n\n// icons\nimport { FaPlusSquare as InsertIcon, FaDownload as ExportIcon } from 'react-icons/fa';\nimport { Edit as IconEdit, Delete as IconDelete, Close as IconClose } from '@mui/icons-material';\n\nimport {\n Utils,\n withWidth,\n TableResize,\n type AdminConnection,\n type IobTheme,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { localeMap } from './utils';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n tableDiv: (theme: IobTheme) => ({\n height: `calc(100% - ${parseInt(theme.mixins.toolbar.minHeight as string, 10) + 8}px)`,\n overflow: 'hidden',\n width: '100%',\n }),\n container: {\n height: '100%',\n },\n table: (theme: IobTheme) => ({\n // tableLayout: 'fixed',\n minWidth: 960,\n width: '100%',\n '& td:nth-of-type(5)': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n '& tr:nth-child(even)': {\n backgroundColor: theme.palette.mode === 'dark' ? '#383838' : '#b2b2b2',\n },\n }),\n row: {\n userSelect: 'none',\n /* '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n }, */\n position: 'relative',\n '&:hover': {\n opacity: 0.7,\n },\n '& td': {\n position: 'relative',\n },\n },\n updatedRow: {\n animation: 'updated 1s',\n },\n rowInterpolated: {\n opacity: 0.5,\n },\n selectHistoryControl: {\n width: 130,\n },\n selectRelativeTime: {\n marginLeft: 10,\n width: 200,\n },\n notAliveInstance: {\n opacity: 0.5,\n },\n customRange: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n rowSelected: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n '& td': {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.main,\n },\n }),\n rowFocused: (theme: IobTheme) => ({\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n m: '3px',\n border: `1px dotted ${theme.palette.action.active}`,\n }),\n grow: {\n flexGrow: 1,\n },\n msInput: {\n width: 50,\n pt: '10px',\n ml: '5px',\n '& label': {\n mt: '15px',\n },\n },\n cellAckTrue: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#66ff7f' : '#04a821',\n }),\n cellAckFalse: {\n color: '#FF6666',\n },\n toolbarDate: {\n width: 124,\n mt: '9px',\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTime: {\n width: 84,\n mt: '9px',\n // marginLeft: 8,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTimeGrid: {\n position: 'relative',\n marginLeft: 8,\n paddingLeft: 8,\n paddingRight: 8,\n paddingTop: 4,\n paddingBottom: 4,\n border: '1px dotted #AAAAAA',\n borderRadius: 8,\n display: 'flex',\n },\n toolbarTimeLabel: {\n position: 'absolute',\n padding: 8,\n fontSize: '0.8rem',\n left: 2,\n top: -9,\n },\n noLoadingProgress: {\n width: '100%',\n height: 4,\n },\n\n colValue: {},\n colAck: {\n // width: 50,\n },\n colFrom: {\n // width: 150,\n },\n colLastChange: {\n // width: 200,\n },\n colTs: {\n // width: 200,\n },\n};\n\ntype SupportedFeatures = ('insert' | 'update' | 'delete')[];\n\ninterface ObjectHistoryDataProps {\n t: Translate;\n lang: ioBroker.Languages;\n expertMode: boolean;\n socket: AdminConnection;\n obj: ioBroker.StateObject;\n customsInstances: string[];\n objects: Record<string, ioBroker.Object>;\n isFloatComma: boolean;\n}\n\ninterface HistoryItem {\n ts: number;\n e?: boolean;\n ack?: boolean;\n val?: string | number | boolean | null;\n noData?: boolean;\n noDataForPeriod?: boolean;\n i?: boolean;\n from?: string;\n lc?: number;\n}\n\ninterface ObjectHistoryDataEdit {\n val?: number | string | boolean;\n ack?: boolean;\n q?: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];\n date?: Date;\n time?: Date;\n ms?: number;\n}\n\ninterface ObjectHistoryDataState {\n areYouSure?: boolean;\n historyInstance: string;\n relativeRange: string | number;\n start: number;\n end: number;\n values: HistoryItem[] | null;\n selected: number[];\n lastSelected: number | null;\n lastSelectedColumn: string | null;\n updateOpened: boolean;\n insertOpened: boolean;\n historyInstances: null | { id: string; alive: boolean }[];\n ampm: boolean;\n lcVisible: boolean;\n ackVisible: boolean;\n fromVisible: boolean;\n /** 'insert', 'update', 'delete' */\n supportedFeatures: SupportedFeatures;\n edit: ObjectHistoryDataEdit;\n loading?: boolean;\n suppressMessage?: number | boolean;\n}\n\nclass ObjectHistoryData extends Component<ObjectHistoryDataProps, ObjectHistoryDataState> {\n private readonly adminInstance: number;\n\n private readonly supportedFeaturesPromises: Record<string, Promise<SupportedFeatures>>;\n\n private readonly unit: string;\n\n private timeTimer?: ReturnType<typeof setTimeout>;\n\n private readSupportedFeaturesTimeout?: ReturnType<typeof setTimeout>;\n\n private rangeValues: any;\n\n private rangeRef?: React.RefObject<any>;\n\n private subscribes: string[];\n\n private readonly localStorage: Storage;\n\n constructor(props: ObjectHistoryDataProps) {\n super(props);\n\n this.localStorage = (window as any)._localStorage || window.localStorage;\n\n let relativeRange = this.localStorage.getItem('App.relativeRange') || 'absolute';\n const start = parseInt(this.localStorage.getItem('App.absoluteStart'), 10) || 0;\n const end = parseInt(this.localStorage.getItem('App.absoluteEnd'), 10) || 0;\n const selectedStr = this.localStorage.getItem('App.historySelected') || '';\n const lastSelected = parseInt(this.localStorage.getItem('App.historyLastSelected'), 10) || null;\n const lastSelectedColumn = this.localStorage.getItem('App.historyLastSelectedColumn') || null;\n\n if ((!start || !end) && (!relativeRange || relativeRange === 'absolute')) {\n relativeRange = '30';\n }\n\n if (start && end) {\n relativeRange = 'absolute';\n }\n\n let selected: number[];\n try {\n selected = JSON.parse(selectedStr);\n } catch {\n selected = [];\n }\n\n this.state = {\n start,\n end,\n values: null,\n relativeRange,\n selected,\n lastSelected,\n lastSelectedColumn,\n historyInstance: '',\n updateOpened: false,\n insertOpened: false,\n historyInstances: null,\n // defaultHistory: '',\n lcVisible: true,\n // qVisible: true,\n ackVisible: true,\n fromVisible: true,\n supportedFeatures: [],\n ampm: false,\n edit: {},\n };\n this.adminInstance = parseInt(window.location.search.slice(1), 10) || 0;\n\n this.supportedFeaturesPromises = {};\n\n this.unit = this.props.obj.common && this.props.obj.common.unit ? ` ${this.props.obj.common.unit}` : '';\n\n this.timeTimer = undefined;\n this.subscribes = [];\n\n void this.prepareData()\n .then(() => this.readHistoryRange())\n .then(() => {\n if (relativeRange !== 'absolute') {\n this.setRelativeInterval(this.state.relativeRange, true);\n } else {\n void this.readHistory();\n }\n });\n }\n\n readSupportedFeatures(historyInstance: string): Promise<SupportedFeatures> {\n historyInstance = historyInstance || this.state.historyInstance;\n if (!historyInstance) {\n return Promise.resolve([] as SupportedFeatures);\n }\n if (this.supportedFeaturesPromises[historyInstance] instanceof Promise) {\n return this.supportedFeaturesPromises[historyInstance];\n }\n\n this.supportedFeaturesPromises[historyInstance] = new Promise(resolve => {\n if (this.readSupportedFeaturesTimeout) {\n clearTimeout(this.readSupportedFeaturesTimeout);\n }\n this.readSupportedFeaturesTimeout = setTimeout(() => {\n this.readSupportedFeaturesTimeout = undefined;\n resolve([]);\n }, 2_000);\n\n void this.props.socket\n .sendTo(historyInstance, 'features', null)\n .then((result: { supportedFeatures: SupportedFeatures }) => {\n if (this.readSupportedFeaturesTimeout) {\n clearTimeout(this.readSupportedFeaturesTimeout);\n this.readSupportedFeaturesTimeout = undefined;\n resolve(result ? result.supportedFeatures || [] : []);\n } else {\n this.setState({ supportedFeatures: result ? result.supportedFeatures || [] : [] });\n }\n });\n });\n return this.supportedFeaturesPromises[historyInstance];\n }\n\n async componentDidMount(): Promise<void> {\n await this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n }\n\n componentWillUnmount(): void {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n\n for (let i = 0; i < this.subscribes.length; i++) {\n this.props.socket.unsubscribeState(this.subscribes[i], this.onChange);\n }\n this.subscribes = [];\n\n this.props.socket.unsubscribeState(this.props.obj._id, this.onChange);\n }\n\n onChange = (id: string, state: ioBroker.State): void => {\n if (\n id === this.props.obj._id &&\n state &&\n this.state.values &&\n (!this.state.values.length || this.state.values[this.state.values.length - 1].ts < state.ts)\n ) {\n const values = [...this.state.values, state];\n this.setState({ values });\n } else if (id.startsWith('system.adapter.') && id.endsWith('.alive')) {\n const instance = id.substring('system.adapter.'.length, id.length - '.alive'.length);\n const list = this.state.historyInstances;\n const itemIndex = list.findIndex(it => it.id === instance);\n if (itemIndex !== -1) {\n if (list[itemIndex].alive !== !!state?.val) {\n const historyInstances = JSON.parse(JSON.stringify(list));\n historyInstances[itemIndex].alive = !!state?.val;\n this.setState({ historyInstances }, () => {\n // read data if the instance becomes alive\n if (historyInstances[itemIndex].alive && this.state.historyInstance === instance) {\n void this.readHistoryRange().then(() => this.readHistory());\n }\n });\n }\n }\n }\n };\n\n async prepareData(): Promise<void> {\n const list: { id: string; alive: boolean }[] = await this.getHistoryInstances();\n // read default history\n const config: ioBroker.SystemConfigObject = await this.props.socket.getCompactSystemConfig();\n const defaultHistory = config?.common?.defaultHistory;\n\n // find current history\n // first read from localstorage\n let historyInstance = this.localStorage.getItem('App.historyInstance') || '';\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // try default history\n historyInstance = defaultHistory;\n }\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // find first the alive history\n const historyInstanceItem = list.find(it => it.alive);\n if (historyInstanceItem) {\n historyInstance = historyInstanceItem.id;\n }\n }\n // get first entry\n if (!historyInstance && list.length) {\n historyInstance = defaultHistory;\n }\n const supportedFeatures: SupportedFeatures = await this.readSupportedFeatures(historyInstance);\n await new Promise<void>(resolve => {\n // supportedFeatures = ['insert', 'update', 'delete'];\n\n this.setState(\n {\n ampm: (config.common.dateFormat || '').includes('/'),\n historyInstances: list,\n // defaultHistory,\n historyInstance,\n supportedFeatures,\n },\n () => resolve(),\n );\n });\n }\n\n getHistoryInstances(): Promise<{ id: string; alive: boolean }[]> {\n const list: { id: string; alive: boolean }[] = [];\n const ids: string[] = [];\n this.props.customsInstances.forEach(instance => {\n const instObj = this.props.objects[`system.adapter.${instance}`];\n if (instObj && instObj.common && instObj.common.getHistory) {\n const listObj = { id: instance, alive: false };\n list.push(listObj);\n ids.push(`system.adapter.${instance}.alive`);\n }\n });\n\n if (ids.length) {\n return this.props.socket.getForeignStates(ids).then(async (alives: Record<string, ioBroker.State>) => {\n Object.keys(alives).forEach(id => {\n const item = list.find(it => id.endsWith(`${it.id}.alive`));\n if (item) {\n item.alive = !!alives[id]?.val;\n }\n });\n this.subscribes = ids;\n for (let i = 0; i < ids.length; i++) {\n await this.props.socket.subscribeState(ids[i], this.onChange);\n }\n\n return list;\n });\n }\n return Promise.resolve(list);\n }\n\n readHistory(start?: number, end?: number): Promise<void | null> {\n start = start || this.state.start;\n end = end || this.state.end;\n\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return null;\n }\n\n this.setState({ loading: true });\n\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start,\n end,\n from: true,\n ack: true,\n q: true,\n addId: false,\n aggregate: 'none',\n returnNewestEntries: true,\n })\n .then((values: ioBroker.GetHistoryResult) => {\n // merge range and chart\n const chart = [];\n const range = this.rangeValues;\n let lcVisible = false;\n // let qVisible = false;\n let ackVisible = false;\n let fromVisible = false;\n // let cVisible = false;\n\n // get the very first item\n if (range && range.length && (!values || !values.length || range[0].ts < values[0].ts)) {\n chart.push(range[0]);\n chart.push({ ts: range[0].ts + 1, e: true });\n console.log(`add ${new Date(range[0].ts).toISOString()}: ${range[0].val}`);\n // if (!qVisible && range[0].q !== undefined) {\n // qVisible = true;\n // }\n if (!ackVisible && range[0].ack !== undefined) {\n ackVisible = true;\n }\n if (!fromVisible && range[0].from) {\n fromVisible = true;\n }\n // if (!cVisible && range[0].c) {\n // cVisible = true;\n // }\n }\n\n if (values?.length) {\n for (let t = 0; t < values.length; t++) {\n // if range and details are not equal\n if (values[t] && (!chart.length || chart[chart.length - 1].ts < values[t].ts)) {\n chart.push(values[t]);\n if (values[t].from) {\n if (values[t].from.startsWith('system.adapter.')) {\n values[t].from = values[t].from.substring(15);\n } else if (values[t].from.startsWith('system.host.')) {\n values[t].from = values[t].from.substring(7);\n }\n }\n if (!lcVisible && values[t].lc) {\n lcVisible = true;\n }\n // if (!qVisible && values[t].q !== undefined) {\n // qVisible = true;\n // }\n if (!ackVisible && values[t].ack !== undefined) {\n ackVisible = true;\n }\n if (!fromVisible && values[t].from) {\n fromVisible = true;\n }\n // if (!cVisible && values[t].c) {\n // cVisible = true;\n // }\n console.log(`add value ${new Date(values[t].ts).toISOString()}: ${values[t].val}`);\n } else if (\n chart[chart.length - 1].ts === values[t].ts &&\n chart[chart.length - 1].val !== values[t].ts\n ) {\n console.error('Strange data!');\n }\n }\n } else {\n chart.push({ noDataForPeriod: true });\n }\n\n if (!chart.length) {\n chart.push({ noData: true });\n }\n\n this.setState({\n loading: false,\n values: chart,\n lcVisible,\n fromVisible,\n // qVisible,\n ackVisible,\n // cVisible,\n });\n });\n }\n\n readHistoryRange(): Promise<void> {\n const now = new Date();\n const oldest = new Date(2_000, 0, 1);\n\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return Promise.resolve();\n }\n\n this.setState({ loading: true });\n // this is a code that makes problems. It is no good idea doing this!\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start: oldest.getTime(),\n end: now.getTime(),\n // step: 3600000 * 24 * 30, // monthly\n limit: 1, // is that a way to make it faster?\n from: false,\n ack: false,\n q: false,\n addId: false,\n aggregate: 'none',\n })\n .then((values: ioBroker.GetHistoryResult) => {\n if (values.length) {\n // remove interpolated first value\n if (values[0].val === null || values[0].ts === oldest.getTime()) {\n values.shift();\n }\n // @ts-expect-error mark interpolated\n values.forEach(it => (it.i = true));\n this.rangeValues = values;\n this.setState({\n loading: false,\n });\n } else {\n this.rangeValues = [];\n this.setState({ loading: false });\n }\n });\n }\n\n onToggleSelect(e: React.KeyboardEvent | React.MouseEvent, ts: number, column: string): void {\n let selected = [...this.state.selected];\n const pos = selected.indexOf(ts);\n if (e.shiftKey && this.state.lastSelected) {\n let pps = -1;\n let ppls = -1;\n selected = [];\n for (let i = 0; i < this.state.values.length; i++) {\n if (this.state.values[i].ts === ts) {\n pps = i;\n if (ppls !== pps) {\n selected.push(this.state.values[i].ts);\n }\n if (pps !== -1 && ppls !== -1) {\n break;\n }\n }\n if (this.state.values[i].ts === this.state.lastSelected) {\n ppls = i;\n if (ppls !== pps) {\n selected.push(this.state.values[i].ts);\n }\n if (pps !== -1 && ppls !== -1) {\n break;\n }\n }\n if (pps !== -1 || ppls !== -1) {\n selected.push(this.state.values[i].ts);\n }\n }\n } else if (e.ctrlKey) {\n if (pos !== -1) {\n selected.splice(pos, 1);\n } else {\n selected.push(ts);\n }\n selected.sort();\n } else {\n selected = [ts];\n }\n\n this.localStorage.setItem('App.historyLastSelected', ts.toString());\n this.localStorage.setItem('App.historyLastSelectedColumn', column);\n this.localStorage.setItem('App.historySelected', JSON.stringify(selected));\n this.setState({ selected, lastSelected: ts, lastSelectedColumn: column });\n }\n\n getTableRows(): JSX.Element[] {\n const rows = [];\n for (let r = this.state.values.length - 1; r >= 0; r--) {\n const state = this.state.values[r];\n const ts = state.ts;\n if (state.e) {\n rows.push(\n <TableRow\n sx={{ ...styles.row, ...styles.updatedRow, ...styles.rowInterpolated }}\n key={ts}\n hover\n >\n <TableCell />\n <TableCell>...</TableCell>\n {this.state.ackVisible ? <TableCell /> : null}\n {this.state.fromVisible ? <TableCell /> : null}\n {this.state.lcVisible ? <TableCell /> : null}\n </TableRow>,\n );\n } else if (state.noData || state.noDataForPeriod) {\n rows.push(\n <TableRow\n sx={{ ...styles.row, ...styles.updatedRow, ...styles.rowNoData }}\n key={state.noData ? 'nodata' : ''}\n hover\n >\n <TableCell />\n <TableCell>\n {state.noData\n ? this.props.t('No data in history')\n : this.props.t('No data in history for selected period')}\n </TableCell>\n {this.state.ackVisible ? <TableCell /> : null}\n {this.state.fromVisible ? <TableCell /> : null}\n {this.state.lcVisible ? <TableCell /> : null}\n </TableRow>,\n );\n } else {\n const interpolated = state.i;\n const selected = this.state.lastSelected === ts;\n let val = state.val;\n if (this.props.isFloatComma && this.props.obj.common.type === 'number' && val) {\n val = val.toString().replace('.', ',');\n }\n if (val === null) {\n val = 'null';\n }\n if (val === undefined) {\n val = '_';\n }\n const selectedClass = this.state.selected.includes(ts);\n\n rows.push(\n <TableRow\n sx={{\n ...styles.row,\n ...styles.updatedRow,\n ...(interpolated ? styles.rowInterpolated : undefined),\n ...(selectedClass ? styles.rowSelected : undefined),\n }}\n key={ts.toString() + (state.val || '').toString()}\n >\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'ts')}>\n {`${ObjectHistoryData.formatTimestamp(state.ts)}`}\n {selected && this.state.lastSelectedColumn === 'ts' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'val')}>\n {val + this.unit}\n {selected && this.state.lastSelectedColumn === 'val' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n {this.state.ackVisible ? (\n <TableCell\n onClick={e => !interpolated && this.onToggleSelect(e, ts, 'ack')}\n sx={state.ack ? styles.cellAckTrue : styles.cellAckFalse}\n >\n {state.ack ? 'true' : 'false'}\n {selected && this.state.lastSelectedColumn === 'ack' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n {this.state.fromVisible ? (\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'from')}>\n {state.from || ''}\n {selected && this.state.lastSelectedColumn === 'from' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n {this.state.lcVisible ? (\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'lc')}>\n {state.lc\n ? `${new Date(state.lc).toLocaleDateString()} ${new Date(state.lc).toLocaleTimeString()}.${(state.ts % 1000).toString().padStart(3, '0')}`\n : ''}\n {selected && this.state.lastSelectedColumn === 'lc' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n </TableRow>,\n );\n }\n }\n\n return rows;\n }\n\n shiftTime(): void {\n const now = new Date();\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const end = now.getTime();\n let start;\n const mins = this.state.relativeRange;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n start = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setMilliseconds(0);\n // find week start\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n start = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n start = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n start = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n start = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n start = now.getTime();\n } else {\n start = end - parseInt(mins as string, 10) * 60000;\n }\n\n this.setState({ start, end }, () => this.readHistory());\n\n this.timeTimer = setTimeout(() => {\n this.timeTimer = undefined;\n this.shiftTime();\n }, delay || 60_000);\n }\n\n setRelativeInterval(mins: string | number, dontSave?: boolean): void {\n if (!dontSave) {\n this.localStorage.setItem('App.relativeRange', mins.toString());\n this.setState({ relativeRange: mins });\n }\n if (mins === 'absolute') {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n return;\n }\n this.localStorage.removeItem('App.absoluteStart');\n this.localStorage.removeItem('App.absolute');\n\n const now = new Date();\n\n if (!this.timeTimer) {\n const delay = 60_000 - now.getSeconds() - (1_000 - now.getMilliseconds());\n this.timeTimer = setTimeout(() => {\n this.timeTimer = undefined;\n this.shiftTime();\n }, delay || 60_000);\n }\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1_000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const end = now.getTime();\n let start;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n start = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n start = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n start = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n start = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n start = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n start = now.getTime();\n } else {\n mins = Number(mins);\n start = end - mins * 60_000;\n }\n\n this.setState({ start, end }, () => this.readHistory());\n }\n\n renderTable(): JSX.Element {\n if (!this.state.historyInstance) {\n return <div style={{ marginTop: 20, fontSize: 24 }}>{this.props.t('History instance not selected')}</div>;\n }\n if (!this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return <div style={{ marginTop: 20, fontSize: 24 }}>{this.props.t('History instance not alive')}</div>;\n }\n\n if (this.state.values) {\n const initialWidths: (number | 'auto')[] = [200, 'auto'];\n const minWidths = [190, 100];\n if (this.state.ackVisible) {\n initialWidths.push(50);\n minWidths.push(50);\n }\n if (this.state.fromVisible) {\n initialWidths.push(150);\n minWidths.push(150);\n }\n if (this.state.lcVisible) {\n initialWidths.push(200);\n minWidths.push(190);\n }\n\n return (\n <TableContainer style={styles.container}>\n <TableResize\n stickyHeader\n sx={styles.table}\n initialWidths={initialWidths}\n minWidths={minWidths}\n dblTitle={this.props.t('ra_Double click to reset table layout')}\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.colTs}>{this.props.t('Timestamp')}</TableCell>\n <TableCell style={styles.colValue}>{this.props.t('Value')}</TableCell>\n {this.state.ackVisible ? (\n <TableCell style={styles.colAck}>{this.props.t('Ack')}</TableCell>\n ) : null}\n {this.state.fromVisible ? (\n <TableCell style={styles.colFrom}>{this.props.t('From')}</TableCell>\n ) : null}\n {this.state.lcVisible ? (\n <TableCell style={styles.colLastChange}>{this.props.t('lc')}</TableCell>\n ) : null}\n </TableRow>\n </TableHead>\n <TableBody>{this.getTableRows()}</TableBody>\n </TableResize>\n </TableContainer>\n );\n }\n return <LinearProgress />;\n }\n\n renderDialogConfirm(): JSX.Element {\n return (\n <Dialog\n open={!!this.state.areYouSure}\n onClose={() => this.setState({ areYouSure: false })}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle id=\"alert-dialog-title\">{}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">{this.props.t('Are you sure?')}</DialogContentText>\n <FormControlLabel\n control={\n <Checkbox\n value={this.state.suppressMessage}\n onChange={() => this.setState({ suppressMessage: true })}\n />\n }\n label={this.props.t('Suppress for 5 minutes')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() =>\n this.setState(\n { areYouSure: false, suppressMessage: this.state.suppressMessage && Date.now() },\n () => this.onDelete(),\n )\n }\n color=\"primary\"\n autoFocus\n startIcon={<IconDelete />}\n >\n {this.props.t('Delete')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ areYouSure: false })}\n color=\"secondary\"\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n onDelete(): void {\n const tasks = this.state.selected.map(ts => ({ state: { ts }, id: this.props.obj._id }));\n void this.props.socket.sendTo(this.state.historyInstance, 'delete', tasks).then(() => this.readHistory());\n }\n\n onUpdate(): void {\n let val = this.state.edit.val;\n\n if (this.props.obj.common) {\n if (this.props.obj.common.type === 'number') {\n if (typeof val !== 'number') {\n val = parseFloat(val.toString().replace(',', '.'));\n }\n } else if (this.props.obj.common.type === 'boolean') {\n val = val === 'true' || val === 'TRUE' || val === true || val === '1' || val === 1;\n }\n }\n\n const state: ioBroker.SettableState = {\n val,\n ack: this.state.edit.ack,\n ts: this.state.selected[0],\n from: `system.adapter.admin.${this.adminInstance}`,\n q: this.state.edit.q,\n };\n\n for (const [attr, stateVal] of Object.entries(state)) {\n if (stateVal === undefined) {\n // @ts-expect-error can be fixed later\n delete state[attr];\n }\n }\n\n if (!this.state.lcVisible && state.lc) {\n delete state.lc;\n }\n void this.props.socket\n .sendTo(this.state.historyInstance, 'update', [{ id: this.props.obj._id, state }])\n .then(() => this.readHistory());\n }\n\n onInsert(): void {\n let val = this.state.edit.val;\n\n if (this.props.obj.common) {\n if (this.props.obj.common.type === 'number') {\n val = parseFloat(val.toString().replace(',', '.'));\n } else if (this.props.obj.common.type === 'boolean') {\n val = val === 'true' || val === 'TRUE' || val === true || val === '1' || val === 1;\n }\n }\n\n const ts = this.state.edit.date;\n ts.setHours(this.state.edit.time.getHours());\n ts.setMinutes(this.state.edit.time.getMinutes());\n ts.setSeconds(this.state.edit.time.getSeconds());\n ts.setMilliseconds(parseInt(this.state.edit.ms as any as string, 10));\n\n const state: ioBroker.SettableState = {\n ts: ts.getTime(),\n val,\n ack: this.state.edit.ack,\n from: `system.adapter.admin.${this.adminInstance}`,\n q: this.state.edit.q || 0,\n };\n\n if (!this.state.lcVisible && state.lc) {\n delete state.lc;\n }\n\n for (const [attr, stateVal] of Object.entries(state)) {\n if (stateVal === undefined) {\n // @ts-expect-error can be fixed later\n delete state[attr];\n }\n }\n\n void this.props.socket\n .sendTo(this.state.historyInstance, 'insert', [{ id: this.props.obj._id, state }])\n .then(() => this.readHistory());\n }\n\n updateEdit(name: string, value: string | number | boolean | Date): void {\n const edit = JSON.parse(JSON.stringify(this.state.edit));\n edit.time = new Date(edit.time);\n edit.date = new Date(edit.date);\n edit[name] = value;\n\n this.setState({ edit });\n }\n\n renderEditDialog(): JSX.Element {\n return (\n <Dialog\n open={this.state.updateOpened || this.state.insertOpened}\n onClose={() => this.setState({ updateOpened: false, insertOpened: false })}\n aria-labelledby=\"edit-dialog-title\"\n aria-describedby=\"edit-dialog-description\"\n >\n <DialogTitle id=\"edit-dialog-title\">\n {this.state.updateOpened ? this.props.t('Update entry') : this.props.t('Insert entry')}\n </DialogTitle>\n <DialogContent>\n <form\n noValidate\n autoComplete=\"off\"\n >\n {typeof this.state.edit.val === 'boolean' ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.edit.val}\n onChange={e => this.updateEdit('val', e.target.checked)}\n />\n }\n label={this.props.t('Value')}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={this.props.t('Value')}\n value={this.state.edit.val}\n onChange={e => this.updateEdit('val', e.target.value)}\n />\n )}\n <br />\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.edit.ack}\n onChange={e => this.updateEdit('ack', e.target.checked)}\n />\n }\n label={this.props.t('Acknowledged')}\n />\n\n {this.state.insertOpened ? (\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div style={styles.toolbarTimeLabel}>{this.props.t('Time')}</div>\n <DatePicker\n sx={styles.toolbarDate}\n value={this.state.edit.date}\n onChange={date => this.updateEdit('date', date)}\n />\n <TimePicker\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n views={['hours', 'minutes', 'seconds']}\n value={this.state.edit.time}\n onChange={time => this.updateEdit('time', time)}\n />\n <TextField\n variant=\"standard\"\n sx={styles.msInput}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n max: 999,\n min: 0,\n },\n }}\n value={this.state.edit.ms}\n onChange={e => this.updateEdit('ms', e.target.value)}\n />\n </div>\n </LocalizationProvider>\n ) : null}\n </form>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.edit.val === ''}\n onClick={() => {\n const isUpdate = this.state.updateOpened;\n this.setState({ updateOpened: false, insertOpened: false }, () =>\n isUpdate ? this.onUpdate() : this.onInsert(),\n );\n }}\n color=\"primary\"\n autoFocus\n >\n {this.state.updateOpened ? this.props.t('Update') : this.props.t('Add')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ updateOpened: false, insertOpened: false })}\n color=\"grey\"\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n setStartDate(startDate: Date): void {\n const start = startDate.getTime();\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', start.toString());\n this.localStorage.setItem('App.absoluteEnd', this.state.end.toString());\n this.setState({ start, relativeRange: 'absolute' }, () => this.readHistory());\n }\n\n setEndDate(endDate: Date): void {\n const end = endDate.getTime();\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', this.state.start.toString());\n this.localStorage.setItem('App.absoluteEnd', end.toString());\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n this.setState({ end, relativeRange: 'absolute' }, () => this.readHistory());\n }\n\n renderToolbar(): JSX.Element {\n return (\n <Toolbar>\n <FormControl\n variant=\"standard\"\n style={styles.selectHistoryControl}\n >\n <InputLabel>{this.props.t('History instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.historyInstance || ''}\n onChange={e => {\n const historyInstance = e.target.value;\n this.localStorage.setItem('App.historyInstance', historyInstance);\n void this.readSupportedFeatures(historyInstance).then(\n (supportedFeatures: SupportedFeatures) =>\n this.setState({ historyInstance, supportedFeatures }, () => this.readHistory()),\n );\n }}\n >\n {this.state.historyInstances?.map(it => (\n <MenuItem\n key={it.id}\n value={it.id}\n style={!it.alive ? styles.notAliveInstance : undefined}\n >\n {it.id}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n style={styles.selectRelativeTime}\n >\n <InputLabel>{this.props.t('Relative')}</InputLabel>\n <Select\n variant=\"standard\"\n ref={this.rangeRef}\n value={this.state.relativeRange}\n onChange={e => this.setRelativeInterval(e.target.value)}\n >\n <MenuItem\n key=\"custom\"\n value=\"absolute\"\n sx={styles.customRange}\n >\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem\n key=\"1\"\n value={10}\n >\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem\n key=\"2\"\n value={30}\n >\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem\n key=\"3\"\n value={60}\n >\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem\n key=\"4\"\n value=\"day\"\n >\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem\n key=\"5\"\n value={24 * 60}\n >\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem\n key=\"6\"\n value=\"week\"\n >\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem\n key=\"7\"\n value={24 * 60 * 7}\n >\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem\n key=\"8\"\n value=\"2weeks\"\n >\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"9\"\n value={24 * 60 * 14}\n >\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"10\"\n value=\"month\"\n >\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem\n key=\"11\"\n value={30 * 24 * 60}\n >\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem\n key=\"12\"\n value=\"year\"\n >\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem\n key=\"13\"\n value=\"12months\"\n >\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('Start time')}\n </div>\n <DatePicker\n sx={styles.toolbarDate}\n disabled={this.state.relativeRange !== 'absolute'}\n value={new Date(this.state.start)}\n onChange={date => this.setStartDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.start)}\n onChange={date => this.setStartDate(date)}\n />\n </div>\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('End time')}\n </div>\n <DatePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarDate}\n value={new Date(this.state.end)}\n onChange={date => this.setEndDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.end)}\n onChange={date => this.setEndDate(date)}\n />\n </div>\n </LocalizationProvider>\n <Box\n component=\"div\"\n sx={styles.grow}\n />\n\n {this.state.values?.length ? (\n <IconButton\n size=\"large\"\n onClick={() => this.exportData()}\n title={this.props.t('Save data as csv')}\n >\n <ExportIcon />\n </IconButton>\n ) : null}\n\n {this.state.supportedFeatures.includes('insert') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n onClick={() => {\n const time = new Date();\n\n const edit: ObjectHistoryDataEdit = {\n ack: this.state.values[this.state.values.length - 1].ack,\n val: this.state.values[this.state.values.length - 1].val,\n date: new Date(time),\n ms: 0,\n time: new Date(time),\n q: 0,\n };\n\n this.setState({\n edit,\n insertOpened: true,\n });\n }}\n >\n <InsertIcon />\n </IconButton>\n ) : null}\n {this.state.supportedFeatures.includes('update') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n disabled={this.state.selected.length !== 1}\n onClick={() => {\n const state = JSON.parse(\n JSON.stringify(\n this.state.values.find((it: HistoryItem) => it.ts === this.state.lastSelected),\n ),\n );\n const time = new Date(state.ts);\n state.date = new Date(time);\n state.time = new Date(time);\n\n this.setState({\n edit: state,\n updateOpened: true,\n });\n }}\n >\n <IconEdit />\n </IconButton>\n ) : null}\n {this.state.supportedFeatures.includes('delete') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n disabled={!this.state.selected.length}\n onClick={() => {\n if (\n typeof this.state.suppressMessage === 'number' &&\n Date.now() - this.state.suppressMessage < 300_000\n ) {\n this.onDelete();\n } else {\n this.setState({ areYouSure: true });\n }\n }}\n >\n <IconDelete />\n </IconButton>\n ) : null}\n </Toolbar>\n );\n }\n\n exportData(): void {\n let element = window.document.getElementById('export-file');\n if (!element) {\n element = document.createElement('a');\n element.setAttribute('id', 'export-file');\n element.style.display = 'none';\n document.body.appendChild(element);\n }\n\n const lines = ['timestamp;value;acknowledged;from;'];\n\n this.state.values.forEach(\n (state: HistoryItem) =>\n !state.i &&\n !state.e &&\n lines.push(\n [\n ObjectHistoryData.formatTimestamp(state.ts),\n state.val === null || state.val === undefined ? 'null' : state.val.toString(),\n state.ack ? 'true' : 'false',\n state.from || '',\n ].join(';'),\n ),\n );\n\n element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(lines.join('\\n'))}`);\n element.setAttribute(\n 'download',\n `${Utils.getObjectName({ [this.props.obj._id]: this.props.obj }, this.props.obj._id, this.props.lang)}.csv`,\n );\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n render(): JSX.Element {\n if (!this.state.historyInstances) {\n return <LinearProgress />;\n }\n\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : <div style={styles.noLoadingProgress} />}\n {this.renderToolbar()}\n <Box\n component=\"div\"\n sx={styles.tableDiv}\n >\n {this.renderTable()}\n </Box>\n {this.renderDialogConfirm()}\n {this.renderEditDialog()}\n </Paper>\n );\n }\n\n /**\n * Convert timestamp to human-readable date string\n *\n * @param ts the timestamp\n */\n static formatTimestamp(ts: number): string {\n return `${new Date(ts).toLocaleDateString()} ${new Date(ts).toLocaleTimeString()}.${(ts % 1_000).toString().padStart(3, '0')}`;\n }\n}\n\nexport default withWidth()(ObjectHistoryData);\n","import React, { Component, createRef, type JSX } from 'react';\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { DatePicker, LocalizationProvider, TimePicker } from '@mui/x-date-pickers';\nimport {\n Button,\n Fab,\n FormControl,\n InputLabel,\n LinearProgress,\n Menu,\n MenuItem,\n Paper,\n Select,\n Toolbar,\n} from '@mui/material';\n\nimport ReactEchartsCore from 'echarts-for-react/lib/core';\nimport type { EChartsOption, YAXisComponentOption } from 'echarts/types/dist/echarts';\n\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TimelineComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport { SVGRenderer } from 'echarts/renderers';\n\nimport {\n type AdminConnection,\n Utils,\n withWidth,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\n// icons\nimport { FaChartLine as SplitLineIcon } from 'react-icons/fa';\nimport EchartsIcon from '../../assets/echarts.png';\nimport { localeMap } from './utils';\n\necharts.use([\n TimelineComponent,\n ToolboxComponent,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LineChart,\n SVGRenderer,\n]);\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n width: '100%',\n },\n chart: {\n width: '100%',\n overflow: 'hidden',\n },\n chartWithToolbar: (theme: IobTheme) => ({\n height: `calc(100% - ${parseInt(theme.mixins.toolbar.minHeight as string, 10) + 8}px)`,\n }),\n chartWithoutToolbar: {\n height: '100%',\n },\n selectHistoryControl: {\n width: 130,\n },\n selectRelativeTime: {\n marginLeft: 10,\n width: 200,\n },\n notAliveInstance: {\n opacity: 0.5,\n },\n customRange: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n splitLineButtonIcon: {\n marginRight: 8,\n },\n grow: {\n flexGrow: 1,\n },\n toolbarDate: {\n width: 124,\n mt: '9px',\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTime: {\n width: 84,\n mt: '9px',\n // marginLeft: 8,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTimeLabel: {\n position: 'absolute',\n padding: 8,\n fontSize: '0.8rem',\n left: 2,\n top: -9,\n },\n toolbarTimeGrid: {\n position: 'relative',\n marginLeft: 8,\n paddingLeft: 8,\n paddingRight: 8,\n paddingTop: 4,\n paddingBottom: 4,\n border: '1px dotted #AAAAAA',\n borderRadius: 8,\n display: 'flex',\n },\n buttonIcon: {\n width: 24,\n height: 24,\n },\n echartsButton: {\n marginRight: 8,\n height: 34,\n width: 34,\n },\n};\n\nconst GRID_PADDING_LEFT = 80;\nconst GRID_PADDING_RIGHT = 25;\n\ninterface ObjectChartProps {\n obj: ioBroker.StateObject;\n customsInstances: string[];\n objects: Record<string, ioBroker.Object>;\n socket: AdminConnection;\n lang: ioBroker.Languages;\n themeType: ThemeType;\n // dateFormat: string;\n isFloatComma: boolean;\n noToolbar: boolean;\n showJumpToEchart: boolean;\n defaultHistory: string;\n historyInstance: string;\n from: number;\n end: number;\n t: Translate;\n theme: IobTheme;\n}\n\ninterface ObjectChartState {\n historyInstance: string;\n historyInstances: { id: string; alive: boolean }[] | null;\n defaultHistory: string;\n chartHeight: number;\n chartWidth: number;\n ampm: boolean;\n relativeRange: string;\n splitLine: boolean;\n min: number;\n max: number;\n maxYLen: number;\n stepType: string;\n echartsJump: boolean;\n showStepMenu?: null | HTMLElement;\n}\n\ninterface HistoryItem {\n val: ioBroker.StateValue;\n ts: number;\n i?: boolean;\n}\n\nclass ObjectChart extends Component<ObjectChartProps, ObjectChartState> {\n private echartsReact: ReactEchartsCore;\n\n private readonly rangeRef: React.RefObject<HTMLDivElement>;\n\n private readTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private chartValues: { val: ioBroker.StateValue; ts: number }[] | null;\n\n private rangeValues: { val: ioBroker.StateValue; ts: number }[] | null;\n\n private subscribes: string[];\n\n private readonly unit: string;\n\n private readonly divRef: React.RefObject<HTMLDivElement>;\n\n private chart: {\n min?: number;\n max?: number;\n withSeconds?: boolean;\n withTime?: boolean;\n diff?: number;\n lastX?: number;\n lastWidth?: number;\n };\n\n private timerResize: ReturnType<typeof setTimeout> | null = null;\n\n private updateTimer: ReturnType<typeof setTimeout> | null = null;\n\n private minY: number;\n\n private maxY: number;\n\n private timeTimer: ReturnType<typeof setTimeout> | null = null;\n\n private maxYLenTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private mouseDown: boolean;\n\n private start: number;\n\n private end: number;\n\n private readonly localStorage: Storage;\n\n constructor(props: ObjectChartProps) {\n super(props);\n this.localStorage = (window as any)._localStorage || window.localStorage;\n\n if (!this.props.from) {\n const from = new Date();\n from.setHours(from.getHours() - 24 * 7);\n this.start = from.getTime();\n } else {\n this.start = this.props.from;\n }\n if (!this.props.end) {\n this.end = Date.now();\n } else {\n this.end = this.props.end;\n }\n let relativeRange = this.localStorage.getItem('App.relativeRange') || '30';\n const min = parseInt(this.localStorage.getItem('App.absoluteStart'), 10) || 0;\n const max = parseInt(this.localStorage.getItem('App.absoluteEnd'), 10) || 0;\n\n if ((!min || !max) && (!relativeRange || relativeRange === 'absolute')) {\n relativeRange = '30';\n }\n\n if (max && min) {\n relativeRange = 'absolute';\n }\n\n this.state = {\n historyInstance: this.props.historyInstance || '',\n historyInstances: null,\n defaultHistory: '',\n chartHeight: 300,\n chartWidth: 500,\n ampm: false,\n relativeRange,\n splitLine: this.localStorage.getItem('App.splitLine') === 'true',\n min,\n max,\n maxYLen: 0,\n stepType: '',\n echartsJump: false,\n };\n\n this.echartsReact = null;\n this.rangeRef = createRef();\n this.readTimeout = null;\n this.chartValues = null;\n this.rangeValues = null;\n this.subscribes = [];\n\n this.unit = this.props.obj.common && this.props.obj.common.unit ? ` ${this.props.obj.common.unit}` : '';\n\n this.divRef = createRef();\n\n this.chart = {};\n }\n\n componentDidMount(): void {\n void this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n window.addEventListener('resize', this.onResize);\n void this.prepareData()\n .then(() => !this.props.noToolbar && this.readHistoryRange())\n .then(() => this.setRelativeInterval(this.state.relativeRange, true, () => this.forceUpdate()));\n }\n\n componentWillUnmount(): void {\n if (this.readTimeout) {\n clearTimeout(this.readTimeout);\n this.readTimeout = null;\n }\n\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n\n if (this.maxYLenTimeout) {\n clearTimeout(this.maxYLenTimeout);\n this.maxYLenTimeout = null;\n }\n\n if (this.timerResize) {\n clearTimeout(this.timerResize);\n this.timerResize = null;\n }\n\n if (this.updateTimer) {\n clearTimeout(this.updateTimer);\n this.updateTimer = null;\n }\n\n if (this.echartsReact) {\n this.echartsReact.getEchartsInstance().dispose();\n }\n\n for (let i = 0; i < this.subscribes.length; i++) {\n this.props.socket.unsubscribeState(this.subscribes[i], this.onChange);\n }\n this.subscribes = [];\n\n this.props.socket.unsubscribeState(this.props.obj._id, this.onChange);\n window.removeEventListener('resize', this.onResize);\n }\n\n onResize = (): void => {\n if (this.timerResize) {\n clearTimeout(this.timerResize);\n }\n this.timerResize = setTimeout(() => {\n this.timerResize = null;\n this.componentDidUpdate();\n });\n };\n\n onChange = (id: string, state: ioBroker.State): void => {\n if (\n id === this.props.obj._id &&\n state &&\n this.rangeValues &&\n (!this.rangeValues.length || this.rangeValues[this.rangeValues.length - 1].ts < state.ts)\n ) {\n if (!this.state.max || state.ts - this.state.max < 120_000) {\n if (this.chartValues) {\n this.chartValues.push({ val: state.val, ts: state.ts });\n }\n this.rangeValues.push({ val: state.val, ts: state.ts });\n\n // update only if an end is near to now\n if (state.ts >= this.chart.min && state.ts <= this.chart.max + 300_000) {\n this.updateChart();\n }\n }\n } else if (id.startsWith('system.adapter.') && id.endsWith('.alive') && this.state.historyInstances) {\n const instance = id.substring('system.adapter.'.length, id.length - '.alive'.length);\n const list = this.state.historyInstances;\n const itemIndex = list.findIndex(it => it.id === instance);\n if (itemIndex !== -1) {\n if (list[itemIndex].alive !== !!state?.val) {\n const historyInstances = JSON.parse(JSON.stringify(list));\n historyInstances[itemIndex].alive = !!state?.val;\n this.setState({ historyInstances }, () => {\n // read data if the instance becomes alive\n if (historyInstances[itemIndex].alive && this.state.historyInstance === instance) {\n void this.readHistoryRange().then(() => this.updateChart());\n }\n });\n }\n }\n }\n };\n\n async prepareData(): Promise<void> {\n if (this.props.noToolbar) {\n const isAlive =\n this.props.defaultHistory &&\n (await this.props.socket.getState(`system.adapter.${this.props.defaultHistory}.alive`));\n\n if (!this.subscribes.length) {\n this.subscribes = [`system.adapter.${this.props.defaultHistory}.alive`];\n await this.props.socket.subscribeState(\n `system.adapter.${this.props.defaultHistory}.alive`,\n this.onChange,\n );\n }\n\n await new Promise(resolve => {\n this.setState(\n {\n // dateFormat: this.props.dateFormat.replace(/D/g, 'd').replace(/Y/g, 'y'),\n defaultHistory: this.props.defaultHistory,\n historyInstance: this.props.defaultHistory,\n historyInstances: [{ id: this.props.defaultHistory, alive: !!isAlive?.val }],\n },\n () => resolve(null),\n );\n });\n return;\n }\n\n let list: { id: string; alive: boolean }[] = await this.getHistoryInstances();\n const config = await this.props.socket.getCompactSystemConfig();\n let instances: ioBroker.InstanceObject[] = [];\n if (this.props.showJumpToEchart) {\n instances = await this.props.socket.getAdapterInstances('echarts', true);\n }\n // collect all echarts instances\n const echartsJump = !!instances.find(item => item._id.startsWith('system.adapter.echarts.'));\n\n const defaultHistory = config && config.common && config.common.defaultHistory;\n // filter out history instances, that does not have data for this object\n if (this.props.obj.common.custom) {\n list = list.filter(it => this.props.obj.common.custom[it.id]);\n }\n\n // find current history\n // first read from localstorage\n let historyInstance = this.localStorage.getItem('App.historyInstance') || '';\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // try default history\n historyInstance = defaultHistory;\n }\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // find first the alive history\n const historyInstanceItem = list.find(it => it.alive);\n if (historyInstanceItem) {\n historyInstance = historyInstanceItem.id;\n }\n }\n // get first entry\n if (!historyInstance && list.length) {\n historyInstance = defaultHistory;\n }\n\n this.setState({\n ampm: config.common.dateFormat.includes('/'),\n // dateFormat: (config.common.dateFormat || 'dd.MM.yyyy').replace(/D/g, 'd').replace(/Y/g, 'y'),\n historyInstances: list,\n defaultHistory,\n historyInstance,\n echartsJump,\n stepType: this.props.obj.common.custom\n ? this.props.obj.common.custom[historyInstance]?.chartStep || ''\n : '',\n });\n }\n\n getHistoryInstances(): Promise<{ id: string; alive: boolean }[]> {\n if (this.props.historyInstance) {\n return Promise.resolve([]);\n }\n const list: { id: string; alive: boolean }[] = [];\n const ids: string[] = [];\n\n this.props.customsInstances.forEach(instance => {\n const instObj: ioBroker.InstanceObject = this.props.objects[`system.adapter.${instance}`] as\n | ioBroker.InstanceObject\n | undefined;\n if (instObj?.common?.getHistory) {\n const listObj = { id: instance, alive: false };\n list.push(listObj);\n ids.push(`system.adapter.${instance}.alive`);\n }\n });\n\n if (ids.length) {\n return this.props.socket.getForeignStates(ids).then(async (alives: Record<string, ioBroker.State>) => {\n Object.keys(alives).forEach(id => {\n const item = list.find(it => id.endsWith(`${it.id}.alive`));\n if (item) {\n item.alive = !!alives[id]?.val;\n }\n });\n this.subscribes = ids;\n for (let i = 0; i < ids.length; i++) {\n await this.props.socket.subscribeState(ids[i], this.onChange);\n }\n\n return list;\n });\n }\n\n return Promise.resolve(list);\n }\n\n readHistoryRange(): Promise<void> {\n const now = new Date();\n const oldest = new Date(2000, 0, 1);\n\n if (this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start: oldest.getTime(),\n end: now.getTime(),\n // step: 3600000, // hourly\n limit: 1,\n from: false,\n ack: false,\n q: false,\n addId: false,\n aggregate: 'none',\n })\n .then((values: { val: ioBroker.StateValue; ts: number }[]) => {\n // remove interpolated first value\n if (values && values[0]?.val === null) {\n values.shift();\n }\n this.rangeValues = values;\n });\n }\n\n return Promise.resolve();\n }\n\n readHistory(start?: number, end?: number): Promise<{ val: ioBroker.StateValue; ts: number }[]> {\n /* interface GetHistoryOptions {\n instance?: string;\n start?: number;\n end?: number;\n step?: number;\n count?: number;\n from?: boolean;\n ack?: boolean;\n q?: boolean;\n addID?: boolean;\n limit?: number;\n ignoreNull?: boolean;\n sessionId?: any;\n aggregate?: 'minmax' | 'min' | 'max' | 'average' | 'total' | 'count' | 'none';\n } */\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return Promise.resolve([]);\n }\n\n const options: ioBroker.GetHistoryOptions = {\n instance: this.state.historyInstance,\n start,\n end,\n from: false,\n ack: false,\n q: false,\n addId: false,\n aggregate: 'none',\n returnNewestEntries: true,\n };\n\n // if more than 24 hours => aggregate\n if (\n end - start > 60000 * 24 &&\n !(\n this.props.obj.common.type === 'boolean' ||\n (this.props.obj.common.type === 'number' && this.props.obj.common.states)\n )\n ) {\n options.aggregate = 'minmax';\n // options.step = 60000;\n }\n\n return this.props.socket\n .getHistory(this.props.obj._id, options)\n .then((values: { val: ioBroker.StateValue; ts: number }[]) => {\n // merge range and chart\n const chart = [];\n let r = 0;\n const range = this.rangeValues;\n let minY = null;\n let maxY = null;\n\n for (let t = 0; t < values.length; t++) {\n if (range) {\n while (r < range.length && range[r].ts < values[t].ts) {\n chart.push(range[r]);\n // console.log(`add ${new Date(range[r].ts).toISOString()}: ${range[r].val}`);\n r++;\n }\n }\n // if range and details are not equal\n if (!chart.length || chart[chart.length - 1].ts < values[t].ts) {\n chart.push(values[t]);\n // console.log(`add value ${new Date(values[t].ts).toISOString()}: ${values[t].val}`)\n } else if (\n chart[chart.length - 1].ts === values[t].ts &&\n chart[chart.length - 1].val !== values[t].ts\n ) {\n console.error('Strange data!');\n }\n if (minY === null || values[t].val < minY) {\n minY = values[t].val;\n }\n if (maxY === null || values[t].val > maxY) {\n maxY = values[t].val;\n }\n }\n\n if (range) {\n while (r < range.length) {\n chart.push(range[r]);\n console.log(`add range ${new Date(range[r].ts).toISOString()}: ${range[r].val}`);\n r++;\n }\n }\n\n // sort\n chart.sort((a, b) => (a.ts > b.ts ? 1 : a.ts < b.ts ? -1 : 0));\n\n this.chartValues = chart;\n this.minY = minY as number;\n this.maxY = maxY as number;\n\n if (this.minY < 10) {\n this.minY = Math.round(this.minY * 10) / 10;\n } else {\n this.minY = Math.ceil(this.minY);\n }\n if (this.maxY < 10) {\n this.maxY = Math.round(this.maxY * 10) / 10;\n } else {\n this.maxY = Math.ceil(this.maxY);\n }\n\n return chart;\n });\n }\n\n convertData(values?: HistoryItem[]): { value: number[]; exact?: boolean }[] {\n values = values || this.chartValues;\n const data: { value: number[]; exact?: boolean }[] = [];\n if (!values.length) {\n return [];\n }\n for (let i = 0; i < values.length; i++) {\n const dp: { value: number[]; exact?: boolean } = { value: [values[i].ts, values[i].val as number] };\n if (values[i].i) {\n dp.exact = false;\n }\n data.push(dp);\n }\n if (!this.chart.min) {\n this.chart.min = values[0].ts;\n this.chart.max = values[values.length - 1].ts;\n }\n\n return data;\n }\n\n getOption(): EChartsOption {\n let widthAxis;\n if (this.minY !== null && this.minY !== undefined) {\n widthAxis = (this.minY.toString() + this.unit).length * 9 + 12;\n }\n if (this.maxY !== null && this.maxY !== undefined) {\n const w = (this.maxY.toString() + this.unit).length * 9 + 12;\n if (w > widthAxis) {\n widthAxis = w;\n }\n }\n\n if (this.state.maxYLen) {\n const w = this.state.maxYLen * 9 + 12;\n if (w > widthAxis) {\n widthAxis = w;\n }\n }\n\n const serie = {\n xAxisIndex: 0,\n type: 'line',\n step:\n this.state.stepType === 'stepStart'\n ? 'start'\n : this.state.stepType === 'stepMiddle'\n ? 'middle'\n : this.state.stepType === 'stepEnd'\n ? 'end'\n : undefined,\n showSymbol: false,\n hoverAnimation: true,\n animation: false,\n data: this.convertData(),\n lineStyle: {\n color: '#4dabf5',\n },\n areaStyle: {},\n };\n\n const yAxis: YAXisComponentOption = {\n type: 'value',\n boundaryGap: [0, '100%'],\n splitLine: {\n show: this.props.noToolbar || !!this.state.splitLine,\n },\n splitNumber: Math.round(this.state.chartHeight / 50),\n axisLabel: {\n formatter: (value: number) => {\n let text;\n if (this.props.isFloatComma) {\n text = value.toString().replace(',', '.') + this.unit;\n } else {\n text = value + this.unit;\n }\n\n if (this.state.maxYLen < text.length) {\n if (this.maxYLenTimeout) {\n clearTimeout(this.maxYLenTimeout);\n }\n this.maxYLenTimeout = setTimeout(\n maxYLen => {\n this.maxYLenTimeout = null;\n this.setState({ maxYLen });\n },\n 200,\n text.length,\n );\n }\n return text;\n },\n showMaxLabel: true,\n showMinLabel: true,\n },\n axisTick: {\n // @ts-expect-error fix later\n alignWithLabel: true,\n },\n };\n\n if (this.props.obj.common.type === 'boolean') {\n serie.step = 'end';\n yAxis.axisLabel.showMaxLabel = false;\n // @ts-expect-error fix later\n yAxis.axisLabel.formatter = (value: number) => (value === 1 ? 'TRUE' : 'FALSE');\n yAxis.max = 1.5;\n // @ts-expect-error fix later\n yAxis.interval = 1;\n widthAxis = 50;\n } else if (this.props.obj.common.type === 'number' && this.props.obj.common.states) {\n serie.step = 'end';\n yAxis.axisLabel.showMaxLabel = false;\n const states = this.props.obj.common.states as Record<string, string>;\n // @ts-expect-error fix later\n yAxis.axisLabel.formatter = (value: number) => (states[value] !== undefined ? states[value] : value);\n const keys = Object.keys(this.props.obj.common.states);\n keys.sort();\n yAxis.max = parseFloat(keys[keys.length - 1]) + 0.5;\n // @ts-expect-error fix later\n yAxis.interval = 1;\n let max = '';\n for (let i = 0; i < keys.length; i++) {\n if (typeof states[keys[i]] === 'string' && states[keys[i]].length > max.length) {\n max = states[keys[i]];\n }\n }\n widthAxis = (max.length * 9 || 50) + 12;\n }\n\n const splitNumber = this.chart.withSeconds\n ? Math.round((this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT) / 100)\n : Math.round((this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT) / 60);\n\n return {\n backgroundColor: 'transparent',\n title: {\n text: this.props.noToolbar ? '' : Utils.getObjectNameFromObj(this.props.obj, this.props.lang),\n padding: [\n 10, // up\n 0, // right\n 0, // down\n widthAxis ? widthAxis + 10 : GRID_PADDING_LEFT + 10, // left\n ],\n },\n grid: {\n left: widthAxis || GRID_PADDING_LEFT,\n top: 8,\n right: this.props.noToolbar ? 5 : GRID_PADDING_RIGHT,\n bottom: 40,\n },\n tooltip: {\n trigger: 'axis',\n formatter: params => {\n // @ts-expect-error fix later\n const param = params[0];\n const date = new Date(param.value[0]);\n let value: number | string = param.value[1];\n if (value !== null && this.props.isFloatComma) {\n value = value.toString().replace('.', ',');\n }\n return `${param.exact === false ? 'i' : ''}${date.toLocaleString()}.${date.getMilliseconds().toString().padStart(3, '0')}: ${value}${this.unit}`;\n },\n axisPointer: {\n animation: true,\n },\n },\n xAxis: {\n // type: 'time',\n splitLine: {\n show: false,\n },\n splitNumber,\n min: this.chart.min,\n max: this.chart.max,\n axisTick: {\n // @ts-expect-error fix later\n alignWithLabel: true,\n },\n axisLabel: {\n formatter: (value: number) => {\n const date = new Date(value);\n if (this.chart.withSeconds) {\n return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`;\n }\n if (this.chart.withTime) {\n return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}\\n${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}`;\n }\n return `${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}\\n${date.getFullYear()}`;\n },\n },\n },\n yAxis,\n toolbox: {\n left: 'right',\n feature: this.props.noToolbar\n ? undefined\n : {\n saveAsImage: {\n title: this.props.t('Save as image'),\n show: true,\n },\n },\n },\n // @ts-expect-error fix later\n series: [serie],\n };\n }\n\n static getDerivedStateFromProps(_props: ObjectChartProps, _state: ObjectChartState): null {\n return null;\n }\n\n updateChart(start?: number, end?: number, withReadData?: boolean, cb?: () => void): void {\n if (start) {\n this.start = start;\n }\n if (end) {\n this.end = end;\n }\n start = start || this.start;\n end = end || this.end;\n\n if (this.readTimeout) {\n clearTimeout(this.readTimeout);\n }\n\n this.readTimeout = setTimeout(() => {\n this.readTimeout = null;\n\n const diff = this.chart.max - this.chart.min;\n if (diff !== this.chart.diff) {\n this.chart.diff = diff;\n this.chart.withTime = this.chart.diff < 3600000 * 24 * 7;\n this.chart.withSeconds = this.chart.diff < 60000 * 30;\n }\n\n if (withReadData) {\n void this.readHistory(start, end).then((values: HistoryItem[]) => {\n if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n series: [{ data: this.convertData(values) }],\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n }\n if (cb) {\n cb();\n }\n });\n } else {\n if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n series: [{ data: this.convertData() }],\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n }\n if (cb) {\n cb();\n }\n }\n }, 400);\n }\n\n setNewRange(readData?: boolean): void {\n /* if (this.rangeRef.current &&\n this.rangeRef.current.childNodes[1] &&\n this.rangeRef.current.childNodes[1].value) {\n this.rangeRef.current.childNodes[0].innerHTML = '';\n this.rangeRef.current.childNodes[1].value = '';\n } */\n this.chart.diff = this.chart.max - this.chart.min;\n this.chart.withTime = this.chart.diff < 3600000 * 24 * 7;\n this.chart.withSeconds = this.chart.diff < 60000 * 30;\n\n if (this.state.relativeRange !== 'absolute') {\n this.setState({ relativeRange: 'absolute' });\n // stop shift timer\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n } else if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n\n if (readData) {\n this.updateChart(this.chart.min, this.chart.max, true);\n }\n }\n }\n\n shiftTime(): void {\n const now = new Date();\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const max = now.getTime();\n let min;\n const mins = this.state.relativeRange;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n min = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n min = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n min = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n min = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n min = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n min = now.getTime();\n } else {\n min = max - parseInt(mins, 10) * 60000;\n }\n\n this.chart.min = min;\n this.chart.max = max;\n\n this.setState({ min, max }, () => this.updateChart(this.chart.min, this.chart.max, true));\n\n this.timeTimer = setTimeout(() => {\n this.timeTimer = null;\n this.shiftTime();\n }, delay || 60000);\n }\n\n setRelativeInterval(mins: string, dontSave?: boolean, cb?: () => void): void {\n if (!dontSave) {\n this.localStorage.setItem('App.relativeRange', mins);\n this.setState({ relativeRange: mins });\n }\n if (mins === 'absolute') {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.updateChart(this.chart.min, this.chart.max, true, cb);\n return;\n }\n this.localStorage.removeItem('App.absoluteStart');\n this.localStorage.removeItem('App.absoluteEnd');\n\n const now = new Date();\n\n if (!this.timeTimer) {\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n this.timeTimer = setTimeout(() => {\n this.timeTimer = null;\n this.shiftTime();\n }, delay || 60000);\n }\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n this.chart.max = now.getTime();\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n this.chart.min = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n this.chart.min = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n this.chart.min = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n this.chart.min = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n this.chart.min = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n this.chart.min = now.getTime();\n } else {\n this.chart.min = this.chart.max - parseInt(mins, 10) * 60000;\n }\n\n this.setState({ min: this.chart.min, max: this.chart.max }, () =>\n this.updateChart(this.chart.min, this.chart.max, true, cb),\n );\n }\n\n installEventHandlers(): void {\n if (!this.echartsReact || typeof this.echartsReact.getEchartsInstance !== 'function') {\n return;\n }\n\n const zr = this.echartsReact.getEchartsInstance().getZr();\n if (!(zr as any)._iobInstalled) {\n (zr as any)._iobInstalled = true;\n zr.on('mousedown', (e: MouseEvent) => {\n console.log('mouse down');\n this.mouseDown = true;\n this.chart.lastX = e.offsetX;\n });\n zr.on('mouseup', () => {\n console.log('mouse up');\n this.mouseDown = false;\n this.setNewRange(true);\n });\n zr.on('mousewheel', e => {\n let diff = this.chart.max - this.chart.min;\n const width = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n const x = e.offsetX - GRID_PADDING_LEFT;\n const pos = x / width;\n\n const oldDiff = diff;\n const amount = e.wheelDelta > 0 ? 1.1 : 0.9;\n diff *= amount;\n const move = oldDiff - diff;\n this.chart.max += move * (1 - pos);\n this.chart.min -= move * pos;\n\n this.setNewRange();\n });\n zr.on('mousemove', (e: MouseEvent) => {\n if (this.mouseDown) {\n const moved = this.chart.lastX - (e.offsetX - GRID_PADDING_LEFT);\n this.chart.lastX = e.offsetX - GRID_PADDING_LEFT;\n const diff = this.chart.max - this.chart.min;\n const width = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const shift = Math.round((moved * diff) / width);\n this.chart.min += shift;\n this.chart.max += shift;\n this.setNewRange();\n }\n });\n\n zr.on('touchstart', (e: React.TouchEvent) => {\n e.preventDefault();\n this.mouseDown = true;\n // @ts-expect-error fix later\n const touches = e.touches || e.originalEvent.touches;\n if (touches) {\n this.chart.lastX = touches[touches.length - 1].pageX;\n if (touches.length > 1) {\n this.chart.lastWidth = Math.abs(touches[0].pageX - touches[1].pageX);\n } else {\n this.chart.lastWidth = null;\n }\n }\n });\n zr.on('touchend', e => {\n e.preventDefault();\n this.mouseDown = false;\n this.setNewRange(true);\n });\n zr.on('touchmove', e => {\n e.preventDefault();\n const touches = e.touches || e.originalEvent.touches;\n if (!touches) {\n return;\n }\n const pageX = touches[touches.length - 1].pageX - GRID_PADDING_LEFT;\n if (this.mouseDown) {\n if (touches.length > 1) {\n // zoom\n const fingerWidth = Math.abs(touches[0].pageX - touches[1].pageX);\n if (this.chart.lastWidth !== null && fingerWidth !== this.chart.lastWidth) {\n let diff = this.chart.max - this.chart.min;\n const chartWidth = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const amount = fingerWidth > this.chart.lastWidth ? 1.1 : 0.9;\n const positionX =\n touches[0].pageX > touches[1].pageX\n ? touches[1].pageX - GRID_PADDING_LEFT + fingerWidth / 2\n : touches[0].pageX - GRID_PADDING_LEFT + fingerWidth / 2;\n\n const pos = positionX / chartWidth;\n\n const oldDiff = diff;\n diff *= amount;\n const move = oldDiff - diff;\n\n this.chart.max += move * (1 - pos);\n this.chart.min -= move * pos;\n\n this.setNewRange();\n }\n this.chart.lastWidth = fingerWidth;\n } else {\n // swipe\n const moved = this.chart.lastX - pageX;\n const diff = this.chart.max - this.chart.min;\n const chartWidth = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const shift = Math.round((moved * diff) / chartWidth);\n this.chart.min += shift;\n this.chart.max += shift;\n\n this.setNewRange();\n }\n }\n this.chart.lastX = pageX;\n });\n }\n }\n\n private renderChart(): JSX.Element {\n if (!this.state.historyInstance) {\n return (\n <div style={{ marginTop: 20, fontSize: 24, marginLeft: 24 }}>\n {this.props.t('History instance not selected')}\n </div>\n );\n }\n if (!this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return (\n <div style={{ marginTop: 20, fontSize: 24, marginLeft: 24 }}>\n {this.props.t('History instance not alive')}\n </div>\n );\n }\n if (this.chartValues) {\n return (\n <ReactEchartsCore\n ref={e => (this.echartsReact = e)}\n echarts={echarts}\n option={this.getOption()}\n notMerge\n lazyUpdate\n theme={this.props.themeType === 'dark' ? 'dark' : ''}\n style={{ height: `${this.state.chartHeight}px`, width: '100%' }}\n opts={{ renderer: 'svg' }}\n onEvents={{ rendered: () => this.installEventHandlers() }}\n />\n );\n }\n\n return <LinearProgress />;\n }\n\n componentDidUpdate(): void {\n if (this.divRef.current) {\n const width = this.divRef.current.offsetWidth;\n const height = this.divRef.current.offsetHeight;\n if (this.state.chartHeight !== height) {\n // || this.state.chartHeight !== height) {\n if (this.updateTimer) {\n clearTimeout(this.updateTimer);\n }\n this.updateTimer = setTimeout(() => {\n this.updateTimer = null;\n this.setState({ chartHeight: height, chartWidth: width });\n }, 100);\n }\n }\n }\n\n setStartDate(min: Date): void {\n const minNumber: number = min.getTime();\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', minNumber.toString());\n this.localStorage.setItem('App.absoluteEnd', this.state.max.toString());\n\n this.chart.min = minNumber;\n\n this.setState({ min: minNumber, relativeRange: 'absolute' }, () =>\n this.updateChart(this.chart.min, this.chart.max, true),\n );\n }\n\n setEndDate(max: Date): void {\n const maxNumber: number = max.getTime();\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', this.state.min.toString());\n this.localStorage.setItem('App.absoluteEnd', maxNumber.toString());\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.chart.max = maxNumber;\n this.setState({ max: maxNumber, relativeRange: 'absolute' }, () =>\n this.updateChart(this.chart.min, this.chart.max, true),\n );\n }\n\n openEcharts(): void {\n const args = [\n `id=${window.encodeURIComponent(this.props.obj._id)}`,\n `instance=${window.encodeURIComponent(this.state.historyInstance)}`,\n 'menuOpened=false',\n ];\n\n if (this.state.relativeRange === 'absolute') {\n args.push(`start=${this.chart.min}`);\n args.push(`end=${this.chart.max}`);\n } else {\n args.push(`range=${this.state.relativeRange}`);\n }\n\n window.open(\n `${window.location.protocol}//${window.location.host}/adapter/echarts/tab.html#${args.join('&')}`,\n 'echarts',\n );\n }\n\n async onStepChanged(stepType: string): Promise<void> {\n // save in an object\n const obj = await this.props.socket.getObject(this.props.obj._id);\n if (\n obj.common.custom &&\n obj.common.custom[this.state.historyInstance] &&\n obj.common.custom[this.state.historyInstance].chartStep !== stepType\n ) {\n obj.common.custom[this.state.historyInstance].chartStep = stepType;\n await this.props.socket.setObject(obj._id, obj);\n }\n this.setState({ stepType, showStepMenu: null });\n }\n\n renderToolbar(): JSX.Element | null {\n if (this.props.noToolbar) {\n return null;\n }\n\n return (\n <Toolbar>\n {!this.props.historyInstance && (\n <FormControl\n variant=\"standard\"\n style={styles.selectHistoryControl}\n >\n <InputLabel>{this.props.t('History instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.historyInstance}\n onChange={(e): void => {\n this.localStorage.setItem('App.historyInstance', e.target.value);\n this.setState({ historyInstance: e.target.value });\n }}\n >\n {this.state.historyInstances.map(it => (\n <MenuItem\n key={it.id}\n value={it.id}\n style={!it.alive ? styles.notAliveInstance : undefined}\n >\n {it.id}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n <FormControl\n variant=\"standard\"\n style={styles.selectRelativeTime}\n >\n <InputLabel>{this.props.t('Relative')}</InputLabel>\n <Select\n variant=\"standard\"\n ref={this.rangeRef}\n value={this.state.relativeRange}\n onChange={e => this.setRelativeInterval(e.target.value)}\n >\n <MenuItem\n key=\"custom\"\n value=\"absolute\"\n sx={styles.customRange}\n >\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem\n key=\"1\"\n value={10}\n >\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem\n key=\"2\"\n value={30}\n >\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem\n key=\"3\"\n value={60}\n >\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem\n key=\"4\"\n value=\"day\"\n >\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem\n key=\"5\"\n value={24 * 60}\n >\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem\n key=\"6\"\n value=\"week\"\n >\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem\n key=\"7\"\n value={24 * 60 * 7}\n >\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem\n key=\"8\"\n value=\"2weeks\"\n >\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"9\"\n value={24 * 60 * 14}\n >\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"10\"\n value=\"month\"\n >\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem\n key=\"11\"\n value={30 * 24 * 60}\n >\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem\n key=\"12\"\n value=\"year\"\n >\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem\n key=\"13\"\n value=\"12months\"\n >\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('Start time')}\n </div>\n <DatePicker\n sx={styles.toolbarDate}\n disabled={this.state.relativeRange !== 'absolute'}\n value={new Date(this.state.min)}\n onChange={date => this.setStartDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.min)}\n onChange={date => this.setStartDate(date)}\n />\n </div>\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('End time')}\n </div>\n <DatePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarDate}\n value={new Date(this.state.max)}\n onChange={date => this.setEndDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.max)}\n onChange={date => this.setEndDate(date)}\n />\n </div>\n </LocalizationProvider>\n <div style={styles.grow} />\n <Button\n style={{ marginRight: 10 }}\n variant=\"outlined\"\n onClick={e => this.setState({ showStepMenu: e.target as HTMLElement })}\n >\n {this.state.stepType ? this.props.t(this.state.stepType) : this.props.t('Step type')}\n </Button>\n {this.state.showStepMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.showStepMenu}\n onClose={() => this.setState({ showStepMenu: null })}\n >\n <MenuItem\n selected={this.state.stepType === ''}\n onClick={() => this.onStepChanged('')}\n >\n {this.props.t('None')}\n </MenuItem>\n <MenuItem\n selected={this.state.stepType === 'stepStart'}\n onClick={() => this.onStepChanged('stepStart')}\n >\n {this.props.t('stepStart')}\n </MenuItem>\n </Menu>\n ) : null}\n {this.props.showJumpToEchart && this.state.echartsJump && (\n <Fab\n style={styles.echartsButton}\n size=\"small\"\n onClick={() => this.openEcharts()}\n title={this.props.t('Open charts in new window')}\n >\n <img\n src={EchartsIcon}\n alt=\"echarts\"\n style={styles.buttonIcon}\n />\n </Fab>\n )}\n <Fab\n variant=\"extended\"\n size=\"small\"\n color={this.state.splitLine ? 'primary' : 'default'}\n aria-label=\"show lines\"\n onClick={() => {\n this.localStorage.setItem('App.splitLine', this.state.splitLine ? 'false' : 'true');\n this.setState({ splitLine: !this.state.splitLine });\n }}\n >\n <SplitLineIcon style={styles.splitLineButtonIcon} />\n {this.props.t('Show lines')}\n </Fab>\n </Toolbar>\n );\n }\n\n render(): JSX.Element {\n if (!this.state.historyInstances && !this.state.defaultHistory) {\n return <LinearProgress />;\n }\n\n return (\n <Paper style={styles.paper}>\n {this.renderToolbar()}\n <div\n ref={this.divRef}\n style={Utils.getStyle(\n this.props.theme,\n styles.chart,\n this.props.noToolbar ? styles.chartWithoutToolbar : styles.chartWithToolbar,\n )}\n >\n {this.renderChart()}\n </div>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(ObjectChart);\n","import React, { type JSX } from 'react';\n\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, AppBar, Tabs, Tab, Box } from '@mui/material';\n\nimport {\n I18n,\n DialogConfirm,\n Router,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type ThemeName,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\n// Icons\nimport { Close as CloseIcon, Save as SaveIcon } from '@mui/icons-material';\n\nimport ObjectCustomEditor from '../components/Object/ObjectCustomEditor';\nimport ObjectHistoryData from '../components/Object/ObjectHistoryData';\nimport ObjectChart from '../components/Object/ObjectChart';\nimport MobileDialog from '../helpers/MobileDialog';\n\nconst styles: Record<string, any> = {\n dialog: {\n height: '100%',\n },\n paper: {\n height: 'calc(100% - 64px)',\n },\n content: {\n textAlign: 'center',\n overflow: 'hidden',\n },\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n overflow: 'hidden',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n }),\n tabSelected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? theme.palette.secondary.contrastText : '#FFFFFF !important',\n }),\n tabsIndicator: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ObjectCustomDialogProps {\n t: Translate;\n lang: ioBroker.Languages;\n expertMode?: boolean;\n objects: Record<string, ioBroker.Object>;\n socket: AdminConnection;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n customsInstances: string[];\n objectIDs: string[];\n onClose: () => void;\n reportChangedIds: (ids: string[]) => void;\n isFloatComma: boolean;\n allVisibleObjects: boolean;\n systemConfig: ioBroker.SystemConfigObject;\n}\n\ninterface ObjectCustomDialogState {\n hasChanges: boolean;\n currentTab: number;\n confirmDialog: boolean;\n mobile: boolean;\n progressRunning: boolean;\n showWarning: boolean;\n}\n\nclass ObjectCustomDialog extends MobileDialog<ObjectCustomDialogProps, ObjectCustomDialogState> {\n private chartAvailable: boolean;\n\n private saveFunc: ((cb?: (error?: boolean) => void) => void) | null = null;\n\n constructor(props: ObjectCustomDialogProps) {\n super(props);\n\n let currentTab = parseInt(\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('App.objectCustomTab') || '0',\n 10,\n );\n\n this.chartAvailable = this.isChartAvailable();\n\n if (this.chartAvailable) {\n const location = Router.getLocation();\n if (location.arg === 'chart') {\n currentTab = 2;\n } else if (location.arg === 'table') {\n currentTab = 1;\n }\n } else {\n currentTab = 0;\n }\n\n this.state = {\n hasChanges: false,\n currentTab,\n confirmDialog: false,\n mobile: MobileDialog.isMobile(),\n progressRunning: false,\n showWarning: this.props.allVisibleObjects,\n };\n }\n\n isChartAvailable(): boolean {\n let chartAvailable = this.props.objectIDs.length === 1;\n if (chartAvailable) {\n const id = this.props.objectIDs[0];\n if (this.props.objects[id]?.common?.custom) {\n chartAvailable = !!Object.keys(this.props.objects[id].common.custom).find(inst => {\n const obj = this.props.objects[`system.adapter.${inst}`];\n return obj && obj.common && obj.common.getHistory;\n });\n } else {\n chartAvailable = false;\n }\n }\n return chartAvailable;\n }\n\n renderCharts(): JSX.Element {\n return (\n <ObjectChart\n id=\"custom-tabpanel-chart\"\n isFloatComma={this.props.isFloatComma}\n showJumpToEchart\n t={this.props.t}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n obj={this.props.objects[this.props.objectIDs[0]]}\n customsInstances={this.props.customsInstances}\n themeType={this.props.themeType}\n theme={this.props.theme}\n objects={this.props.objects}\n />\n );\n }\n\n renderTable(): JSX.Element {\n return (\n <ObjectHistoryData\n id=\"custom-tabpanel-history\"\n t={this.props.t}\n isFloatComma={this.props.isFloatComma}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n obj={this.props.objects[this.props.objectIDs[0]]}\n customsInstances={this.props.customsInstances}\n themeName={this.props.themeName}\n objects={this.props.objects}\n />\n );\n }\n\n renderCustomEditor(): JSX.Element {\n return (\n <ObjectCustomEditor\n id=\"custom-tabpanel-settings\"\n registerSaveFunc={(func: (cb?: (error?: boolean) => void) => void) => (this.saveFunc = func)}\n t={this.props.t}\n allVisibleObjects={this.props.allVisibleObjects}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n objectIDs={this.props.objectIDs}\n customsInstances={this.props.customsInstances}\n objects={this.props.objects}\n onProgress={(progressRunning: boolean) => this.setState({ progressRunning })}\n reportChangedIds={this.props.reportChangedIds}\n onChange={(hasChanges: boolean, update: boolean) => {\n this.setState({ hasChanges }, () => {\n if (update) {\n const chartAvailable = this.isChartAvailable();\n if (chartAvailable !== this.chartAvailable) {\n this.chartAvailable = chartAvailable;\n this.forceUpdate();\n }\n }\n });\n }}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n systemConfig={this.props.systemConfig}\n />\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n return (\n <DialogConfirm\n title={I18n.t('You have unsaved changes')}\n text={I18n.t('Discard?')}\n ok={I18n.t('Yes')}\n cancel={I18n.t('Cancel')}\n onClose={isYes => this.setState({ confirmDialog: false }, () => isYes && this.props.onClose())}\n />\n );\n }\n\n onClose(): void {\n if (this.state.hasChanges) {\n this.setState({ confirmDialog: true });\n } else {\n this.props.onClose();\n }\n }\n\n renderWarningDialog(): JSX.Element | null {\n if (!this.state.showWarning) {\n return null;\n }\n return (\n <DialogConfirm\n text={\n <div style={{ color: '#F00' }}>\n {this.props.t('Your are intend to edit ALL objects. Are you sure?')}\n </div>\n }\n ok={this.props.t('Yes')}\n onClose={result => {\n this.setState({ showWarning: false });\n if (!result) {\n this.onClose();\n }\n }}\n />\n );\n }\n\n render(): JSX.Element {\n const varType = this.props.objects[this.props.objectIDs[0]]?.common?.type;\n\n return (\n <Dialog\n sx={{ '&.MuiDialog-scrollPaper': styles.dialog, '& .MuiDialog-paper': styles.paper }}\n scroll=\"paper\"\n open={!0}\n onClose={() => this.props.onClose()}\n fullWidth\n maxWidth=\"xl\"\n aria-labelledby=\"form-dialog-title\"\n >\n {this.renderDialogConfirm()}\n {this.renderWarningDialog()}\n <DialogTitle>\n {this.props.objectIDs.length > 1\n ? this.props.t('Edit config for %s states', this.props.objectIDs.length)\n : this.props.t('Edit config: %s', this.props.objectIDs[0])}\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Tabs\n value={this.state.currentTab}\n onChange={(_event, newTab) => {\n Router.doNavigate(\n null,\n null,\n null,\n newTab === 1 ? 'table' : newTab === 2 ? 'chart' : 'config',\n );\n this.setState({ currentTab: newTab });\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.objectCustomTab',\n newTab,\n );\n }}\n sx={{ '& .MuiTabs-indicator': styles.tabsIndicator }}\n indicatorColor=\"secondary\"\n >\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('Custom settings')}\n id=\"custom-settings-tab\"\n aria-controls=\"custom-tabpanel-settings\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n {this.props.objectIDs.length === 1 && this.chartAvailable ? (\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('History data')}\n id=\"history-data-tab\"\n aria-controls=\"custom-tabpanel-history\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n ) : null}\n {(varType === 'number' || varType === 'boolean') &&\n this.props.objectIDs.length === 1 &&\n this.chartAvailable ? (\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('Chart')}\n id=\"chart-tab\"\n aria-controls=\"custom-tabpanel-chart\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n ) : null}\n </Tabs>\n </AppBar>\n {this.state.currentTab === 0 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderCustomEditor()}\n </Box>\n ) : null}\n {this.props.objectIDs.length === 1 && this.chartAvailable && this.state.currentTab === 1 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderTable()}\n </Box>\n ) : null}\n {(varType === 'number' || varType === 'boolean') &&\n this.props.objectIDs.length === 1 &&\n this.chartAvailable &&\n this.state.currentTab === 2 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderCharts()}\n </Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n {this.state.currentTab === 0 && (\n <Button\n id=\"object-custom-dialog-save\"\n variant=\"contained\"\n color=\"primary\"\n disabled={!this.state.hasChanges || this.state.progressRunning}\n onClick={() => this.saveFunc && this.saveFunc()}\n >\n {this.getButtonTitle(<SaveIcon />, this.props.t('Save'))}\n </Button>\n )}\n {this.state.currentTab === 0 && (\n <Button\n id=\"object-custom-dialog-save-close\"\n variant=\"contained\"\n color=\"primary\"\n disabled={!this.state.hasChanges || this.state.progressRunning}\n onClick={() => {\n if (this.saveFunc) {\n this.saveFunc(error => !error && this.onClose());\n } else {\n this.onClose();\n }\n }}\n >\n {this.getButtonTitle(<SaveIcon />, this.props.t('Save & close'), <CloseIcon />)}\n </Button>\n )}\n <Button\n id=\"object-custom-dialog-close\"\n disabled={this.state.progressRunning}\n variant=\"contained\"\n onClick={() => this.onClose()}\n color=\"grey\"\n >\n {this.getButtonTitle(<CloseIcon />, this.props.t('Close'))}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectCustomDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport { DatePicker, LocalizationProvider, TimePicker } from '@mui/x-date-pickers';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n FormControlLabel,\n Checkbox,\n TextField,\n DialogActions,\n Button,\n IconButton,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n Grid2,\n Fab,\n Typography,\n Switch,\n Autocomplete,\n Tooltip,\n} from '@mui/material';\n\nimport {\n ShowChart as ChartIcon,\n Close as IconCancel,\n Check as IconCheck,\n Fullscreen as FullscreenIcon,\n FullscreenExit as FullscreenExitIcon,\n Info as InfoIcon,\n} from '@mui/icons-material';\n\nimport { type AdminConnection, type IobTheme, type ThemeType, type Translate } from '@iobroker/adapter-react-v5';\n\nimport ObjectChart from './ObjectChart';\nimport { localeMap } from './utils';\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n formControl: {\n minWidth: 100,\n },\n quality: {\n width: 'calc(100% - 88px)',\n },\n expire: {\n ml: 1,\n width: 80,\n },\n readOnly: {\n backgroundColor: '#b74848',\n },\n readOnlyText: {\n color: '#b74848',\n marginLeft: 8,\n },\n wrapperButton: {\n '@media screen and (max-width: 465px)': {\n '& *': {\n fontSize: 12,\n },\n },\n '@media screen and (max-width: 380px)': {\n '& *': {\n fontSize: 11,\n },\n },\n },\n ackCheckbox: {\n marginLeft: 4,\n },\n dialog: {\n minHeight: (window as any).clientHeight - 50 > 500 ? 500 : (window as any).clientHeight - 50,\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface NumberValidationOptions {\n value: unknown;\n common: ioBroker.StateCommon;\n}\n\ninterface ObjectBrowserValueProps {\n /** State type */\n type: 'states' | 'string' | 'number' | 'boolean' | 'json';\n /** State role */\n role: string;\n /** common.states */\n states: Record<string, string> | null;\n /** The state value */\n value: string | number | boolean | null;\n /** If expert mode is enabled */\n expertMode: boolean;\n onClose: (newValue?: { val: ioBroker.StateValue; ack: boolean; q: number; expire: number | undefined }) => void;\n /** Configured theme */\n themeType: ThemeType;\n theme: IobTheme;\n socket: AdminConnection;\n defaultHistory: string;\n dateFormat: string;\n object: ioBroker.StateObject;\n isFloatComma: boolean;\n t: Translate;\n lang: ioBroker.Languages;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ninterface ObjectBrowserValueState {\n /** The state value */\n targetValue: ioBroker.StateValue;\n /** State type */\n type: 'states' | 'string' | 'number' | 'boolean' | 'json';\n chart: boolean;\n chartEnabled: boolean;\n fullScreen: boolean;\n /** If input is invalid, set value button is disabled */\n valid: boolean;\n jsonError?: boolean;\n}\n\nclass ObjectBrowserValue extends Component<ObjectBrowserValueProps, ObjectBrowserValueState> {\n /** The state value */\n private readonly propsValue: any;\n\n /** Chart start date */\n private readonly chartFrom: number;\n\n /** Ack flag of the state */\n private ack: boolean;\n\n /** TextField Ref */\n private readonly inputRef = React.createRef<any>();\n\n /** State quality */\n private q: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];\n\n /** Expiration of the state */\n private expire: number;\n\n constructor(props: ObjectBrowserValueProps) {\n super(props);\n\n let type: 'states' | 'string' | 'number' | 'boolean' | 'json' = this.props.type;\n if (!type) {\n type = typeof this.props.value as 'boolean' | 'string' | 'number';\n }\n\n let value = this.props.value;\n this.propsValue = value;\n\n if (this.propsValue === null) {\n this.propsValue = 'null';\n } else if (this.propsValue === undefined) {\n this.propsValue = 'undefined';\n }\n\n if (this.props.states) {\n type = 'states';\n } else if (type === 'string' || type === 'json') {\n if (\n value &&\n typeof value === 'string' &&\n ((value.startsWith('[') && value.endsWith(']')) || (value.startsWith('{') && value.endsWith('}')))\n ) {\n try {\n value = JSON.parse(value);\n value = JSON.stringify(value, null, 2);\n this.propsValue = value;\n type = 'json';\n } catch {\n // ignore\n }\n }\n } else if (type === 'number') {\n value = parseFloat(this.propsValue) || 0;\n }\n\n this.state = {\n type,\n chart: false,\n chartEnabled:\n ((window as any)._localStorage || window.localStorage).getItem('App.chartSetValue') !== 'false',\n fullScreen: ((window as any)._localStorage || window.localStorage).getItem('App.fullScreen') === 'true',\n targetValue: value,\n /** If input is invalid, set value button is disabled */\n valid: true,\n jsonError: false,\n };\n\n this.ack = false;\n this.q = 0;\n this.expire = 0;\n\n this.inputRef = React.createRef();\n\n this.chartFrom = Date.now() - 3_600_000 * 2;\n }\n\n componentDidMount(): void {\n if (\n this.props.defaultHistory &&\n this.props.object?.common?.custom &&\n this.props.object.common.custom[this.props.defaultHistory]?.enabled\n ) {\n void this.props.socket\n .getState(`system.adapter.${this.props.defaultHistory}.alive`)\n .then((state: ioBroker.State | null | undefined) => this.setState({ chart: !!state?.val }));\n }\n\n setTimeout(() => {\n if (this.inputRef?.current) {\n const el = this.inputRef.current;\n const value = el.value || '';\n const origType = el.type;\n\n // type number cannot be selected, so we perform a short workaround\n if (el.type === 'number') {\n el.type = 'text';\n }\n\n el.setSelectionRange(0, value.length);\n\n if (origType === 'number') {\n el.type = origType;\n }\n }\n }, 200);\n }\n\n onUpdate(e: React.KeyboardEvent | React.MouseEvent): void {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n let value = this.state.targetValue;\n if (this.state.type === 'states') {\n if (value === 'null') {\n value = null;\n } else {\n const type = this.props.type || typeof this.state.targetValue;\n // @ts-expect-error deprecated\n value = typeof value === 'object' ? value.value : value;\n\n if (type === 'number') {\n if (typeof value === 'string') {\n value = parseFloat(value.replace(',', '.')) || 0;\n }\n } else if (type === 'boolean') {\n value = value === true || value === 'true' || value === '1' || value === 'ON' || value === 'on';\n }\n }\n } else if (this.state.type === 'number') {\n if (value === 'null') {\n value = null;\n } else if (typeof value === 'string') {\n value = parseFloat(value.replace(',', '.')) || 0;\n }\n } else if (this.state.type === 'boolean') {\n if (value === 'null') {\n value = null;\n } else {\n value = value === true || value === 'true' || value === '1' || value === 'ON' || value === 'on';\n }\n }\n\n this.props.onClose({\n val: value,\n ack: this.ack,\n q: this.q,\n expire: parseInt(this.expire as any as string, 10) || undefined,\n });\n }\n\n /**\n * Check if a number value is valid according to the objects common properties\n *\n * @param options value and common information\n */\n static isNumberValid(options: NumberValidationOptions): boolean {\n const { common, value } = options;\n\n if (value === '') {\n return false;\n }\n\n const numVal = Number(value);\n\n if (typeof common.min === 'number' && numVal < common.min) {\n return false;\n }\n\n return !(typeof common.max === 'number' && numVal > common.max);\n }\n\n /**\n * Render time picker component for date type\n */\n renderTimePicker(): JSX.Element {\n return (\n <LocalizationProvider\n adapterLocale={localeMap[this.props.lang]}\n dateAdapter={AdapterDateFns}\n >\n <DatePicker\n value={Number(this.state.targetValue) as any as Date}\n onChange={value => {\n if (!value) {\n return;\n }\n this.setState({ targetValue: Math.round(value.getTime()) });\n }}\n />\n\n <TimePicker\n value={Number(this.state.targetValue) as any as Date}\n views={['hours', 'minutes', 'seconds']}\n onChange={value => {\n if (!value) {\n return;\n }\n\n this.setState({ targetValue: Math.round(value.getTime()) });\n }}\n />\n </LocalizationProvider>\n );\n }\n\n renderChart(): JSX.Element {\n return (\n <ObjectChart\n t={this.props.t}\n isFloatComma={this.props.isFloatComma}\n showJumpToEchart={false}\n lang={this.props.lang}\n socket={this.props.socket}\n obj={this.props.object}\n themeType={this.props.themeType}\n theme={this.props.theme}\n from={this.chartFrom}\n end={Date.now()}\n noToolbar\n dateFormat={this.props.dateFormat}\n defaultHistory={this.props.defaultHistory}\n />\n );\n }\n\n static checkJsonError(value: string): boolean {\n try {\n JSON.parse(value);\n return false;\n } catch {\n return true;\n }\n }\n\n renderJsonEditor(): JSX.Element {\n return (\n <Editor\n error={this.state.jsonError}\n editValueMode\n themeType={this.props.themeType}\n defaultValue={(this.propsValue || '').toString()}\n onChange={(newValue: string) =>\n this.setState({\n targetValue: newValue,\n jsonError: ObjectBrowserValue.checkJsonError(newValue),\n })\n }\n />\n );\n }\n\n renderStates(): JSX.Element | null {\n if (!this.props.states) {\n return null;\n }\n if (\n this.props.type === 'number' &&\n this.props.object.common.max !== undefined &&\n this.props.object.common.min !== undefined\n ) {\n const options = Object.keys(this.props.states).map(key => ({\n label: this.props.states[key],\n value: key,\n }));\n\n return (\n <Autocomplete\n style={styles.formControl}\n disablePortal\n defaultValue={\n this.props.states[this.propsValue] !== undefined\n ? this.props.states[this.propsValue]\n : this.propsValue\n }\n options={options}\n noOptionsText=\"\"\n freeSolo\n getOptionLabel={option =>\n option?.label || (option !== undefined && option !== null ? option.toString() : '')\n }\n onChange={(e, value) => this.setState({ targetValue: value })}\n onInputChange={(e, value) => this.setState({ targetValue: value })}\n onKeyUp={e => e.key === 'Enter' && this.onUpdate(e)}\n renderInput={params => (\n <TextField\n {...params}\n label={this.props.t('Value')}\n variant=\"standard\"\n />\n )}\n />\n );\n }\n return (\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel>{this.props.t('Value')}</InputLabel>\n <Select\n variant=\"standard\"\n defaultValue={this.propsValue}\n onChange={e => this.setState({ targetValue: e.target.value })}\n >\n {Object.keys(this.props.states).map((key, i) => (\n <MenuItem\n key={i}\n value={key}\n >\n {this.props.states[key]}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n }\n\n render(): JSX.Element {\n const ackCheckbox = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n style={{\n ...styles.formControl,\n ...(!this.props.expertMode ? styles.ackCheckbox : undefined),\n }}\n control={\n <Checkbox\n defaultChecked={false}\n onChange={e => (this.ack = e.target.checked)}\n />\n }\n label={this.props.t('Acknowledged')}\n />\n <Tooltip\n title={this.props.t('Acknowledged explanation')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <InfoIcon color=\"primary\" />\n </Tooltip>\n </div>\n );\n\n return (\n <Dialog\n open={!0}\n maxWidth={\n this.state.type === 'number' || this.state.type === 'boolean' || this.state.type === 'states'\n ? this.state.chart && this.state.chartEnabled\n ? 'lg'\n : undefined\n : 'md'\n }\n fullWidth={\n (this.state.type === 'json' && this.state.fullScreen) ||\n (this.state.type !== 'number' && this.state.type !== 'boolean' && this.state.type !== 'states') ||\n (this.state.chart && this.state.chartEnabled)\n }\n fullScreen={this.state.type === 'json' && this.state.fullScreen}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n sx={{ '&. MuiDialog-paper': this.state.type === 'json' ? styles.dialog : undefined }}\n >\n <DialogTitle id=\"edit-value-dialog-title\">\n {this.props.t('Write value')}\n {this.props.object.common?.write === false ? (\n <span style={styles.readOnlyText}>({this.props.t('read only')})</span>\n ) : null}\n {/* this.state.chart ? <div style={{flexGrow: 1}}/> : null */}\n {this.state.chart ? (\n <Fab\n style={{ float: 'right' }}\n size=\"small\"\n color={this.state.chartEnabled ? 'primary' : 'default'}\n onClick={() => {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.chartSetValue',\n this.state.chartEnabled ? 'false' : 'true',\n );\n this.setState({ chartEnabled: !this.state.chartEnabled });\n }}\n >\n <ChartIcon />\n </Fab>\n ) : null}\n {this.state.type === 'json' ? (\n <IconButton\n style={{ float: 'right' }}\n onClick={() => {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.fullScreen',\n this.state.fullScreen ? 'false' : 'true',\n );\n this.setState({ fullScreen: !this.state.fullScreen });\n }}\n >\n {this.state.fullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}\n </IconButton>\n ) : null}\n </DialogTitle>\n <DialogContent>\n <form\n noValidate\n autoComplete=\"off\"\n onSubmit={() => false}\n style={{ ...styles.dialogForm, height: '100%' }}\n >\n <Grid2\n container\n direction=\"row\"\n spacing={2}\n style={{ height: '100%' }}\n >\n <Grid2\n size={{ xs: this.state.chart && this.state.chartEnabled ? 6 : 12 }}\n style={{ height: '100%' }}\n >\n <Grid2\n container\n direction=\"column\"\n spacing={2}\n style={{ marginTop: 0, height: '100%' }}\n >\n {this.props.expertMode ? (\n <Grid2>\n <Grid2\n container\n direction=\"row\"\n spacing={2}\n style={{ marginTop: 0 }}\n >\n {this.props.expertMode ? (\n <Grid2>\n <FormControl style={styles.formControl}>\n <InputLabel style={{ marginTop: 10, marginLeft: -14 }}>\n {this.props.t('Value type')}\n </InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n this.setState(\n {\n type: e.target.value as\n | 'states'\n | 'string'\n | 'number'\n | 'boolean'\n | 'json',\n valid:\n e.target.value === 'number'\n ? ObjectBrowserValue.isNumberValid({\n value: this.state.targetValue,\n common: this.props.object\n .common,\n })\n : true,\n jsonError: false,\n },\n () => {\n if (this.state.type === 'json') {\n this.setState({\n targetValue: (\n this.state.targetValue || ''\n ).toString(),\n jsonError:\n ObjectBrowserValue.checkJsonError(\n (\n this.state\n .targetValue || ''\n ).toString(),\n ),\n });\n }\n },\n );\n }}\n >\n <MenuItem value=\"string\">String</MenuItem>\n <MenuItem value=\"number\">Number</MenuItem>\n <MenuItem value=\"boolean\">Boolean</MenuItem>\n <MenuItem value=\"json\">JSON</MenuItem>\n {this.props.states ? (\n <MenuItem value=\"states\">States</MenuItem>\n ) : null}\n </Select>\n </FormControl>\n </Grid2>\n ) : null}\n {this.state.type === 'json' ? <Grid2 flex={1}></Grid2> : null}\n </Grid2>\n </Grid2>\n ) : null}\n <Grid2\n flex={this.state.type === 'json' && this.state.fullScreen ? 1 : undefined}\n style={{ paddingTop: 0 }}\n >\n {this.state.type === 'boolean' ? (\n <Typography\n component=\"div\"\n style={\n this.props.expertMode\n ? {\n marginTop: 20,\n width: '100%',\n backgroundColor:\n this.props.themeType === 'dark'\n ? '#595959'\n : '#dadada',\n borderRadius: 5,\n padding: 5,\n }\n : undefined\n }\n >\n <Grid2\n component=\"label\"\n container\n alignItems=\"center\"\n spacing={1}\n >\n <Grid2 style={{ marginRight: 10 }}>{this.props.t('Value')}:</Grid2>\n <Grid2>FALSE</Grid2>\n <Grid2>\n <Switch\n autoFocus\n defaultChecked={\n this.propsValue === 'null' ||\n this.propsValue === 'undefined'\n ? false\n : !!this.propsValue\n }\n onKeyUp={e => e.key === 'Enter' && this.onUpdate(e)}\n onChange={e =>\n this.setState({ targetValue: e.target.checked })\n }\n />\n </Grid2>\n <Grid2>TRUE</Grid2>\n </Grid2>\n </Typography>\n ) : this.state.type === 'number' ? (\n <TextField\n variant=\"standard\"\n fullWidth\n autoFocus\n error={!this.state.valid}\n type=\"number\"\n slotProps={{\n htmlInput: {\n step: this.props.object.common.step,\n min: this.props.object.common.min,\n max: this.props.object.common.max,\n },\n }}\n inputRef={this.inputRef}\n helperText={this.props.t(\n 'Press ENTER to write the value, when focused',\n )}\n value={this.state.targetValue.toString()}\n label={\n this.props.t('Value') +\n (this.props.object.common.min !== undefined ||\n this.props.object.common.unit === '%'\n ? `, ${this.props.t('min:')} ${this.props.object.common.min !== undefined ? this.props.object.common.min : 0}`\n : '') +\n (this.props.object.common.max !== undefined ||\n this.props.object.common.unit === '%'\n ? `, ${this.props.t('max:')} ${this.props.object.common.max !== undefined ? this.props.object.common.max : 100}`\n : '')\n }\n onKeyUp={e => e.key === 'Enter' && this.state.valid && this.onUpdate(e)}\n onChange={e => {\n this.setState({\n targetValue: e.target.value,\n valid: ObjectBrowserValue.isNumberValid({\n value: e.target.value,\n common: this.props.object.common,\n }),\n });\n }}\n />\n ) : this.state.type === 'json' ? (\n this.renderJsonEditor()\n ) : this.state.type === 'states' ? (\n this.renderStates()\n ) : (\n <TextField\n variant=\"standard\"\n fullWidth\n inputRef={this.inputRef}\n autoFocus\n helperText={this.props.t(\n 'Press CTRL+ENTER to write the value, when focused',\n )}\n label={this.props.t('Value')}\n multiline\n onKeyDown={e => e.ctrlKey && e.key === 'Enter' && this.onUpdate(e)}\n defaultValue={this.propsValue.toString()}\n onChange={e => this.setState({ targetValue: e.target.value })}\n />\n )}\n </Grid2>\n\n {(this.props.role === 'date' || this.props.role?.startsWith('date.')) &&\n this.state.type === 'number' ? (\n <Grid2\n style={{ display: 'flex', gap: '5px' }}\n size={{ xs: 6 }}\n >\n {this.renderTimePicker()}\n </Grid2>\n ) : null}\n\n {this.props.expertMode ? <Grid2>{ackCheckbox}</Grid2> : null}\n\n {this.props.expertMode ? (\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.quality}\n >\n <InputLabel>{this.props.t('Quality')}</InputLabel>\n <Select\n variant=\"standard\"\n defaultValue={0}\n onChange={e =>\n (this.q = Number(\n e.target.value,\n ) as ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY])\n }\n >\n <MenuItem value={0x00}>0x00 - good</MenuItem>\n\n <MenuItem value={0x01}>0x01 - general problem</MenuItem>\n <MenuItem value={0x02}>0x02 - no connection problem</MenuItem>\n\n <MenuItem value={0x10}>\n 0x10 - substitute value from controller\n </MenuItem>\n <MenuItem value={0x20}>0x20 - substitute initial value</MenuItem>\n <MenuItem value={0x40}>\n 0x40 - substitute value from device or instance\n </MenuItem>\n <MenuItem value={0x80}>\n 0x80 - substitute value from sensor\n </MenuItem>\n\n <MenuItem value={0x11}>0x11 - general problem by instance</MenuItem>\n <MenuItem value={0x41}>0x41 - general problem by device</MenuItem>\n <MenuItem value={0x81}>0x81 - general problem by sensor</MenuItem>\n\n <MenuItem value={0x12}>0x12 - instance not connected</MenuItem>\n <MenuItem value={0x42}>0x42 - device not connected</MenuItem>\n <MenuItem value={0x82}>0x82 - sensor not connected</MenuItem>\n\n <MenuItem value={0x44}>0x44 - device reports error</MenuItem>\n <MenuItem value={0x84}>0x84 - sensor reports error</MenuItem>\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n title={this.props.t('0 - no expiration')}\n sx={{ '&.MuiTextField-root': styles.expire }}\n label={this.props.t('Expire')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 0,\n },\n }}\n helperText={this.props.t('in seconds')}\n defaultValue={this.expire}\n onChange={e => (this.expire = Number(e.target.value))}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n {this.state.chart && this.state.chartEnabled && this.state.type !== 'json' ? (\n <Grid2\n size={{ xs: 6 }}\n style={{ minHeight: 300 }}\n sx={{ display: { sm: 'none', md: 'inline-block' } }}\n >\n {this.renderChart()}\n </Grid2>\n ) : null}\n </Grid2>\n </form>\n </DialogContent>\n <DialogActions sx={styles.wrapperButton}>\n {!this.props.expertMode ? ackCheckbox : null}\n {!this.props.expertMode ? <div style={{ flexGrow: 1 }} /> : null}\n <Button\n variant=\"contained\"\n disabled={!this.state.valid}\n onClick={e => this.onUpdate(e)}\n color=\"primary\"\n startIcon={this.props.width !== 'xs' ? <IconCheck /> : undefined}\n style={this.props.object.common?.write === false ? styles.readOnly : undefined}\n >\n {this.props.width !== 'xs' ? this.props.t('Set value') : <IconCheck fontSize=\"large\" />}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={this.props.width !== 'xs' ? <IconCancel /> : undefined}\n >\n {this.props.width !== 'xs' ? this.props.t('Cancel') : <IconCancel fontSize=\"large\" />}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserValue;\n","import React, { Component, type JSX } from 'react';\nimport moment from 'moment';\n\nimport 'moment/locale/de';\nimport 'moment/locale/es';\nimport 'moment/locale/fr';\nimport 'moment/locale/it';\nimport 'moment/locale/nl';\nimport 'moment/locale/pl';\nimport 'moment/locale/pt';\nimport 'moment/locale/ru';\nimport 'moment/locale/uk';\nimport 'moment/locale/zh-cn';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Tabs,\n Tab,\n TextField,\n Grid2,\n InputAdornment,\n Checkbox,\n FormControlLabel,\n Fab,\n IconButton,\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n Tooltip,\n Autocomplete,\n Box,\n} from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, Add as IconAdd, FileCopy as IconCopy } from '@mui/icons-material';\n\nimport { FaClipboard as IconCopyClipboard } from 'react-icons/fa';\n\nimport {\n Utils,\n I18n,\n DialogSelectID,\n IconFx,\n UploadImage,\n type Connection,\n type AdminConnection,\n type Translate,\n type ThemeType,\n type IobTheme,\n Icon,\n iobUriParse,\n iobUriRead,\n type IobUri,\n setAttrInObject,\n getAttrInObject,\n} from '@iobroker/adapter-react-v5';\nimport { JsonConfigComponent, type ConfigItemPanel, type ConfigItemTabs } from '@iobroker/json-config';\n\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n divWithoutTitle: {\n width: '100%',\n height: '100%',\n border: '2px solid #00000000',\n },\n divWithoutTitleAndTab: {\n height: 'calc(100% - 48px)',\n },\n error: {\n border: '2px solid #FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n dialog: {\n height: 'calc(100% - 64px)',\n },\n aliasIdEdit: {\n width: 400 - 32,\n },\n button: {\n marginTop: 20,\n marginLeft: 8,\n },\n funcDivEdit: {\n width: '100%',\n },\n funcEditName: {\n display: 'inline-block',\n width: 85,\n },\n funcEdit: {\n width: 400,\n },\n funcIcon: {\n width: 16,\n height: 16,\n },\n marginTop: {\n marginTop: 20,\n },\n commonTabWrapper: {\n flexFlow: 'wrap',\n display: 'flex',\n gap: 8,\n },\n commonWrapper: {\n width: 500,\n minWidth: 300,\n },\n flexDrop: {\n width: '100%',\n maxWidth: 500,\n margin: 'auto',\n display: 'flex',\n },\n marginBlock: {\n marginTop: 20,\n },\n buttonAdd: {\n minWidth: 150,\n },\n textField: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n '& > div': {\n mr: '8px',\n },\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n top: 20,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n color: {\n width: 70,\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n tabsPadding: {\n padding: '0px 24px',\n },\n wrapperButton: {\n '@media screen and (max-width: 465px)': {\n '& *': {\n fontSize: 10,\n },\n },\n '@media screen and (max-width: 380px)': {\n '& *': {\n fontSize: 9,\n },\n },\n },\n commonDeleteTip: {\n color: '#fa4a4a',\n },\n typeNameEng: {\n marginLeft: 8,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 'smaller',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n stateRow: {\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n '&:hover': {\n backgroundColor: '#00000030',\n },\n },\n stateTitle: {\n minWidth: 150,\n fontWeight: 'bold',\n },\n stateUnit: {\n opacity: 0.7,\n marginLeft: 4,\n },\n stateValue: {\n animation: 'newStateEditorAnimation 2s ease-in-out',\n },\n stateTime: {\n fontStyle: 'italic',\n },\n stateImage: {\n maxWidth: 200,\n maxHeight: 200,\n },\n};\n\nfunction valueBlink(theme: IobTheme, color: string): any {\n return {\n '@keyframes newStateEditorAnimation': {\n '0%': {\n color: theme.palette.mode === 'dark' ? '#27cf00' : '#174e00',\n },\n '100%': {\n color: color || (theme.palette.mode === 'dark' ? '#ffffff' : '#000000'),\n },\n },\n };\n}\n\nconst DEFAULT_ROLES = [\n 'button',\n 'button.close.blind',\n 'button.fastforward',\n 'button.forward',\n 'button.long',\n 'button.mode',\n 'button.mode.auto',\n 'button.mode.silent',\n 'button.next',\n 'button.open.blind',\n 'button.open.door',\n 'button.pause',\n 'button.stop',\n 'button.stop.tilt',\n 'button.volume.up',\n 'chart',\n 'date',\n 'date.end',\n 'date.forecast.1',\n 'date.start',\n 'date.sunrise',\n 'date.sunset',\n 'dayofweek',\n 'html',\n 'indicator',\n 'indicator.alarm',\n 'indicator.alarm.fire',\n 'indicator.alarm.flood',\n 'indicator.alarm.health',\n 'indicator.alarm.secure',\n 'indicator.connected',\n 'indicator.maintenance',\n 'indicator.maintenance.alarm',\n 'indicator.maintenance.lowbat',\n 'indicator.maintenance.waste',\n 'indicator.reachable',\n 'info.address',\n 'info.display',\n 'info.firmware',\n 'info.hardware',\n 'info.ip',\n 'info.mac',\n 'info.name',\n 'info.port',\n 'info.serial',\n 'info.standby',\n 'info.status',\n 'json',\n 'level',\n 'level.bass',\n 'level.blind',\n 'level.color.blue',\n 'level.color.hue',\n 'level.color.luminance',\n 'level.color.red',\n 'level.color.saturation',\n 'level.curtain',\n 'level.mode.airconditioner',\n 'level.mode.cleanup',\n 'level.mode.fan',\n 'level.mode.swing',\n 'level.mode.thermostat',\n 'level.mode.work',\n 'level.temperature',\n 'level.tilt',\n 'level.timer',\n 'level.treble',\n 'level.valve',\n 'level.volume',\n 'level.volume.group',\n 'list',\n 'location',\n 'media.add',\n 'media.bitrate',\n 'media.broadcastDate',\n 'media.browser',\n 'media.clear',\n 'media.content',\n 'media.cover',\n 'media.cover.big',\n 'media.cover.small',\n 'media.date',\n 'media.duration',\n 'media.duration.text',\n 'media.elapsed',\n 'media.elapsed.text',\n 'media.episode',\n 'media.genre',\n 'media.input',\n 'media.jump',\n 'media.link',\n 'media.mode.repeat',\n 'media.mode.shuffle',\n 'media.mute',\n 'media.mute.group',\n 'media.playid',\n 'media.playlist',\n 'media.season',\n 'media.seek',\n 'media.state',\n 'media.titel',\n 'media.track',\n 'media.tts',\n 'media.url',\n 'media.url.announcement',\n 'medien.artist',\n 'sensor.alarm',\n 'sensor.alarm.fire',\n 'sensor.alarm.flood',\n 'sensor.alarm.power',\n 'sensor.alarm.secure',\n 'sensor.door',\n 'sensor.light',\n 'sensor.lock',\n 'sensor.motion',\n 'sensor.noise',\n 'sensor.rain',\n 'sensor.window',\n 'state',\n 'switch',\n 'switch.enable',\n 'switch.gate',\n 'switch.gate',\n 'switch.light',\n 'switch.lock.door',\n 'switch.lock.window',\n 'switch.mode',\n 'switch.mode.auto',\n 'switch.mode.boost',\n 'switch.mode.color',\n 'switch.mode.manual',\n 'switch.mode.moonlight',\n 'switch.mode.party',\n 'switch.mode.silent',\n 'switch.power',\n 'switch.power.zone',\n 'text',\n 'text.phone',\n 'text.url',\n 'url',\n 'url.audio',\n 'url.blank',\n 'url.cam',\n 'url.same',\n 'value',\n 'value.battery',\n 'value.blind',\n 'value.blood.sugar',\n 'value.brightness',\n 'value.clouds',\n 'value.current',\n 'value.curtain',\n 'value.default',\n 'value.direction',\n 'value.direction.max.wind',\n 'value.direction.min.wind',\n 'value.direction.wind',\n 'value.direction.wind.forecast.0',\n 'value.direction.wind.forecast.1',\n 'value.distance',\n 'value.fill',\n 'value.gate',\n 'value.gps',\n 'value.gps.accuracy',\n 'value.gps.elevation',\n 'value.gps.latitude',\n 'value.gps.longitude',\n 'value.gps.radius',\n 'value.health.bmi',\n 'value.health.bpm',\n 'value.health.calories',\n 'value.health.fat',\n 'value.health.steps',\n 'value.health.weight',\n 'value.humidity',\n 'value.humidity',\n 'value.humidity.max',\n 'value.humidity.min',\n 'value.interval',\n 'value.lock',\n 'value.min',\n 'value.position',\n 'value.power',\n 'value.power.consumption',\n 'value.power.production',\n 'value.power.reactive',\n 'value.precipitation',\n 'value.precipitation.chance',\n 'value.precipitation.day.forecast.0',\n 'value.precipitation.forecast.0',\n 'value.precipitation.hour',\n 'value.precipitation.night.forecast.0',\n 'value.precipitation.today',\n 'value.precipitation.type',\n 'value.prepitation.forecast.0',\n 'value.prepitation.forecast.1',\n 'value.prepitation.forecast.1',\n 'value.pressure',\n 'value.pressure.forecast.0',\n 'value.pressure.forecast.1',\n 'value.radiation',\n 'value.rain',\n 'value.rain.hour',\n 'value.rain.today',\n 'value.severity',\n 'value.snow',\n 'value.snow.hour',\n 'value.snow.today',\n 'value.snowline',\n 'value.speed',\n 'value.speed.max.wind',\n 'value.speed.min.wind',\n 'value.speed.wind',\n 'value.speed.wind.forecast.0',\n 'value.speed.wind.gust',\n 'value.state',\n 'value.sun.azimuth',\n 'value.sun.elevation',\n 'value.temperature',\n 'value.temperature',\n 'value.temperature.dewpoint',\n 'value.temperature.feelslike',\n 'value.temperature.max',\n 'value.temperature.max.forecast.0',\n 'value.temperature.min',\n 'value.temperature.min.forecast.0',\n 'value.temperature.min.forecast.1',\n 'value.temperature.windchill',\n 'value.tilt',\n 'value.time',\n 'value.uv',\n 'value.valve',\n 'value.voltage',\n 'value.warning',\n 'value.waste',\n 'value.water',\n 'waether.title',\n 'weather.chart.url',\n 'weather.chart.url.forecast',\n 'weather.direction.wind',\n 'weather.direction.wind.forecast.0',\n 'weather.html',\n 'weather.icon',\n 'weather.icon.forecast.1',\n 'weather.icon.name',\n 'weather.icon.wind',\n 'weather.json',\n 'weather.state',\n 'weather.state.forecast.0',\n 'weather.state.forecast.1',\n 'weather.title.forecast.0',\n 'weather.title.short',\n 'weather.type',\n] as const;\n\ninterface EditSchemaTab {\n json: ConfigItemPanel | ConfigItemTabs;\n label?: ioBroker.StringOrTranslated;\n /** Do not translate label */\n noTranslation?: boolean;\n path?: string; // path in object, like common or native.json\n icon?: IobUri;\n color?: string;\n order?: number;\n}\n\ninterface EditSchemaTabEditor extends EditSchemaTab {\n key?: string;\n}\n\ninterface ObjectBrowserEditObjectProps {\n socket: Connection;\n obj: ioBroker.AnyObject;\n roleArray: string[];\n expertMode: boolean;\n themeType: ThemeType;\n theme: IobTheme;\n aliasTab: boolean;\n onClose: (obj?: ioBroker.AnyObject) => void;\n dialogName?: string;\n objects: Record<string, ioBroker.AnyObject>;\n dateFormat: string;\n isFloatComma: boolean;\n onNewObject: (obj: ioBroker.AnyObject) => void;\n t: Translate;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ninterface ObjectBrowserEditObjectState {\n text: string;\n error: boolean;\n customError: boolean;\n changed: boolean;\n readError: string;\n writeError: string;\n /** name of active tab */\n tab: string;\n showCopyDialog: string;\n showCommonDeleteMessage: boolean;\n selectId: boolean;\n selectRead: boolean;\n selectWrite: boolean;\n newId: string;\n customEditTabs?: EditSchemaTabEditor[];\n lang: ioBroker.Languages;\n value: ioBroker.State | null | undefined;\n}\n\nclass ObjectBrowserEditObject extends Component<ObjectBrowserEditObjectProps, ObjectBrowserEditObjectState> {\n /** Original object stringified */\n private originalObj: string;\n private subscribed = false;\n private updateTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: ObjectBrowserEditObjectProps) {\n super(props);\n\n const withAlias = this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state';\n let tab =\n ((window as any)._localStorage || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.editTab`,\n ) || 'object';\n\n // select another tab if alias not present\n if (tab === 'alias' && !withAlias) {\n tab = 'common';\n }\n if (this.props.aliasTab && withAlias) {\n tab = 'alias';\n }\n\n const obj = this.props.obj;\n\n const aliasRead =\n obj.common && 'type' in obj.common && 'alias' in obj.common ? obj.common.alias.read : undefined;\n const aliasWrite =\n obj.common && 'type' in obj.common && 'alias' in obj.common ? obj.common.alias.write : undefined;\n\n this.state = {\n text: JSON.stringify(this.props.obj, null, 2),\n error: false,\n customError: false,\n changed: false,\n readError: this.checkFunction(aliasRead, false),\n writeError: this.checkFunction(aliasWrite, true),\n tab,\n showCopyDialog: '',\n showCommonDeleteMessage: false,\n selectId: false,\n selectRead: false,\n selectWrite: false,\n newId: '',\n lang: I18n.getLanguage(),\n value: undefined,\n };\n\n moment.locale(this.state.lang);\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n async componentDidMount(): Promise<void> {\n // editSchemas is like 'iobobject://system.adapter.admin/native.schemas.specificObject'\n\n const editSchemas: Record<string, IobUri> | undefined =\n // @ts-expect-error fixed in js-controller\n (this.props.obj?.common?.editSchemas as Record<string, IobUri>) ||\n // @ts-expect-error fixed in js-controller\n (this.props.obj?.editSchemas as Record<string, IobUri>);\n\n const customEditTabs: EditSchemaTabEditor[] = [];\n\n if (editSchemas) {\n if (typeof editSchemas === 'object') {\n const schemas = Object.keys(editSchemas);\n for (let i = 0; i < schemas.length; i++) {\n try {\n const schema: EditSchemaTabEditor | undefined = (await iobUriRead(\n editSchemas[schemas[i]],\n this.props.socket,\n )) as EditSchemaTab;\n schema.key = schemas[i];\n if (schema && typeof schema === 'object') {\n // we expect { json: ..., title: {}, icon?, color? }\n customEditTabs.push(schema);\n }\n if (schema.icon) {\n try {\n const parsed = iobUriParse(schema.icon);\n if (parsed.type !== 'base64' && parsed.type !== 'http') {\n const icon = await iobUriRead(parsed, this.props.socket);\n if (icon) {\n schema.icon = icon;\n }\n }\n } catch (e) {\n console.warn(`Cannot get icon for schema from \"${schema.icon}\": ${e}`);\n schema.icon = undefined;\n }\n }\n } catch (e) {\n console.warn(`Cannot get edit schema for \"${editSchemas[schemas[i]]}\": ${e}`);\n }\n }\n if (customEditTabs.length) {\n customEditTabs.sort((a, b) => {\n if (a.order !== undefined && b.order !== undefined) {\n return a.order - b.order;\n }\n if (a.order !== undefined) {\n return -1;\n }\n if (b.order !== undefined) {\n return 1;\n }\n return a.key > b.key ? 1 : -1;\n });\n this.setState({ customEditTabs });\n }\n } else {\n console.warn(\n `Invalid edit schema for \"${editSchemas}\": expected object, but got ${typeof editSchemas}`,\n );\n }\n }\n\n if (\n this.state.tab === 'alias' &&\n (!this.props.obj._id.startsWith('alias.0') || this.props.obj.type !== 'state')\n ) {\n this.setState({ tab: 'object' });\n } else if (this.state.tab === 'state' && this.props.obj.type !== 'state') {\n this.setState({ tab: 'object' });\n } else if (\n this.state.tab !== 'object' &&\n this.state.tab !== 'common' &&\n this.state.tab !== 'alias' &&\n this.state.tab !== 'state' &&\n !customEditTabs.find(tab => tab.key === this.state.tab)\n ) {\n this.setState({ tab: 'object' });\n }\n\n if (this.state.tab === 'state') {\n this.subscribeOnState(true);\n }\n\n void this.props.socket.subscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n componentWillUnmount(): void {\n if (this.updateTimer) {\n clearInterval(this.updateTimer);\n this.updateTimer = null;\n }\n this.subscribeOnState(false);\n\n void this.props.socket.unsubscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n onObjectUpdated = (_id: string, obj: ioBroker.AnyObject): void => {\n if (this.originalObj !== JSON.stringify(obj, null, 2)) {\n this.originalObj = JSON.stringify(obj, null, 2);\n if (!this.state.changed) {\n this.setState({ text: this.originalObj });\n } else {\n this.forceUpdate();\n }\n }\n };\n\n checkFunction(func: string, isWrite: boolean): string {\n if (!func) {\n return '';\n }\n if (func.includes('JSON.parse(')) {\n // Unable to validate (a result is unknown)\n return '';\n }\n let json;\n try {\n json = JSON.parse(this.state.text);\n } catch {\n // ignore\n }\n\n let jsFunc;\n try {\n // eslint-disable-next-line no-new-func\n jsFunc = new Function('val', func.includes('return') ? func : `return ${func}`);\n } catch {\n return this.props.t('Cannot parse code!');\n }\n\n // if source and target types exist\n if (json?.common?.type && (this.props.objects[json.common.alias?.id]?.common as ioBroker.StateCommon)?.type) {\n const initialType: ioBroker.CommonType = isWrite\n ? json.common.type\n : (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type;\n const finalType: ioBroker.CommonType = isWrite\n ? (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type\n : json.common.type;\n if (initialType && finalType) {\n let arg = null;\n if (initialType === 'boolean') {\n arg = true;\n } else if (initialType === 'number') {\n arg = 1;\n } else if (initialType === 'string' || initialType === 'mixed') {\n arg = 'string';\n }\n if (arg !== null) {\n try {\n const result = jsFunc(arg);\n if (finalType === 'mixed') {\n // we cannot check the value with type mixed\n return '';\n }\n return result !== null && typeof result !== finalType\n ? this.props.t('Type of result is not as expected: %s', finalType)\n : '';\n } catch (e) {\n return `${this.props.t('Cannot execute function')}: ${e.toString()}`;\n }\n }\n }\n }\n\n return '';\n }\n\n prepareObject(value: string): ioBroker.Object {\n value = value || this.state.text;\n try {\n const obj = JSON.parse(value);\n obj._id = this.props.obj._id; // do not allow change of id\n\n // check aliases\n if (obj.common?.alias) {\n if (!obj.common.alias.id) {\n delete obj.common.alias.id;\n }\n if (\n (!obj.common.alias.read && obj.common.alias.read !== undefined) ||\n obj.common.alias.read === 'val'\n ) {\n delete obj.common.alias.read;\n }\n if (\n (!obj.common.alias.write && obj.common.alias.write !== undefined) ||\n obj.common.alias.write === 'val'\n ) {\n delete obj.common.alias.write;\n }\n if (!obj.common.alias.id && !obj.common.alias.read && !obj.common.alias.write) {\n delete obj.common.alias;\n }\n }\n\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n }\n\n return obj;\n } catch {\n return null;\n }\n }\n\n onChange(value: string, cb?: () => void): void {\n const json = this.prepareObject(value);\n const newState: Partial<ObjectBrowserEditObjectState> = { text: value };\n if (json) {\n newState.changed = this.originalObj !== JSON.stringify(json, null, 2);\n\n // check if some common attributes are deleted\n newState.showCommonDeleteMessage = false;\n const originalObj = JSON.parse(this.originalObj);\n if (json.common) {\n Object.keys(originalObj.common || {}).forEach(attr => {\n if (json.common[attr] === undefined) {\n newState.showCommonDeleteMessage = true;\n }\n });\n }\n\n newState.error = false;\n newState.readError = this.checkFunction(json.common?.alias?.read, false);\n newState.writeError = this.checkFunction(json.common?.alias?.write, true);\n } else {\n newState.showCommonDeleteMessage = false;\n newState.error = true;\n }\n\n this.setState(newState as ObjectBrowserEditObjectState, () => cb && cb());\n }\n\n onUpdate(): void {\n try {\n const obj = JSON.parse(this.state.text);\n obj._id = this.props.obj._id; // do not allow change of id\n\n // check aliases\n if (obj.common?.alias) {\n if (!obj.common.alias.id) {\n delete obj.common.alias.id;\n }\n if (\n (!obj.common.alias.read && obj.common.alias.read !== undefined) ||\n obj.common.alias.read === 'val'\n ) {\n delete obj.common.alias.read;\n }\n if (\n (!obj.common.alias.write && obj.common.alias.write !== undefined) ||\n obj.common.alias.write === 'val'\n ) {\n delete obj.common.alias.write;\n }\n if (!obj.common.alias.id && !obj.common.alias.read && !obj.common.alias.write) {\n delete obj.common.alias;\n }\n }\n\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n }\n\n this.props.onClose(obj);\n } catch {\n console.error(`Cannot parse: ${this.state.text}`);\n }\n }\n\n static getPartOfObject(text: string, path?: string): any {\n if (path) {\n return getAttrInObject(JSON.parse(text), path.split('.'));\n }\n return JSON.parse(text);\n }\n\n static setPartOfObject(text: string, value: any, path?: string): string {\n let data: any = JSON.parse(text);\n if (data === undefined) {\n return text;\n }\n data = setAttrInObject(data, path.split('.'), value);\n return JSON.stringify(data, null, 2);\n }\n\n renderCustomPanel(): JSX.Element | null {\n const tab = this.state.customEditTabs?.find(it => it.key === this.state.tab);\n if (!tab) {\n return null;\n }\n let data: Record<string, any>;\n try {\n data = ObjectBrowserEditObject.getPartOfObject(this.state.text, tab.path);\n } catch (e) {\n console.error(`Cannot get data for ${tab.path}: ${e}`);\n return <div>{I18n.t('Cannot get data for %s: %s', tab.path, e)}</div>;\n }\n\n if (!data) {\n return <div>{I18n.t('Cannot get data for %s', tab.path)}</div>;\n }\n\n return (\n <JsonConfigComponent\n theme={this.props.theme}\n socket={this.props.socket as unknown as AdminConnection}\n themeName={this.props.theme.palette.mode}\n themeType={this.props.theme.palette.mode}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n schema={tab.json}\n data={data}\n onChange={data => {\n try {\n const text = ObjectBrowserEditObject.setPartOfObject(this.state.text, data, tab.path);\n this.onChange(text);\n } catch (e) {\n console.error(`Cannot set data for ${tab.path}: ${e}`);\n }\n }}\n adapterName={''}\n instance={0}\n onError={(error: boolean): void => {\n console.warn(`Error in JSON editor: ${error}`);\n if (this.state.customError !== error) {\n this.setState({ customError: error });\n }\n }}\n />\n );\n }\n\n renderCustomTab(tab: EditSchemaTabEditor, parsedObj: ioBroker.Object | null | undefined): JSX.Element {\n let style: React.CSSProperties | undefined;\n if (!parsedObj) {\n return null;\n }\n if (!getAttrInObject(parsedObj, tab.path?.split('.'))) {\n // no part in object found\n return null;\n }\n\n if (tab.color) {\n style = {\n backgroundColor: tab.color,\n color: Utils.invertColor(tab.color, true),\n };\n }\n\n const label: string | React.JSX.Element =\n tab.label && typeof tab.label === 'object'\n ? tab.label[this.state.lang] || tab.label.en\n : tab.noTranslation\n ? (tab.label as string) || tab.key\n : this.props.t((tab.label as string) || tab.key);\n\n return (\n <Tab\n disabled={this.state.error || this.state.customError}\n value={tab.key}\n label={label}\n style={style}\n iconPosition=\"start\"\n icon={\n tab.icon ? (\n <Icon\n src={tab.icon}\n style={styles.funcIcon}\n />\n ) : undefined\n }\n />\n );\n }\n\n renderStateTab(): JSX.Element | null {\n if (\n this.props.obj.type !== 'state' ||\n // @ts-expect-error file is deprecated, but could appear\n this.props.obj.common.type === 'file'\n ) {\n return null;\n }\n\n return (\n <Tab\n disabled={this.state.customError || this.state.error}\n value=\"state\"\n label={this.props.t('State')}\n />\n );\n }\n\n renderStatePanel(): JSX.Element {\n if (this.state.value === undefined || this.state.value === null) {\n return <div>{this.props.t('State does not exist')}</div>;\n }\n if (typeof this.state.value !== 'object') {\n return (\n <div>\n <div>{this.props.t('State is invalid')}</div>\n <div>\n <pre>{JSON.stringify(this.state.value, null, 4)}</pre>\n </div>\n </div>\n );\n }\n\n let strVal: string | React.JSX.Element | undefined;\n const styleValue: React.CSSProperties = {};\n const v = this.state.value.val;\n const type = typeof v;\n\n if (v === undefined) {\n strVal = '[undef]';\n styleValue.color = '#bc6400';\n styleValue.fontStyle = 'italic';\n } else if (v === null) {\n strVal = '(null)';\n styleValue.color = '#0047b1';\n styleValue.fontStyle = 'italic';\n } else if (\n typeof this.props.obj.common.role === 'string' &&\n this.props.obj.common.role.match(/^value\\.time|^date/)\n ) {\n // if timestamp\n if (v && type === 'string') {\n if (Utils.isStringInteger(v as string)) {\n // we assume a unix ts\n strVal = new Date(parseInt(v as string, 10)).toString();\n } else {\n // check if parsable by new date\n try {\n const parsedDate = new Date(v as string);\n\n if (Utils.isValidDate(parsedDate)) {\n strVal = parsedDate.toString();\n }\n } catch {\n // ignore\n }\n }\n } else if (v && type === 'number') {\n if ((v as number) > 946681200 && (v as number) < 946681200000) {\n // '2000-01-01T00:00:00' => 946681200000\n strVal = new Date((v as number) * 1_000).toString(); // maybe the time is in seconds (UNIX time)\n } else if ((v as number) > 946681200000000) {\n // \"null\" and undefined could not be here. See `let v = (isCommon && isCommon.type === 'file') ....` above\n strVal = new Date(v as number).toString();\n }\n }\n }\n\n if (!strVal) {\n if (type === 'number') {\n if (!Number.isInteger(v)) {\n strVal = (Math.round((v as number) * 1_000_000_000) / 1_000_000_000).toString(); // remove 4.00000000000000001\n if (this.props.isFloatComma) {\n strVal = strVal.toString().replace('.', ',');\n }\n }\n } else if (type === 'boolean') {\n strVal = v ? I18n.t('true') : I18n.t('false');\n styleValue.color = v ? '#139800' : '#cd6b55';\n } else if (type === 'object') {\n strVal = JSON.stringify(v);\n } else if (type === 'string' && (v as string).startsWith('data:image/')) {\n strVal = (\n <img\n src={v as string}\n alt=\"img\"\n style={styles.stateImage}\n />\n );\n } else {\n strVal = v.toString();\n }\n }\n\n Object.assign(styleValue, valueBlink(this.props.theme, styleValue.color));\n\n return (\n <div\n style={{\n ...styles.divWithoutTitle,\n padding: '24px 24px 0 24px',\n fontSize: 16,\n }}\n >\n <div\n style={{\n ...styles.stateRow,\n marginBottom: 24,\n }}\n >\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_value')}:</div>\n <Box\n component=\"div\"\n key={typeof strVal === 'string' ? strVal : 'image'}\n sx={styleValue}\n style={styles.stateValue}\n >\n {strVal}\n {(this.props.obj.common as ioBroker.StateCommon)?.unit ? (\n <span style={styles.stateUnit}>{(this.props.obj.common as ioBroker.StateCommon).unit}</span>\n ) : null}\n </Box>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('Type')}:</div>\n <div style={styles.stateValue}>{type}</div>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_ts')}:</div>\n <Tooltip\n title={new Date(this.state.value.ts).toLocaleString()}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={styles.stateValue}>\n <span style={styles.stateTime}>{moment(this.state.value.ts).fromNow()}</span>\n </div>\n </Tooltip>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_ack')}:</div>\n <div\n style={{\n ...styles.stateValue,\n color: this.state.value.ack ? 'green' : 'red',\n }}\n >\n {this.state.value.ack ? I18n.t('Acknowledged') : I18n.t('Command')}\n {this.state.value.ack ? ' (true)' : ' (false)'}\n </div>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_lc')}:</div>\n <Tooltip\n title={new Date(this.state.value.lc).toLocaleString()}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div style={styles.stateValue}>\n <span style={styles.stateTime}>{moment(this.state.value.lc).fromNow()}</span>\n </div>\n </Tooltip>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_quality')}:</div>\n <div style={styles.stateValue}>{Utils.quality2text(this.state.value.q || 0).join(', ')}</div>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_from')}:</div>\n <div style={styles.stateValue}>{this.state.value.from}</div>\n </div>\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_user')}:</div>\n <div style={styles.stateValue}>{this.state.value.user || '--'}</div>\n </div>\n {this.state.value.expire ? (\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_expire')}:</div>\n <div style={styles.stateValue}>\n {this.state.value.expire} {I18n.t('sc_seconds')}\n </div>\n </div>\n ) : null}\n {this.state.value.c ? (\n <div style={styles.stateRow}>\n <div style={styles.stateTitle}>{I18n.t('ra_tooltip_comment')}:</div>\n <div style={styles.stateValue}>{this.state.value.c}</div>\n </div>\n ) : null}\n </div>\n );\n }\n\n onStateChange = (id: string, state: ioBroker.State | null | undefined): void => {\n if (JSON.stringify(state) !== JSON.stringify(this.state.value)) {\n this.setState({ value: state });\n }\n };\n\n subscribeOnState(enable: boolean): void {\n if (enable) {\n if (!this.subscribed) {\n if (!this.updateTimer) {\n this.updateTimer = setInterval(() => {\n // update times\n this.forceUpdate();\n }, 5000);\n }\n this.subscribed = true;\n void this.props.socket.subscribeState(this.props.obj._id, this.onStateChange);\n }\n } else {\n if (this.subscribed) {\n if (this.updateTimer) {\n clearInterval(this.updateTimer);\n this.updateTimer = null;\n }\n this.subscribed = false;\n void this.props.socket.unsubscribeState(this.props.obj._id, this.onStateChange);\n }\n }\n }\n\n renderTabs(parsedObj: ioBroker.Object | null | undefined): JSX.Element {\n return (\n <Tabs\n style={styles.tabsPadding}\n value={this.state.tab}\n onChange={(_e, tab) => {\n ((window as any)._localStorage || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.editTab`,\n tab,\n );\n\n if (tab === 'object') {\n try {\n const obj = JSON.parse(this.state.text);\n let changed = false;\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n changed = true;\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n changed = true;\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n changed = true;\n }\n if (changed) {\n this.setState({ text: JSON.stringify(obj, null, 2) });\n }\n } catch {\n // ignore\n }\n this.subscribeOnState(false);\n } else if (tab === 'state') {\n this.subscribeOnState(true);\n } else {\n this.subscribeOnState(false);\n }\n\n this.setState({ tab });\n }}\n >\n <Tab\n value=\"common\"\n disabled={this.state.customError || this.state.error}\n label={this.props.t('Common')}\n />\n <Tab\n value=\"object\"\n disabled={this.state.customError}\n label={this.props.t('Object data')}\n />\n {this.renderStateTab()}\n {this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state' && (\n <Tab\n disabled={this.state.customError || this.state.error}\n value=\"alias\"\n label={this.props.t('Alias')}\n />\n )}\n {this.state.customEditTabs?.map(tab => this.renderCustomTab(tab, parsedObj))}\n </Tabs>\n );\n }\n\n renderSelectDialog(): JSX.Element {\n if (!this.state.selectId && !this.state.selectRead && !this.state.selectWrite) {\n return null;\n }\n\n let id = '';\n let json: ioBroker.StateObject;\n try {\n json = JSON.parse(this.state.text);\n\n const aliasRead =\n json.common && 'type' in json.common && 'alias' in json.common ? json.common.alias?.read : '';\n const aliasWrite =\n json.common && 'type' in json.common && 'alias' in json.common ? json.common.alias?.write : '';\n\n if (this.state.selectId) {\n id = (json.common?.alias?.id as string) || '';\n } else if (this.state.selectRead) {\n id = aliasRead ?? '';\n } else if (this.state.selectWrite) {\n id = aliasWrite ?? '';\n }\n } catch {\n console.error(`Cannot parse ${this.state.text}`);\n }\n\n return (\n <DialogSelectID\n key=\"selectDialog\"\n imagePrefix=\".\"\n dateFormat={this.props.dateFormat}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n socket={this.props.socket}\n dialogName=\"aliasesEdit\"\n title={`${this.props.t('Select for')} ${this.props.obj._id}`}\n selected={id}\n onOk={(idx: string | string[] | undefined) => {\n const selectRead = this.state.selectRead;\n const selectWrite = this.state.selectWrite;\n const selectId = this.state.selectId;\n const stateId = Array.isArray(idx) ? idx[0] : idx;\n this.setState({ selectId: false, selectRead: false, selectWrite: false }, () => {\n if (selectRead) {\n this.setAliasItem(json, 'id.read', stateId);\n } else if (selectWrite) {\n this.setAliasItem(json, 'id.write', stateId);\n } else if (selectId) {\n this.setAliasItem(json, 'id', stateId);\n }\n });\n }}\n onClose={() => this.setState({ selectId: false, selectRead: false, selectWrite: false })}\n />\n );\n }\n\n setAliasItem(json: ioBroker.StateObject, name: string, value: string, cb?: () => void): void {\n json.common = json.common || ({} as any);\n const commonAlias = json.common.alias || ({} as Record<string, any>);\n\n if (name === 'id.read') {\n if (commonAlias.id && typeof commonAlias.id === 'object') {\n commonAlias.id.read = value;\n } else {\n commonAlias.id = { read: value, write: value };\n }\n } else if (name === 'id.write') {\n if (commonAlias.id && typeof commonAlias.id === 'object') {\n commonAlias.id.write = value;\n } else {\n commonAlias.id = { read: value, write: value };\n }\n } else {\n (commonAlias as any)[name] = value;\n }\n\n // @ts-expect-error fix later\n json.common.alias = commonAlias;\n this.onChange(JSON.stringify(json, null, 2), cb);\n }\n\n setCommonItem(json: Record<string, any>, name: string, value: any): void {\n json.common[name] = value;\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n removeCommonItem(json: Record<string, any>, name: string): void {\n delete json.common[name];\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n static buttonAddKey(nameKey: string, cb: () => void): JSX.Element {\n return (\n <div style={styles.marginBlock}>\n <Button\n style={styles.buttonAdd}\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<IconAdd />}\n onClick={cb}\n >\n {nameKey}\n </Button>\n </div>\n );\n }\n\n buttonRemoveKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <Tooltip\n title={t('Remove attribute %s', nameKey)}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={cb}\n />\n </Tooltip>\n );\n }\n\n renderCommonEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const stateTypeArray: ioBroker.CommonType[] = ['number', 'string', 'boolean', 'array', 'object', 'mixed'];\n const disabled = false;\n const { t, roleArray, obj } = this.props;\n const checkState = obj.type === 'state';\n const checkRole = obj.type === 'channel' || obj.type === 'device' || checkState;\n\n // add default roles to roleArray\n const bigRoleArray: string[] = [...DEFAULT_ROLES];\n roleArray.forEach(role => !bigRoleArray.includes(role) && bigRoleArray.push(role));\n bigRoleArray.sort();\n\n let iconPath;\n\n if (json.common.icon) {\n iconPath =\n json.type === 'instance' || json.type === 'adapter'\n ? `./adapter/${json.common.name}/${json.common.icon}`\n : json.common.icon;\n if (!iconPath.startsWith('.') && !iconPath.startsWith('/') && !iconPath.startsWith('data:')) {\n const parts = obj._id.split('.');\n if (parts[0] === 'system') {\n iconPath = `adapter/${parts[2]}${iconPath.startsWith('/') ? '' : '/'}${iconPath}`;\n } else {\n iconPath = `adapter/${parts[0]}${iconPath.startsWith('/') ? '' : '/'}${iconPath}`;\n }\n }\n }\n return (\n <Box\n style={styles.commonTabWrapper}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.onUpdate();\n }\n }}\n >\n <Box\n style={{\n ...styles.commonWrapper,\n width: this.props.width === 'xs' ? '100%' : undefined,\n minWidth: this.props.width === 'xs' ? '100%' : undefined,\n gap: this.props.width === 'xs' ? 10 : 8,\n display: this.props.width === 'xs' ? 'flex' : undefined,\n flexDirection: this.props.width === 'xs' ? 'column' : undefined,\n }}\n >\n {typeof json.common.name !== 'undefined' ? (\n <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('Name')}\n style={{ ...styles.textField, marginTop: 8 }}\n fullWidth\n value={Utils.getObjectNameFromObj(json, I18n.getLanguage(), {}, false, true)}\n onChange={el => this.setCommonItem(json, 'name', el.target.value)}\n />\n ) : (\n ObjectBrowserEditObject.buttonAddKey('name', () => this.setCommonItem(json, 'name', ''))\n )}\n {checkState ? (\n typeof json.common.type !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControl\n style={styles.marginBlock}\n fullWidth\n >\n <InputLabel style={{ transform: 'scale(0.75)' }}>{t('State type')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={disabled}\n value={json.common.type}\n onChange={el => this.setCommonItem(json, 'type', el.target.value)}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {t(el)}\n <span style={styles.typeNameEng}>({el})</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {this.buttonRemoveKey('type', () => this.removeCommonItem(json, 'type'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('type', () =>\n this.setCommonItem(json, 'type', 'string'),\n )\n )\n ) : null}\n <Box\n component=\"div\"\n sx={{ ...styles.flex, flexWrap: this.props.width === 'xs' ? 'wrap' : undefined }}\n >\n {checkState ? (\n typeof json.common.read !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControlLabel\n style={styles.marginBlock}\n control={\n <Checkbox\n disabled={disabled}\n checked={json.common.read}\n // @ts-expect-error check later\n onClick={el => this.setCommonItem(json, 'read', el.target.checked)}\n />\n }\n label={t('Readable')}\n />\n {this.buttonRemoveKey('read', () => this.removeCommonItem(json, 'read'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('read', () =>\n this.setCommonItem(json, 'read', true),\n )\n )\n ) : null}\n {checkState ? (\n typeof json.common.write !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControlLabel\n style={styles.marginBlock}\n control={\n <Checkbox\n disabled={disabled}\n checked={json.common.write}\n // @ts-expect-error check later\n onClick={el => this.setCommonItem(json, 'write', el.target.checked)}\n />\n }\n label={t('Writeable')}\n />\n {this.buttonRemoveKey('write', () => this.removeCommonItem(json, 'write'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('write', () =>\n this.setCommonItem(json, 'write', true),\n )\n )\n ) : null}\n </Box>\n {checkRole ? (\n typeof json.common.role !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <Autocomplete\n style={styles.marginBlock}\n fullWidth\n disabled={disabled}\n value={json.common.role}\n onChange={(_, e) => this.setCommonItem(json, 'role', e)}\n options={roleArray}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n label={t('Role')}\n />\n )}\n />\n {this.buttonRemoveKey('role', () => this.removeCommonItem(json, 'role'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('role', () => this.setCommonItem(json, 'role', ''))\n )\n ) : null}\n {typeof json.common.color !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n style={{ ...styles.marginBlock, ...styles.color }}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n )}\n <Box\n component=\"div\"\n sx={{\n ...styles.flex,\n flexWrap: this.props.width === 'xs' ? 'wrap' : undefined,\n gap: this.props.width === 'xs' ? '10px' : undefined,\n }}\n >\n {json.common.type === 'number' ? (\n typeof json.common.min !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Min')}\n value={json.common.min}\n onChange={el => this.setCommonItem(json, 'min', el.target.value)}\n />\n {this.buttonRemoveKey('min', () => this.removeCommonItem(json, 'min'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('min', () =>\n this.setCommonItem(json, 'min', 0),\n )}\n </Box>\n )\n ) : null}\n {json.common.type === 'number' ? (\n typeof json.common.max !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Max')}\n value={json.common.max}\n onChange={el => this.setCommonItem(json, 'max', el.target.value)}\n />\n {this.buttonRemoveKey('max', () => this.removeCommonItem(json, 'max'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('max', () =>\n this.setCommonItem(json, 'max', 100),\n )}\n </Box>\n )\n ) : null}\n {json.common.type === 'number' ? (\n typeof json.common.step !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Step')}\n value={json.common.step}\n onChange={el => this.setCommonItem(json, 'step', el.target.value)}\n />\n {this.buttonRemoveKey('step', () => this.removeCommonItem(json, 'step'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('step', () =>\n this.setCommonItem(json, 'step', 1),\n )}\n </Box>\n )\n ) : null}\n </Box>\n {json.common.type === 'number' ? (\n typeof json.common.unit !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Unit')}\n value={json.common.unit}\n onChange={el => this.setCommonItem(json, 'unit', el.target.value)}\n />\n {this.buttonRemoveKey('unit', () => this.removeCommonItem(json, 'unit'))}\n </Box>\n ) : (\n <div style={styles.flexDrop}>\n {ObjectBrowserEditObject.buttonAddKey('unit', () =>\n this.setCommonItem(json, 'unit', ''),\n )}\n </div>\n )\n ) : null}\n </Box>\n {typeof json.common.icon !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n style={{ flexGrow: 1, minWidth: 158 }}\n >\n <UploadImage\n disabled={disabled}\n maxSize={10 * 1024}\n icon={iconPath}\n removeIconFunc={() => this.setCommonItem(json, 'icon', '')}\n onChange={base64 => this.setCommonItem(json, 'icon', base64)}\n />\n {this.buttonRemoveKey('icon', () => this.removeCommonItem(json, 'icon'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </Box>\n )}\n </Box>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n renderAliasEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const funcVisible = json.common?.alias?.read !== undefined || json.common?.alias?.write !== undefined;\n\n return (\n <Grid2\n container\n direction=\"column\"\n style={styles.marginTop}\n >\n <Grid2>\n <FormControlLabel\n control={\n <Checkbox\n checked={typeof json.common?.alias?.id === 'object'}\n onChange={() => {\n if (typeof json.common?.alias?.id === 'object') {\n this.setAliasItem(json, 'id', json.common?.alias?.id?.read || '');\n } else {\n this.setAliasItem(json, 'id.read', json.common?.alias?.id || '');\n }\n }}\n />\n }\n label={this.props.t('Different IDs for read and write')}\n />\n </Grid2>\n {typeof json.common?.alias?.id !== 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias state')}\n value={json.common?.alias?.id || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: true, selectRead: false, selectWrite: false })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n\n {typeof json.common?.alias?.id === 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias read state')}\n value={json.common?.alias?.id?.read || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id?.read ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id.read', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: false, selectRead: true, selectWrite: false })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n\n {typeof json.common?.alias?.id === 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias write state')}\n value={json.common?.alias?.id?.write || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id?.write ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id.write', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: false, selectRead: false, selectWrite: true })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n <Grid2 style={styles.marginTop}>\n <FormControlLabel\n control={\n <Checkbox\n checked={\n json.common?.alias?.read !== undefined ||\n json.common?.alias?.write !== undefined\n }\n onChange={() => {\n if (funcVisible) {\n delete json.common.alias.read;\n delete json.common.alias.write;\n } else {\n json.common = json.common || {};\n json.common.alias = json.common.alias || {};\n json.common.alias.read = 'val';\n json.common.alias.write = 'val';\n }\n this.onChange(JSON.stringify(json, null, 2));\n }}\n />\n }\n label={this.props.t('Use convert functions')}\n />\n </Grid2>\n {funcVisible ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Read converter')}\n value={json.common?.alias?.read || 'val'}\n style={styles.funcEdit}\n error={!!this.state.readError}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.read ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n onChange={e => this.setAliasItem(json, 'read', e.target.value)}\n helperText={\n this.state.readError || `${this.props.t('JS function like')} \"val / 5 + 21\"`\n }\n margin=\"normal\"\n />\n </Grid2>\n ) : null}\n {funcVisible ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Write converter')}\n error={!!this.state.writeError}\n value={json.common?.alias?.write || 'val'}\n helperText={\n this.state.writeError || `${this.props.t('JS function like')} \"(val - 21) * 5\"`\n }\n style={styles.funcEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.write ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n onChange={e => this.setAliasItem(json, 'write', e.target.value)}\n margin=\"normal\"\n />\n </Grid2>\n ) : null}\n </Grid2>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n onCopy(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void {\n Utils.copyToClipboard(this.state.text, e as unknown as Event);\n window.alert(this.props.t('ra_Copied'));\n }\n\n onClone(oldId: string, newId: string): void {\n const newObj = JSON.parse(JSON.stringify(this.props.objects[oldId]));\n delete newObj.from;\n delete newObj.ts;\n delete newObj.user;\n newObj._id = newId;\n this.props.objects[newObj._id] = newObj; // bad practice, but no time to wait till this object will be created\n this.props.onNewObject(newObj);\n }\n\n renderCopyDialog(): JSX.Element | null {\n if (!this.state.showCopyDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n maxWidth=\"md\"\n fullWidth\n onClose={() => this.setState({ showCopyDialog: '' })}\n >\n <DialogTitle>{this.props.t('Enter new ID for this object')}</DialogTitle>\n <DialogContent>\n <TextField\n variant=\"standard\"\n autoFocus\n fullWidth\n label={this.props.t('New object ID')}\n value={this.state.newId}\n onKeyDown={e => {\n if (e.key === 'Enter' && !this.props.objects[this.state.newId]) {\n this.setState({ showCopyDialog: '' });\n this.onClone(this.state.showCopyDialog, this.state.newId);\n }\n }}\n onChange={e => this.setState({ newId: e.target.value })}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!!this.props.objects[this.state.newId]}\n onClick={() => {\n this.setState({ showCopyDialog: '' });\n this.onClone(this.state.showCopyDialog, this.state.newId);\n }}\n color=\"primary\"\n startIcon={<IconCopy />}\n >\n {this.props.t('Clone')}\n </Button>\n <Button\n color=\"grey\"\n onClick={() => this.setState({ showCopyDialog: '' })}\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderPanelObject(withAlias: boolean): React.JSX.Element {\n return (\n <div\n style={{\n ...styles.divWithoutTitle,\n ...(withAlias ? styles.divWithoutTitleAndTab : undefined),\n ...(this.state.error ? styles.error : undefined),\n }}\n onKeyDown={e => {\n if (e.ctrlKey && e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.onUpdate();\n }\n }}\n >\n <Editor\n value={this.state.text}\n onChange={newValue => this.onChange(newValue)}\n name=\"UNIQUE_ID_OF_DIV\"\n themeType={this.props.themeType}\n />\n {this.state.showCommonDeleteMessage ? (\n <div style={styles.commonDeleteTip}>{I18n.t('common_delete_tip')}</div>\n ) : null}\n </div>\n );\n }\n\n render(): JSX.Element {\n const obj = this.props.obj;\n\n const withAlias = obj._id.startsWith('alias.0') && obj.type === 'state';\n const fullWidth = obj.type !== 'state' || (obj.common.type !== 'number' && obj.common.type !== 'boolean');\n\n let dialogStyle = styles.dialog;\n if (window.innerWidth > 1920) {\n dialogStyle = { ...dialogStyle, maxWidth: 'calc(100% - 150px)' };\n }\n\n let parsedObj: ioBroker.Object;\n try {\n parsedObj = JSON.parse(this.state.text);\n } catch {\n // ignore\n }\n\n return (\n <Dialog\n sx={{ '& .MuiPaper-root': dialogStyle }}\n open={!0}\n maxWidth=\"xl\"\n fullWidth={fullWidth}\n fullScreen={false}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n >\n <DialogTitle\n id=\"edit-value-dialog-title\"\n style={{\n width: 'calc(100% - 32px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {this.props.t('Edit object:')}{' '}\n <Box\n component=\"span\"\n style={styles.id}\n sx={{ fontSize: { xs: 10 } }}\n >\n {this.props.obj._id}\n </Box>\n </DialogTitle>\n\n {this.renderTabs(parsedObj)}\n {this.renderCopyDialog()}\n\n <DialogContent\n sx={{\n p:\n this.props.width === 'xs' && this.state.tab === 'object'\n ? '6px'\n : this.state.tab === 'object' ||\n this.state.tab === 'common' ||\n this.state.tab === 'alias'\n ? '0 24px'\n : '0 6px',\n overflow:\n this.state.tab === 'object' || this.state.tab === 'common' || this.state.tab === 'alias'\n ? undefined\n : 'hidden',\n }}\n >\n {this.state.tab === 'object' ? this.renderPanelObject(withAlias) : null}\n {this.state.tab === 'alias' &&\n this.props.obj._id.startsWith('alias.0') &&\n this.props.obj.type === 'state'\n ? this.renderAliasEdit()\n : null}\n {this.state.tab === 'common' ? this.renderCommonEdit() : null}\n {this.state.tab === 'state' ? this.renderStatePanel() : null}\n {this.renderCustomPanel()}\n {this.renderSelectDialog()}\n </DialogContent>\n <DialogActions sx={styles.wrapperButton}>\n <Button\n color=\"grey\"\n onClick={() => this.setState({ showCopyDialog: this.props.obj._id, newId: this.props.obj._id })}\n disabled={this.state.error || this.state.changed}\n title={this.props.t('Create a copy of this object')}\n >\n <IconCopy fontSize={this.props.width === 'xs' ? 'large' : undefined} />\n </Button>\n <div style={{ flexGrow: 1 }} />\n {this.state.tab === 'object' && (\n <Button\n color=\"grey\"\n onClick={e => this.onCopy(e)}\n disabled={this.state.error}\n title={this.props.width === 'xs' ? this.props.t('Copy into clipboard') : ''}\n startIcon={this.props.width === 'xs' ? undefined : <IconCopyClipboard />}\n >\n {this.props.width === 'xs' ? (\n <IconCopyClipboard fontSize={32} />\n ) : (\n this.props.t('Copy into clipboard')\n )}\n </Button>\n )}\n <Button\n variant=\"contained\"\n disabled={this.state.error || !this.state.changed || this.state.customError}\n onClick={() => this.onUpdate()}\n startIcon={this.props.width === 'xs' ? undefined : <IconCheck />}\n color=\"primary\"\n >\n {this.props.width === 'xs' ? <IconCheck fontSize=\"large\" /> : this.props.t('Write')}\n </Button>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={this.props.width === 'xs' ? undefined : <IconClose />}\n >\n {this.props.width === 'xs' ? <IconClose fontSize=\"large\" /> : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserEditObject;\n","import React, { Component, type JSX } from 'react';\n\nimport { Dialog, DialogTitle, DialogContent, DialogActions, TextField, Button, Autocomplete } from '@mui/material';\n\nimport { Close as IconCancel, Check as IconCheck } from '@mui/icons-material';\nimport type { AdminConnection, Translate } from '@iobroker/adapter-react-v5';\n\ninterface ObjectBrowserEditRoleProps {\n roles: string[];\n id: string;\n socket: AdminConnection;\n onClose: (obj?: ioBroker.Object) => void;\n t: Translate;\n}\n\ninterface ObjectBrowserEditRoleState {\n role: string | null;\n initRole: string | null;\n roleInput: string | null;\n}\n\nclass ObjectBrowserEditRole extends Component<ObjectBrowserEditRoleProps, ObjectBrowserEditRoleState> {\n private object: ioBroker.Object | null = null;\n\n constructor(props: ObjectBrowserEditRoleProps) {\n super(props);\n\n this.state = {\n role: null,\n initRole: null,\n roleInput: null,\n };\n }\n\n componentDidMount(): void {\n void this.props.socket\n .getObject(this.props.id)\n .then((obj: ioBroker.Object) => {\n this.object = obj;\n const value = obj?.common?.role || null;\n this.setState({ role: value, initRole: value, roleInput: value });\n })\n .catch((e: string) => console.error(e));\n }\n\n onUpdate(): void {\n this.object.common = this.object.common || ({} as ioBroker.ObjectCommon);\n this.object.common.role = this.state.roleInput;\n void this.props.socket.setObject(this.object._id, this.object).then(() => this.props.onClose(this.object));\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n key=\"objectBrowserEditRole\"\n open={!0}\n maxWidth=\"sm\"\n fullWidth\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-role-dialog-title\"\n aria-describedby=\"edit-role-dialog-description\"\n >\n <DialogTitle id=\"edit-role-dialog-title\">\n {this.object ? this.props.t('Update role for %s', this.object._id) : null}\n </DialogTitle>\n <DialogContent>\n <Autocomplete\n freeSolo\n options={this.props.roles}\n style={{ width: '100%' }}\n value={this.state.role}\n onChange={(event, role) => this.setState({ role, roleInput: role })}\n onInputChange={(event, role) => this.setState({ roleInput: role })}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n label={this.props.t('Role')}\n />\n )}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={this.state.initRole === this.state.roleInput}\n variant=\"contained\"\n onClick={() => this.onUpdate()}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {this.props.t('Apply')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<IconCancel />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserEditRole;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Dialog,\n DialogTitle,\n DialogActions,\n DialogContent,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, AddBox as AddIcon } from '@mui/icons-material';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\n\nconst stateTypeArray = ['array', 'boolean', 'file', 'json', 'mixed', 'number', 'object', 'string'];\n\nconst stateDefValues = {\n boolean: false,\n string: '',\n number: 0,\n};\n\nconst TYPES = {\n state: { name: 'State', value: 'state' },\n channel: { name: 'Channel', value: 'channel' },\n device: { name: 'Device', value: 'device' },\n folder: { name: 'Folder', value: 'folder' },\n};\n\ninterface ObjectAddNewObjectProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n setObject: (id: string, obj: ioBrokerObject) => Promise<void>;\n objects: Record<string, ioBrokerObject>;\n expertMode: boolean;\n initialType?: ioBrokerObject['type'] | '';\n initialStateType?: string;\n}\n\nconst ObjectAddNewObject: React.FC<ObjectAddNewObjectProps> = ({\n onClose,\n onApply,\n selected,\n setObject,\n objects,\n expertMode,\n initialType,\n initialStateType,\n}): JSX.Element => {\n const names: Record<string, string> = {\n state: I18n.t('New state'),\n channel: I18n.t('New channel'),\n device: I18n.t('New device'),\n folder: I18n.t('New folder'),\n };\n\n const types = [];\n\n // analyse possible types\n const parentType = objects[selected]?.type;\n if (objects[selected]) {\n if (parentType === 'channel') {\n types.push(TYPES.state);\n initialType = initialType || 'state';\n } else if (parentType === 'device') {\n initialType = initialType || 'channel';\n types.push(TYPES.state);\n types.push(TYPES.channel);\n } else if (parentType === 'state') {\n initialType = initialType || '';\n } else {\n types.push(TYPES.state);\n types.push(TYPES.channel);\n types.push(TYPES.device);\n\n if (\n selected.startsWith('0_userdata.') ||\n selected.startsWith('alias.0.') ||\n selected === '0_userdata' ||\n selected === 'alias.0'\n ) {\n types.push(TYPES.folder);\n initialType = initialType || 'folder';\n } else {\n initialType = initialType || 'state';\n }\n }\n } else {\n types.push(TYPES.folder);\n initialType = initialType || 'folder';\n\n if (expertMode && (selected.startsWith('mqtt.') || selected.startsWith('javascript.'))) {\n types.push(TYPES.state);\n types.push(TYPES.channel);\n types.push(TYPES.device);\n }\n }\n\n const storedType = (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'App.lastObjectType',\n ) as ioBrokerObject['type'];\n if (storedType && types.find(item => item.value === storedType)) {\n initialType = storedType;\n }\n\n function buildId(_name: string): string {\n return `${selected}.${_name.toString().replace(Utils.FORBIDDEN_CHARS, '_').replace(/\\s/g, '_').replace(/\\./g, '_')}`;\n }\n\n const [type, setType] = useState<ioBrokerObject['type'] | ''>(initialType);\n const [name, setName] = useState<string>(names[initialType]);\n const [stateType, setStateType] = useState<keyof typeof stateDefValues>(\n (initialStateType ||\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('App.lastStateType') ||\n 'string') as keyof typeof stateDefValues,\n );\n const [unique, setUnique] = useState<boolean>(!objects[buildId(names.state)]);\n\n const onLocalApply = (): void => {\n const newObj: ioBrokerObject = {\n common: {\n name,\n desc: I18n.t('Manually created'),\n },\n type,\n } as ioBrokerObject;\n\n if (type === 'state') {\n newObj.common = {\n ...newObj.common,\n role: 'state',\n type: stateType,\n read: true,\n write: true,\n def: stateDefValues[stateType],\n };\n newObj.native = {};\n } else if (type !== 'folder') {\n newObj.common = {\n ...newObj.common,\n role: '',\n icon: '',\n };\n } else {\n delete newObj.common.desc;\n }\n\n void setObject(`${selected}.${name.split(' ').join('_')}`, newObj).then(() => onApply());\n };\n\n const lang = I18n.getLanguage();\n\n return (\n <Dialog\n open={!0}\n fullWidth\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n // titleButtonApply=\"add\"\n onClose={onClose}\n // onApply={() => onLocalApply()}\n >\n <DialogTitle>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}\n >\n <AddIcon />\n {I18n.t('Add new object:')}\n <span style={{ fontStyle: 'italic' }}>\n {selected}.{name}\n </span>\n </div>\n </DialogTitle>\n <DialogContent>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <TextField\n variant=\"standard\"\n label={I18n.t('Parent')}\n style={{ margin: '5px 0' }}\n disabled\n value={selected}\n />\n <FormControl\n variant=\"standard\"\n style={{ marginTop: 10, marginBottom: 16 }}\n >\n <InputLabel>{I18n.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={type}\n onChange={el => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.lastObjectType',\n el.target.value,\n );\n\n if (name === names[type]) {\n setName(names[el.target.value]);\n setUnique(!!objects[buildId(names[el.target.value])]);\n }\n\n setType(el.target.value as ioBrokerObject['type']);\n }}\n >\n {types.map(el => (\n <MenuItem\n key={el.value}\n value={el.value}\n >\n {I18n.t(el.name)}\n {lang !== 'en' && (\n <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n ({el.value})\n </span>\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {type === 'state' && (\n <FormControl style={{ marginTop: 10, marginBottom: 16 }}>\n <InputLabel style={{ left: -14 }}>{I18n.t('State type')}</InputLabel>\n <Select\n style={{ marginTop: 6 }}\n variant=\"standard\"\n value={stateType}\n onChange={el => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.lastStateType',\n el.target.value,\n );\n setStateType(el.target.value as keyof typeof stateDefValues);\n }}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {I18n.t(el)}\n {lang !== 'en' && I18n.t(el) !== el && (\n <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n ({el})\n </span>\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n <TextField\n variant=\"standard\"\n label={I18n.t('Name')}\n style={{ margin: '5px 0' }}\n autoFocus\n value={name}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (name) {\n onLocalApply();\n }\n }\n }}\n slotProps={{\n input: {\n endAdornment: name ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setName('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={el => {\n setUnique(!objects[buildId(el.target.value)]);\n setName(el.target.value);\n }}\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"add-new-object-dialog-add\"\n startIcon={<CheckIcon />}\n disabled={!name || !type || !unique || (type === 'state' && !stateType)}\n onClick={() => onLocalApply()}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t('add')}\n </Button>\n <Button\n id=\"add-new-object-dialog-cancel\"\n color=\"grey\"\n onClick={onClose}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ObjectAddNewObject;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport { Checkbox, FormControl, InputLabel, LinearProgress, MenuItem, Select, Switch } from '@mui/material';\n\nimport { I18n, Icon, type IobTheme, type ThemeType, type Translate, Utils } from '@iobroker/adapter-react-v5';\n\nimport CustomModal from '../components/CustomModal';\n\nconst readWriteArray: Record<string, { name: string; valueNum: number; title: string }[]>[] = [\n {\n Owner: [\n { name: 'read', valueNum: 0x400, title: 'read owner' },\n { name: 'write', valueNum: 0x200, title: 'write owner' },\n ],\n },\n {\n Group: [\n { name: 'read', valueNum: 0x40, title: 'read group' },\n { name: 'write', valueNum: 0x20, title: 'write group' },\n ],\n },\n {\n Everyone: [\n { name: 'read', valueNum: 0x4, title: 'read everyone' },\n { name: 'write', valueNum: 0x2, title: 'write everyone' },\n ],\n },\n];\n\ninterface AccessControlUser {\n name: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\ninterface AccessControlGroup {\n name: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\nexport type AccessControlObject = {\n acl: {\n object?: number;\n owner?: string;\n ownerGroup?: string;\n state?: number;\n };\n type: string;\n common: {\n defaultNewAcl: {\n object: number;\n owner: string;\n ownerGroup: string;\n state: number;\n };\n };\n} & ioBroker.PartialObject;\n\nfunction newValueAccessControl(value: number, newValue: number, mask: number): number {\n value |= newValue & mask;\n value &= newValue | (~mask & 0xffff);\n return value;\n}\n\ninterface ObjectRightsProps {\n value: number;\n setValue: (value: number) => void;\n t: Translate;\n differentValues: number[];\n applyToChildren: boolean;\n mask: number;\n setMask: (mask: number) => void;\n disabled: boolean;\n}\n\nconst ObjectRights: React.FC<ObjectRightsProps> = ({\n value,\n setValue,\n t,\n differentValues,\n applyToChildren,\n mask,\n setMask,\n disabled,\n}): JSX.Element => {\n useEffect((): void => {\n if (applyToChildren) {\n let _checkDifferent = 0;\n for (let e = 0; e < differentValues.length; e++) {\n _checkDifferent |= value ^ differentValues[e];\n }\n setMask(_checkDifferent);\n } else {\n setMask(0);\n }\n }, [differentValues, applyToChildren, setMask, value]);\n\n let newSelected = value;\n\n return (\n <div\n style={{\n display: 'flex',\n width: 'fit-content',\n margin: 20,\n border: '1px solid',\n borderLeft: 0,\n }}\n >\n {readWriteArray.map(el => {\n const name = Object.keys(el)[0];\n return (\n <div\n style={{\n width: 150,\n height: 150,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n borderLeft: '1px solid',\n }}\n key={name}\n >\n <div\n style={{\n height: 50,\n display: 'flex',\n alignItems: 'center',\n fontSize: 18,\n borderBottom: '1px solid silver',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {t(name)}\n </div>\n <div\n style={{\n display: 'flex',\n width: '100%',\n }}\n >\n {el[name].map((obj, idx) => {\n let bool = false;\n if (newSelected - obj.valueNum >= 0) {\n newSelected -= obj.valueNum;\n bool = true;\n }\n const masked = mask & obj.valueNum;\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n alignItems: 'center',\n borderRight: idx === 0 ? '1px solid' : 0,\n }}\n key={obj.valueNum}\n >\n <div\n style={{\n height: 50,\n borderBottom: '1px solid',\n width: '100%',\n justifyContent: 'center',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n }}\n >\n {t(obj.name)}\n </div>\n <div style={{ height: 50, display: 'flex' }}>\n <Checkbox\n disabled={disabled}\n checked={bool}\n color={masked ? 'primary' : 'secondary'}\n indeterminate={!!masked}\n style={masked ? { opacity: 0.5 } : undefined}\n onChange={e => {\n if (masked) {\n mask &= ~obj.valueNum & 0xffff;\n setMask(mask);\n }\n let newValue = value;\n if (!e.target.checked) {\n newValue &= ~obj.valueNum & 0xffff;\n } else {\n newValue |= obj.valueNum;\n }\n setValue(newValue);\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\ninterface ObjectEditOfAccessControlProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n extendObject: (id: string, obj: Partial<ioBroker.Object>) => void;\n objects: Record<string, ioBroker.Object>;\n t: Translate;\n modalEmptyId: string;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nconst ObjectEditOfAccessControl: React.FC<ObjectEditOfAccessControlProps> = ({\n onClose,\n onApply,\n selected,\n extendObject,\n objects,\n t,\n modalEmptyId,\n themeType,\n theme,\n}) => {\n const [stateOwnerUser, setStateOwnerUser] = useState<AccessControlUser>(null);\n const [stateOwnerGroup, setStateOwnerGroup] = useState<AccessControlGroup>(null);\n const [ownerUsers, setOwnerUsers] = useState<AccessControlUser[]>([]);\n const [ownerGroups, setOwnerGroups] = useState<AccessControlGroup[]>([]);\n const [applyToChildren, setApplyToChildren] = useState(false);\n const [checkState, setCheckState] = useState(false);\n const [childrenCount, setChildrenCount] = useState(0);\n const [valueObjectAccessControl, setValueObjectAccessControl] = useState<number>(null);\n const [valueStateAccessControl, setValueStateAccessControl] = useState<number>(null);\n const [differentOwner, setDifferentOwner] = useState(false);\n const [differentGroup, setDifferentGroup] = useState(false);\n const [differentState, setDifferentState] = useState([]);\n const [differentObject, setDifferentObject] = useState([]);\n const [maskState, setMaskState] = useState(0);\n const [maskObject, setMaskObject] = useState(0);\n const [ids, setIds] = useState<string[]>([]);\n const [progress, setProgress] = useState(false);\n\n const [disabledButton, setDisabledButton] = useState(true);\n\n const different = t('different');\n\n useEffect(() => {\n let count = 0;\n const _differentState: number[] = [];\n const _differentObject: number[] = [];\n\n const id = selected || modalEmptyId;\n const idWithDot = `${id}.`;\n const keys = Object.keys(objects).sort();\n let _checkState = false;\n const groups: AccessControlGroup[] = [];\n const users: AccessControlUser[] = [];\n const lang = I18n.getLanguage();\n\n let _differentOwner = false;\n let _differentGroup = false;\n let _stateOwnerUser: string = null;\n let _stateOwnerGroup: string = null;\n let _valueObjectAccessControl: number = null;\n let _valueStateAccessControl: number = null;\n const _ids: string[] = [];\n\n for (let k = 0; k < keys.length; k++) {\n const key = keys[k];\n const obj = objects[key];\n if (obj && (key === id || key.startsWith(idWithDot))) {\n count++;\n _ids.push(key);\n if (!obj.acl) {\n continue;\n }\n\n if (_valueObjectAccessControl === null && obj.acl.object !== undefined) {\n _valueObjectAccessControl = obj.acl.object;\n }\n if (_valueStateAccessControl === null && (obj as ioBroker.StateObject).acl.state !== undefined) {\n _valueStateAccessControl = (obj as ioBroker.StateObject).acl.state;\n }\n if (_stateOwnerUser === null && obj.acl.owner !== undefined) {\n _stateOwnerUser = obj.acl.owner;\n }\n if (_stateOwnerGroup === null && obj.acl.ownerGroup !== undefined) {\n _stateOwnerGroup = obj.acl.ownerGroup;\n }\n\n if (!differentOwner && _stateOwnerUser !== obj.acl.owner && obj.acl.owner !== undefined) {\n _differentOwner = true;\n }\n if (!differentGroup && _stateOwnerGroup !== obj.acl.ownerGroup && obj.acl.ownerGroup !== undefined) {\n _differentGroup = true;\n }\n if (\n (obj as ioBroker.StateObject).acl.state !== undefined &&\n _valueStateAccessControl !== (obj as ioBroker.StateObject).acl.state &&\n !_differentState.includes((obj as ioBroker.StateObject).acl.state)\n ) {\n _differentState.push((obj as ioBroker.StateObject).acl.state);\n }\n if (\n obj.acl.object !== undefined &&\n _valueObjectAccessControl !== obj.acl.object &&\n !_differentObject.includes(obj.acl.object)\n ) {\n _differentObject.push(obj.acl.object);\n }\n if (obj.type === 'state') {\n _checkState = true;\n }\n }\n\n if (key.startsWith('system.group.') && obj?.type === 'group') {\n groups.push({\n name: Utils.getObjectNameFromObj(obj, lang).replace('system.group.', ''),\n value: key,\n icon: obj.common?.icon,\n color: obj.common?.color,\n });\n } else if (key.startsWith('system.user.') && obj?.type === 'user') {\n users.push({\n name: Utils.getObjectNameFromObj(obj, lang).replace('system.user.', ''),\n value: key,\n icon: obj.common?.icon,\n color: obj.common?.color,\n });\n }\n }\n\n _stateOwnerUser = _stateOwnerUser || objects['system.config'].common.defaultNewAcl.owner;\n _stateOwnerGroup = _stateOwnerGroup || objects['system.config'].common.defaultNewAcl.ownerGroup;\n _valueObjectAccessControl = _valueObjectAccessControl || objects['system.config'].common.defaultNewAcl.object;\n setValueObjectAccessControl(\n Number.isNaN(_valueObjectAccessControl)\n ? objects['system.config'].common.defaultNewAcl.object\n : _valueObjectAccessControl,\n );\n\n if (_checkState) {\n _valueStateAccessControl = _valueStateAccessControl || objects['system.config'].common.defaultNewAcl.state;\n setValueStateAccessControl(\n Number.isNaN(_valueStateAccessControl)\n ? objects['system.config'].common.defaultNewAcl.state\n : _valueStateAccessControl,\n );\n }\n\n const userItem = users.find(item => item.value === _stateOwnerUser);\n const groupItem = groups.find(item => item.value === _stateOwnerGroup);\n\n setStateOwnerUser(userItem);\n setStateOwnerGroup(groupItem);\n\n setDifferentOwner(_differentOwner);\n setDifferentGroup(_differentGroup);\n\n setOwnerUsers(users);\n setOwnerGroups(groups);\n\n if (_checkState) {\n setCheckState(true);\n }\n if (modalEmptyId) {\n setApplyToChildren(true);\n }\n setChildrenCount(count);\n\n setDifferentState(_differentState);\n setDifferentObject(_differentObject);\n\n setIds(_ids);\n }, [objects, selected, differentGroup, differentOwner, modalEmptyId]);\n\n useEffect(() => {\n if (applyToChildren) {\n if (differentGroup) {\n if (stateOwnerGroup.value !== 'different') {\n setStateOwnerGroup({ name: different, value: 'different' });\n }\n if (!ownerGroups.find(item => item.value === 'different')) {\n setOwnerGroups(el => [\n {\n name: different,\n value: 'different',\n },\n ...el,\n ]);\n }\n }\n\n if (differentOwner) {\n if (!stateOwnerUser || stateOwnerUser.value !== 'different') {\n setStateOwnerUser({ name: different, value: 'different' });\n }\n if (!ownerUsers.find(item => item.value === 'different')) {\n setOwnerUsers(el => [\n {\n name: different,\n value: 'different',\n },\n ...el,\n ]);\n }\n }\n } else {\n if (stateOwnerUser && stateOwnerUser.value === 'different') {\n setStateOwnerUser(objects[selected].acl.owner as unknown as AccessControlUser);\n }\n if (stateOwnerGroup && stateOwnerGroup.value === 'different') {\n setStateOwnerGroup(objects[selected].acl.ownerGroup as unknown as AccessControlGroup);\n }\n // remove different from a list\n setOwnerGroups(el => el.filter(({ value }) => value !== 'different'));\n setOwnerUsers(el => el.filter(({ value }) => value !== 'different'));\n }\n }, [\n ownerUsers,\n applyToChildren,\n differentOwner,\n differentGroup,\n objects,\n selected,\n stateOwnerGroup,\n stateOwnerUser,\n different,\n ownerGroups,\n ]);\n\n if (!ids.length) {\n return <LinearProgress />;\n }\n return (\n <CustomModal\n theme={theme}\n titleButtonApply=\"apply\"\n overflowHidden\n disableApply={disabledButton}\n progress={progress}\n onClose={onClose}\n onApply={() => {\n setProgress(true);\n setTimeout((): void => {\n if (!applyToChildren) {\n const newAcl: AccessControlObject['acl'] = Utils.clone(objects[selected].acl || {});\n newAcl.object = valueObjectAccessControl;\n newAcl.owner = stateOwnerUser ? stateOwnerUser.value : 'system.user.admin';\n newAcl.ownerGroup = stateOwnerGroup ? stateOwnerGroup.value : 'system.group.administrator';\n\n if (objects[selected].type === 'state') {\n newAcl.state = valueStateAccessControl;\n }\n extendObject(selected, { acl: newAcl } as Partial<ioBroker.Object>);\n } else {\n // let maskState = Object.keys(differentHexState).reduce((sum, key) => sum | (differentHexState[key] ? parseInt(key, 16) : 0), 0);\n const _maskState = ~maskState & 0xffff;\n\n // let maskObject = Object.keys(differentHexObject).reduce((sum, key) => sum | (differentHexObject[key] ? parseInt(key, 16) : 0), 0);\n const _maskObject = ~maskObject & 0xffff;\n\n for (let i = 0; i < ids.length; i++) {\n const key = ids[i];\n const obj = objects[key];\n const newAcl: AccessControlObject['acl'] = Utils.clone(obj.acl || {});\n newAcl.object = newValueAccessControl(obj.acl.object, valueObjectAccessControl, _maskState);\n if (stateOwnerUser && stateOwnerUser.value !== 'different') {\n newAcl.owner = stateOwnerUser.value;\n }\n if (stateOwnerGroup && stateOwnerGroup.value !== 'different') {\n newAcl.ownerGroup = stateOwnerGroup.value;\n }\n if (obj.type === 'state') {\n newAcl.state = newValueAccessControl(\n obj.acl.state,\n valueStateAccessControl,\n _maskObject,\n );\n }\n extendObject(key, { acl: newAcl } as Partial<ioBroker.Object>);\n }\n }\n\n setProgress(false);\n onApply();\n }, 200);\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n }}\n >\n {t('Access control list: %s', selected || modalEmptyId)}\n </div>\n <div style={{ display: 'flex' }}>\n <FormControl\n variant=\"standard\"\n fullWidth\n style={{ marginRight: 10 }}\n >\n <InputLabel>{t('Owner user')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerUser ? stateOwnerUser.value : ''}\n renderValue={() => (\n <span>\n {stateOwnerUser?.icon ? (\n <Icon\n src={stateOwnerUser.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {stateOwnerUser ? stateOwnerUser.name : ''}\n </span>\n )}\n style={\n stateOwnerUser?.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: stateOwnerUser?.color || undefined,\n backgroundColor: Utils.getInvertedColor(stateOwnerUser?.color, themeType),\n }\n }\n onChange={el => {\n const userItem = ownerUsers.find(item => item.value === el.target.value);\n setStateOwnerUser(userItem);\n setDisabledButton(false);\n }}\n >\n {ownerUsers.map(el => (\n <MenuItem\n style={\n el.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: el.color || undefined,\n backgroundColor: Utils.getInvertedColor(el.color, themeType),\n }\n }\n key={el.value}\n value={el.value}\n >\n {el.icon ? (\n <Icon\n src={el.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {el.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n <InputLabel>{t('Owner group')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerGroup ? stateOwnerGroup.value : ''}\n renderValue={() => (\n <span>\n {stateOwnerGroup?.icon ? (\n <Icon\n src={stateOwnerGroup.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {stateOwnerGroup ? stateOwnerGroup.name : ''}\n </span>\n )}\n style={\n stateOwnerGroup?.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: stateOwnerGroup?.color || undefined,\n backgroundColor: Utils.getInvertedColor(stateOwnerGroup?.color, themeType),\n }\n }\n onChange={el => {\n const groupItem = ownerGroups.find(item => item.value === el.target.value);\n setStateOwnerGroup(groupItem);\n setDisabledButton(false);\n }}\n >\n {ownerGroups.map(el => (\n <MenuItem\n key={el.value}\n value={el.value}\n style={\n el.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: el.color || undefined,\n backgroundColor: Utils.getInvertedColor(el.color, themeType),\n }\n }\n >\n {el.icon ? (\n <Icon\n src={el.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {el.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n\n <div\n style={{\n display: 'flex',\n margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n }}\n >\n <div style={!applyToChildren ? { color: 'green' } : null}>{t('to apply one item')}</div>\n <Switch\n disabled={progress || !!modalEmptyId || childrenCount === 1}\n checked={!!modalEmptyId || applyToChildren}\n onChange={e => {\n setApplyToChildren(e.target.checked);\n setDisabledButton(false);\n }}\n color=\"primary\"\n />\n <div style={applyToChildren ? { color: 'green' } : null}>\n {t('to apply with children')}{' '}\n {modalEmptyId || childrenCount > 1 ? `(${childrenCount} ${t('object(s)')})` : ''}\n </div>\n </div>\n\n {progress && <LinearProgress />}\n\n <div style={{ overflowY: 'auto' }}>\n <div>\n <h2>{t('Object rights')}</h2>\n <ObjectRights\n mask={maskObject}\n disabled={progress}\n setMask={setMaskObject}\n applyToChildren={applyToChildren}\n differentValues={differentObject}\n t={t}\n setValue={e => {\n setValueObjectAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueObjectAccessControl}\n />\n </div>\n {checkState && (\n <div>\n <h2>{t('States rights')}</h2>\n <ObjectRights\n mask={maskState}\n disabled={progress}\n setMask={setMaskState}\n applyToChildren={applyToChildren}\n differentValues={applyToChildren ? differentState : []}\n t={t}\n setValue={e => {\n setValueStateAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueStateAccessControl}\n />\n </div>\n )}\n </div>\n </div>\n </CustomModal>\n );\n};\n\nexport default ObjectEditOfAccessControl;\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Fab } from '@mui/material';\n\n// Icons\nimport { Close as CloseIcon, PlayArrow as PlayIcon, GetApp as DownloadIcon } from '@mui/icons-material';\n\nimport { withWidth, type IobTheme, type Translate, type AdminConnection, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ioBrokerObject } from '@/types';\n\nconst styles: Record<string, any> = {\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n content: {\n textAlign: 'center',\n },\n error: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#ff7777' : '#c20000',\n }),\n image: {\n height: '100%',\n width: 'auto',\n },\n text: {\n fontFamily: 'Lucida Console, Courier, monospace',\n width: '100%',\n },\n download: {\n textDecoration: 'none',\n textTransform: 'uppercase',\n fontSize: 14,\n color: 'white',\n border: '1px solid white',\n borderRadius: 5,\n padding: '8px 16px',\n marginRight: 8,\n },\n};\n\ninterface ObjectViewFileDialogProps {\n t: Translate;\n socket: AdminConnection;\n obj: ioBrokerObject;\n onClose: () => void;\n}\n\ninterface ObjectViewFileDialogState {\n error: string;\n image: boolean;\n text: string | null;\n binary: string | null;\n fileName: string;\n mime?: string;\n audio?: boolean;\n}\n\nclass ObjectViewFileDialog extends Component<ObjectViewFileDialogProps, ObjectViewFileDialogState> {\n audioRef: React.RefObject<HTMLAudioElement>;\n\n constructor(props: ObjectViewFileDialogProps) {\n super(props);\n\n const parts = this.props.obj._id.split('.');\n\n this.state = {\n error: '',\n image: null,\n text: null,\n binary: null,\n fileName: `${parts[parts.length - 2]}.${parts[parts.length - 1]}`,\n };\n\n this.audioRef = React.createRef();\n }\n\n componentDidMount(): void {\n this.props.socket\n .getBinaryState(this.props.obj._id)\n .then((data: string) => {\n let ext = this.props.obj._id.toLowerCase().split('.').pop();\n\n const detectedMimeType = Utils.detectMimeType(data);\n if (detectedMimeType) {\n ext = detectedMimeType;\n }\n\n if (ext === 'jpg') {\n this.setState({ image: true, binary: data, mime: 'image/jpeg' });\n } else if (ext === 'svg') {\n this.setState({ image: true, binary: data, mime: 'image/svg+xml' });\n } else if (ext === 'png' || ext === 'bmp') {\n this.setState({ image: true, binary: data, mime: `image/${ext}` });\n } else if (ext === 'mp3') {\n this.setState({ audio: true, binary: data, mime: 'audio/mpeg' });\n } else if (ext === 'ogg') {\n this.setState({ audio: true, binary: data, mime: 'audio/ogg' });\n } else if (ext === 'txt' || ext === 'log') {\n try {\n const text = btoa(data);\n this.setState({ text, binary: data, mime: 'text/plain' });\n } catch {\n // ignore\n }\n }\n })\n .catch(error => this.setState({ error }));\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n maxWidth={this.state.audio ? 'sm' : 'md'}\n onClose={() => this.props.onClose()}\n fullWidth\n aria-labelledby=\"object-view-dialog-title\"\n >\n <DialogTitle id=\"object-view-dialog-title\">\n {this.props.t('View file in state: %s', this.props.obj._id)}\n </DialogTitle>\n <DialogContent style={styles.content}>\n {this.state.error ? (\n <Box\n component=\"div\"\n sx={styles.error}\n >\n {this.state.error === 'State is not binary'\n ? this.props.t('No file stored yet')\n : this.props.t(this.state.error)}\n </Box>\n ) : null}\n {this.state.audio ? (\n <audio\n ref={this.audioRef}\n src={`data:${this.state.mime};base64,${this.state.binary}`}\n />\n ) : null}\n {this.state.audio ? (\n <Fab\n color=\"primary\"\n onClick={() => this.audioRef.current && this.audioRef.current.play()}\n >\n <PlayIcon />\n </Fab>\n ) : null}\n {this.state.image ? (\n <img\n src={`data:${this.state.mime};base64,${this.state.binary}`}\n alt={this.props.obj._id}\n style={styles.image}\n />\n ) : null}\n {this.state.text !== null ? <pre style={styles.text}>{this.state.text}</pre> : null}\n </DialogContent>\n <DialogActions>\n <a\n style={styles.download}\n download={this.state.fileName}\n href={`data:${this.state.mime};base64,${this.state.binary}`}\n >\n <DownloadIcon style={{ paddingRight: 8, height: 12 }} />\n <span>{this.props.t('Download')}</span>\n </a>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(ObjectViewFileDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n MenuItem,\n MenuList,\n ListItemIcon,\n ListItemText,\n TextField,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n InputLabel,\n Select,\n FormControl,\n} from '@mui/material';\n\n// Icons\nimport { Close, Link as IconLink, AddLink, Close as IconClose } from '@mui/icons-material';\n\nimport {\n withWidth,\n I18n,\n IconFx,\n type IobTheme,\n type AdminConnection,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport type { ioBrokerObject } from '@/types';\n\nconst styles: Record<string, any> = {\n funcIcon: {\n width: 16,\n height: 16,\n },\n formControlLabel: {\n marginBottom: 16,\n },\n color: {\n // display: 'block',\n width: 70,\n },\n typeNameEng: {\n marginLeft: 8,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 'smaller',\n },\n usedInAlias: {\n // backgroundColor: theme.palette.secondary.main,\n },\n addNewAlias: (theme: IobTheme) => ({\n backgroundColor: theme.palette.primary.main,\n }),\n};\nconst stateTypeArray = ['array', 'boolean', 'file', 'json', 'mixed', 'number', 'object', 'string'];\n\n// todo: icon, enum function, enum room, write from other object\n\ninterface ObjectAliasEditorProps {\n t: Translate;\n socket: AdminConnection;\n objects: Record<string, ioBrokerObject>;\n onRedirect: (id: string, timeout?: number) => void;\n obj: ioBrokerObject;\n onClose: () => void;\n}\n\ninterface ObjectAliasEditorState {\n usedInAliases: string[];\n showAddNewAlias: boolean;\n newAliasId: string;\n newAliasName: string;\n newAliasRead: boolean;\n newAliasWrite: boolean;\n newAliasUnit: string;\n newAliasDesc: string;\n newAliasType: string;\n newAliasUseFormula: boolean;\n newAliasReadFormula: string;\n newAliasWriteFormula: string;\n newAliasColor: string;\n newAliasIcon: string;\n}\n\nclass ObjectAliasEditor extends Component<ObjectAliasEditorProps, ObjectAliasEditorState> {\n aliasIDs: string[];\n\n constructor(props: ObjectAliasEditorProps) {\n super(props);\n\n const usedInAliases: string[] = [];\n const id = this.props.obj._id;\n\n this.aliasIDs = Object.keys(this.props.objects).filter(_id => _id.startsWith('alias.0'));\n // Try to find if this state used somewhere in alias\n for (let i = 0; i < this.aliasIDs.length; i++) {\n const alias = this.props.objects[this.aliasIDs[i]].common?.alias;\n if (\n alias?.id === id ||\n (typeof alias?.id === 'object' && (alias.id.read === id || alias.id.write === id))\n ) {\n usedInAliases.push(this.aliasIDs[i]);\n }\n }\n\n this.state = {\n usedInAliases,\n showAddNewAlias: !usedInAliases.length,\n newAliasId: this.props.obj._id,\n newAliasName: ObjectAliasEditor.getText(this.props.obj.common.name || this.props.obj._id),\n newAliasRead: this.props.obj.common.read,\n newAliasWrite: this.props.obj.common.write,\n newAliasUnit: this.props.obj.common.unit,\n newAliasDesc: ObjectAliasEditor.getText(this.props.obj.common.desc),\n newAliasType: this.props.obj.common.type,\n newAliasUseFormula: false,\n newAliasReadFormula: 'val',\n newAliasWriteFormula: 'val',\n newAliasColor: this.props.obj.common.color,\n newAliasIcon: this.props.obj.common.icon,\n };\n }\n\n static getText(text: ioBroker.StringOrTranslated): string {\n if (!text) {\n return '';\n }\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en || '';\n }\n return text.toString();\n }\n\n renderAddNewAlias(): JSX.Element | null {\n if (!this.state.showAddNewAlias) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showAddNewAlias: false })}\n >\n <DialogTitle>{I18n.t('Create new alias: %s', `alias.0.${this.state.newAliasId}`)}</DialogTitle>\n <DialogContent>\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasId}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasId ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasId: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasId: e.target.value })}\n label={I18n.t('Alias ID')}\n helperText={`alias.0.${this.state.newAliasId}`}\n fullWidth\n />\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasName}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasName ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasName: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasName: e.target.value })}\n label={I18n.t('Alias name')}\n fullWidth\n />\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasDesc}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasDesc ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasDesc: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasDesc: e.target.value })}\n label={I18n.t('Alias description')}\n fullWidth\n />\n <FormControl\n style={styles.formControlLabel}\n fullWidth\n >\n <InputLabel>{I18n.t('State type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.newAliasType}\n onChange={e => this.setState({ newAliasType: e.target.value })}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {I18n.t(el)}\n <span style={styles.typeNameEng}>({el})</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasUnit}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasUnit ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasUnit: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasUnit: e.target.value })}\n label={I18n.t('Alias units')}\n fullWidth\n />\n <TextField\n variant=\"standard\"\n style={{ ...styles.formControlLabel, ...styles.color }}\n label={I18n.t('Color')}\n type=\"color\"\n value={this.state.newAliasColor}\n onChange={e => this.setState({ newAliasColor: e.target.value })}\n />\n <FormControlLabel\n style={{ ...styles.formControlLabel, marginLeft: 16 }}\n control={\n <Checkbox\n indeterminate={\n this.state.newAliasRead === undefined || this.state.newAliasRead === null\n }\n checked={this.state.newAliasRead}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = {\n newAliasRead: e.target.checked,\n };\n // state cannot be not readable and not writeable\n if (newState.newAliasRead === false && this.state.newAliasWrite === false) {\n newState.newAliasWrite = true;\n }\n this.setState(newState as ObjectAliasEditorState);\n }}\n />\n }\n label={I18n.t('Alias read')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={\n <Checkbox\n indeterminate={\n this.state.newAliasWrite === undefined || this.state.newAliasWrite === null\n }\n checked={this.state.newAliasWrite}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = {\n newAliasWrite: e.target.checked,\n };\n // state cannot be not readable and not writeable\n if (newState.newAliasRead === false && this.state.newAliasWrite === false) {\n newState.newAliasRead = true;\n }\n this.setState(newState as ObjectAliasEditorState);\n }}\n />\n }\n label={I18n.t('Alias write')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={\n <Checkbox\n checked={this.state.newAliasUseFormula}\n onChange={e => this.setState({ newAliasUseFormula: e.target.checked })}\n />\n }\n label={I18n.t('Use convert functions')}\n />\n {this.state.newAliasUseFormula && this.state.newAliasRead ? (\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasReadFormula}\n onChange={e => this.setState({ newAliasReadFormula: e.target.value })}\n label={I18n.t('Read formula')}\n helperText={`${I18n.t('JS function like')} \"val / 5 + 21\"`}\n slotProps={{\n input: {\n endAdornment:\n this.state.newAliasReadFormula && this.state.newAliasReadFormula !== 'val' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasReadFormula: 'val' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n fullWidth\n />\n ) : null}\n {this.state.newAliasUseFormula && this.state.newAliasWrite ? (\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasWriteFormula}\n onChange={e => this.setState({ newAliasWriteFormula: e.target.value })}\n label={I18n.t('Write formula')}\n slotProps={{\n input: {\n endAdornment:\n this.state.newAliasWriteFormula && this.state.newAliasWriteFormula !== 'val' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasWriteFormula: 'val' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n helperText={`${I18n.t('JS function like')} \"val / 5 + 21\"`}\n fullWidth\n />\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!this.state.newAliasId || !!this.props.objects[`alias.0.${this.state.newAliasId}`]}\n onClick={async () => {\n const obj: ioBrokerObject = {\n _id: `alias.0.${this.state.newAliasId}`,\n type: 'state',\n common: {\n name: this.state.newAliasName,\n type: this.props.obj.common.type,\n alias: {\n id: this.props.obj._id,\n },\n },\n native: {},\n } as ioBrokerObject;\n if (this.state.newAliasDesc) {\n obj.common.desc = this.state.newAliasDesc;\n }\n if (this.state.newAliasType) {\n obj.common.type = this.state.newAliasType;\n }\n if (this.state.newAliasUnit) {\n obj.common.unit = this.state.newAliasUnit;\n }\n if (this.state.newAliasRead !== undefined && this.state.newAliasRead !== null) {\n obj.common.read = this.state.newAliasRead;\n }\n if (this.state.newAliasWrite !== undefined && this.state.newAliasWrite !== null) {\n obj.common.write = this.state.newAliasWrite;\n }\n if (this.state.newAliasColor) {\n obj.common.color = this.state.newAliasColor;\n }\n if (this.state.newAliasIcon) {\n obj.common.icon = this.state.newAliasIcon;\n }\n if (this.state.newAliasUseFormula) {\n if (\n obj.common.read !== false &&\n this.state.newAliasReadFormula &&\n this.state.newAliasReadFormula !== 'val'\n ) {\n obj.common.alias.read = this.state.newAliasReadFormula;\n }\n if (\n obj.common.write !== false &&\n this.state.newAliasWriteFormula &&\n this.state.newAliasWriteFormula !== 'val'\n ) {\n obj.common.alias.write = this.state.newAliasWriteFormula;\n }\n }\n await this.props.socket.setObject(obj._id, obj);\n this.setState({ showAddNewAlias: false });\n this.props.onRedirect(obj._id, 2000);\n this.props.onClose();\n }}\n startIcon={<AddLink />}\n color=\"primary\"\n >\n {this.props.t('Create')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showAddNewAlias: false })}\n startIcon={<Close />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n key=\"editAlias\"\n open={!0}\n maxWidth=\"sm\"\n onClose={() => this.props.onClose()}\n fullWidth\n aria-labelledby=\"object-alias-dialog-title\"\n >\n {this.renderAddNewAlias()}\n <DialogTitle id=\"object-alias-dialog-title\">\n {this.state.usedInAliases.length\n ? I18n.t('This object is used in aliases')\n : I18n.t('This object does not used in any aliases yet')}\n </DialogTitle>\n <DialogContent>\n <MenuList style={{ maxWidth: 400 }}>\n {this.state.usedInAliases.map(aliasID => (\n <MenuItem\n style={styles.usedInAlias}\n key={aliasID}\n onClick={() => this.props.onRedirect(aliasID)}\n >\n <ListItemIcon>\n <IconLink fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{aliasID}</ListItemText>\n </MenuItem>\n ))}\n <MenuItem\n onClick={() => this.setState({ showAddNewAlias: true })}\n sx={styles.addNewAlias}\n >\n <ListItemIcon>\n <AddLink fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{I18n.t('Create alias from this ID')}</ListItemText>\n </MenuItem>\n </MenuList>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={<Close />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(ObjectAliasEditor);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n DialogContentText,\n Button,\n IconButton,\n Snackbar,\n} from '@mui/material';\n\n// icons\nimport { Cancel as IconCancel, Delete as IconDeleteOne } from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n type Translate,\n withWidth,\n Router,\n ObjectBrowser,\n type ObjectBrowserClass,\n type ObjectBrowserFilter,\n type TreeItemData,\n} from '@iobroker/adapter-react-v5';\n\nimport type { ObjectsWorker } from '@/Workers/ObjectsWorker';\n\nimport ObjectCustomDialog from '../dialogs/ObjectCustomDialog';\nimport ObjectBrowserValue from '../components/Object/ObjectBrowserValue';\nimport ObjectBrowserEditObject from '../components/Object/ObjectBrowserEditObject';\nimport ObjectBrowserEditRole from '../components/Object/ObjectBrowserEditRole';\nimport ObjectAddNewObject from '../dialogs/ObjectAddNewObject';\nimport ObjectEditOfAccessControl from '../dialogs/ObjectEditOfAccessControl';\nimport ObjectViewFileDialog from '../dialogs/ObjectViewFileDialog';\nimport ObjectAliasEditor from '../dialogs/ObjectAliasEditor';\n\nconst IconDeleteAll = IconDeleteOne;\nconst styles: Record<string, React.CSSProperties> = {\n buttonIcon: {\n marginRight: 4,\n },\n buttonAll: {\n color: '#FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n buttonText: {\n whiteSpace: 'nowrap',\n },\n};\n\ninterface ObjectsProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n expertMode: boolean;\n isFloatComma: boolean;\n dateFormat: string;\n objectsWorker: ObjectsWorker;\n statesOnly: boolean;\n prefix: string;\n}\n\ninterface ObjectsState {\n selected: string;\n name: string;\n toast: string;\n deleteObjectShow: any;\n // suppressDeleteConfirm: boolean;\n}\n\nclass Objects extends Component<ObjectsProps, ObjectsState> {\n private readonly dialogName: string;\n\n private filters: Record<string, any>;\n\n private readonly t: Translate;\n\n private readonly wordCache: Record<string, string>;\n\n constructor(props: ObjectsProps) {\n super(props);\n\n this.dialogName = 'AdminObjects';\n\n const filtersStr: string =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.dialogName || 'App'}.filters`,\n ) || '{}';\n\n try {\n this.filters = JSON.parse(filtersStr);\n } catch {\n this.filters = {};\n }\n\n const selected =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.dialogName || 'App'}.selected`,\n ) || '';\n\n this.state = {\n selected,\n name: '',\n toast: '',\n deleteObjectShow: null,\n // suppressDeleteConfirm: false,\n };\n this.t = this.translate;\n this.wordCache = {};\n }\n\n translate = (word: string, arg1: any, arg2: any): string => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n };\n\n onDelete(withChildren?: boolean): void {\n const id = this.state.deleteObjectShow.id;\n if (withChildren) {\n this.props.socket\n .delObjects(id, true)\n .then(() => this.setState({ toast: this.t('All deleted') }))\n .catch(e => window.alert(`Cannot delete object: ${e}`));\n\n this.setState({ deleteObjectShow: null });\n } else {\n this.props.socket.delObject(id, false).catch(e => window.alert(`Cannot delete object: ${e}`));\n this.setState({ deleteObjectShow: null });\n }\n }\n\n renderToast(): JSX.Element {\n return (\n <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n open={!!this.state.toast}\n autoHideDuration={3000}\n onClose={() => this.setState({ toast: '' })}\n message={this.state.toast}\n action={\n <IconButton\n size=\"small\"\n aria-label=\"close\"\n color=\"inherit\"\n onClick={() => this.setState({ toast: '' })}\n >\n <IconCancel fontSize=\"small\" />\n </IconButton>\n }\n />\n );\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (!this.state.deleteObjectShow) {\n return null;\n }\n return (\n <Dialog\n key=\"delete\"\n maxWidth=\"md\"\n open={!0}\n onClose={() => this.setState({ deleteObjectShow: null })}\n aria-labelledby=\"delete-object-dialog-title\"\n aria-describedby=\"delete-object-dialog-description\"\n >\n <DialogTitle id=\"delete-object-dialog-title\">\n {this.state.deleteObjectShow.hasChildren ? this.t('Delete object(s)') : this.t('Delete object')}:{' '}\n <span style={styles.id}>{this.state.deleteObjectShow.id}</span>\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.t('Are you sure?')}\n {/* <FormControlLabel\n control={<Checkbox\n checked={this.state.suppressDeleteConfirm}\n onChange={() => {\n this.setState({suppressDeleteConfirm: true});\n\n }}\n name=\"checkedA\" />\n }\n label=\"Secondary\"\n /> */}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {this.state.deleteObjectShow.hasChildren ? (\n <Button\n variant=\"contained\"\n color=\"grey\"\n sx={{ '& .MuiButton-text': styles.buttonText }}\n onClick={() => this.onDelete(true)}\n startIcon={<IconDeleteAll style={styles.buttonAll} />}\n >\n {this.t('Delete with children', this.state.deleteObjectShow.childrenCount)}\n </Button>\n ) : null}\n {this.state.deleteObjectShow.exists ? (\n <Button\n variant=\"contained\"\n sx={{ '& .MuiButton-text': styles.buttonText }}\n onClick={() => this.onDelete(false)}\n color=\"primary\"\n startIcon={<IconDeleteOne />}\n autoFocus\n >\n {this.t('Delete one item')}\n </Button>\n ) : null}\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ deleteObjectShow: null })}\n startIcon={<IconCancel />}\n >\n {this.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): JSX.Element[] {\n return [\n this.renderToast(),\n <ObjectBrowser\n key=\"browser\"\n dialogName=\"admin\"\n objectsWorker={this.props.objectsWorker}\n prefix={this.props.prefix}\n defaultFilters={this.filters}\n statesOnly={this.props.statesOnly}\n style={{ width: '100%', height: '100%' }}\n socket={this.props.socket}\n selected={this.state.selected}\n name={this.state.name}\n expertMode={this.props.expertMode}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n t={this.t}\n lang={this.props.lang}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n objectCustomDialog={ObjectCustomDialog}\n objectBrowserValue={ObjectBrowserValue}\n objectBrowserEditObject={ObjectBrowserEditObject}\n objectBrowserEditRole={ObjectBrowserEditRole}\n objectBrowserViewFile={ObjectViewFileDialog}\n objectBrowserAliasEditor={ObjectAliasEditor}\n router={Router}\n enableStateValueEdit\n onObjectDelete={(id: string, hasChildren: boolean, objectExists: boolean, childrenCount: number) =>\n this.setState({\n deleteObjectShow: {\n id,\n hasChildren,\n exists: objectExists,\n childrenCount,\n },\n })\n }\n onFilterChanged={(filterConfig: ObjectBrowserFilter) => {\n this.filters = filterConfig;\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.filters`,\n JSON.stringify(filterConfig),\n );\n }}\n onSelect={(selected: string | string[]) => {\n if (Array.isArray(selected)) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.selected`,\n selected[0] || '',\n );\n } else {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.selected`,\n selected || '',\n );\n }\n }}\n objectEditBoolean\n objectAddBoolean\n objectStatesView\n objectImportExport\n objectEditOfAccessControl\n modalNewObject={(context: ObjectBrowserClass) => (\n <ObjectAddNewObject\n objects={context.objects}\n expertMode={this.props.expertMode}\n setObject={(id, data) =>\n this.props.socket.setObject(id, data).catch(error => window.alert(error))\n }\n selected={context.state.modalNewObj.id}\n initialType={context.state.modalNewObj.initialType}\n initialStateType={context.state.modalNewObj.initialStateType}\n onClose={() => context.setState({ modalNewObj: null })}\n onApply={() => context.setState({ modalNewObj: null })}\n />\n )}\n modalEditOfAccessControl={(context: ObjectBrowserClass, objData: TreeItemData) => (\n <ObjectEditOfAccessControl\n theme={this.props.theme}\n themeType={this.props.themeType}\n extendObject={(id: string, data: Partial<ioBroker.Object>): void => {\n this.props.socket.extendObject(id, data).catch(error => window.alert(error));\n\n objData.aclTooltip = null;\n }}\n selected={context.state.selected[0]}\n // If an object is virtual, it has no obj attribute\n modalEmptyId={objData.obj ? '' : objData.id}\n objects={context.objects}\n t={this.t}\n onClose={() => context.setState({ modalEditOfAccess: false, modalEditOfAccessObjData: null })}\n onApply={() => context.setState({ modalEditOfAccess: false, modalEditOfAccessObjData: null })}\n />\n )}\n />,\n this.renderDeleteDialog(),\n ];\n }\n}\n\nexport default withWidth()(Objects);\n"],"names":["styles","modalDialog","minWidth","maxWidth","overflowHidden","display","overflow","titleIcon","marginRight","content","fontSize","languageButton","position","right","top","languageButtonActive","theme","color","palette","primary","main","_ref","toggleTranslation","noTranslation","title","fullWidth","help","progress","icon","disableApplyIfNotChanged","applyButton","onClose","children","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableApply","value","setValue","useState","useEffect","Icon","Utils","getStyle","_jsxs","Dialog","open","disableEscapeKeyDown","sx","DialogTitle","_jsx","style","I18n","getLanguage","IconButton","size","_objectSpread","undefined","onClick","t","LanguageIcon","DialogContent","paddingTop","TextField","autoComplete","autoFocus","variant","multiline","onChange","e","target","slotProps","input","endAdornment","InputAdornment","CloseIcon","DialogActions","Button","startIcon","CheckIcon","disabled","paper","height","maxHeight","headingIcon","width","titleEnabled","float","textTransform","fontWeight","paddingLeft","scrollDiv","enabledControl","verticalAlign","customControls","accordionOdd","accordionEven","backgroundColor","accordionHeaderOdd","accordionHeaderEven","accordionHeaderEnabledOdd","accordionHeaderEnabledEven","enabledVisible","enabledInvisible","ObjectCustomEditor","Component","constructor","props","expanded","super","changedIds","scrollDivRef","jsonConfigs","refTemplate","customObj","commonConfig","cb","cachedNewValues","onSave","this","objectIDs","length","state","confirmed","setState","showConfirmation","saveOneState","getCommonConfig","hasChanges","newValues","reportChangedIds","setTimeout","JSON","parse","window","_localStorage","localStorage","getItem","_unused","loaded","maxOids","systemConfig","createRef","customsInstances","map","id","common","custom","native","AdminUtils","deepClone","objects","loadAllCustoms","then","componentDidMount","socket","getCompactSystemConfig","registerSaveFunc","componentWillUnmount","promises","adapter","replace","push","getCustomTemplate","Promise","all","forEach","_this$props$objects","_this$props$objects2","instanceObjs","_id","stringify","concat","type","instanceObjects","_ad$common","ad","fixAdminUI","adminUI","jsonText","fileExists","readFile","json","jsonSchema","file","JSON5","console","error","alert","JsonConfigComponent","loadI18n","i18n","e1","_executeCustom","func","data","instanceObj","items","attr","processed","includes","strFunc","alsoDependsOn","_attr","defaultFunc","result","f","Function","originalData","default","flattenItems","_result","arguments","Object","keys","getDefaultValues","instance","obj","defaultValues","enabled","split","attrs","filter","ids","commons","inst","_customObj$common","startsWith","Array","isArray","_default","sort","isChanged","find","combineNewAndOld","ignoreUnderscore","renderOneCustom","i","_this$jsonConfigs$ada","_this$jsonConfigs$ada2","_instance$split$pop","isIndeterminate","hidden","lang","en","Accordion","ref","pos","indexOf","splice","setItem","AccordionSummary","expandIcon","ExpandMoreIcon","src","alt","Typography","heading","className","AccordionDetails","FormControlLabel","formControl","control","Checkbox","indeterminate","checked","label","adapterName","parseInt","pop","themeName","themeType","multiEdit","schema","isFloatComma","dateFormat","onError","onValueChange","_this$commonConfig","log","ConfigGeneric","getValue","renderErrorMessage","DialogError","text","getObject","oldObjects","resolve","_objects","_oldObjects","onProgress","Math","round","shift","_obj$common","ins","instances","_obj$common2","_obj$common2$custom","isMultiEdit","setObject","async","renderConfirmationDialog","DialogConfirm","toString","ok","render","LinearProgress","index","Paper","values","jsonConfig","withWidth","localeMap","enLocale","fr","frLocale","ru","ruLocale","de","deLocale","es","esLocale","br","brLocale","nl","nlLocale","it","itLocale","pt","ptLocale","pl","plLocale","uk","ukLocale","cnLocale","tableDiv","mixins","toolbar","minHeight","container","table","whiteSpace","mode","row","userSelect","opacity","updatedRow","animation","rowInterpolated","selectHistoryControl","selectRelativeTime","marginLeft","notAliveInstance","customRange","rowSelected","secondary","contrastText","rowFocused","pointerEvents","bottom","left","m","border","action","active","grow","flexGrow","msInput","ml","mt","cellAckTrue","cellAckFalse","toolbarDate","padding","toolbarTime","toolbarTimeGrid","paddingRight","paddingBottom","borderRadius","toolbarTimeLabel","noLoadingProgress","colValue","colAck","colFrom","colLastChange","colTs","ObjectHistoryData","adminInstance","supportedFeaturesPromises","unit","timeTimer","readSupportedFeaturesTimeout","rangeValues","rangeRef","subscribes","ts","endsWith","substring","list","historyInstances","itemIndex","findIndex","alive","val","historyInstance","readHistoryRange","readHistory","relativeRange","start","end","selectedStr","lastSelected","lastSelectedColumn","selected","updateOpened","insertOpened","lcVisible","ackVisible","fromVisible","supportedFeatures","ampm","edit","location","search","slice","prepareData","setRelativeInterval","readSupportedFeatures","clearTimeout","sendTo","subscribeState","unsubscribeState","_config$common","getHistoryInstances","config","defaultHistory","historyInstanceItem","instObj","getHistory","listObj","getForeignStates","alives","item","_alives$id","_this$state$historyIn","loading","from","ack","q","addId","aggregate","returnNewestEntries","chart","range","Date","toISOString","lc","noDataForPeriod","noData","_this$state$historyIn2","now","oldest","getTime","limit","onToggleSelect","column","shiftKey","pps","ppls","ctrlKey","getTableRows","rows","r","TableRow","hover","TableCell","rowNoData","interpolated","selectedClass","formatTimestamp","Box","component","toLocaleDateString","toLocaleTimeString","padStart","shiftTime","delay","getSeconds","getMilliseconds","setMilliseconds","setSeconds","mins","setHours","setMinutes","day","getDay","setDate","getDate","setMonth","setFullYear","getFullYear","dontSave","removeItem","Number","renderTable","_this$state$historyIn3","marginTop","initialWidths","minWidths","TableContainer","TableResize","stickyHeader","dblTitle","TableHead","TableBody","renderDialogConfirm","areYouSure","DialogContentText","suppressMessage","onDelete","IconDelete","IconClose","tasks","onUpdate","parseFloat","stateVal","entries","onInsert","date","time","getHours","getMinutes","ms","updateEdit","name","renderEditDialog","noValidate","LocalizationProvider","dateAdapter","AdapterDateFns","adapterLocale","DatePicker","TimePicker","views","helperText","htmlInput","max","min","isUpdate","setStartDate","startDate","setEndDate","endDate","renderToolbar","_this$state$historyIn4","_this$state$values","Toolbar","FormControl","InputLabel","Select","MenuItem","exportData","ExportIcon","expertMode","InsertIcon","IconEdit","element","document","getElementById","createElement","setAttribute","body","appendChild","lines","join","encodeURIComponent","getObjectName","click","removeChild","echarts","TimelineComponent","ToolboxComponent","TitleComponent","TooltipComponent","GridComponent","LineChart","SVGRenderer","chartWithToolbar","chartWithoutToolbar","splitLineButtonIcon","buttonIcon","echartsButton","GRID_PADDING_LEFT","GRID_PADDING_RIGHT","ObjectChart","echartsReact","readTimeout","chartValues","divRef","timerResize","updateTimer","minY","maxY","maxYLenTimeout","mouseDown","onResize","componentDidUpdate","updateChart","chartHeight","chartWidth","splitLine","maxYLen","stepType","echartsJump","addEventListener","noToolbar","forceUpdate","getEchartsInstance","dispose","removeEventListener","_this$props$obj$commo","isAlive","getState","showJumpToEchart","getAdapterInstances","chartStep","_instObj$common","_values$","options","states","a","b","ceil","convertData","dp","exact","getOption","widthAxis","w","serie","xAxisIndex","step","showSymbol","hoverAnimation","lineStyle","areaStyle","yAxis","boundaryGap","show","splitNumber","axisLabel","formatter","showMaxLabel","showMinLabel","axisTick","alignWithLabel","interval","withSeconds","getObjectNameFromObj","grid","tooltip","trigger","params","param","toLocaleString","axisPointer","xAxis","withTime","getMonth","toolbox","feature","saveAsImage","series","getDerivedStateFromProps","_props","_state","withReadData","diff","_this$echartsReact2","_this$echartsReact","setOption","setNewRange","readData","_this$echartsReact3","installEventHandlers","zr","getZr","_iobInstalled","on","lastX","offsetX","oldDiff","wheelDelta","move","moved","preventDefault","touches","originalEvent","pageX","lastWidth","abs","fingerWidth","amount","renderChart","ReactEchartsCore","option","notMerge","lazyUpdate","opts","renderer","onEvents","rendered","current","offsetWidth","offsetHeight","minNumber","maxNumber","openEcharts","args","protocol","host","onStepChanged","showStepMenu","Menu","anchorEl","Fab","SplitLineIcon","dialog","textAlign","tabPanel","tabSelected","tabsIndicator","ObjectCustomDialog","MobileDialog","chartAvailable","saveFunc","currentTab","isChartAvailable","Router","getLocation","arg","confirmDialog","mobile","isMobile","progressRunning","showWarning","allVisibleObjects","_this$props$objects$i","_this$props$objects$i2","renderCharts","renderCustomEditor","update","cancel","isYes","renderWarningDialog","_this$props$objects$t","_this$props$objects$t2","varType","scroll","AppBar","Tabs","_event","newTab","doNavigate","indicatorColor","Tab","getButtonTitle","SaveIcon","quality","expire","readOnly","readOnlyText","wrapperButton","ackCheckbox","clientHeight","ObjectBrowserValue","propsValue","chartFrom","inputRef","React","chartEnabled","fullScreen","targetValue","valid","jsonError","_this$props$object","_this$props$object$co","_this$props$object$co2","object","_this$inputRef","el","origType","setSelectionRange","stopPropagation","isNumberValid","numVal","renderTimePicker","checkJsonError","_unused2","renderJsonEditor","Editor","editValueMode","newValue","renderStates","key","Autocomplete","disablePortal","noOptionsText","freeSolo","getOptionLabel","onInputChange","onKeyUp","renderInput","_this$props$object$co3","_this$props$role","_this$props$object$co4","alignItems","defaultChecked","Tooltip","popper","InfoIcon","write","ChartIcon","FullscreenExitIcon","FullscreenIcon","onSubmit","dialogForm","Grid2","direction","spacing","xs","flex","Switch","onKeyDown","role","gap","sm","md","IconCheck","IconCancel","divWithoutTitle","divWithoutTitleAndTab","fontStyle","aliasIdEdit","button","funcDivEdit","funcEditName","funcEdit","funcIcon","commonTabWrapper","flexFlow","commonWrapper","flexDrop","margin","marginBlock","buttonAdd","textField","mr","close","cursor","transition","transform","buttonRemoveWrapper","zIndex","tabsPadding","commonDeleteTip","typeNameEng","stateRow","justifyContent","stateTitle","stateUnit","stateValue","stateTime","stateImage","DEFAULT_ROLES","ObjectBrowserEditObject","originalObj","subscribed","onObjectUpdated","changed","onStateChange","withAlias","tab","dialogName","aliasTab","aliasRead","alias","read","aliasWrite","customError","readError","checkFunction","writeError","showCopyDialog","showCommonDeleteMessage","selectId","selectRead","selectWrite","newId","moment","_this$props$obj","_this$props$obj2","editSchemas","customEditTabs","schemas","iobUriRead","parsed","iobUriParse","warn","order","subscribeOnState","subscribeObject","clearInterval","unsubscribeObject","isWrite","_json","_json$common","_this$props$objects$j","_this$props$objects$j2","_json$common$alias","jsFunc","initialType","finalType","prepareObject","_obj$common3","_obj$common4","_unused3","newState","_json$common2","_json$common2$alias","_json$common3","_json$common3$alias","_obj$common5","_obj$common6","_obj$common7","_obj$common8","_unused4","getPartOfObject","path","getAttrInObject","setPartOfObject","setAttrInObject","renderCustomPanel","_this$state$customEdi","renderCustomTab","parsedObj","_tab$path","invertColor","iconPosition","renderStateTab","renderStatePanel","_this$props$obj$commo2","strVal","styleValue","v","match","isStringInteger","parsedDate","isValidDate","_unused5","isInteger","assign","marginBottom","fromNow","quality2text","user","c","enable","setInterval","renderTabs","_this$state$customEdi2","_e","_obj$common9","_obj$common10","_obj$common11","_unused6","renderSelectDialog","_json$common$alias2","_json$common$alias3","_json$common4","_json$common4$alias","_unused7","DialogSelectID","imagePrefix","onOk","idx","stateId","setAliasItem","commonAlias","setCommonItem","removeCommonItem","buttonAddKey","nameKey","IconAdd","buttonRemoveKey","renderCommonEdit","stateTypeArray","roleArray","checkState","checkRole","bigRoleArray","iconPath","parts","flexDirection","flexWrap","_","UploadImage","maxSize","removeIconFunc","base64","_unused8","renderAliasEdit","_json$common5","_json$common5$alias","_json$common6","_json$common6$alias","_json$common7","_json$common7$alias","_json$common11","_json$common11$alias","_json$common12","_json$common12$alias","_json$common13","_json$common13$alias","_json$common14","_json$common14$alias","_json$common15","_json$common15$alias","_json$common15$alias$","_json$common16","_json$common16$alias","_json$common16$alias$","_json$common17","_json$common17$alias","_json$common18","_json$common18$alias","_json$common18$alias$","_json$common19","_json$common19$alias","_json$common19$alias$","_json$common20","_json$common20$alias","_json$common21","_json$common21$alias","_json$common22","_json$common22$alias","_json$common23","_json$common23$alias","_json$common24","_json$common24$alias","_json$common25","_json$common25$alias","funcVisible","_json$common8","_json$common8$alias","_json$common9","_json$common9$alias","_json$common9$alias$i","_json$common10","_json$common10$alias","startAdornment","IconFx","_unused9","onCopy","copyToClipboard","onClone","oldId","newObj","onNewObject","renderCopyDialog","IconCopy","renderPanelObject","dialogStyle","innerWidth","_unused10","textOverflow","p","IconCopyClipboard","ObjectBrowserEditRole","initRole","roleInput","catch","roles","event","stateDefValues","boolean","string","number","TYPES","_objects$selected","initialStateType","names","channel","device","folder","types","parentType","storedType","buildId","_name","FORBIDDEN_CHARS","setType","setName","stateType","setStateType","unique","setUnique","onLocalApply","desc","def","AddIcon","readWriteArray","Owner","valueNum","Group","Everyone","newValueAccessControl","mask","ObjectRights","differentValues","applyToChildren","setMask","_checkDifferent","newSelected","borderLeft","borderBottom","bool","masked","borderRight","_ref2","extendObject","modalEmptyId","stateOwnerUser","setStateOwnerUser","stateOwnerGroup","setStateOwnerGroup","ownerUsers","setOwnerUsers","ownerGroups","setOwnerGroups","setApplyToChildren","setCheckState","childrenCount","setChildrenCount","valueObjectAccessControl","setValueObjectAccessControl","valueStateAccessControl","setValueStateAccessControl","differentOwner","setDifferentOwner","differentGroup","setDifferentGroup","differentState","setDifferentState","differentObject","setDifferentObject","maskState","setMaskState","maskObject","setMaskObject","setIds","setProgress","disabledButton","setDisabledButton","different","count","_differentState","_differentObject","idWithDot","_checkState","groups","users","_differentOwner","_differentGroup","_stateOwnerUser","_stateOwnerGroup","_valueObjectAccessControl","_valueStateAccessControl","_ids","k","acl","owner","ownerGroup","defaultNewAcl","isNaN","userItem","groupItem","_ref3","_ref4","CustomModal","_maskState","_maskObject","newAcl","clone","renderValue","getInvertedColor","overflowY","image","fontFamily","download","textDecoration","ObjectViewFileDialog","audioRef","binary","fileName","getBinaryState","ext","toLowerCase","detectedMimeType","detectMimeType","mime","audio","btoa","play","PlayIcon","href","DownloadIcon","formControlLabel","usedInAlias","addNewAlias","ObjectAliasEditor","aliasIDs","usedInAliases","showAddNewAlias","newAliasId","newAliasName","getText","newAliasRead","newAliasWrite","newAliasUnit","newAliasDesc","newAliasType","newAliasUseFormula","newAliasReadFormula","newAliasWriteFormula","newAliasColor","newAliasIcon","renderAddNewAlias","onRedirect","AddLink","Close","MenuList","aliasID","ListItemIcon","IconLink","ListItemText","IconDeleteAll","IconDeleteOne","buttonAll","buttonText","Objects","filters","wordCache","translate","word","arg1","arg2","filtersStr","toast","deleteObjectShow","withChildren","delObjects","delObject","renderToast","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","message","renderDeleteDialog","hasChildren","exists","ObjectBrowser","objectsWorker","prefix","defaultFilters","statesOnly","objectCustomDialog","objectBrowserValue","objectBrowserEditObject","objectBrowserEditRole","objectBrowserViewFile","objectBrowserAliasEditor","router","enableStateValueEdit","onObjectDelete","objectExists","onFilterChanged","filterConfig","onSelect","objectEditBoolean","objectAddBoolean","objectStatesView","objectImportExport","objectEditOfAccessControl","modalNewObject","context","ObjectAddNewObject","modalNewObj","modalEditOfAccessControl","objData","ObjectEditOfAccessControl","aclTooltip","modalEditOfAccess","modalEditOfAccessObjData"],"sourceRoot":""}