iobroker.admin 7.1.1 → 7.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -8
- package/adminWww/asset-manifest.json +33 -33
- package/adminWww/index.html +1 -1
- package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +1 -1
- package/adminWww/static/js/2534.d8fd195b.chunk.js +2 -0
- package/adminWww/static/js/2534.d8fd195b.chunk.js.map +1 -0
- package/adminWww/static/js/2544.047df092.chunk.js +2 -0
- package/adminWww/static/js/2544.047df092.chunk.js.map +1 -0
- package/adminWww/static/js/2816.f7bf6ba0.chunk.js +2 -0
- package/adminWww/static/js/2816.f7bf6ba0.chunk.js.map +1 -0
- package/adminWww/static/js/3210.1be726e7.chunk.js +2 -0
- package/adminWww/static/js/3210.1be726e7.chunk.js.map +1 -0
- package/adminWww/static/js/4112.9b241792.chunk.js +2 -0
- package/adminWww/static/js/4112.9b241792.chunk.js.map +1 -0
- package/adminWww/static/js/4579.014de1f1.chunk.js +2 -0
- package/adminWww/static/js/4579.014de1f1.chunk.js.map +1 -0
- package/adminWww/static/js/{5174.60f22386.chunk.js → 5174.f5aa1074.chunk.js} +2 -2
- package/adminWww/static/js/5174.f5aa1074.chunk.js.map +1 -0
- package/adminWww/static/js/530.cb8dbcf9.chunk.js +2 -0
- package/adminWww/static/js/530.cb8dbcf9.chunk.js.map +1 -0
- package/adminWww/static/js/6552.0a447e18.chunk.js +2 -0
- package/adminWww/static/js/6552.0a447e18.chunk.js.map +1 -0
- package/adminWww/static/js/6938.af058182.chunk.js +2 -0
- package/adminWww/static/js/6938.af058182.chunk.js.map +1 -0
- package/adminWww/static/js/{8038.cacab580.chunk.js → 8038.ae8b7862.chunk.js} +2 -2
- package/adminWww/static/js/8038.ae8b7862.chunk.js.map +1 -0
- package/adminWww/static/js/858.f34ea2c6.chunk.js +2 -0
- package/adminWww/static/js/858.f34ea2c6.chunk.js.map +1 -0
- package/adminWww/static/js/9399.5852b7e7.chunk.js +2 -0
- package/adminWww/static/js/9399.5852b7e7.chunk.js.map +1 -0
- package/adminWww/static/js/9534.2af54084.chunk.js +2 -0
- package/adminWww/static/js/9534.2af54084.chunk.js.map +1 -0
- package/adminWww/static/js/9917.3662a807.chunk.js +2 -0
- package/adminWww/static/js/9917.3662a807.chunk.js.map +1 -0
- package/adminWww/static/js/{main.c1384a82.js → main.423e60b6.js} +2 -2
- package/adminWww/static/js/main.423e60b6.js.map +1 -0
- package/build-backend/lib/passportSocket.js +8 -10
- package/build-backend/lib/translations.js +0 -1
- package/build-backend/lib/web.js +101 -81
- package/build-backend/main.js +173 -184
- package/io-package.json +14 -14
- package/package.json +97 -96
- package/adminWww/static/js/2534.0bc9912f.chunk.js +0 -2
- package/adminWww/static/js/2534.0bc9912f.chunk.js.map +0 -1
- package/adminWww/static/js/2544.4fa1eef5.chunk.js +0 -2
- package/adminWww/static/js/2544.4fa1eef5.chunk.js.map +0 -1
- package/adminWww/static/js/2816.cfab0128.chunk.js +0 -2
- package/adminWww/static/js/2816.cfab0128.chunk.js.map +0 -1
- package/adminWww/static/js/3210.4c1ccdc2.chunk.js +0 -2
- package/adminWww/static/js/3210.4c1ccdc2.chunk.js.map +0 -1
- package/adminWww/static/js/4112.8c6e6dae.chunk.js +0 -2
- package/adminWww/static/js/4112.8c6e6dae.chunk.js.map +0 -1
- package/adminWww/static/js/4579.cd86a1cb.chunk.js +0 -2
- package/adminWww/static/js/4579.cd86a1cb.chunk.js.map +0 -1
- package/adminWww/static/js/5174.60f22386.chunk.js.map +0 -1
- package/adminWww/static/js/530.8eed62a7.chunk.js +0 -2
- package/adminWww/static/js/530.8eed62a7.chunk.js.map +0 -1
- package/adminWww/static/js/6552.29112fa0.chunk.js +0 -2
- package/adminWww/static/js/6552.29112fa0.chunk.js.map +0 -1
- package/adminWww/static/js/6938.f4331126.chunk.js +0 -2
- package/adminWww/static/js/6938.f4331126.chunk.js.map +0 -1
- package/adminWww/static/js/8038.cacab580.chunk.js.map +0 -1
- package/adminWww/static/js/858.3a130f69.chunk.js +0 -2
- package/adminWww/static/js/858.3a130f69.chunk.js.map +0 -1
- package/adminWww/static/js/9399.c959c5de.chunk.js +0 -2
- package/adminWww/static/js/9399.c959c5de.chunk.js.map +0 -1
- package/adminWww/static/js/9534.68ac37f7.chunk.js +0 -2
- package/adminWww/static/js/9534.68ac37f7.chunk.js.map +0 -1
- package/adminWww/static/js/9917.28c0dbc2.chunk.js +0 -2
- package/adminWww/static/js/9917.28c0dbc2.chunk.js.map +0 -1
- package/adminWww/static/js/main.c1384a82.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/9534.68ac37f7.chunk.js","mappings":"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MAAO,OACPnF,SAAU,IACVk1B,OAAQ,OACRh1B,QAAS,QAEbi1B,YAAa,CACT5V,UAAW,IAEf6V,UAAW,CACPr1B,SAAU,KAEds1B,UAAW,CACPlwB,MAAO,QAEXwuB,KAAM,CACFzzB,QAAS,OACT,UAAW,CACPo1B,GAAI,QAGZC,MAAO,CACHpwB,MAAO,OACPH,OAAQ,OACRsQ,QAAS,MACTkgB,OAAQ,UACR/0B,SAAU,WACVE,IAAK,GACL80B,WAAY,gBACZ,UAAW,CACPC,UAAW,iBAEf,WAAY,CACRj1B,SAAU,WACV4V,KAAM,MACN/V,QAAS,KACT0E,OAAQ,OACRG,MAAO,MACPY,gBAAiB,UACjB2vB,UAAW,iBAEf,UAAW,CACPj1B,SAAU,WACV4V,KAAM,MACN/V,QAAS,KACT0E,OAAQ,OACRG,MAAO,MACPY,gBAAiB,UACjB2vB,UAAW,mBAGnB50B,MAAO,CACHqE,MAAO,IAEXwwB,oBAAqB,CACjBl1B,SAAU,WACVm1B,OAAQ,IACRl1B,MAAO,GAEXm1B,YAAa,CACT3e,QAAS,YAEb+Y,cAAe,CACX,uCAAwC,CACpC,MAAO,CACH1vB,SAAU,KAGlB,uCAAwC,CACpC,MAAO,CACHA,SAAU,KAItBu1B,gBAAiB,CACbh1B,MAAO,WAEXi1B,YAAa,CACTngB,WAAY,EACZN,QAAS,GACTif,UAAW,SACXh0B,SAAU,WAEd0oB,QAAS,CACL9S,cAAe,SAIjB6f,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,+BACA,+BACA,+BACA,iBACA,4BACA,4BACA,kBACA,aACA,kBACA,mBACA,iBACA,aACA,kBACA,mBACA,iBACA,cACA,uBACA,uBACA,mBACA,8BACA,wBACA,cACA,oBACA,sBACA,oBACA,oBACA,6BACA,8BACA,wBACA,mCACA,wBACA,mCACA,mCACA,8BACA,aACA,aACA,WACA,cACA,gBACA,gBACA,cACA,cACA,gBACA,oBACA,6BACA,yBACA,oCACA,eACA,eACA,0BACA,oBACA,oBACA,eACA,gBACA,2BACA,2BACA,2BACA,sBACA,gBAqCJ,MAAMC,UAAgC1vB,EAAAA,UAIlCC,WAAAA,CAAYC,GACRE,MAAMF,GAJwB,KAC1ByvB,iBAAW,OAiDnBC,gBAAkB,CAACrtB,EAAYuE,KACvBhG,KAAK6uB,cAAgBhuB,KAAKsC,UAAU6C,EAAK,KAAM,KAC/ChG,KAAK6uB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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 } from 'react';\n\nimport {\n Dialog, DialogActions, DialogContent,\n DialogTitle, IconButton, TextField,\n Button, InputAdornment, type Breakpoint,\n} from '@mui/material';\n\nimport {\n Check as CheckIcon,\n Close as CloseIcon,\n Language as LanguageIcon,\n} 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?: React.JSX.Element | React.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, noTranslation, title, fullWidth,\n help, maxWidth, progress, icon, disableApplyIfNotChanged, applyButton,\n onClose, children, titleButtonApply, titleButtonClose,\n onApply, textInput, defaultValue, overflowHidden, disableApply,\n theme,\n}: CustomModalProps) => {\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 <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 && <DialogTitle>\n {icon ?\n <Icon style={styles.titleIcon} />\n : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? <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> : null}\n </DialogTitle>}\n <DialogContent\n style={{ ...(overflowHidden ? styles.overflowHidden : undefined), ...styles.content, paddingTop: 8 }}\n >\n {textInput && <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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setValue('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n // customValue\n />}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {(applyButton === undefined || applyButton) && <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 <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\nexport default CustomModal;\n","import React, { createRef, Component, type RefObject } 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 {\n ExpandMore as ExpandMoreIcon,\n} from '@mui/icons-material';\n\nimport {\n withWidth,\n Error as DialogError,\n Confirm as ConfirmDialog, type IobTheme,\n} from '@iobroker/adapter-react-v5';\n\nimport {\n ConfigGeneric,\n JsonConfigComponent,\n type ConfigItemPanel,\n} from '@iobroker/json-config';\nimport AdminUtils from '@/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(((window as any)._localStorage || window.localStorage).getItem('App.customsExpanded') || '[]');\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 = this.props.objectIDs.length > 1 ? { common: { custom: {} }, native: {} } as ioBroker.AnyObject : AdminUtils.deepClone(this.props.objects[this.props.objectIDs[0]] || null);\n\n if (this.customObj) {\n this.loadAllCustoms()\n .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}`] ? AdminUtils.deepClone(this.props.objects[`system.adapter.${adapter}`]) : 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) as ConfigItemPanel;\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 ) {\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(`[JsonConfigComponent] attribute \"${_attr}\" is not required to be includes in \"alsoDependsOn\" while has static value!`);\n } else {\n const result = this._executeCustom(items[_attr].defaultFunc, data, customObj, instanceObj, items, _attr, processed);\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('data', 'originalData', '_system', 'instanceObj', 'customObj', '_socket', strFunc.includes('return') ? strFunc : `return ${strFunc}`);\n data[attr] = f(data || this.props.data, this.props.originalData, this.props.systemConfig, instanceObj, customObj, this.props.socket);\n } catch (e) {\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(async attr => {\n if (items[attr].defaultFunc) {\n this._executeCustom(items[attr].defaultFunc, defaultValues, obj, this.jsonConfigs[adapter].instanceObjs[instance], items, attr, processed);\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)\n .find(instance => newValues[instance] === null || (newValues[instance] && Object.keys(newValues[instance])\n .find(attr => !attr.startsWith('_'))));\n }\n\n combineNewAndOld(instance: string, ignoreUnderscore = false) {\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(instance: string, instanceObj: ioBroker.InstanceObject, customObj: ioBroker.AnyObject, i: number) {\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 = this.state.newValues[instance] !== undefined && (!this.state.newValues[instance] || this.state.newValues[instance].enabled !== undefined) ? !!(this.state.newValues[instance] && this.state.newValues[instance].enabled) : (this.state.newValues[instance] === null ? false : this.commonConfig[instance].enabled);\n const isIndeterminate = Array.isArray(enabled) && (!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 (this._executeCustom(this.jsonConfigs[adapter].json.hidden as string, data, customObj, instanceObj, this.jsonConfigs[adapter].json.items, 'enabled', [])) {\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 = (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 <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('App.customsExpanded', JSON.stringify(expanded));\n if (pos === -1) {\n ((window as any)._localStorage || window.localStorage).setItem('App.customsLastExpanded', instance);\n }\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n data-id={instance}\n style={i % 2 ?\n (enabled ? styles.accordionHeaderEnabledOdd : styles.accordionHeaderOdd)\n :\n (enabled ? styles.accordionHeaderEnabledEven : styles.accordionHeaderEven)}\n >\n <img src={icon} style={styles.headingIcon} alt=\"\" />\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={<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 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 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 (JSON.stringify(ConfigGeneric.getValue(this.commonConfig?.[instance], attr)) === JSON.stringify(value)) {\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 /> : null}\n\n {help}\n </div>\n </AccordionDetails>\n </Accordion>;\n }\n\n renderErrorMessage() {\n return !!this.state.error && <DialogError\n title={this.props.t('Error')}\n text={this.state.error ? 'Error' : ''}\n onClose={() => this.setState({ error: false })}\n />;\n }\n\n getObject(objects: Record<string, ioBroker.AnyObject>, oldObjects: Record<string, ioBroker.AnyObject>, id: string): Record<string, any> {\n if (objects[id]) {\n return Promise.resolve(objects[id]);\n }\n return this.props.socket.getObject(id)\n .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) {\n _objects = _objects || {};\n _oldObjects = _oldObjects || {};\n\n if (!ids?.length) {\n // save all objects\n const keys = Object.keys(_objects);\n if (!keys.length) {\n this.setState({ maxOids: 0 }, () =>\n this.props.onProgress(false));\n if (cb) {\n cb();\n }\n } else {\n this.setState({ progress: Math.round(((this.state.maxOids - keys.length) / this.state.maxOids) * 50) + 50 });\n const id = keys.shift() as string;\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 this.props.socket.setObject(id, _objects[id])\n .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(() =>\n 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 }, () =>\n 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() as string;\n this.getObject(_objects, _oldObjects, id)\n .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 (!obj.common.custom || !obj.common.custom[instance] || !obj.common.custom[instance].enabled) {\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(() =>\n this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n });\n }\n }\n\n renderConfirmationDialog() {\n if (!this.state.showConfirmation) {\n return false;\n }\n return <ConfirmDialog\n text={this.props.t('The changes will be applied to %s states. Are you sure?', this.props.objectIDs.length.toString())}\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 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() {\n if (this.customObj === null) {\n return <div style={{ color: '#F55', fontSize: 32 }}>\n {this.props.t('Object does not exist!')}\n </div>;\n }\n if (!this.state.loaded) {\n return <LinearProgress />;\n }\n let index = 0;\n\n return <Paper style={styles.paper}>\n {this.state.maxOids > 1 && <LinearProgress color=\"secondary\" variant=\"determinate\" value={this.state.progress} />}\n <div style={styles.scrollDiv} ref={this.scrollDivRef}>\n {this.state.maxOids === 0 && Object.values(this.jsonConfigs).map(jsonConfig => {\n if (jsonConfig) {\n return Object.keys(jsonConfig.instanceObjs)\n .map(instance =>\n this.renderOneCustom(instance, jsonConfig.instanceObjs[instance], this.customObj, index++));\n }\n return null;\n })}\n </div>\n {this.renderErrorMessage()}\n {this.renderConfirmationDialog()}\n </Paper>;\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\n// eslint-disable-next-line import/prefer-default-export\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 } 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, Box,\n} from '@mui/material';\n\n// icons\nimport { FaPlusSquare as InsertIcon, FaDownload as ExportIcon } from 'react-icons/fa';\nimport {\n Edit as IconEdit,\n Delete as IconDelete,\n Close as IconClose,\n} from '@mui/icons-material';\n\nimport {\n Utils, withWidth, TableResize, type AdminConnection,\n type IobTheme, 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\n },\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 this.prepareData()\n .then(() => this.readHistoryRange())\n .then(() => {\n if (relativeRange !== 'absolute') {\n this.setRelativeInterval(this.state.relativeRange, true);\n } else {\n 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]) {\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 this.props.socket.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() {\n await this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n }\n\n componentWillUnmount() {\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) => {\n if (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 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 this.readHistoryRange()\n .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 ampm: (config.common.dateFormat || '').includes('/'),\n historyInstances: list,\n // defaultHistory,\n historyInstance,\n supportedFeatures,\n }, () => resolve());\n });\n }\n\n getHistoryInstances() {\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)\n .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) {\n start = start || this.state.start;\n end = end || this.state.end;\n\n if (!this.state.historyInstance || !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return null;\n }\n\n this.setState({ loading: true });\n\n return this.props.socket.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 (chart[chart.length - 1].ts === values[t].ts && chart[chart.length - 1].val !== values[t].ts) {\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() {\n const now = new Date();\n const oldest = new Date(2_000, 0, 1);\n\n if (!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.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) {\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\n 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() {\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(<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 } else\n if (state.noData || state.noDataForPeriod) {\n rows.push(<TableRow\n sx={{ ...styles.row, ...styles.updatedRow, ...styles.rowNoData }}\n key={state.noData ? 'nodata' : ''}\n hover\n >\n <TableCell />\n <TableCell>{ state.noData ? this.props.t('No data in history') : this.props.t('No data in history for selected period')}</TableCell>\n {this.state.ackVisible ? <TableCell /> : null}\n {this.state.fromVisible ? <TableCell /> : null}\n {this.state.lcVisible ? <TableCell /> : null}\n </TableRow>);\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(<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 {`${this.formatTimestamp(state.ts)}`}\n {selected && this.state.lastSelectedColumn === 'ts' ? <Box component=\"div\" sx={styles.rowFocused} /> : ''}\n </TableCell>\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'val')}>\n {val + this.unit}\n {selected && this.state.lastSelectedColumn === 'val' ? <Box component=\"div\" sx={styles.rowFocused} /> : ''}\n </TableCell>\n {this.state.ackVisible ? <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'ack')} sx={state.ack ? styles.cellAckTrue : styles.cellAckFalse}>\n {state.ack ? 'true' : 'false' }\n {selected && this.state.lastSelectedColumn === 'ack' ? <Box component=\"div\" sx={styles.rowFocused} /> : ''}\n </TableCell> : null}\n {this.state.fromVisible ? <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'from')}>\n {state.from || ''}\n {selected && this.state.lastSelectedColumn === 'from' ? <Box component=\"div\" sx={styles.rowFocused} /> : ''}\n </TableCell> : null}\n {this.state.lcVisible ? <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'lc')}>\n {state.lc ? `${new Date(state.lc).toLocaleDateString()} ${new Date(state.lc).toLocaleTimeString()}.${(state.ts % 1000).toString().padStart(3, '0')}` : ''}\n {selected && this.state.lastSelectedColumn === 'lc' ? <Box component=\"div\" sx={styles.rowFocused} /> : ''}\n </TableCell> : null}\n </TableRow>);\n }\n }\n\n return rows;\n }\n\n shiftTime() {\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 }, () =>\n this.readHistory());\n }\n\n renderTable() {\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 <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}>\n {this.props.t('Timestamp')}\n </TableCell>\n <TableCell style={styles.colValue}>\n {this.props.t('Value')}\n </TableCell>\n {this.state.ackVisible ? <TableCell style={styles.colAck}>\n {this.props.t('Ack')}\n </TableCell> : null}\n {this.state.fromVisible ? <TableCell style={styles.colFrom}>\n {this.props.t('From')}\n </TableCell> : null}\n {this.state.lcVisible ? <TableCell style={styles.colLastChange}>\n {this.props.t('lc')}\n </TableCell> : null}\n </TableRow>\n </TableHead>\n <TableBody>{this.getTableRows()}</TableBody>\n </TableResize>\n </TableContainer>;\n }\n return <LinearProgress />;\n }\n\n renderConfirmDialog() {\n return <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\n <DialogTitle id=\"alert-dialog-title\">{ }</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n { this.props.t('Are you sure?') }\n </DialogContentText>\n <FormControlLabel\n control={<Checkbox value={this.state.suppressMessage} onChange={() => this.setState({ suppressMessage: true })} />}\n label={this.props.t('Suppress for 5 minutes')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ areYouSure: false, suppressMessage: this.state.suppressMessage && Date.now() }, () => this.onDelete())}\n color=\"primary\"\n autoFocus\n startIcon={<IconDelete />}\n >\n { this.props.t('Delete') }\n </Button>\n <Button variant=\"contained\" onClick={() => this.setState({ areYouSure: false })} color=\"secondary\" startIcon={<IconClose />}>{ this.props.t('Cancel') }</Button>\n </DialogActions>\n </Dialog>;\n }\n\n onDelete() {\n const tasks = this.state.selected.map(ts => ({ state: { ts }, id: this.props.obj._id }));\n this.props.socket.sendTo(this.state.historyInstance, 'delete', tasks)\n .then(() =>\n this.readHistory());\n }\n\n onUpdate() {\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 this.props.socket.sendTo(this.state.historyInstance, 'update', [{ id: this.props.obj._id, state }])\n .then(() =>\n this.readHistory());\n }\n\n onInsert() {\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 this.props.socket.sendTo(this.state.historyInstance, 'insert', [{ id: this.props.obj._id, state }])\n .then(() =>\n 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(): React.JSX.Element {\n return <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\">{this.state.updateOpened ? this.props.t('Update entry') : this.props.t('Insert entry')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n {typeof this.state.edit.val === 'boolean' ?\n <FormControlLabel\n control={<Checkbox\n checked={this.state.edit.val}\n onChange={e => this.updateEdit('val', e.target.checked)}\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 <br />\n <FormControlLabel\n control={<Checkbox\n checked={this.state.edit.ack}\n onChange={e => this.updateEdit('ack', e.target.checked)}\n />}\n label={this.props.t('Acknowledged')}\n />\n\n {this.state.insertOpened ?\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={localeMap[this.props.lang]}>\n <div style={styles.toolbarTimeGrid}>\n <div style={styles.toolbarTimeLabel}>\n {this.props.t('Time')}\n </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> : 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 color=\"primary\"\n autoFocus\n >\n {this.state.updateOpened ? this.props.t('Update') : this.props.t('Add')}\n </Button>\n <Button variant=\"contained\" onClick={() => this.setState({ updateOpened: false, insertOpened: false })} color=\"grey\">{ this.props.t('Cancel') }</Button>\n </DialogActions>\n </Dialog>;\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() {\n return <Toolbar>\n <FormControl variant=\"standard\" style={styles.selectHistoryControl}>\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(\n 'App.historyInstance',\n historyInstance,\n );\n this.readSupportedFeatures(historyInstance)\n .then((supportedFeatures: SupportedFeatures) =>\n this.setState({ historyInstance, supportedFeatures }, () =>\n this.readHistory()));\n }}\n >\n {this.state.historyInstances?.map(it => <MenuItem\n key={it.id}\n value={it.id}\n style={!it.alive ? styles.notAliveInstance : undefined}\n >\n {it.id}\n </MenuItem>)}\n </Select>\n </FormControl>\n <FormControl variant=\"standard\" style={styles.selectRelativeTime}>\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 key=\"custom\" value=\"absolute\" sx={styles.customRange}>\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem key=\"1\" value={10}>\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem key=\"2\" value={30}>\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem key=\"3\" value={60}>\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem key=\"4\" value=\"day\">\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem key=\"5\" value={24 * 60}>\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem key=\"6\" value=\"week\">\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem key=\"7\" value={24 * 60 * 7}>\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem key=\"8\" value=\"2weeks\">\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem key=\"9\" value={24 * 60 * 14}>\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem key=\"10\" value=\"month\">\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem key=\"11\" value={30 * 24 * 60}>\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem key=\"12\" value=\"year\">\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem key=\"13\" value=\"12months\">\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={localeMap[this.props.lang]}>\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 component=\"div\" sx={styles.grow} />\n\n {this.state.values?.length ? <IconButton size=\"large\" onClick={() => this.exportData()} title={this.props.t('Save data as csv')}>\n <ExportIcon />\n </IconButton> : null}\n\n {this.state.supportedFeatures.includes('insert') && this.props.expertMode ? <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> : null}\n {this.state.supportedFeatures.includes('update') && this.props.expertMode ? <IconButton\n size=\"large\"\n disabled={this.state.selected.length !== 1}\n onClick={() => {\n const state = JSON.parse(JSON.stringify(this.state.values.find((it: HistoryItem) => it.ts === this.state.lastSelected)));\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> : null}\n {this.state.supportedFeatures.includes('delete') && this.props.expertMode ? <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> : null}\n </Toolbar>;\n }\n\n exportData() {\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((state: HistoryItem) => !state.i && !state.e &&\n lines.push([\n this.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 element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(lines.join('\\n'))}`);\n element.setAttribute('download', `${Utils.getObjectName({ [this.props.obj._id]: this.props.obj }, this.props.obj._id, this.props.lang)}.csv`);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n render() {\n if (!this.state.historyInstances) {\n return <LinearProgress />;\n }\n\n return <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : <div style={styles.noLoadingProgress} />}\n {this.renderToolbar()}\n <Box component=\"div\" sx={styles.tableDiv}>\n {this.renderTable()}\n </Box>\n {this.renderConfirmDialog()}\n {this.renderEditDialog()}\n </Paper>;\n }\n\n /**\n * Convert timestamp to human-readable date string\n *\n * @param ts the timestamp\n */\n 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 } 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, Utils,\n withWidth, 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([TimelineComponent, ToolboxComponent, TitleComponent, TooltipComponent, GridComponent, LineChart, SVGRenderer]);\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() {\n this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n window.addEventListener('resize', this.onResize);\n this.prepareData()\n .then(() => !this.props.noToolbar && this.readHistoryRange())\n .then(() => this.setRelativeInterval(this.state.relativeRange, true, () => this.forceUpdate()));\n }\n\n componentWillUnmount() {\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 = () => {\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) => {\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 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 = this.props.defaultHistory && 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(`system.adapter.${this.props.defaultHistory}.alive`, this.onChange);\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() {\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() {\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) {\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 ? undefined : {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static getDerivedStateFromProps(_props: ObjectChartProps, _state: ObjectChartState): void {\n return null;\n }\n\n updateChart(start?: number, end?: number, withReadData?: boolean, cb?: () => 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 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) {\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() {\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) {\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 installEventHandlers() {\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() {\n if (!this.state.historyInstance) {\n return <div style={{ marginTop: 20, fontSize: 24, marginLeft: 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, marginLeft: 24 }}>{this.props.t('History instance not alive')}</div>;\n }\n if (this.chartValues) {\n return <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 return <LinearProgress />;\n }\n\n componentDidUpdate() {\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) {\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 setEndDate(max: Date) {\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 openEcharts() {\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) {\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() {\n if (this.props.noToolbar) {\n return null;\n }\n\n return (\n <Toolbar>\n {!this.props.historyInstance && (\n <FormControl variant=\"standard\" style={styles.selectHistoryControl}>\n <InputLabel>{this.props.t('History instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.historyInstance}\n onChange={async e => {\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 variant=\"standard\" style={styles.selectRelativeTime}>\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 key=\"custom\" value=\"absolute\" sx={styles.customRange}>\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem key=\"1\" value={10}>\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem key=\"2\" value={30}>\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem key=\"3\" value={60}>\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem key=\"4\" value=\"day\">\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem key=\"5\" value={24 * 60}>\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem key=\"6\" value=\"week\">\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem key=\"7\" value={24 * 60 * 7}>\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem key=\"8\" value=\"2weeks\">\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem key=\"9\" value={24 * 60 * 14}>\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem key=\"10\" value=\"month\">\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem key=\"11\" value={30 * 24 * 60}>\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem key=\"12\" value=\"year\">\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem key=\"13\" value=\"12months\">\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={localeMap[this.props.lang]}>\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{ ...styles.toolbarTimeLabel, opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined }}\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={{ ...styles.toolbarTimeLabel, opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined }}\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 ? <Menu\n open={!0}\n anchorEl={this.state.showStepMenu}\n onClose={() => this.setState({ showStepMenu: null })}\n >\n <MenuItem selected={this.state.stepType === ''} onClick={() => this.onStepChanged('')}>\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> : null}\n {this.props.showJumpToEchart && this.state.echartsJump && <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 src={EchartsIcon} alt=\"echarts\" style={styles.buttonIcon} />\n </Fab>}\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() {\n if (!this.state.historyInstances && !this.state.defaultHistory) {\n return <LinearProgress />;\n }\n\n return <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\nexport default withWidth()(ObjectChart);\n","import React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n AppBar,\n Tabs,\n Tab,\n Box,\n} from '@mui/material';\n\nimport {\n I18n,\n Confirm as ConfirmDialog,\n Router,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type ThemeName, type Translate,\n} from '@iobroker/adapter-react-v5';\n\n// Icons\nimport {\n Close as CloseIcon,\n Save as SaveIcon,\n} 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(((window as any)._localStorage as Storage || window.localStorage)\n .getItem('App.objectCustomTab') || '0', 10);\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() {\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() {\n return <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 renderTable() {\n return <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 renderCustomEditor() {\n return <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 renderConfirmDialog() {\n if (!this.state.confirmDialog) {\n return null;\n }\n return <ConfirmDialog\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 =>\n this.setState({ confirmDialog: false }, () => isYes && this.props.onClose())}\n />;\n }\n\n onClose() {\n if (this.state.hasChanges) {\n this.setState({ confirmDialog: true });\n } else {\n this.props.onClose();\n }\n }\n\n renderWarningDialog() {\n if (!this.state.showWarning) {\n return false;\n }\n return <ConfirmDialog\n text={<div style={{ color: '#F00' }}>\n {this.props.t('Your are intend to edit ALL objects. Are you sure?')}\n </div>}\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 render() {\n const varType = this.props.objects[this.props.objectIDs[0]]?.common?.type;\n\n return <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.renderConfirmDialog()}\n {this.renderWarningDialog()}\n <DialogTitle>\n {\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 }\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(null, null, null, newTab === 1 ? 'table' : (newTab === 2 ? 'chart' : 'config'));\n this.setState({ currentTab: newTab });\n ((window as any)._localStorage as Storage || window.localStorage).setItem('App.objectCustomTab', newTab);\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 ? <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 /> : null}\n {(varType === 'number' || varType === 'boolean') && this.props.objectIDs.length === 1 && this.chartAvailable ? <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 /> : null}\n </Tabs>\n </AppBar>\n {this.state.currentTab === 0 ? <Box component=\"div\" sx={styles.tabPanel}>{this.renderCustomEditor()}</Box> : null}\n {this.props.objectIDs.length === 1 && this.chartAvailable && this.state.currentTab === 1 ? <Box component=\"div\" sx={styles.tabPanel}>{this.renderTable()}</Box> : null}\n {(varType === 'number' || varType === 'boolean') && this.props.objectIDs.length === 1 && this.chartAvailable && this.state.currentTab === 2 ? <Box component=\"div\" sx={styles.tabPanel}>{this.renderCharts()}</Box> : null}\n </DialogContent>\n <DialogActions>\n {this.state.currentTab === 0 && <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 {this.state.currentTab === 0 && <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 <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\nexport default ObjectCustomDialog;\n","import React, { Component } 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 Grid,\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 {\n type AdminConnection, type IobTheme,\n type ThemeType, type Translate,\n} 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(']')) ||\n (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: ((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() {\n if (\n this.props.defaultHistory &&\n this.props.object?.common?.custom &&\n this.props.object.common.custom[this.props.defaultHistory]?.enabled\n ) {\n 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) {\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 * @param options value and common information\n */\n 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(): React.JSX.Element {\n return <LocalizationProvider adapterLocale={localeMap[this.props.lang]} dateAdapter={AdapterDateFns}>\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\n </LocalizationProvider>;\n }\n\n renderChart(): React.JSX.Element {\n return <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 static checkJsonError(value: string): boolean {\n try {\n JSON.parse(value);\n return false;\n } catch {\n return true;\n }\n }\n\n renderJsonEditor(): React.JSX.Element {\n return <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 renderStates() {\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 <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 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 {...params} label={this.props.t('Value')} variant=\"standard\" />\n )}\n />;\n }\n return <FormControl variant=\"standard\" style={styles.formControl}>\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 key={i} value={key}>\n {this.props.states[key]}\n </MenuItem>\n ))}\n </Select>\n </FormControl>;\n }\n\n render() {\n const ackCheckbox = <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n style={{\n ...styles.formControl,\n ...(!this.props.expertMode ? styles.ackCheckbox : undefined),\n }}\n control={<Checkbox defaultChecked={false} onChange={e => (this.ack = e.target.checked)} />}\n label={this.props.t('Acknowledged')}\n />\n <Tooltip title={this.props.t('Acknowledged explanation')} slotProps={{ popper: { sx: styles.tooltip } }}>\n <InfoIcon color=\"primary\" />\n </Tooltip>\n </div>;\n\n return <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 ? <span style={styles.readOnlyText}>\n(\n {this.props.t('read only')}\n)\n </span> : null}\n {/* this.state.chart ? <div style={{flexGrow: 1}}/> : null */}\n {this.state.chart ? <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> : null}\n {this.state.type === 'json' ? <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> : null}\n </DialogTitle>\n <DialogContent>\n <form\n noValidate\n autoComplete=\"off\"\n onSubmit={() => false}\n style={{ ...styles.dialogForm, height: '100%' }}\n >\n <Grid container direction=\"row\" spacing={2} style={{ height: '100%' }}>\n <Grid\n item\n xs={this.state.chart && this.state.chartEnabled ? 6 : 12}\n style={{ height: '100%' }}\n >\n <Grid container direction=\"column\" spacing={2} style={{ marginTop: 0, height: '100%' }}>\n {this.props.expertMode ? <Grid item>\n <Grid container direction=\"row\" spacing={2} style={{ marginTop: 0 }}>\n {this.props.expertMode ? <Grid item>\n <FormControl style={styles.formControl}>\n <InputLabel>{this.props.t('Value type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n this.setState({\n type: e.target.value as 'states' | 'string' | 'number' | 'boolean' | 'json',\n valid: e.target.value === 'number' ? this.isNumberValid({ value: this.state.targetValue, common: this.props.object.common }) : true,\n jsonError: false,\n }, () => {\n if (this.state.type === 'json') {\n this.setState({\n targetValue: (this.state.targetValue || '').toString(),\n jsonError: ObjectBrowserValue.checkJsonError((this.state.targetValue || '').toString()),\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 ? <MenuItem value=\"states\">States</MenuItem> : null}\n </Select>\n </FormControl>\n </Grid> : null}\n {this.state.type === 'json' ? <Grid item flex={1}></Grid> : null}\n </Grid>\n </Grid> : null}\n <Grid\n item\n flex={this.state.type === 'json' && this.state.fullScreen ? 1 : undefined}\n style={{ paddingTop: 0 }}\n >\n {this.state.type === 'boolean' ? <Typography\n component=\"div\"\n style={this.props.expertMode ? {\n marginTop: 20,\n width: '100%',\n backgroundColor: this.props.themeType === 'dark' ? '#595959' : '#dadada',\n borderRadius: 5,\n padding: 5,\n } : undefined}\n >\n <Grid component=\"label\" container alignItems=\"center\" spacing={1}>\n <Grid item style={{ marginRight: 10 }}>\n {this.props.t('Value')}\n:\n </Grid>\n <Grid item>FALSE</Grid>\n <Grid item>\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 => this.setState({ targetValue: e.target.checked })}\n />\n </Grid>\n <Grid item>TRUE</Grid>\n </Grid>\n </Typography> : (this.state.type === 'number' ? <TextField\n variant=\"standard\"\n fullWidth\n autoFocus\n error={!this.state.valid}\n type=\"number\"\n inputProps={{ step: this.props.object.common.step, min: this.props.object.common.min, max: this.props.object.common.max }}\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 || this.props.object.common.unit === '%' ? `, ${this.props.t('min:')} ${this.props.object.common.min !== undefined ? this.props.object.common.min : 0}` : '') +\n (this.props.object.common.max !== undefined || this.props.object.common.unit === '%' ? `, ${this.props.t('max:')} ${this.props.object.common.max !== undefined ? this.props.object.common.max : 100}` : '')\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: this.isNumberValid({ value: e.target.value, common: this.props.object.common }),\n });\n }}\n /> : (this.state.type === 'json' ?\n this.renderJsonEditor()\n : (this.state.type === 'states' ?\n this.renderStates()\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 </Grid>\n\n {(this.props.role === 'date' || this.props.role?.startsWith('date.')) && this.state.type === 'number' ? <Grid style={{ display: 'flex', gap: '5px' }} item xs={6}>{this.renderTimePicker()}</Grid> : null}\n\n {this.props.expertMode ? <Grid item>{ackCheckbox}</Grid> : null}\n\n {this.props.expertMode ? <Grid item>\n <FormControl variant=\"standard\" style={styles.quality}>\n <InputLabel>{this.props.t('Quality')}</InputLabel>\n <Select\n variant=\"standard\"\n defaultValue={0}\n onChange={e => (this.q = Number(e.target.value) as ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY])}\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 inputProps={{ min: 0 }}\n helperText={this.props.t('in seconds')}\n defaultValue={this.expire}\n onChange={e => (this.expire = Number(e.target.value))}\n />\n </Grid> : null}\n </Grid>\n </Grid>\n {this.state.chart && this.state.chartEnabled && this.state.type !== 'json' ? <Grid\n item\n xs={6}\n style={{ minHeight: 300 }}\n sx={{ display: { sm: 'none', md: 'inline-block' } }}\n >\n {this.renderChart()}\n </Grid> : null}\n </Grid>\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\nexport default ObjectBrowserValue;\n","import React, { Component } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Tabs,\n Tab,\n TextField,\n Grid,\n InputAdornment,\n Checkbox,\n FormControlLabel,\n Fab,\n IconButton,\n FormControl, InputLabel,\n MenuItem, Select, Tooltip, Autocomplete, Box,\n} from '@mui/material';\n\nimport {\n Close as IconClose,\n Check as IconCheck,\n Add as IconAdd,\n FileCopy as IconCopy,\n} from '@mui/icons-material';\n\nimport { FaClipboard as IconCopyClipboard } from 'react-icons/fa';\n\nimport {\n Utils, I18n,\n SelectID as DialogSelectID,\n IconFx,\n UploadImage,\n type Connection,\n type Translate,\n type ThemeType,\n type IobTheme,\n} from '@iobroker/adapter-react-v5';\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 },\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};\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 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 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}\n\nclass ObjectBrowserEditObject extends Component<ObjectBrowserEditObjectProps, ObjectBrowserEditObjectState> {\n /** Original object stringified */\n private originalObj: string;\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(`${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 = obj.common && 'type' in obj.common && 'alias' in obj.common ? obj.common.alias.read : undefined;\n const aliasWrite = 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 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 };\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n componentDidMount() {\n this.props.socket.subscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n componentWillUnmount() {\n this.props.socket.unsubscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n onObjectUpdated = (id: string, obj: ioBroker.AnyObject) => {\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 ? json.common.type : (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type;\n const finalType: ioBroker.CommonType = isWrite ? (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type : 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 // eslint-disable-next-line valid-typeof\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) {\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) {\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 renderTabs() {\n return <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 }\n\n this.setState({ tab });\n }}\n >\n <Tab value=\"common\" label={this.props.t('Common')} />\n <Tab value=\"object\" label={this.props.t('Object data')} />\n {this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state' &&\n <Tab value=\"alias\" label={this.props.t('Alias')} />}\n </Tabs>;\n }\n\n renderSelectDialog(): React.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 = json.common && 'type' in json.common && 'alias' in json.common ? json.common.alias?.read : '';\n const aliasWrite = 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 <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 => {\n const selectRead = this.state.selectRead;\n const selectWrite = this.state.selectWrite;\n const selectId = this.state.selectId;\n const stateId = idx as string;\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 setAliasItem(json: ioBroker.StateObject, name: string, value: string, cb?: () => 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 buttonAddKey(nameKey: string, cb: () => void): React.JSX.Element {\n return <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 buttonRemoveKey(nameKey: string, cb: () => void): React.JSX.Element {\n const { t } = this.props;\n return <Tooltip title={t('Remove attribute %s', nameKey)} slotProps={{ popper: { sx: styles.tooltip } }}>\n <Box component=\"div\" sx={styles.close} onClick={cb} />\n </Tooltip>;\n }\n\n renderCommonEdit(): React.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 {\n t, roleArray, obj,\n } = 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 <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' ? '10px' : undefined,\n display: this.props.width === 'xs' ? 'flex' : undefined,\n flexDirection: this.props.width === 'xs' ? 'column' : undefined,\n }}\n >\n {typeof json.common.name !== 'undefined' ? <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('Name')}\n style={{ ...styles.marginBlock, ...styles.textField }}\n fullWidth\n value={Utils.getObjectNameFromObj(json, I18n.getLanguage(), {}, false, true)}\n onChange={el => this.setCommonItem(json, 'name', el.target.value)}\n /> : this.buttonAddKey('name', () => this.setCommonItem(json, 'name', ''))}\n {checkState ? (\n typeof json.common.type !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\n <FormControl style={styles.marginBlock} fullWidth>\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 => <MenuItem key={el} value={el}>\n {t(el)}\n <span style={styles.typeNameEng}>\n (\n {el}\n )\n </span>\n </MenuItem>)}\n </Select>\n </FormControl>\n {this.buttonRemoveKey('type', () => this.removeCommonItem(json, 'type'))}\n </Box> : this.buttonAddKey('type', () => this.setCommonItem(json, 'type', 'string'))\n ) : null}\n <Box component=\"div\" sx={{ ...styles.flex, flexWrap: this.props.width === 'xs' ? 'wrap' : undefined }}>\n {checkState ? (\n typeof json.common.read !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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> : this.buttonAddKey('read', () => this.setCommonItem(json, 'read', true))\n ) : null}\n {checkState ? (\n typeof json.common.write !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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> : this.buttonAddKey('write', () => this.setCommonItem(json, 'write', true))\n ) : null}\n </Box>\n {checkRole ? (\n typeof json.common.role !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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 variant=\"standard\" {...params} label={t('Role')} />}\n />\n {this.buttonRemoveKey('role', () => this.removeCommonItem(json, 'role'))}\n </Box> : this.buttonAddKey('role', () => this.setCommonItem(json, 'role', ''))\n ) : null}\n {typeof json.common.color !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\n <TextField\n variant=\"standard\"\n disabled={disabled}\n style={{ ...styles.marginBlock, ...styles.color }}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </Box> : this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))}\n <Box component=\"div\" sx={{ ...styles.flex, flexWrap: this.props.width === 'xs' ? 'wrap' : undefined, gap: this.props.width === 'xs' ? '10px' : undefined }}>\n {json.common.type === 'number' ? (\n typeof json.common.min !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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 component=\"div\" sx={styles.flex}>\n {this.buttonAddKey('min', () => this.setCommonItem(json, 'min', 0))}\n </Box>) : null}\n {json.common.type === 'number' ? (\n typeof json.common.max !== 'undefined' ? (\n <Box component=\"div\" sx={styles.flex}>\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 ) : <Box component=\"div\" sx={styles.flex}>\n {this.buttonAddKey('max', () => this.setCommonItem(json, 'max', 100))}\n </Box>\n ) : null}\n {json.common.type === 'number' ? (\n typeof json.common.step !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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> : <Box component=\"div\" sx={styles.flex}>\n {this.buttonAddKey('step', () => this.setCommonItem(json, 'step', 1))}\n </Box>\n ) : null}\n </Box>\n {json.common.type === 'number' ? (\n typeof json.common.unit !== 'undefined' ? <Box component=\"div\" sx={styles.flex}>\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 <div style={styles.flexDrop}>\n {this.buttonAddKey('unit', () => this.setCommonItem(json, 'unit', ''))}\n </div>\n ) : null}\n </Box>\n {typeof json.common.icon !== 'undefined' ? <Box component=\"div\" sx={styles.flex} style={{ flexGrow: 1, minWidth: 158 }}>\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 <Box component=\"div\" sx={styles.flex}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </Box>}\n </Box>;\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n renderAliasEdit() {\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 <Grid container direction=\"column\" style={styles.marginTop}>\n <Grid item>\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 </Grid>\n {typeof json.common?.alias?.id !== 'object' ? <Grid item>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias state')}\n value={json.common?.alias?.id || ''}\n style={styles.aliasIdEdit}\n InputProps={{\n endAdornment: json.common?.alias?.id ? <InputAdornment position=\"end\">\n <IconButton size=\"large\" onClick={() => this.setAliasItem(json, 'id', '')}>\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\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 </Grid> : null}\n\n {typeof json.common?.alias?.id === 'object' ? <Grid item>\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 InputProps={{\n endAdornment: json.common?.alias?.id?.read ? <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\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 </Grid> : null}\n\n {typeof json.common?.alias?.id === 'object' ? <Grid item>\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 InputProps={{\n endAdornment: json.common?.alias?.id?.write ? <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\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 </Grid> : null}\n <Grid item 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 </Grid>\n {funcVisible ? <Grid item>\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 InputProps={{\n endAdornment: json.common?.alias?.read ? <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\n startAdornment: <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>,\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 </Grid> : null}\n {funcVisible ? <Grid item>\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 InputProps={{\n endAdornment: json.common?.alias?.write ? <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\n startAdornment: <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>,\n }}\n onChange={e => this.setAliasItem(json, 'write', e.target.value)}\n margin=\"normal\"\n />\n </Grid> : null}\n </Grid>;\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n onCopy(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) {\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) {\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() {\n if (!this.state.showCopyDialog) {\n return null;\n }\n return <Dialog open={!0} maxWidth=\"md\" fullWidth onClose={() => this.setState({ showCopyDialog: '' })}>\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 render() {\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 return <Dialog\n sx={{ '& .MuiPaper-root': styles.dialog }}\n open={!0}\n maxWidth=\"lg\"\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 {' '}\n <Box component=\"span\" style={styles.id} sx={{ fontSize: { xs: 10 } }}>{this.props.obj._id}</Box>\n </DialogTitle>\n\n {this.renderTabs()}\n {this.renderCopyDialog()}\n\n <DialogContent\n sx={{\n p: this.props.width === 'xs' && this.state.tab === 'object' ? '6px' : undefined,\n }}\n >\n {this.state.tab === 'object' ? <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> : null}\n </div> : null}\n {this.state.tab === 'alias' &&\n this.props.obj._id.startsWith('alias.0') &&\n this.props.obj.type === 'state' ? this.renderAliasEdit() : null}\n {this.state.tab === 'common' ? this.renderCommonEdit() : null}\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' && <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' ? <IconCopyClipboard fontSize={32} /> : this.props.t('Copy into clipboard')}\n </Button>}\n <Button\n variant=\"contained\"\n disabled={this.state.error || !this.state.changed}\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\nexport default ObjectBrowserEditObject;\n","import React, { Component } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n TextField,\n Button,\n Autocomplete,\n} from '@mui/material';\n\nimport {\n Close as IconCancel,\n Check as IconCheck,\n} 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() {\n this.props.socket.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() {\n this.object.common = this.object.common || {} as ioBroker.ObjectCommon;\n this.object.common.role = this.state.roleInput;\n this.props.socket.setObject(this.object._id, this.object)\n .then(() => this.props.onClose(this.object));\n }\n\n render() {\n return <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\">{this.object ? this.props.t('Update role for %s', this.object._id) : null}</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 => <TextField\n variant=\"standard\"\n {...params}\n label={this.props.t('Role')}\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\nexport default ObjectBrowserEditRole;\n","import React, { useState } from 'react';\n\nimport {\n Button,\n FormControl, InputLabel,\n MenuItem,\n Select, TextField,\n Dialog,\n DialogTitle,\n DialogActions,\n DialogContent, InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport {\n Check as CheckIcon,\n Close as CloseIcon,\n AddBox as AddIcon,\n} from '@mui/icons-material';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\n\nconst stateTypeArray = [\n 'array',\n 'boolean',\n 'file',\n 'json',\n 'mixed',\n 'number',\n 'object',\n 'string',\n];\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, onApply, selected, setObject, objects,\n expertMode, initialType, initialStateType,\n}) => {\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 (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('App.lastObjectType') as ioBrokerObject['type'];\n if (storedType && types.find(item => item.value === storedType)) {\n initialType = storedType;\n }\n\n function buildId(_name: 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 || ((window as any)._localStorage as Storage || window.localStorage).getItem('App.lastStateType') || 'string') as keyof typeof stateDefValues,\n );\n const [unique, setUnique] = useState<boolean>(!objects[buildId(names.state)]);\n\n const onLocalApply = () => {\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 setObject(`${selected}.${name.split(' ').join('_')}`, newObj)\n .then(() => onApply());\n };\n\n const lang = I18n.getLanguage();\n\n return <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}\n .\n {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 variant=\"standard\" style={{ marginTop: 10, marginBottom: 16 }}>\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('App.lastObjectType', el.target.value);\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 => <MenuItem key={el.value} value={el.value}>\n {I18n.t(el.name)}\n {lang !== 'en' && <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n (\n {el.value}\n )\n </span>}\n </MenuItem>)}\n </Select>\n </FormControl>\n {type === 'state' && <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('App.lastStateType', el.target.value);\n setStateType(el.target.value as keyof typeof stateDefValues);\n }}\n >\n {stateTypeArray.map(el => <MenuItem key={el} value={el}>\n {I18n.t(el)}\n {lang !== 'en' && I18n.t(el) !== el && <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n (\n {el}\n )\n </span>}\n </MenuItem>)}\n </Select>\n </FormControl>}\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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setName('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : 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\nexport default ObjectAddNewObject;\n","import React, { useEffect, useState } from 'react';\nimport {\n Checkbox, FormControl, InputLabel,\n LinearProgress, MenuItem, Select, Switch,\n} from '@mui/material';\n\nimport {\n I18n, Icon, type IobTheme, type ThemeType,\n type Translate, Utils,\n} 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\nconst newValueAccessControl = (value: number, newValue: number, mask: number) => {\n // eslint-disable-next-line no-bitwise\n value |= newValue & mask;\n // eslint-disable-next-line no-bitwise\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, setValue, t, differentValues, applyToChildren, mask, setMask, disabled,\n}) => {\n useEffect(() => {\n if (applyToChildren) {\n let _checkDifferent = 0;\n for (let e = 0; e < differentValues.length; e++) {\n // eslint-disable-next-line no-bitwise\n _checkDifferent |= value ^ differentValues[e];\n }\n setMask(_checkDifferent);\n } else {\n setMask(0);\n }\n }, [differentValues, applyToChildren]);\n\n let newSelected = value;\n\n return <div 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 <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 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 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 // eslint-disable-next-line no-bitwise\n const masked = mask & obj.valueNum;\n return <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 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 // eslint-disable-next-line no-bitwise\n mask &= (~obj.valueNum) & 0xFFFF;\n setMask(mask);\n }\n let newValue = value;\n if (!e.target.checked) {\n // eslint-disable-next-line no-bitwise\n newValue &= (~obj.valueNum) & 0xFFFF;\n } else {\n // eslint-disable-next-line no-bitwise\n newValue |= obj.valueNum;\n }\n setValue(newValue);\n }}\n />\n </div>\n </div>;\n })}\n </div>\n </div>;\n })}\n </div>;\n};\n\ninterface ObjectEditOfAccessControlProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n extendObject: (id: string, obj: Partial<ioBroker.Object>) => Promise<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, onApply, selected, extendObject, objects,\n t, modalEmptyId, themeType, 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 ((obj as ioBroker.StateObject).acl.state !== undefined && _valueStateAccessControl !== (obj as ioBroker.StateObject).acl.state && !_differentState.includes((obj as ioBroker.StateObject).acl.state)) {\n _differentState.push((obj as ioBroker.StateObject).acl.state);\n }\n if (obj.acl.object !== undefined && _valueObjectAccessControl !== obj.acl.object && !_differentObject.includes(obj.acl.object)) {\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\n 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(Number.isNaN(_valueObjectAccessControl) ? objects['system.config'].common.defaultNewAcl.object : _valueObjectAccessControl);\n\n if (_checkState) {\n _valueStateAccessControl = _valueStateAccessControl || objects['system.config'].common.defaultNewAcl.state;\n setValueStateAccessControl(Number.isNaN(_valueStateAccessControl) ? objects['system.config'].common.defaultNewAcl.state : _valueStateAccessControl);\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]);\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 name: different,\n value: 'different',\n }, ...el]));\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 name: different,\n value: 'different',\n }, ...el]));\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 }, [applyToChildren, differentOwner, differentGroup]);\n\n if (!ids.length) {\n return <LinearProgress />;\n }\n return <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(async () => {\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 // eslint-disable-next-line no-bitwise\n const _maskState = ~maskState & 0xFFFF;\n\n // let maskObject = Object.keys(differentHexObject).reduce((sum, key) => sum | (differentHexObject[key] ? parseInt(key, 16) : 0), 0);\n // eslint-disable-next-line no-bitwise\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(obj.acl.state, valueStateAccessControl, _maskObject);\n }\n await 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 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 variant=\"standard\" fullWidth style={{ marginRight: 10 }}>\n <InputLabel>{t('Owner user')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerUser ? stateOwnerUser.value : ''}\n renderValue={() => <span>\n {stateOwnerUser?.icon ? <Icon src={stateOwnerUser.icon} style={{ width: 16, height: 16, marginRight: 8 }} /> : null}\n {stateOwnerUser ? stateOwnerUser.name : ''}\n </span>}\n style={stateOwnerUser?.value === 'different' ? { opacity: 0.5 } : { color: stateOwnerUser?.color || undefined, backgroundColor: Utils.getInvertedColor(stateOwnerUser?.color, themeType) }}\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 => <MenuItem style={el.value === 'different' ? { opacity: 0.5 } : { color: el.color || undefined, backgroundColor: Utils.getInvertedColor(el.color, themeType) }} key={el.value} value={el.value}>\n {el.icon ? <Icon src={el.icon} style={{ width: 16, height: 16, marginRight: 8 }} /> : null}\n {el.name}\n </MenuItem>)}\n </Select>\n </FormControl>\n <FormControl variant=\"standard\" fullWidth>\n <InputLabel>{t('Owner group')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerGroup ? stateOwnerGroup.value : ''}\n renderValue={() => <span>\n {stateOwnerGroup?.icon ? <Icon src={stateOwnerGroup.icon} style={{ width: 16, height: 16, marginRight: 8 }} /> : null}\n {stateOwnerGroup ? stateOwnerGroup.name : ''}\n </span>}\n style={stateOwnerGroup?.value === 'different' ? { opacity: 0.5 } : { color: stateOwnerGroup?.color || undefined, backgroundColor: Utils.getInvertedColor(stateOwnerGroup?.color, themeType) }}\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 => <MenuItem key={el.value} value={el.value} style={el.value === 'different' ? { opacity: 0.5 } : { color: el.color || undefined, backgroundColor: Utils.getInvertedColor(el.color, themeType) }}>\n {el.icon ? <Icon src={el.icon} style={{ width: 16, height: 16, marginRight: 8 }} /> : null}\n {el.name}\n </MenuItem>)}\n </Select>\n </FormControl>\n </div>\n\n <div 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 {' '}\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 && <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 </div>\n </div>\n </CustomModal>;\n};\n\nexport default ObjectEditOfAccessControl;\n","import React, { Component } from 'react';\n\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Fab,\n} from '@mui/material';\n\n// Icons\nimport {\n Close as CloseIcon,\n PlayArrow as PlayIcon,\n GetApp as DownloadIcon,\n} from '@mui/icons-material';\n\nimport {\n withWidth, type IobTheme,\n type Translate, type AdminConnection,\n Utils,\n} 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() {\n this.props.socket.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() {\n return <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 ? <Box component=\"div\" sx={styles.error}>{this.state.error === 'State is not binary' ? this.props.t('No file stored yet') : this.props.t(this.state.error)}</Box> : null}\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n {this.state.audio ? <audio ref={this.audioRef} src={`data:${this.state.mime};base64,${this.state.binary}`} /> : null}\n {this.state.audio ? <Fab color=\"primary\" onClick={() => this.audioRef.current && this.audioRef.current.play()}>\n <PlayIcon />\n </Fab> : null }\n {this.state.image ? <img src={`data:${this.state.mime};base64,${this.state.binary}`} alt={this.props.obj._id} style={styles.image} /> : null}\n {this.state.text !== null ? <pre style={styles.text}>{this.state.text}</pre> : null}\n </DialogContent>\n <DialogActions>\n <a style={styles.download} download={this.state.fileName} href={`data:${this.state.mime};base64,${this.state.binary}`}>\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\nexport default withWidth()(ObjectViewFileDialog);\n","import React, { Component } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n MenuItem,\n MenuList,\n ListItemIcon,\n ListItemText, TextField, Checkbox, FormControlLabel,\n InputAdornment, IconButton, InputLabel,\n Select, FormControl,\n} from '@mui/material';\n\n// Icons\nimport {\n Close,\n Link as IconLink,\n AddLink,\n Close as IconClose,\n} from '@mui/icons-material';\n\nimport { withWidth } from '@iobroker/adapter-react-v5';\n\nimport {\n I18n, 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 (alias?.id === id || (typeof alias?.id === 'object' && (alias.id.read === id || alias.id.write === id))) {\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() {\n if (!this.state.showAddNewAlias) {\n return null;\n }\n return <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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasId: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : 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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasName: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : 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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasDesc: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\n },\n }}\n onChange={e => this.setState({ newAliasDesc: e.target.value })}\n label={I18n.t('Alias description')}\n fullWidth\n />\n <FormControl style={styles.formControlLabel} fullWidth>\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 key={el} value={el}>\n {I18n.t(el)}\n <span style={styles.typeNameEng}>\n(\n {el}\n)\n </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 ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasUnit: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : 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={<Checkbox\n indeterminate={this.state.newAliasRead === undefined || this.state.newAliasRead === null}\n checked={this.state.newAliasRead}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = { newAliasRead: e.target.checked };\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 label={I18n.t('Alias read')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={<Checkbox\n indeterminate={this.state.newAliasWrite === undefined || this.state.newAliasWrite === null}\n checked={this.state.newAliasWrite}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = { newAliasWrite: e.target.checked };\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 label={I18n.t('Alias write')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={<Checkbox\n checked={this.state.newAliasUseFormula}\n onChange={e => this.setState({ newAliasUseFormula: e.target.checked })}\n />}\n label={I18n.t('Use convert functions')}\n />\n {this.state.newAliasUseFormula && this.state.newAliasRead ? <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: 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> : null,\n startAdornment: <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>,\n },\n }}\n fullWidth\n /> : null}\n {this.state.newAliasUseFormula && this.state.newAliasWrite ? <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: this.state.newAliasWriteFormula && this.state.newAliasWriteFormula !== 'val' ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasWriteFormula: 'val' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment> : null,\n startAdornment: <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>,\n },\n }}\n helperText={`${I18n.t('JS function like')} \"val / 5 + 21\"`}\n fullWidth\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 (obj.common.read !== false && this.state.newAliasReadFormula && this.state.newAliasReadFormula !== 'val') {\n obj.common.alias.read = this.state.newAliasReadFormula;\n }\n if (obj.common.write !== false && this.state.newAliasWriteFormula && this.state.newAliasWriteFormula !== 'val') {\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 render() {\n return <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 ? I18n.t('This object is used in aliases') : 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 <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\nexport default withWidth()(ObjectAliasEditor);\n","import React, { Component } 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 {\n Cancel as IconCancel,\n Delete as IconDeleteOne,\n} from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeName, type ThemeType,\n type Translate,\n withWidth,\n Router,\n} from '@iobroker/adapter-react-v5';\n\nimport type ObjectsWorker from '@/Workers/ObjectsWorker';\n\nimport ObjectBrowser, {\n type ObjectBrowserClass,\n type ObjectBrowserFilter,\n type TreeItemData,\n} from '../components/ObjectBrowser';\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 = ((window as any)._localStorage as Storage || window.localStorage).getItem(`${this.dialogName || 'App'}.filters`) || '{}';\n\n try {\n this.filters = JSON.parse(filtersStr);\n } catch {\n this.filters = {};\n }\n\n const selected = ((window as any)._localStorage as Storage || window.localStorage).getItem(`${this.dialogName || 'App'}.selected`) || '';\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) => {\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) {\n const id = this.state.deleteObjectShow.id;\n if (withChildren) {\n this.props.socket.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)\n .catch(e => window.alert(`Cannot delete object: ${e}`));\n this.setState({ deleteObjectShow: null });\n }\n }\n\n renderToast() {\n return <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 size=\"small\" aria-label=\"close\" color=\"inherit\" onClick={() => this.setState({ toast: '' })}>\n <IconCancel fontSize=\"small\" />\n </IconButton>\n }\n />;\n }\n\n renderDeleteDialog() {\n if (!this.state.deleteObjectShow) {\n return null;\n }\n return <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:\n {' '}\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> : 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> : 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 render() {\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 onFilterChanged={(filterConfig: ObjectBrowserFilter) => {\n this.filters = filterConfig;\n ((window as any)._localStorage as Storage || window.localStorage).setItem(`${this.dialogName || 'App'}.filters`, JSON.stringify(filterConfig));\n }}\n onSelect={(selected: string | string[]) => {\n if (Array.isArray(selected)) {\n ((window as any)._localStorage as Storage || window.localStorage).setItem(`${this.dialogName || 'App'}.selected`, selected[0] || '');\n } else {\n ((window as any)._localStorage as Storage || window.localStorage).setItem(`${this.dialogName || 'App'}.selected`, selected as string || '');\n }\n }}\n objectEditBoolean\n objectAddBoolean\n objectStatesView\n objectImportExport\n objectEditOfAccessControl\n // eslint-disable-next-line react/no-unstable-nested-components\n modalNewObject={(context: ObjectBrowserClass) =>\n <ObjectAddNewObject\n objects={context.objects}\n expertMode={this.props.expertMode}\n setObject={(id, data) => this.props.socket.setObject(id, data)\n .catch(error => window.alert(error))}\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 // eslint-disable-next-line react/no-unstable-nested-components\n modalEditOfAccessControl={(context: ObjectBrowserClass, objData: TreeItemData) =>\n <ObjectEditOfAccessControl\n theme={this.props.theme}\n themeType={this.props.themeType}\n extendObject={async (id: string, data: Partial<ioBroker.Object>) => {\n this.props.socket.extendObject(id, data)\n .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 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","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","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","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","async","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","renderConfirmationDialog","ConfirmDialog","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","renderConfirmDialog","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","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","Grid","direction","spacing","xs","flex","Switch","inputProps","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","DEFAULT_ROLES","ObjectBrowserEditObject","originalObj","onObjectUpdated","changed","withAlias","tab","dialogName","aliasTab","aliasRead","alias","read","aliasWrite","readError","checkFunction","writeError","showCopyDialog","showCommonDeleteMessage","selectId","selectRead","selectWrite","newId","subscribeObject","unsubscribeObject","isWrite","_json","_json$common","_this$props$objects$j","_this$props$objects$j2","_json$common$alias","jsFunc","initialType","finalType","prepareObject","_obj$common3","_obj$common4","newState","_json$common2","_json$common2$alias","_json$common3","_json$common3$alias","_obj$common5","_obj$common6","_obj$common7","_obj$common8","renderTabs","_obj$common9","_obj$common10","_obj$common11","renderSelectDialog","_json$common$alias2","_json$common$alias3","_json$common4","_json$common4$alias","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","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","InputProps","startAdornment","IconFx","onCopy","copyToClipboard","onClone","oldId","newObj","user","onNewObject","renderCopyDialog","IconCopy","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","marginBottom","readWriteArray","Owner","valueNum","Group","Everyone","newValueAccessControl","mask","ObjectRights","differentValues","applyToChildren","setMask","_checkDifferent","newSelected","borderLeft","borderBottom","justifyContent","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":""}
|