@iobroker/gui-components 10.0.1 → 10.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/build/Components/FileBrowser.js +18 -13
- package/build/Components/FileBrowser.js.map +1 -1
- package/build/Components/{ObjectBrowser.d.ts → ObjectBrowser/ObjectBrowserClass.d.ts} +142 -77
- package/build/Components/ObjectBrowser/ObjectBrowserClass.js +2462 -0
- package/build/Components/ObjectBrowser/ObjectBrowserClass.js.map +1 -0
- package/build/Components/ObjectBrowser/constants.d.ts +50 -0
- package/build/Components/ObjectBrowser/constants.js +138 -0
- package/build/Components/ObjectBrowser/constants.js.map +1 -0
- package/build/Components/ObjectBrowser/contextMenu.d.ts +13 -0
- package/build/Components/ObjectBrowser/contextMenu.js +354 -0
- package/build/Components/ObjectBrowser/contextMenu.js.map +1 -0
- package/build/Components/ObjectBrowser/dialogs.d.ts +31 -0
- package/build/Components/ObjectBrowser/dialogs.js +421 -0
- package/build/Components/ObjectBrowser/dialogs.js.map +1 -0
- package/build/Components/ObjectBrowser/index.d.ts +20 -0
- package/build/Components/ObjectBrowser/index.js +20 -0
- package/build/Components/ObjectBrowser/index.js.map +1 -0
- package/build/Components/ObjectBrowser/renderLeaf.d.ts +41 -0
- package/build/Components/ObjectBrowser/renderLeaf.js +1077 -0
- package/build/Components/ObjectBrowser/renderLeaf.js.map +1 -0
- package/build/Components/ObjectBrowser/styles.d.ts +7 -0
- package/build/Components/ObjectBrowser/styles.js +662 -0
- package/build/Components/ObjectBrowser/styles.js.map +1 -0
- package/build/Components/ObjectBrowser/toolbar.d.ts +26 -0
- package/build/Components/ObjectBrowser/toolbar.js +327 -0
- package/build/Components/ObjectBrowser/toolbar.js.map +1 -0
- package/build/Components/{objectBrowser.types.d.ts → ObjectBrowser/types.d.ts} +15 -10
- package/build/Components/{objectBrowserUtils.d.ts → ObjectBrowser/utils.d.ts} +22 -2
- package/build/Components/{objectBrowserUtils.js → ObjectBrowser/utils.js} +46 -2
- package/build/Components/ObjectBrowser/utils.js.map +1 -0
- package/build/Components/TreeTable.d.ts +2 -2
- package/build/Components/TreeTable.js.map +1 -1
- package/build/Dialogs/SelectID.d.ts +4 -4
- package/build/Dialogs/SelectID.js +2 -2
- package/build/Dialogs/SelectID.js.map +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/package.json +5 -5
- package/build/Components/ObjectBrowser.js +0 -5162
- package/build/Components/ObjectBrowser.js.map +0 -1
- package/build/Components/objectBrowserUtils.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectBrowserClass.js","sourceRoot":"./src/","sources":["Components/ObjectBrowser/ObjectBrowserClass.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2026, Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n * The object browser itself: state, socket subscriptions, the tree and the rendering.\n * The dialogs, the toolbar, the rows and the context menu live in the sibling files of this\n * directory and get this instance as the first argument. Because of that, the members of this\n * class are not private, even if they are not intended to be used outside of the object browser.\n */\n/* eslint-disable react/no-unused-class-component-methods -- the members are used by the sibling modules of this directory */\nimport React, { Component, createRef, type JSX } from 'react';\n\nimport { Box, CircularProgress } from '@mui/material';\n\n// own\nimport { Connection } from '../../Connection';\nimport { Utils } from '../Utils'; // @iobroker/gui-components/Components/Utils\nimport { TabContainer } from '../TabContainer';\nimport { TabContent } from '../TabContent';\nimport { TabHeader } from '../TabHeader';\nimport {\n applyFilter,\n binarySearch,\n buildTree,\n findNode,\n formatValue,\n generateFile,\n getName,\n colVar,\n widthFromContainer,\n growVar,\n getSelectIdIconFromObjects,\n setCustomValue,\n prepareSparkData,\n} from './utils';\nimport type { Width } from '../../types';\nimport type {\n ObjectBrowserProps,\n AdapterColumn,\n ObjectBrowserFilter,\n ObjectBrowserNavigation,\n ObjectBrowserPossibleColumns,\n ObjectBrowserState,\n TreeInfo,\n TreeItem,\n CustomAdminColumnStored,\n ObjectEvent,\n ioBrokerObjectForExport,\n} from './types';\nimport { styles } from './styles';\nimport * as dialogs from './dialogs';\nimport * as toolbar from './toolbar';\nimport * as leaf from './renderLeaf';\nimport * as contextMenu from './contextMenu';\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_FILTER,\n ITEM_LEVEL,\n MIN_COLUMN_WIDTHS,\n SCREEN_WIDTHS,\n type ScreenWidth,\n type ScreenWidthOne,\n} from './constants';\n\nexport { getSelectIdIconFromObjects, type ObjectBrowserFilter };\n\ndeclare global {\n interface Window {\n sparkline: {\n sparkline: (el: HTMLDivElement, data: number[]) => JSX.Element;\n };\n }\n}\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nlet objectsAlreadyLoaded = false;\n\nexport class ObjectBrowserClass extends Component<ObjectBrowserProps, ObjectBrowserState> {\n // do not define the type as null to save the performance, so we must check it every time\n info: TreeInfo = {\n funcEnums: [],\n roomEnums: [],\n roles: [],\n ids: [],\n types: [],\n objects: {},\n customs: [],\n enums: [],\n hasSomeCustoms: false,\n aliasesMap: {},\n };\n localStorage: Storage = ((window as any)._localStorage as Storage) || window.localStorage;\n /**\n * Own copy of the screen widths. The widths, that the user stored for THIS dialog, must not leak\n * into the other instances of the object browser (the constant is a module singleton).\n */\n private readonly screenWidths: ScreenWidth = JSON.parse(JSON.stringify(SCREEN_WIDTHS)) as ScreenWidth;\n private readonly tableRef: React.RefObject<HTMLDivElement | null>;\n /** Watches the width of the table container to detect the width class */\n private resizeObserver: ResizeObserver | null = null;\n private observedContainer: HTMLDivElement | null = null;\n /** Width class for which the columns were calculated the last time */\n private lastCalculatedWidth: Width | null = null;\n private pausedSubscribes: boolean = false;\n private selectFirst: string;\n /** Last navigation that was applied from `navigateTo` or reported via `onNavigateTo` (loop guard). */\n private lastNav: ObjectBrowserNavigation | null = null;\n /** True while applying `navigateTo`, so the derived-state watcher does not echo it back. */\n private applyingNav: boolean = false;\n root: TreeItem | null = null;\n readonly states: Record<string, ioBroker.State> = {};\n subscribes: string[] = [];\n private unsubscribeTimer: ReturnType<typeof setTimeout> | null = null;\n private statesUpdateTimer: ReturnType<typeof setTimeout> | null = null;\n private objectsUpdateTimer: ReturnType<typeof setTimeout> | null = null;\n /** Columns that are visible in the auto mode. Depends on the width of the container */\n visibleCols: ObjectBrowserPossibleColumns[];\n readonly texts: Record<string, string>;\n readonly possibleCols: ObjectBrowserPossibleColumns[];\n readonly imagePrefix: string;\n adapterColumns: AdapterColumn[] = [];\n private styleTheme: string = '';\n edit: {\n val: string | number | boolean | null;\n q: number;\n ack: boolean;\n id: string;\n } = {\n id: '',\n val: '',\n q: 0,\n ack: false,\n };\n readonly levelPadding: number;\n private customWidth: boolean = false;\n private resizerNextName: string | null = null;\n private resizerActiveName: string | null = null;\n private resizerCurrentWidths: Record<string, number> = {};\n private resizeLeft: boolean = false;\n private resizerOldWidth: number = 0;\n private resizerMin: number = 0;\n private resizerNextMin: number = 0;\n private resizerOldWidthNext: number = 0;\n private resizerPosition: number = 0;\n private resizerActiveDiv: HTMLDivElement | null = null;\n private resizerNextDiv: HTMLDivElement | null = null;\n private storedWidths: ScreenWidthOne | null = null;\n systemConfig: ioBroker.SystemConfigObject | null = null;\n public objects!: Record<string, ioBroker.Object>;\n defaultHistory: string = '';\n private ctrlPressed = false;\n columnsVisibility: {\n id?: number | string;\n name?: number | string;\n type?: number;\n role?: number;\n room?: number;\n func?: number;\n changedFrom?: number;\n qualityCode?: number;\n timestamp?: number;\n lastChange?: number;\n val?: number;\n buttons?: number;\n } = {};\n changedIds: null | string[] = null;\n contextMenu: null | { item: any; ts: number } = null;\n recordStates: string[] = [];\n styles: {\n cellIdIconFolder?: React.CSSProperties;\n cellIdIconDocument?: React.CSSProperties;\n iconDeviceError?: React.CSSProperties;\n iconDeviceConnected?: React.CSSProperties;\n iconDeviceDisconnected?: React.CSSProperties;\n cellButtonsButtonWithCustoms?: React.CSSProperties;\n invertedBackground?: React.CSSProperties;\n invertedBackgroundFlex?: React.CSSProperties;\n contextMenuEdit?: React.CSSProperties;\n contextMenuEditValue?: React.CSSProperties;\n contextMenuView?: React.CSSProperties;\n contextMenuCustom?: React.CSSProperties;\n contextMenuACL?: React.CSSProperties;\n contextMenuRoom?: React.CSSProperties;\n contextMenuRole?: React.CSSProperties;\n contextMenuDelete?: React.CSSProperties;\n filterInput?: React.CSSProperties;\n iconCopy?: React.CSSProperties;\n aliasReadWrite?: React.CSSProperties;\n aliasAlone?: React.CSSProperties;\n } = {};\n private expertMode: boolean = false;\n customColumnDialog: null | {\n value: boolean | number | string;\n type: 'boolean' | 'number' | 'string';\n initValue: boolean | number | string;\n } = null;\n\n constructor(props: ObjectBrowserProps) {\n super(props);\n\n const lastSelectedItemStr: string =\n this.localStorage.getItem(`${props.dialogName || 'App'}.objectSelected`) || '';\n\n this.selectFirst = '';\n\n this.expertMode = !!this.props.expertMode;\n\n if (lastSelectedItemStr.startsWith('[')) {\n try {\n const lastSelectedItems = JSON.parse(lastSelectedItemStr) as string[];\n this.selectFirst = lastSelectedItems[0] || '';\n } catch {\n // ignore\n }\n } else {\n this.selectFirst = lastSelectedItemStr;\n }\n\n let expanded: string[];\n const expandedStr = this.localStorage.getItem(`${props.dialogName || 'App'}.objectExpanded`) || '[]';\n try {\n expanded = JSON.parse(expandedStr);\n } catch {\n expanded = [];\n }\n\n let filter: ObjectBrowserFilter;\n const filterStr: string = props.defaultFilters\n ? ''\n : this.localStorage.getItem(`${props.dialogName || 'App'}.objectFilter`) || '';\n if (filterStr) {\n try {\n filter = JSON.parse(filterStr);\n } catch {\n filter = { ...DEFAULT_FILTER };\n }\n } else if (props.defaultFilters && typeof props.defaultFilters === 'object') {\n filter = { ...props.defaultFilters };\n } else {\n filter = { ...DEFAULT_FILTER };\n }\n // Migrate old filters to new one\n if (typeof filter.room === 'string' && filter.room) {\n filter.room = [filter.room].filter(s => s);\n if (!filter.room.length) {\n delete filter.room;\n }\n }\n if (typeof filter.func === 'string' && filter.func) {\n filter.func = [filter.func].filter(s => s);\n if (!filter.func.length) {\n delete filter.func;\n }\n }\n if (typeof filter.role === 'string' && filter.role) {\n filter.role = [filter.role].filter(s => s);\n if (!filter.role.length) {\n delete filter.role;\n }\n }\n if (typeof filter.type === 'string') {\n filter.type = [filter.type].filter(s => s);\n if (!filter.type.length) {\n delete filter.type;\n }\n }\n if (typeof filter.custom === 'string') {\n filter.custom = [filter.custom].filter(s => s);\n if (!filter.custom.length) {\n delete filter.custom;\n }\n }\n\n filter.expertMode =\n props.expertMode !== undefined\n ? props.expertMode\n : (((window as any)._sessionStorage as Storage) || window.sessionStorage).getItem('App.expertMode') ===\n 'true';\n this.tableRef = createRef();\n\n this.visibleCols = props.columns || this.screenWidths[props.width || 'lg'].fields;\n // remove type column if only one type must be selected\n if (props.types && props.types.length === 1) {\n const pos = this.visibleCols.indexOf('type');\n if (pos !== -1) {\n this.visibleCols.splice(pos, 1);\n }\n }\n\n this.possibleCols = this.screenWidths.xl.fields;\n\n let customDialog = null;\n\n if (props.router) {\n const location = props.router.getLocation();\n if (location.id && location.dialog === 'customs') {\n customDialog = [location.id];\n this.pauseSubscribe(true);\n }\n }\n\n let selected: string[];\n if (!Array.isArray(props.selected)) {\n selected = [props.selected || ''];\n } else {\n selected = props.selected;\n }\n selected = selected.map(id => id.replace(/[\"']/g, '')).filter(id => id);\n\n this.selectFirst = selected.length && selected[0] ? selected[0] : this.selectFirst;\n\n const columnsStr = this.localStorage.getItem(`${props.dialogName || 'App'}.columns`);\n let columns: ObjectBrowserPossibleColumns[] | null;\n try {\n columns = columnsStr ? JSON.parse(columnsStr) : null;\n } catch {\n columns = null;\n }\n\n let columnsWidths = null; // this.localStorage.getItem(`${props.dialogName || 'App'}.columnsWidths`);\n try {\n columnsWidths = columnsWidths ? JSON.parse(columnsWidths) : {};\n } catch {\n columnsWidths = {};\n }\n\n this.imagePrefix = props.imagePrefix || '.';\n let foldersFirst: boolean;\n const foldersFirstStr = this.localStorage.getItem(`${props.dialogName || 'App'}.foldersFirst`);\n\n if (foldersFirstStr === 'false') {\n foldersFirst = false;\n } else if (foldersFirstStr === 'true') {\n foldersFirst = true;\n } else {\n foldersFirst = props.foldersFirst === undefined ? true : props.foldersFirst;\n }\n\n let statesView = false;\n try {\n statesView = this.props.objectStatesView\n ? JSON.parse(this.localStorage.getItem(`${props.dialogName || 'App'}.objectStatesView`) || '') || false\n : false;\n } catch {\n // ignore\n }\n\n this.state = {\n aliasMenu: '',\n beautifyJsonExport: true,\n columns,\n columnsAuto: this.localStorage.getItem(`${props.dialogName || 'App'}.columnsAuto`) !== 'false',\n columnsDialogTransparent: 100,\n columnsEditCustomDialog: null,\n columnsForAdmin: null,\n columnsSelectorShow: false,\n columnsWidths,\n customColumnDialogValueChanged: false,\n customDialog,\n depth: 0,\n editObjectAlias: false, // open the edit object dialog on alias tab\n editObjectDialog: '',\n enumDialog: null,\n excludeSystemRepositoriesFromExport: true,\n excludeTranslations: false,\n expandAllVisible: false,\n expanded,\n filter,\n filterKey: 0,\n containerWidth: props.width || 'lg',\n focused: this.localStorage.getItem(`${props.dialogName || 'App'}.focused`) || '',\n foldersFirst,\n linesEnabled: this.localStorage.getItem(`${props.dialogName || 'App'}.lines`) === 'true',\n loaded: false,\n noStatesByExportImport: false,\n roleDialog: null,\n selected,\n selectedNonObject: this.localStorage.getItem(`${props.dialogName || 'App'}.selectedNonObject`) || '',\n showAliasEditor: '',\n showAllExportOptions: false,\n showContextMenu: null,\n showDescription: this.localStorage.getItem(`${props.dialogName || 'App'}.desc`) !== 'false',\n showExportDialog: false,\n showImportDialog: false,\n showImportMenu: null,\n showRenameDialog: null,\n statesView,\n toast: '',\n tooltipInfo: null,\n viewFileDialog: '',\n };\n\n this.texts = {\n name: props.t('ra_Name'),\n categories: props.t('ra_Categories'),\n value: props.t('ra_tooltip_value'),\n ack: props.t('ra_tooltip_ack'),\n ts: props.t('ra_tooltip_ts'),\n lc: props.t('ra_tooltip_lc'),\n from: props.t('ra_tooltip_from'),\n user: props.t('ra_tooltip_user'),\n c: props.t('ra_tooltip_comment'),\n quality: props.t('ra_tooltip_quality'),\n editObject: props.t('ra_tooltip_editObject'),\n deleteObject: props.t('ra_tooltip_deleteObject'),\n customConfig: props.t('ra_tooltip_customConfig'),\n copyState: props.t('ra_tooltip_copyState'),\n editState: props.t('ra_tooltip_editState'),\n ctrlForLink: props.t('ra_tooltip_ctrlForLink'),\n close: props.t('ra_Close'),\n filter_id: props.t('ra_filter_id'),\n filter_name: props.t('ra_filter_name'),\n filter_type: props.t('ra_filter_type'),\n filter_role: props.t('ra_filter_role'),\n filter_room: props.t('ra_filter_room'),\n filter_func: props.t('ra_filter_func'),\n filter_custom: props.t('ra_filter_customs'), //\n filterCustomsWithout: props.t('ra_filter_customs_without'), //\n objectChangedByUser: props.t('ra_object_changed_by_user'), // Object last changed at\n objectChangedBy: props.t('ra_object_changed_by'), // Object changed by\n objectChangedFrom: props.t('ra_state_changed_from'), // Object changed from\n stateChangedBy: props.t('ra_state_changed_by'), // State changed by\n stateChangedFrom: props.t('ra_state_changed_from'), // State changed from\n ownerGroup: props.t('ra_Owner group'),\n ownerUser: props.t('ra_Owner user'),\n showAll: props.t('ra_show_all'),\n deviceError: props.t('ra_Error'),\n deviceDisconnected: props.t('ra_Disconnected'),\n deviceConnected: props.t('ra_Connected'),\n\n aclOwner_read_object: props.t('ra_aclOwner_read_object'),\n aclOwner_read_state: props.t('ra_aclOwner_read_state'),\n aclOwner_write_object: props.t('ra_aclOwner_write_object'),\n aclOwner_write_state: props.t('ra_aclOwner_write_state'),\n aclGroup_read_object: props.t('ra_aclGroup_read_object'),\n aclGroup_read_state: props.t('ra_aclGroup_read_state'),\n aclGroup_write_object: props.t('ra_aclGroup_write_object'),\n aclGroup_write_state: props.t('ra_aclGroup_write_state'),\n aclEveryone_read_object: props.t('ra_aclEveryone_read_object'),\n aclEveryone_read_state: props.t('ra_aclEveryone_read_state'),\n aclEveryone_write_object: props.t('ra_aclEveryone_write_object'),\n aclEveryone_write_state: props.t('ra_aclEveryone_write_state'),\n\n create: props.t('ra_Create'),\n createBooleanState: props.t('ra_create_boolean_state'),\n createNumberState: props.t('ra_create_number_state'),\n createStringState: props.t('ra_create_string_state'),\n createState: props.t('ra_create_state'),\n createChannel: props.t('ra_create_channel'),\n createDevice: props.t('ra_create_device'),\n createFolder: props.t('ra_Create folder'),\n };\n\n this.levelPadding = props.levelPadding || ITEM_LEVEL;\n\n const resizerCurrentWidthsStr = this.localStorage.getItem(`${this.props.dialogName || 'App'}.table`);\n if (resizerCurrentWidthsStr) {\n try {\n const resizerCurrentWidths = JSON.parse(resizerCurrentWidthsStr);\n const width = this.width || 'lg';\n this.storedWidths = JSON.parse(JSON.stringify(this.screenWidths[width]));\n Object.keys(resizerCurrentWidths).forEach(id => {\n if (id === 'id') {\n this.screenWidths[width].idWidth = resizerCurrentWidths.id;\n } else if (id === 'nameHeader') {\n // widths stored by an older version, where the header had an own width\n this.screenWidths[width].widths.name = resizerCurrentWidths[id];\n } else if ((this.screenWidths[width].widths as Record<string, number>)[id] !== undefined) {\n (this.screenWidths[width].widths as Record<string, number>)[id] = resizerCurrentWidths[id];\n }\n });\n\n this.customWidth = true;\n } catch {\n // ignore\n }\n }\n\n this.calculateColumnsVisibility();\n }\n\n async loadAllObjects(update?: boolean): Promise<void> {\n const props = this.props;\n\n try {\n await new Promise<void>(resolve => {\n this.setState({ updating: true }, () => resolve());\n });\n\n const objects =\n (props.objectsWorker\n ? await props.objectsWorker.getObjects(update)\n : await props.socket.getObjects(update, true)) || {};\n if (props.types && Connection.isWeb()) {\n for (let i = 0; i < props.types.length; i++) {\n // admin has ALL objects\n // web has only state, channel, device, enum, and system.config\n if (\n props.types[i] === 'state' ||\n props.types[i] === 'channel' ||\n props.types[i] === 'device' ||\n props.types[i] === 'enum'\n ) {\n continue;\n }\n const moreObjects = await props.socket.getObjectViewSystem(props.types[i]);\n Object.assign(objects || {}, moreObjects as Record<string, ioBroker.Object>);\n }\n }\n\n this.systemConfig ||=\n (objects?.['system.config'] as ioBroker.SystemConfigObject) ||\n (await props.socket.getObject('system.config'));\n\n this.systemConfig.common ||= {} as ioBroker.SystemConfigCommon;\n this.systemConfig.common.defaultNewAcl ||= {\n object: 0,\n state: 0,\n file: 0,\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n };\n this.systemConfig.common.defaultNewAcl.owner ||= 'system.user.admin';\n this.systemConfig.common.defaultNewAcl.ownerGroup ||= 'system.group.administrator';\n if (typeof this.systemConfig.common.defaultNewAcl.state !== 'number') {\n // TODO: may be convert here from string\n this.systemConfig.common.defaultNewAcl.state = 0x664;\n }\n if (typeof this.systemConfig.common.defaultNewAcl.object !== 'number') {\n // TODO: may be convert here from string\n this.systemConfig.common.defaultNewAcl.state = 0x664;\n }\n\n if (typeof props.filterFunc === 'function') {\n this.objects = {};\n const filterFunc: (obj: ioBroker.Object) => boolean = props.filterFunc;\n\n Object.keys(objects).forEach(id => {\n try {\n if (filterFunc(objects[id])) {\n this.objects[id] = objects[id];\n } else {\n const type = objects[id] && objects[id].type;\n // include \"folder\" types too for icons and names of nodes\n if (\n type &&\n (type === 'channel' ||\n type === 'device' ||\n type === 'folder' ||\n type === 'adapter' ||\n type === 'instance')\n ) {\n this.objects[id] = objects[id];\n }\n }\n } catch (e) {\n console.log(`Error by filtering of \"${id}\": ${e}`);\n }\n });\n } else if (props.types) {\n this.objects = {};\n const propsTypes = props.types;\n\n Object.keys(objects).forEach(id => {\n const type = objects[id]?.type;\n // include \"folder\" types too\n if (\n type &&\n (type === 'channel' ||\n type === 'device' ||\n type === 'enum' ||\n type === 'folder' ||\n type === 'adapter' ||\n type === 'instance' ||\n propsTypes.includes(type))\n ) {\n this.objects[id] = objects[id];\n }\n });\n } else {\n this.objects = objects;\n }\n\n if (props.setObjectsReference) {\n props.setObjectsReference(this.objects);\n }\n\n // read default history\n this.defaultHistory = this.systemConfig.common.defaultHistory;\n if (this.defaultHistory) {\n props.socket\n .getState(`system.adapter.${this.defaultHistory}.alive`)\n .then(state => {\n if (!state?.val) {\n this.defaultHistory = '';\n }\n })\n .catch(e => window.alert(`Cannot get state: ${e}`));\n }\n\n const columnsForAdmin = await this.getAdditionalColumns();\n this.calculateColumnsVisibility(null, null, columnsForAdmin);\n\n const { info, root } = buildTree(this.objects, {\n imagePrefix: props.imagePrefix,\n root: props.root,\n lang: props.lang,\n themeType: props.themeType,\n });\n this.root = root;\n this.info = info;\n\n // Show first selected item\n const node = this.state.selected?.length && findNode(this.root, this.state.selected[0]);\n\n // If the selected ID is not visible, reset filter\n if (\n node &&\n !applyFilter(\n node,\n this.state.filter,\n props.lang,\n this.objects,\n undefined,\n undefined,\n props.customFilter,\n props.types,\n )\n ) {\n // reset filter\n this.setState({ filter: { ...DEFAULT_FILTER }, columnsForAdmin }, () => {\n this.doFilter();\n this.setState({ loaded: true, updating: false }, () =>\n this.expandAllSelected(() => {\n this.onAfterSelect();\n this.applyInitialNavigateTo();\n }),\n );\n });\n } else {\n this.doFilter();\n this.setState({ loaded: true, updating: false, columnsForAdmin }, () =>\n this.expandAllSelected(() => {\n this.onAfterSelect();\n this.applyInitialNavigateTo();\n }),\n );\n }\n } catch (error) {\n this.showError(error);\n }\n }\n\n expandAllSelected(cb?: () => void): void {\n const expanded = [...this.state.expanded];\n let changed = false;\n this.state.selected.forEach(id => {\n const parts = id.split('.');\n const path = [];\n for (let i = 0; i < parts.length - 1; i++) {\n path.push(parts[i]);\n if (!expanded.includes(path.join('.'))) {\n expanded.push(path.join('.'));\n changed = true;\n }\n }\n });\n if (changed) {\n expanded.sort();\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify(expanded));\n this.setState({ expanded }, cb);\n } else if (cb) {\n cb();\n }\n }\n\n /**\n * @param isDouble is double click\n */\n private onAfterSelect(isDouble?: boolean): void {\n if (this.state.selected?.length && this.state.selected[0]) {\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectSelected`, this.state.selected[0]);\n\n // remove a task to select the pre-selected item if now we want to see another object\n if (this.selectFirst && this.selectFirst !== this.state.selected[0]) {\n this.selectFirst = '';\n }\n\n // If the this.state.selected[0] filtered out, disable the filter\n const item = this.findItem(this.state.selected[0]);\n if (item?.data && !item.data.visible && !item.data.hasVisibleChildren) {\n // If the selected ID is not visible, reset filter\n this.clearFilter();\n }\n\n if (this.state.selected.length === 1 && this.objects[this.state.selected[0]]) {\n const name = Utils.getObjectName(this.objects, this.state.selected[0], null, {\n language: this.props.lang,\n });\n this.props.onSelect?.(this.state.selected, name, isDouble);\n } else if (this.state.selected.length === 1 && this.props.allowNonObjects) {\n this.props.onSelect?.(this.state.selected, null, isDouble);\n } else {\n // we have more than one state\n // Check if all IDs are objects\n if (!this.props.allowNonObjects || !this.state.selected.find(id => !this.objects[id])) {\n this.props.onSelect?.(this.state.selected, null, isDouble);\n }\n }\n } else {\n this.localStorage.removeItem(`${this.props.dialogName || 'App'}.objectSelected`);\n\n if (this.state.selected.length) {\n this.setState({ selected: [] }, () => {\n if (this.props.onSelect) {\n if (this.state.focused && this.props.allowNonObjects) {\n // remove a task to select the pre-selected item if now we want to see another object\n if (this.selectFirst && this.selectFirst !== this.state.selected[0]) {\n this.selectFirst = '';\n }\n this.props.onSelect([this.state.focused], null, isDouble);\n } else {\n this.props.onSelect([], '');\n }\n }\n });\n } else if (this.props.onSelect) {\n if (this.state.focused && this.props.allowNonObjects) {\n // remove a task to select the pre-selected item if now we want to see another object\n if (this.selectFirst && this.selectFirst !== this.state.selected[0]) {\n this.selectFirst = '';\n }\n this.props.onSelect([this.state.focused], null, isDouble);\n } else {\n this.props.onSelect([], '');\n }\n }\n }\n }\n\n // This function is used\n private static getDerivedStateFromProps(\n props: ObjectBrowserProps,\n state: ObjectBrowserState,\n ): Partial<ObjectBrowserState> | null {\n const newState: Partial<ObjectBrowserState> = {};\n let changed = false;\n if (props.expertMode !== undefined && props.expertMode !== state.filter.expertMode) {\n changed = true;\n newState.filter = { ...state.filter };\n newState.filter.expertMode = props.expertMode;\n }\n return changed ? newState : null;\n }\n\n /**\n * Called when component is mounted.\n */\n async componentDidMount(): Promise<void> {\n await this.loadAllObjects(!objectsAlreadyLoaded);\n if (this.props.objectsWorker) {\n this.props.objectsWorker.registerHandler(this.onObjectChangeFromWorker);\n } else {\n await this.props.socket.subscribeObject('*', this.onObjectChange);\n }\n\n objectsAlreadyLoaded = true;\n\n window.addEventListener('contextmenu', this.onContextMenu, true);\n window.addEventListener('keydown', this.onKeyPress, true);\n window.addEventListener('keyup', this.onKeyPress, true);\n\n this.observeContainerWidth();\n\n // Inform dialog that all objects are loaded\n if (this.props.onAllLoaded) {\n setTimeout(() => {\n this.props.onAllLoaded?.();\n }, 100);\n }\n }\n\n onKeyPress = (event: KeyboardEvent): void => {\n if (event.type === 'keydown' && event.ctrlKey && !this.ctrlPressed) {\n this.ctrlPressed = true;\n if (this.tableRef.current) {\n this.tableRef.current.className = 'highlight-link';\n }\n } else if (event.type === 'keyup' && !event.ctrlKey && this.ctrlPressed) {\n this.ctrlPressed = false;\n if (this.tableRef.current) {\n this.tableRef.current.className = '';\n }\n }\n };\n\n /**\n * Called when component is unmounted.\n */\n componentWillUnmount(): void {\n window.removeEventListener('contextmenu', this.onContextMenu, true);\n window.removeEventListener('keydown', this.onKeyPress, true);\n window.removeEventListener('keyup', this.onKeyPress, true);\n\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.observedContainer = null;\n\n // the timers must not fire after the component was destroyed\n if (this.unsubscribeTimer) {\n clearTimeout(this.unsubscribeTimer);\n this.unsubscribeTimer = null;\n }\n if (this.statesUpdateTimer) {\n clearTimeout(this.statesUpdateTimer);\n this.statesUpdateTimer = null;\n }\n if (this.objectsUpdateTimer) {\n clearTimeout(this.objectsUpdateTimer);\n this.objectsUpdateTimer = null;\n }\n\n if (this.props.objectsWorker) {\n this.props.objectsWorker.unregisterHandler(this.onObjectChangeFromWorker, true);\n } else {\n void this.props.socket\n .unsubscribeObject('*', this.onObjectChange)\n .catch(e => console.error(`Cannot unsubscribe *: ${e}`));\n }\n\n // remove all subscribes\n this.subscribes.forEach(pattern => {\n // console.log(`- unsubscribe ${pattern}`);\n this.props.socket.unsubscribeState(pattern, this.onStateChange);\n });\n\n this.subscribes = [];\n this.objects = {};\n }\n\n /**\n * Show the deletion dialog for a given object\n */\n showDeleteDialog(options: { id: string; obj: ioBroker.Object; item: TreeItem }): void {\n const { id, obj, item } = options;\n\n // calculate the number of children\n const keys = Object.keys(this.objects);\n keys.sort();\n let count = 0;\n const start = `${id}.`;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].startsWith(start)) {\n count++;\n } else if (keys[i] > start) {\n break;\n }\n }\n\n this.props.onObjectDelete?.(id, !!item.children?.length, !obj.common?.dontDelete, count + 1);\n }\n\n /**\n * Context menu handler.\n */\n onContextMenu = (e: MouseEvent): void => {\n // console.log(`CONTEXT MENU: ${this.contextMenu ? Date.now() - this.contextMenu.ts : 'false'}`);\n if (this.contextMenu && Date.now() - this.contextMenu.ts < 2000) {\n e.preventDefault();\n this.setState({\n showContextMenu: {\n item: this.contextMenu.item,\n position: { left: e.clientX + 2, top: e.clientY - 6 },\n },\n });\n } else if (this.state.showContextMenu) {\n e.preventDefault();\n this.setState({ showContextMenu: null });\n }\n this.contextMenu = null;\n };\n\n /**\n * Called when component is mounted.\n */\n refreshComponent(): void {\n // remove all subscribes\n this.subscribes.forEach(pattern => {\n // console.log(`- unsubscribe ${pattern}`);\n this.props.socket.unsubscribeState(pattern, this.onStateChange);\n });\n\n this.subscribes = [];\n\n this.loadAllObjects(true)\n .then(() => console.log('updated!'))\n .catch(e => this.showError(e));\n }\n\n /**\n * Renders the error dialog.\n */\n renderErrorDialog(): JSX.Element | null {\n return dialogs.renderErrorDialog(this);\n }\n\n /**\n * Show the error dialog.\n */\n showError(error: any): void {\n this.setState({\n error:\n typeof error === 'object'\n ? error && typeof error.toString === 'function'\n ? error.toString()\n : JSON.stringify(error)\n : error,\n });\n }\n\n /**\n * Called when an item is selected/deselected.\n */\n onSelect(toggleItem: string, isDouble?: boolean, cb?: () => void): void {\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.focused`, toggleItem);\n\n if (!this.props.multiSelect) {\n if (\n this.objects[toggleItem] &&\n (!this.props.types || this.props.types.includes(this.objects[toggleItem].type))\n ) {\n this.localStorage.removeItem(`${this.props.dialogName || 'App'}.selectedNonObject`);\n if (this.state.selected[0] !== toggleItem) {\n this.setState({ selected: [toggleItem], selectedNonObject: '', focused: toggleItem }, () => {\n this.onAfterSelect(isDouble);\n if (cb) {\n cb();\n }\n });\n } else if (isDouble && this.props.onSelect) {\n this.onAfterSelect(isDouble);\n }\n } else {\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.selectedNonObject`, toggleItem);\n this.setState({ selected: [], selectedNonObject: toggleItem, focused: toggleItem }, () => {\n this.onAfterSelect();\n if (cb) {\n cb();\n }\n });\n }\n } else if (\n this.objects[toggleItem] &&\n (!this.props.types || this.props.types.includes(this.objects[toggleItem].type))\n ) {\n this.localStorage.removeItem(`${this.props.dialogName || 'App'}.selectedNonObject`);\n\n const selected = [...this.state.selected];\n const pos = selected.indexOf(toggleItem);\n if (pos === -1) {\n selected.push(toggleItem);\n selected.sort();\n } else if (!isDouble) {\n selected.splice(pos, 1);\n }\n\n this.setState({ selected, selectedNonObject: '', focused: toggleItem }, () => {\n this.onAfterSelect(isDouble);\n if (cb) {\n cb();\n }\n });\n }\n }\n\n /**\n * Renders the columns' selector.\n */\n renderColumnsSelectorDialog(): JSX.Element | null {\n return dialogs.renderColumnsSelectorDialog(this);\n }\n\n private async getAdditionalColumns(): Promise<Record<string, CustomAdminColumnStored[]> | null> {\n try {\n const instances = await this.props.socket.getAdapters();\n\n let columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null = null;\n // find all additional columns\n instances.forEach(obj => (columnsForAdmin = this.parseObjectForAdmins(columnsForAdmin, obj)));\n\n return columnsForAdmin;\n } catch (err) {\n // window.alert('Cannot get adapters: ' + e);\n // Object browser in Web has no additional columns\n console.error(`Cannot get adapters: ${err}`);\n return null;\n }\n }\n\n private checkUnsubscribes(): void {\n // Remove unused subscriptions\n for (let i = this.subscribes.length - 1; i >= 0; i--) {\n if (!this.recordStates.includes(this.subscribes[i])) {\n this.unsubscribe(this.subscribes[i]);\n }\n }\n this.recordStates = [];\n }\n\n /**\n * Find an item.\n */\n findItem(id: string, _parts?: string[], _root?: TreeItem | null, _partyId?: string): TreeItem | null {\n _parts ||= id.split('.');\n _root ||= this.root;\n if (!_root || !_parts.length) {\n return null;\n }\n\n _partyId = (_partyId ? `${_partyId}.` : '') + _parts.shift();\n\n if (_root.children) {\n const item = _root.children.find(i => i.data.id === _partyId);\n if (item) {\n if (item.data.id === id) {\n return item;\n }\n if (_parts.length) {\n return this.findItem(id, _parts, item, _partyId);\n }\n } else {\n return null;\n }\n }\n\n return null;\n }\n\n /**\n * Called when a state changes.\n */\n onStateChange = (id: string, state?: ioBroker.State | null): void => {\n // console.log(`> stateChange ${id}`);\n if (this.states[id]) {\n const item = this.findItem(id);\n if (item?.data.state) {\n item.data.state = undefined;\n }\n }\n if (state) {\n this.states[id] = state;\n } else {\n delete this.states[id];\n }\n\n if (!this.pausedSubscribes) {\n if (!this.statesUpdateTimer) {\n this.statesUpdateTimer = setTimeout(() => {\n this.statesUpdateTimer = null;\n this.forceUpdate();\n }, 300);\n }\n } else if (this.statesUpdateTimer) {\n clearTimeout(this.statesUpdateTimer);\n this.statesUpdateTimer = null;\n }\n };\n\n private parseObjectForAdmins(\n columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null,\n obj: ioBroker.AdapterObject,\n ): Record<string, CustomAdminColumnStored[]> | null {\n if (obj.common?.adminColumns && obj.common.name) {\n const columns: string | (string | ioBroker.CustomAdminColumn)[] = obj.common.adminColumns;\n let aColumns: (string | ioBroker.CustomAdminColumn)[] | undefined;\n if (columns && typeof columns !== 'object') {\n aColumns = [columns];\n } else if (columns) {\n aColumns = columns as (string | ioBroker.CustomAdminColumn)[];\n }\n let cColumns: CustomAdminColumnStored[] | null | undefined;\n if (columns) {\n cColumns = aColumns\n ?.map((_item: string | ioBroker.CustomAdminColumn) => {\n if (typeof _item !== 'object') {\n return { path: _item, name: _item.split('.').pop() } as CustomAdminColumnStored;\n }\n const item: ioBroker.CustomAdminColumn = _item;\n // string => array\n if (item.objTypes && typeof item.objTypes !== 'object') {\n item.objTypes = [item.objTypes];\n } else if (!item.objTypes) {\n item.objTypes = undefined;\n }\n\n if (!item.name && item.path) {\n return {\n path: item.path,\n name: item.path.split('.').pop(),\n width: item.width,\n edit: !!item.edit,\n type: item.type,\n objTypes: item.objTypes,\n } as CustomAdminColumnStored;\n }\n if (!item.path) {\n console.warn(`Admin columns for ${obj._id} ignored, because path not found`);\n return null;\n }\n return {\n path: item.path,\n name: getName(item.name || '', this.props.lang),\n width: item.width,\n edit: !!item.edit,\n type: item.type,\n objTypes: item.objTypes,\n };\n })\n .filter((item: CustomAdminColumnStored | null) => item) as CustomAdminColumnStored[];\n } else {\n cColumns = null;\n }\n\n if (cColumns && cColumns.length) {\n columnsForAdmin ||= {};\n columnsForAdmin[obj.common.name] = cColumns.sort((a, b) =>\n a.path > b.path ? -1 : a.path < b.path ? 1 : 0,\n );\n }\n } else if (obj.common && obj.common.name && columnsForAdmin && columnsForAdmin[obj.common.name]) {\n delete columnsForAdmin[obj.common.name];\n }\n return columnsForAdmin;\n }\n\n onObjectChangeFromWorker = (events: ObjectEvent[]): void => {\n if (Array.isArray(events)) {\n let newState: { columnsForAdmin: Record<string, CustomAdminColumnStored[] | null> | null } | null = null;\n events.forEach(event => {\n const { newInnerState, filtered } = this.processOnObjectChangeElement(event.id, event.obj);\n if (filtered) {\n return;\n }\n if (newInnerState && newState) {\n Object.assign(newState, newInnerState);\n } else {\n newState = newInnerState;\n }\n });\n\n if (newState) {\n this.setState(newState);\n }\n this.afterObjectUpdated();\n }\n };\n\n onObjectChange = (id: string, obj?: ioBroker.Object | null): void => {\n const { newInnerState, filtered } = this.processOnObjectChangeElement(id, obj);\n if (filtered) {\n return;\n }\n\n if (newInnerState) {\n this.setState(newInnerState);\n }\n this.afterObjectUpdated();\n };\n\n afterObjectUpdated(): void {\n if (!this.objectsUpdateTimer && this.objects) {\n this.objectsUpdateTimer = setTimeout(() => {\n this.objectsUpdateTimer = null;\n const { info, root } = buildTree(this.objects, {\n imagePrefix: this.props.imagePrefix,\n root: this.props.root,\n lang: this.props.lang,\n themeType: this.props.themeType,\n });\n this.root = root;\n this.info = info;\n if (!this.pausedSubscribes) {\n this.doFilter();\n }\n // else it will be re-rendered when the dialog will be closed\n }, 500);\n }\n }\n\n // This function is called when the user changes the alias of an object.\n // It updates the aliasMap and returns true if the aliasMap has changed.\n updateAliases(aliasId: string): void {\n if (!this.objects || !this.info?.aliasesMap || !aliasId?.startsWith('alias.')) {\n return;\n }\n // Rebuild aliases map\n const aliasesIds = Object.keys(this.objects).filter(id => id.startsWith('alias.0'));\n\n this.info.aliasesMap = {};\n\n for (const id of aliasesIds) {\n const obj = this.objects[id];\n if (obj?.common?.alias?.id) {\n if (typeof obj.common.alias.id === 'string') {\n const usedId = obj.common.alias.id;\n if (!this.info.aliasesMap[usedId]) {\n this.info.aliasesMap[usedId] = [id];\n } else if (!this.info.aliasesMap[usedId].includes(id)) {\n this.info.aliasesMap[usedId].push(id);\n }\n } else {\n const readId = obj.common.alias.id.read;\n if (readId) {\n if (!this.info.aliasesMap[readId]) {\n this.info.aliasesMap[readId] = [id];\n } else if (!this.info.aliasesMap[readId].includes(id)) {\n this.info.aliasesMap[readId].push(id);\n }\n }\n const writeId = obj.common.alias.id.write;\n if (writeId) {\n if (!this.info.aliasesMap[writeId]) {\n this.info.aliasesMap[writeId] = [id];\n } else if (!this.info.aliasesMap[writeId].includes(id)) {\n this.info.aliasesMap[writeId].push(id);\n }\n }\n }\n }\n }\n }\n\n /**\n * Processes a single element in regard to certain filters, columns for admin and updates object dict\n *\n * @param id The id of the object\n * @param obj The object itself\n * @returns Returns an object containing the new state (if any) and whether the object was filtered.\n */\n processOnObjectChangeElement(\n id: string,\n obj?: ioBroker.Object | null,\n ): {\n filtered: boolean;\n newInnerState: null | { columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null };\n } {\n // console.log(`> objectChange ${id}`);\n const type = obj?.type;\n\n // If the object is filtered out, we don't need to update the React state\n if (\n obj &&\n typeof this.props.filterFunc === 'function' &&\n !this.props.filterFunc(obj) &&\n type !== 'channel' &&\n type !== 'device' &&\n type !== 'folder' &&\n type !== 'adapter' &&\n type !== 'instance'\n ) {\n return { newInnerState: null, filtered: true };\n }\n\n let newInnerState = null;\n if (id.startsWith('system.adapter.') && obj?.type === 'adapter') {\n const columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null = JSON.parse(\n JSON.stringify(this.state.columnsForAdmin),\n );\n\n this.parseObjectForAdmins(columnsForAdmin, obj);\n\n if (JSON.stringify(this.state.columnsForAdmin) !== JSON.stringify(columnsForAdmin)) {\n newInnerState = { columnsForAdmin };\n }\n }\n\n this.objects ||= {};\n\n if (obj) {\n this.objects[id] = obj;\n } else if (this.objects[id]) {\n delete this.objects[id];\n }\n\n this.updateAliases(id);\n\n return { newInnerState, filtered: false };\n }\n\n subscribe(id: string): void {\n if (!this.subscribes.includes(id)) {\n this.subscribes.push(id);\n // console.log(`+ subscribe ${id}`);\n if (!this.pausedSubscribes) {\n this.props.socket\n .subscribeState(id, this.onStateChange)\n .catch(e => console.error(`Cannot subscribe on state ${id}: ${e}`));\n }\n }\n }\n\n unsubscribe(id: string): void {\n const pos = this.subscribes.indexOf(id);\n if (pos !== -1) {\n this.subscribes.splice(pos, 1);\n if (this.states[id]) {\n delete this.states[id];\n }\n // console.log(`- unsubscribe ${id}`);\n this.props.socket.unsubscribeState(id, this.onStateChange);\n\n if (this.pausedSubscribes) {\n console.warn('Unsubscribe during pause?');\n }\n }\n }\n\n pauseSubscribe(isPause: boolean): void {\n if (!this.pausedSubscribes && isPause) {\n this.pausedSubscribes = true;\n this.subscribes.forEach(id => this.props.socket.unsubscribeState(id, this.onStateChange));\n } else if (this.pausedSubscribes && !isPause) {\n this.pausedSubscribes = false;\n this.subscribes.forEach(id => this.props.socket.subscribeState(id, this.onStateChange));\n }\n }\n\n clearFilter(): void {\n if (JSON.stringify(this.state.filter) !== JSON.stringify(DEFAULT_FILTER)) {\n this.setState({ filter: { ...DEFAULT_FILTER }, filterKey: this.state.filterKey + 1 }, () => {\n this.doFilter();\n this.props.onFilterChanged?.({ ...DEFAULT_FILTER });\n });\n }\n }\n\n isFilterEmpty(): boolean {\n return (\n !!this.state.filter.id ||\n !!this.state.filter.name ||\n !!this.state.filter.room?.length ||\n !!this.state.filter.func?.length ||\n !!this.state.filter.role?.length ||\n !!this.state.filter.type?.length ||\n !!this.state.filter.custom?.length\n );\n }\n\n onExpandAll(root?: TreeItem, expanded?: string[]): void {\n const _root: TreeItem | null = root || this.root;\n expanded ||= [];\n\n _root?.children?.forEach((item: TreeItem) => {\n if (item.data.sumVisibility) {\n expanded.push(item.data.id);\n this.onExpandAll(item, expanded);\n }\n });\n\n if (_root === this.root) {\n expanded.sort();\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify(expanded));\n\n this.setState({ expanded });\n }\n }\n\n onCollapseAll(): void {\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify([]));\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectSelected`, '[]');\n this.setState({ expanded: [], depth: 0, selected: [] }, () => this.onAfterSelect());\n }\n\n private expandDepth(root: TreeItem, depth: number, expanded: string[]): void {\n if (!this.root) {\n throw new Error('No root');\n }\n root ||= this.root;\n if (depth > 0) {\n root.children?.forEach(item => {\n if (item.data.sumVisibility) {\n if (!binarySearch(expanded, item.data.id)) {\n expanded.push(item.data.id);\n expanded.sort();\n }\n if (depth - 1 > 0) {\n this.expandDepth(item, depth - 1, expanded);\n }\n }\n });\n }\n }\n\n private static collapseDepth(depth: number, expanded: string[]): string[] {\n return expanded.filter(id => id.split('.').length <= depth);\n }\n\n onExpandVisible(): void {\n if (this.state.depth < 9) {\n const depth = this.state.depth + 1;\n const expanded = [...this.state.expanded];\n if (this.root) {\n this.expandDepth(this.root, depth, expanded);\n }\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify(expanded));\n this.setState({ depth, expanded });\n }\n }\n\n onStatesViewVisible(): void {\n const statesView = !this.state.statesView;\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectStatesView`, JSON.stringify(statesView));\n this.setState({ statesView });\n }\n\n onCollapseVisible(): void {\n if (this.state.depth > 0) {\n const depth = this.state.depth - 1;\n const expanded = ObjectBrowserClass.collapseDepth(depth, this.state.expanded);\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify(expanded));\n this.setState({ depth, expanded });\n }\n }\n\n private getEnumsForId = (id: string): ioBroker.EnumObject[] | undefined => {\n const result: ioBroker.EnumObject[] = [];\n this.info.enums.forEach(_id => {\n if (this.objects[_id]?.common?.members?.includes(id)) {\n const enumItem: ioBroker.EnumObject = {\n _id: this.objects[_id]._id,\n common: JSON.parse(JSON.stringify(this.objects[_id].common)) as ioBroker.EnumCommon,\n native: this.objects[_id].native,\n type: 'enum',\n };\n if (enumItem.common) {\n delete enumItem.common.members;\n delete enumItem.common.custom;\n // @ts-expect-error deprecated attribute\n delete enumItem.common.mobile;\n }\n result.push(enumItem);\n }\n });\n\n return result.length ? result : undefined;\n };\n\n private _createAllEnums = async (enums: (string | ioBroker.EnumObject)[], objId: string): Promise<void> => {\n for (let e = 0; e < enums.length; e++) {\n const item: string | ioBroker.EnumObject = enums[e];\n let id: string;\n let newObj: ioBroker.EnumObject | undefined;\n\n // some admin version delivered enums as string\n if (typeof item === 'object') {\n newObj = item;\n id = newObj._id;\n } else {\n id = item;\n }\n\n let oldObj: ioBroker.EnumObject | undefined = this.objects[id] as ioBroker.EnumObject | undefined;\n // if enum does not exist\n if (!oldObj) {\n // create a new one\n oldObj =\n newObj ||\n ({\n _id: id,\n common: {\n name: id.split('.').pop(),\n members: [],\n },\n native: {},\n type: 'enum',\n } as ioBroker.EnumObject);\n\n oldObj.common ||= {} as ioBroker.EnumCommon;\n oldObj.common.members = [objId];\n oldObj.type = 'enum';\n\n await this.props.socket.setObject(id, oldObj);\n } else if (!oldObj.common?.members?.includes(objId)) {\n oldObj.common ||= {} as ioBroker.EnumCommon;\n oldObj.type = 'enum';\n oldObj.common.members ||= [];\n // add the missing object\n oldObj.common.members.push(objId);\n oldObj.common.members.sort();\n await this.props.socket.setObject(id, oldObj);\n }\n }\n };\n\n private async loadObjects(objs: Record<string, ioBrokerObjectForExport>): Promise<void> {\n if (objs) {\n for (const id in objs) {\n if (!Object.prototype.hasOwnProperty.call(objs, id) || !objs[id]) {\n continue;\n }\n const obj = objs[id];\n let enums = null;\n let val;\n let ack;\n if (obj?.common?.enums) {\n enums = obj.common.enums;\n delete obj.common.enums;\n } else {\n enums = null;\n }\n\n if (obj.val || obj.val === 0) {\n val = obj.val;\n delete obj.val;\n }\n if (obj.ack !== undefined) {\n ack = obj.ack;\n delete obj.ack;\n }\n try {\n await this.props.socket.setObject(id, obj);\n if (enums) {\n await this._createAllEnums(enums, obj._id);\n }\n if (obj.type === 'state') {\n if (val !== undefined && val !== null) {\n try {\n await this.props.socket.setState(obj._id, val, ack !== undefined ? ack : true);\n } catch (e) {\n window.alert(`Cannot set state \"${obj._id} with ${val}\": ${e}`);\n }\n } else {\n try {\n const state = await this.props.socket.getState(obj._id);\n if (!state || state.val === null) {\n try {\n await this.props.socket.setState(\n obj._id,\n !obj.common || obj.common.def === undefined ? null : obj.common.def,\n true,\n );\n } catch (e) {\n window.alert(`Cannot set state \"${obj._id}\": ${e}`);\n }\n }\n } catch (e) {\n window.alert(`Cannot read state \"${obj._id}\": ${e}`);\n }\n }\n }\n } catch (error) {\n window.alert(error);\n }\n }\n }\n }\n\n _getSelectedIdsForExport(): string[] {\n if (this.state.selected.length || this.state.selectedNonObject) {\n const result = [];\n const keys = Object.keys(this.objects);\n keys.sort();\n const id = this.state.selected[0] || this.state.selectedNonObject;\n const idDot = `${id}.`;\n const idLen = idDot.length;\n for (let k = 0; k < keys.length; k++) {\n const key = keys[k];\n if (id === key || key.startsWith(idDot)) {\n result.push(key);\n }\n if (key.substring(0, idLen) > idDot) {\n break;\n }\n }\n\n return result;\n }\n return [];\n }\n\n /**\n * Exports the selected objects based on the given options and triggers file generation\n */\n async _exportObjects(\n /** Options to filter/reduce the output */\n options: {\n /** Whether all objects should be exported or only the selected ones */\n isAll?: boolean;\n /** Whether the output should be beautified */\n beautify?: boolean;\n /** Whether \"system.repositories\" should be excluded */\n excludeSystemRepositories?: boolean;\n /** Whether translations should be reduced to only the english value */\n excludeTranslations?: boolean;\n /** Whether the values of the states should be not included */\n noStatesByExportImport?: boolean;\n },\n ): Promise<void> {\n if (options.isAll) {\n generateFile('allObjects.json', this.objects, options);\n return;\n }\n if (!(this.state.selected.length || this.state.selectedNonObject)) {\n window.alert(this.props.t('ra_Save of objects-tree is not possible'));\n return;\n }\n const result: Record<string, ioBrokerObjectForExport> = {};\n const id = this.state.selected[0] || this.state.selectedNonObject;\n const ids = this._getSelectedIdsForExport();\n\n for (const key of ids) {\n result[key] = JSON.parse(JSON.stringify(this.objects[key])) as ioBrokerObjectForExport;\n // read states values\n if (result[key]?.type === 'state' && !options.noStatesByExportImport) {\n const state = await this.props.socket.getState(key);\n if (state) {\n result[key].val = state.val;\n result[key].ack = state.ack;\n }\n }\n // add enum information\n if (result[key].common) {\n const enums = this.getEnumsForId(key);\n if (enums) {\n result[key].common.enums = enums;\n }\n }\n }\n\n generateFile(`${id}.json`, result, options);\n }\n\n renderExportDialog(): JSX.Element | null {\n return dialogs.renderExportDialog(this);\n }\n\n renderRenameDialog(): JSX.Element | null {\n return dialogs.renderRenameDialog(this);\n }\n\n async parseJsonFile(contents: string): Promise<void> {\n try {\n const json = JSON.parse(contents);\n const len = Object.keys(json).length;\n const id = json._id;\n // it could be a single object or many objects\n if (id === undefined && len) {\n // many objects\n await this.loadObjects(json as Record<string, ioBrokerObjectForExport>);\n window.alert(this.props.t('ra_%s object(s) processed', len));\n } else {\n // it is only one object in form\n // {\n // \"_id\": \"xxx\",\n // \"common\": \"yyy\",\n // \"native\": \"zzz\"\n // \"val\": JSON.stringify(value)\n // \"ack\": true\n // }\n if (!id) {\n return window.alert(this.props.t('ra_Invalid structure'));\n }\n try {\n let enums;\n let val;\n let ack;\n if (json.common.enums) {\n enums = json.common.enums;\n delete json.common.enums;\n }\n if (json.val) {\n val = json.val;\n delete json.val;\n }\n if (json.ack !== undefined) {\n ack = json.ack;\n delete json.ack;\n }\n await this.props.socket.setObject(json._id, json);\n\n if (json.type === 'state') {\n if (val !== undefined && val !== null) {\n await this.props.socket.setState(json._id, val, ack === undefined ? true : ack);\n } else {\n const state = await this.props.socket.getState(json._id);\n if (!state || state.val === null || state.val === undefined) {\n await this.props.socket.setState(\n json._id,\n json.common.def === undefined ? null : json.common.def,\n true,\n );\n }\n }\n }\n if (enums) {\n await this._createAllEnums(enums, json._id);\n }\n\n window.alert(this.props.t('ra_%s was imported', json._id));\n } catch (err) {\n window.alert(err);\n }\n }\n } catch (err) {\n window.alert(err);\n }\n }\n private handleJsonUpload(evt: Event): void {\n const target = evt.target as HTMLInputElement;\n const f = target.files?.length && target.files[0];\n if (f) {\n const r = new FileReader();\n r.onload = (e): void => {\n this.parseJsonFile(e.target?.result as string).catch(e => console.log(`Cannot parse file: ${e}`));\n };\n r.readAsText(f);\n } else {\n window.alert(this.props.t('ra_Failed to open JSON File'));\n }\n }\n\n toolTipObjectCreating = (): JSX.Element[] | string => {\n const { t } = this.props;\n\n let value = [\n <div key={1}>{t('ra_Only following structures of objects are available:')}</div>,\n <div key={2}>{t('ra_Folder → State')}</div>,\n <div key={3}>{t('ra_Folder → Channel → State')}</div>,\n <div key={4}>{t('ra_Folder → Device → Channel → State')}</div>,\n <div key={5}>{t('ra_Device → Channel → State')}</div>,\n <div key={6}>{t('ra_Channel → State')}</div>,\n <div\n key={7}\n style={{ height: 10 }}\n />,\n <div key={8}>{t('ra_Non-experts may create new objects only in \"0_userdata.0\" or \"alias.0\".')}</div>,\n <div key={9}>\n {t(\n 'ra_The experts may create objects everywhere but from second level (e.g. \"vis.0\" or \"javascript.0\").',\n )}\n </div>,\n ];\n\n if (this.state.selected.length || this.state.selectedNonObject) {\n const id = this.state.selected[0] || this.state.selectedNonObject;\n if (id.split('.').length < 2 || (this.objects[id] && this.objects[id]?.type === 'state')) {\n // show default tooltip\n } else if (this.state.filter.expertMode) {\n switch (this.objects[id]?.type) {\n case 'device':\n value = [\n <div key={1}>{t('ra_Only following structures of objects are available:')}</div>,\n <div key={5}>{t('ra_Device → Channel → State')}</div>,\n <div\n key={7}\n style={{ height: 10 }}\n />,\n <div key={8}>\n {t('ra_Non-experts may create new objects only in \"0_userdata.0\" or \"alias.0\".')}\n </div>,\n <div key={9}>\n {t(\n 'ra_The experts may create objects everywhere but from second level (e.g. \"vis.0\" or \"javascript.0\").',\n )}\n </div>,\n ];\n break;\n case 'folder':\n value = [\n <div key={1}>{t('ra_Only following structures of objects are available:')}</div>,\n <div key={2}>{t('ra_Folder → State')}</div>,\n <div key={3}>{t('ra_Folder → Channel → State')}</div>,\n <div key={4}>{t('ra_Folder → Device → Channel → State')}</div>,\n <div\n key={7}\n style={{ height: 10 }}\n />,\n <div key={8}>\n {t('ra_Non-experts may create new objects only in \"0_userdata.0\" or \"alias.0\".')}\n </div>,\n <div key={9}>\n {t(\n 'ra_The experts may create objects everywhere but from second level (e.g. \"vis.0\" or \"javascript.0\").',\n )}\n </div>,\n ];\n break;\n case 'channel':\n value = [\n <div key={1}>{t('ra_Only following structures of objects are available:')}</div>,\n <div key={1}>{t('ra_Channel → State')}</div>,\n <div\n key={7}\n style={{ height: 10 }}\n />,\n <div key={8}>\n {t('ra_Non-experts may create new objects only in \"0_userdata.0\" or \"alias.0\".')}\n </div>,\n <div key={9}>\n {t(\n 'ra_The experts may create objects everywhere but from second level (e.g. \"vis.0\" or \"javascript.0\").',\n )}\n </div>,\n ];\n break;\n default:\n break;\n }\n } else if (id.startsWith('alias.0') || id.startsWith('0_userdata')) {\n value = [\n <div key={1}>{t('ra_Only following structures of objects are available:')}</div>,\n <div key={2}>{t('ra_Folder → State')}</div>,\n <div key={3}>{t('ra_Folder → Channel → State')}</div>,\n <div key={4}>{t('ra_Folder → Device → Channel → State')}</div>,\n <div key={5}>{t('ra_Device → Channel → State')}</div>,\n <div key={6}>{t('ra_Channel → State')}</div>,\n <div\n key={7}\n style={{ height: 10 }}\n />,\n <div key={7}>\n {t('ra_Non-experts may create new objects only in \"0_userdata.0\" or \"alias.0\".')}\n </div>,\n <div key={8}>\n {t(\n 'ra_The experts may create objects everywhere but from second level (e.g. \"vis.0\" or \"javascript.0\").',\n )}\n </div>,\n ];\n }\n }\n\n return value.length ? value : t('ra_Add new child object to selected parent');\n };\n\n onOpenFile(): void {\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n input.setAttribute('id', 'files');\n input.setAttribute('opacity', '0');\n input.addEventListener('change', (e: Event) => this.handleJsonUpload(e), false);\n input.click();\n }\n\n renderInputJsonDialog(): JSX.Element | null {\n return dialogs.renderInputJsonDialog(this);\n }\n\n /**\n * Renders the toolbar.\n */\n getToolbar(): JSX.Element {\n return toolbar.getToolbar(this);\n }\n\n toggleExpanded(id: string): void {\n const expanded: string[] = JSON.parse(JSON.stringify(this.state.expanded));\n const pos = expanded.indexOf(id);\n if (pos === -1) {\n expanded.push(id);\n expanded.sort();\n } else {\n expanded.splice(pos, 1);\n }\n\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.objectExpanded`, JSON.stringify(expanded));\n\n this.setState({ expanded });\n }\n\n onCopy(e: React.MouseEvent, text: string | undefined): void {\n e.stopPropagation();\n e.preventDefault();\n if (text) {\n Utils.copyToClipboard(text);\n if (text.length < 50) {\n this.setState({ toast: this.props.t('ra_Copied %s', text) });\n } else {\n this.setState({ toast: this.props.t('ra_Copied') });\n }\n }\n }\n\n renderTooltipAccessControl(acl: ioBroker.StateACL): null | JSX.Element {\n return leaf.renderTooltipAccessControl(this, acl);\n }\n\n renderColumnButtons(id: string, item: TreeItem): (JSX.Element | null)[] | JSX.Element | null {\n return leaf.renderColumnButtons(this, id, item);\n }\n\n readHistory(id: string): void {\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 window.sparkline &&\n this.defaultHistory &&\n this.objects[id]?.common?.custom &&\n this.objects[id].common.custom[this.defaultHistory]\n ) {\n const now = new Date();\n now.setHours(now.getHours() - 24);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setMilliseconds(0);\n const nowMs = now.getTime();\n\n this.props.socket\n .getHistory(id, {\n instance: this.defaultHistory,\n start: nowMs,\n end: Date.now(),\n step: 3600000,\n from: false,\n ack: false,\n q: false,\n addId: false,\n aggregate: 'minmax',\n })\n .then(values => {\n const sparks: HTMLDivElement[] = window.document.getElementsByClassName(\n 'sparkline',\n ) as any as HTMLDivElement[];\n\n for (let s = 0; s < sparks.length; s++) {\n if (sparks[s].dataset.id === id) {\n const v = prepareSparkData(values, nowMs);\n\n window.sparkline.sparkline(sparks[s], v);\n break;\n }\n }\n })\n .catch(e => console.warn(`Cannot read history: ${e}`));\n }\n }\n\n getTooltipInfo(id: string, cb?: () => void): void {\n const obj = this.objects[id];\n const state = this.states[id];\n\n const { valFull, fileViewer } = formatValue({\n state,\n obj: obj as ioBroker.StateObject,\n texts: this.texts,\n dateFormat: this.props.dateFormat || this.systemConfig?.common.dateFormat || DEFAULT_DATE_FORMAT,\n isFloatComma:\n this.props.isFloatComma === undefined\n ? (this.systemConfig?.common.isFloatComma ?? true)\n : this.props.isFloatComma,\n full: true,\n });\n const valFullRx: JSX.Element[] = [];\n\n valFull?.forEach(_item => {\n if (_item.t === this.texts.quality && state.q) {\n valFullRx.push(\n <div\n style={styles.cellValueTooltipBoth}\n key={_item.t}\n >\n {_item.t}\n : \n {_item.v}\n </div>,\n );\n // <div style={styles.cellValueTooltipValue} key={item.t + '_v'}>{item.v}</div>,\n if (!_item.nbr) {\n valFullRx.push(<br key={`${_item.t}_br`} />);\n }\n } else {\n valFullRx.push(\n <div\n style={styles.cellValueTooltipTitle}\n key={_item.t}\n >\n {_item.t}\n : \n </div>,\n );\n valFullRx.push(\n <div\n style={styles.cellValueTooltipValue}\n key={`${_item.t}_v`}\n >\n {_item.v}\n </div>,\n );\n if (!_item.nbr) {\n valFullRx.push(<br key={`${_item.t}_br`} />);\n }\n }\n });\n const role = obj?.common?.role || '';\n\n if (fileViewer === 'image') {\n valFullRx.push(\n <img\n style={styles.cellValueTooltipImage}\n src={state.val as string}\n alt={id}\n />,\n );\n } else if (role === 'url' || role === 'url.self' || role === 'url.blank') {\n // Show comment about \"Hold Ctrl/⌘ key to open the link\"\n valFullRx.unshift(\n <div\n key=\"ctrl\"\n style={{ textDecoration: 'underline', fontWeight: 'bold' }}\n >\n {this.texts.ctrlForLink}\n </div>,\n );\n } else if (this.defaultHistory && obj?.common?.custom?.[this.defaultHistory]) {\n valFullRx.push(\n <svg\n key=\"sparkline\"\n className=\"sparkline\"\n data-id={id}\n style={{ fill: '#3d85de' }}\n width=\"200\"\n height=\"30\"\n strokeWidth=\"3\"\n />,\n );\n }\n\n this.setState({ tooltipInfo: { el: valFullRx, id } }, () => cb && cb());\n }\n\n private _syncEnum(id: string, enumIds: string[], newArray: string[], cb: () => void): void {\n if (!enumIds?.length) {\n if (cb) {\n cb();\n }\n return;\n }\n const enumId = enumIds.pop() || '';\n const promises = [];\n if (this.info.objects[enumId]?.common) {\n if (this.info.objects[enumId].common.members?.length) {\n const pos = this.info.objects[enumId].common.members.indexOf(id);\n if (pos !== -1 && !newArray.includes(enumId)) {\n // delete it from members\n const obj: ioBroker.Object = JSON.parse(JSON.stringify(this.info.objects[enumId]));\n obj.common.members.splice(pos, 1);\n promises.push(\n this.props.socket\n .setObject(enumId, obj)\n .then(() => (this.info.objects[enumId] = obj))\n .catch(e => this.showError(e)),\n );\n }\n }\n\n // add to it\n if (newArray.includes(enumId) && !this.info.objects[enumId].common.members?.includes(id)) {\n // add to object\n const obj: ioBroker.Object = JSON.parse(JSON.stringify(this.info.objects[enumId]));\n obj.common.members ||= [];\n obj.common.members.push(id);\n obj.common.members.sort();\n promises.push(\n this.props.socket\n .setObject(enumId, obj)\n .then(() => (this.info.objects[enumId] = obj))\n .catch(e => this.showError(e)),\n );\n }\n }\n\n void Promise.all(promises).then(() => {\n setTimeout(() => this._syncEnum(id, enumIds, newArray, cb), 0);\n });\n }\n\n syncEnum(id: string, enumName: 'func' | 'room', newArray: string[]): Promise<void> {\n const toCheck = [...this.info[enumName === 'func' ? 'funcEnums' : 'roomEnums']];\n\n return new Promise<void>(resolve => {\n this._syncEnum(id, toCheck, newArray, () => {\n // force update of an object\n resolve();\n });\n });\n }\n\n onColumnsEditCustomDialogClose(isSave?: boolean): void {\n // cannot be null\n const customColumnDialog: {\n value: boolean | number | string;\n type: 'boolean' | 'number' | 'string';\n initValue: boolean | number | string;\n } = this.customColumnDialog as {\n value: boolean | number | string;\n type: 'boolean' | 'number' | 'string';\n initValue: boolean | number | string;\n };\n\n if (isSave) {\n let value: string | number | boolean = customColumnDialog.value;\n if (customColumnDialog.type === 'boolean') {\n value = value === 'true' || value === true;\n } else if (customColumnDialog.type === 'number') {\n value = parseFloat(value as any as string);\n }\n const it = this.state.columnsEditCustomDialog?.it;\n this.customColumnDialog = null;\n this.props.socket\n .getObject(this.state.columnsEditCustomDialog?.obj?._id || '')\n .then(obj => {\n if (obj && it && setCustomValue(obj, it, value)) {\n return this.props.socket.setObject(obj._id, obj);\n }\n throw new Error(this.props.t('ra_Cannot update attribute, because not found in the object'));\n })\n .then(() => this.setState({ columnsEditCustomDialog: null }))\n .catch(e => this.showError(e));\n } else {\n this.customColumnDialog = null;\n this.setState({ columnsEditCustomDialog: null });\n }\n }\n\n /**\n * Renders a custom value.\n */\n renderCustomValue(obj: ioBroker.Object, it: AdapterColumn, item: TreeItem): JSX.Element | null {\n return leaf.renderCustomValue(this, obj, it, item);\n }\n\n renderAliasLink(id: string, index?: number, customStyle?: Record<string, any>): JSX.Element | null {\n return leaf.renderAliasLink(this, id, index, customStyle);\n }\n\n /**\n * Renders one row of the table.\n */\n renderLeaf(\n item: TreeItem,\n isExpanded: boolean | undefined,\n counter: { count: number },\n ): { row: JSX.Element; details: JSX.Element | null } {\n return leaf.renderLeaf(this, item, isExpanded, counter);\n }\n\n /**\n * Renders an item.\n */\n renderItem(root: TreeItem, isExpanded: boolean | undefined, counter?: { count: number }): (JSX.Element | null)[] {\n return leaf.renderItem(this, root, isExpanded, counter);\n }\n\n calculateColumnsVisibility(\n aColumnsAuto?: boolean | null,\n aColumns?: string[] | null,\n aColumnsForAdmin?: Record<string, CustomAdminColumnStored[]> | null,\n aColumnsWidths?: Record<string, number>,\n ): void {\n let columnsWidths: Record<string, number> = aColumnsWidths || this.state.columnsWidths;\n const columnsForAdmin: Record<string, CustomAdminColumnStored[]> | null =\n aColumnsForAdmin || this.state.columnsForAdmin;\n const columns: string[] = aColumns || this.state.columns || [];\n const columnsAuto: boolean = typeof aColumnsAuto !== 'boolean' ? this.state.columnsAuto : aColumnsAuto;\n\n columnsWidths = JSON.parse(JSON.stringify(columnsWidths));\n Object.keys(columnsWidths).forEach(name => {\n if (columnsWidths[name]) {\n columnsWidths[name] = parseInt(columnsWidths[name] as any as string, 10) || 0;\n }\n });\n\n this.adapterColumns = [];\n\n // In the auto mode the visible columns depend on the width of the container\n if (!this.props.columns) {\n this.visibleCols = [...this.screenWidths[this.width].fields];\n // remove type column if only one type must be selected\n if (this.props.types && this.props.types.length === 1) {\n const pos = this.visibleCols.indexOf('type');\n if (pos !== -1) {\n this.visibleCols.splice(pos, 1);\n }\n }\n }\n\n const WIDTHS = this.screenWidths[this.width].widths;\n\n if (columnsAuto) {\n this.columnsVisibility = {\n id: this.screenWidths[this.width || 'lg'].idWidth,\n name: this.visibleCols.includes('name') ? WIDTHS.name || 0 : 0,\n type: this.visibleCols.includes('type') ? WIDTHS.type || 0 : 0,\n role: this.visibleCols.includes('role') ? WIDTHS.role || 0 : 0,\n room: this.visibleCols.includes('room') ? WIDTHS.room || 0 : 0,\n func: this.visibleCols.includes('func') ? WIDTHS.func || 0 : 0,\n changedFrom: this.visibleCols.includes('changedFrom') ? WIDTHS.changedFrom || 0 : 0,\n qualityCode: this.visibleCols.includes('qualityCode') ? WIDTHS.qualityCode || 0 : 0,\n timestamp: this.visibleCols.includes('timestamp') ? WIDTHS.timestamp || 0 : 0,\n lastChange: this.visibleCols.includes('lastChange') ? WIDTHS.lastChange || 0 : 0,\n val: this.visibleCols.includes('val') ? WIDTHS.val || 0 : 0,\n buttons: this.visibleCols.includes('buttons') ? WIDTHS.buttons || 0 : 0,\n };\n\n // in xs name is not visible\n if (this.columnsVisibility.name && !this.customWidth) {\n let widthSum: number = (this.columnsVisibility.id as number) || 0; // id is always visible\n if (this.state.statesView) {\n widthSum += this.columnsVisibility.changedFrom || 0;\n widthSum += this.columnsVisibility.qualityCode || 0;\n widthSum += this.columnsVisibility.timestamp || 0;\n widthSum += this.columnsVisibility.lastChange || 0;\n } else {\n widthSum += this.columnsVisibility.type || 0;\n widthSum += this.columnsVisibility.role || 0;\n widthSum += this.columnsVisibility.room || 0;\n widthSum += this.columnsVisibility.func || 0;\n }\n widthSum += this.columnsVisibility.val || 0;\n widthSum += this.columnsVisibility.buttons || 0;\n this.columnsVisibility.name = `calc(100% - ${widthSum + 5}px)`;\n } else if (!this.customWidth) {\n // Calculate the width of ID\n let widthSum = 0; // id is always visible\n if (this.state.statesView) {\n widthSum += this.columnsVisibility.changedFrom || 0;\n widthSum += this.columnsVisibility.qualityCode || 0;\n widthSum += this.columnsVisibility.timestamp || 0;\n widthSum += this.columnsVisibility.lastChange || 0;\n } else {\n widthSum += this.columnsVisibility.type || 0;\n widthSum += this.columnsVisibility.role || 0;\n widthSum += this.columnsVisibility.room || 0;\n widthSum += this.columnsVisibility.func || 0;\n }\n widthSum += this.columnsVisibility.val || 0;\n widthSum += this.columnsVisibility.buttons || 0;\n this.columnsVisibility.id = `calc(100% - ${widthSum + 5}px)`;\n }\n } else {\n const width = this.width || 'lg';\n this.columnsVisibility = {\n id: columnsWidths.id || this.screenWidths[width].idWidth,\n name: columns.includes('name')\n ? columnsWidths.name || WIDTHS.name || this.screenWidths[width].widths.name || 0\n : 0,\n type: columns.includes('type')\n ? columnsWidths.type || WIDTHS.type || this.screenWidths[width].widths.type || 0\n : 0,\n role: columns.includes('role')\n ? columnsWidths.role || WIDTHS.role || this.screenWidths[width].widths.role || 0\n : 0,\n room: columns.includes('room')\n ? columnsWidths.room || WIDTHS.room || this.screenWidths[width].widths.room || 0\n : 0,\n func: columns.includes('func')\n ? columnsWidths.func || WIDTHS.func || this.screenWidths[width].widths.func || 0\n : 0,\n };\n let widthSum: number = this.columnsVisibility.id as number; // id is always visible\n if (this.columnsVisibility.name) {\n widthSum += this.columnsVisibility.type || 0;\n widthSum += this.columnsVisibility.role || 0;\n widthSum += this.columnsVisibility.room || 0;\n widthSum += this.columnsVisibility.func || 0;\n }\n\n if (columnsForAdmin && columns) {\n Object.keys(columnsForAdmin)\n .sort()\n .forEach(adapter =>\n columnsForAdmin[adapter].forEach(column => {\n const id = `_${adapter}_${column.path}`;\n if (columns.includes(id)) {\n const item: AdapterColumn = {\n adapter,\n id: `_${adapter}_${column.path}`,\n name: column.name,\n path: column.path.split('.'),\n pathText: column.path,\n };\n if (column.edit) {\n item.edit = true;\n if (column.type) {\n item.type = column.type as 'number' | 'boolean' | 'string';\n }\n if (column.objTypes) {\n item.objTypes = column.objTypes;\n }\n }\n\n this.adapterColumns.push(item);\n (this.columnsVisibility as Record<string, number>)[id] =\n columnsWidths[item.id] ||\n column.width ||\n this.screenWidths[width].widths.func ||\n this.screenWidths.xl.widths.func ||\n 0;\n widthSum += (this.columnsVisibility as Record<string, number>)[id];\n } else {\n (this.columnsVisibility as Record<string, number>)[id] = 0;\n }\n }),\n );\n }\n this.adapterColumns.sort((a, b) => (a.id > b.id ? -1 : a.id < b.id ? 1 : 0));\n this.columnsVisibility.val = columns.includes('val')\n ? columnsWidths.val || WIDTHS.val || this.screenWidths.xl.widths.val\n : 0;\n\n // do not show buttons if not desired\n if (!this.props.columns || this.props.columns.includes('buttons')) {\n this.columnsVisibility.buttons = columns.includes('buttons')\n ? columnsWidths.buttons || WIDTHS.buttons || this.screenWidths.xl.widths.buttons\n : 0;\n widthSum += this.columnsVisibility.buttons || 0;\n }\n\n if (this.columnsVisibility.name && !columnsWidths.name) {\n widthSum += this.columnsVisibility.val || 0;\n this.columnsVisibility.name = `calc(100% - ${widthSum}px)`;\n } else {\n const newWidth = Object.keys(this.columnsVisibility).reduce((accumulator: number, name: string) => {\n // do not summarize strings\n if (\n name === 'id' ||\n typeof (this.columnsVisibility as Record<string, number | string>)[name] === 'string' ||\n !(this.columnsVisibility as Record<string, number | string>)[name]\n ) {\n return accumulator;\n }\n return accumulator + (this.columnsVisibility as Record<string, number>)[name];\n }, 0);\n this.columnsVisibility.id = `calc(100% - ${newWidth}px)`;\n }\n }\n }\n\n /**\n * The width class of the object browser. It is measured from the container and not from the\n * window, so the browser shows the right columns if it is used in a narrow panel or dialog too.\n * `props.width` overwrites the measured value.\n */\n get width(): Width {\n return this.props.width || this.state.containerWidth;\n }\n\n /** Watch the width of the table container to detect the width class (see `width`) */\n observeContainerWidth(): void {\n const container = this.tableRef.current;\n if (!container || this.observedContainer === container) {\n return;\n }\n this.resizeObserver?.disconnect();\n this.observedContainer = container;\n this.resizeObserver = new ResizeObserver(entries => this.setContainerWidth(entries[0].contentRect.width));\n this.resizeObserver.observe(container);\n // measure immediately, so the first render after mounting shows the right columns\n this.setContainerWidth(container.clientWidth);\n }\n\n /** Store the width class of the container if it changed */\n setContainerWidth(containerWidth: number): void {\n const width = widthFromContainer(containerWidth, this.props.theme);\n if (width !== this.state.containerWidth) {\n // the columns are recalculated in `render`, as soon as the width class changed\n this.setState({ containerWidth: width });\n }\n }\n\n /**\n * All column widths as CSS variables of the table container. The header and every row read the\n * widths from here (see `colWidth`), so they can never get out of sync, and the resizer can\n * change a width by writing one variable instead of re-rendering all rows.\n */\n getColumnWidthVariables(): React.CSSProperties {\n const variables: Record<string, string> = {};\n Object.keys(this.columnsVisibility).forEach(name => {\n const width = (this.columnsVisibility as Record<string, number | string | undefined>)[name];\n if (typeof width === 'string') {\n // `calc(100% - 500px)`: this column takes the remaining place. A percentage cannot be\n // used here, because the width of the row depends on the columns and would be\n // circular - the column grows instead and keeps its minimal width if the place is\n // not sufficient (then the table scrolls horizontally).\n // `100%` (mobile view) must not reserve any place, `calc(100% - 500px)` keeps a minimum\n variables[colVar(name)] = width === '100%' ? '0px' : `${MIN_COLUMN_WIDTHS[name] || 100}px`;\n variables[growVar(name)] = '1';\n } else {\n variables[colVar(name)] = `${width || 0}px`;\n variables[growVar(name)] = '0';\n }\n });\n return variables;\n }\n\n /** Set the width of one column without re-rendering the rows */\n setColumnWidth(name: string, width: number): void {\n (this.columnsVisibility as Record<string, number | string>)[name] = width;\n this.tableRef.current?.style.setProperty(colVar(name), `${width}px`);\n }\n\n resizerMouseMove = (e: MouseEvent): void => {\n if (this.resizerActiveDiv) {\n let width: number;\n let widthNext: number;\n if (this.resizeLeft) {\n width = this.resizerOldWidth - e.clientX + this.resizerPosition;\n widthNext = this.resizerOldWidthNext + e.clientX - this.resizerPosition;\n } else {\n width = this.resizerOldWidth + e.clientX - this.resizerPosition;\n widthNext = this.resizerOldWidthNext - e.clientX + this.resizerPosition;\n }\n\n if (\n this.resizerActiveName &&\n this.resizerNextName &&\n (!this.resizerMin || width > this.resizerMin) &&\n (!this.resizerNextMin || widthNext > this.resizerNextMin)\n ) {\n this.resizerCurrentWidths[this.resizerActiveName] = width;\n this.resizerCurrentWidths[this.resizerNextName] = widthNext;\n\n // Only two CSS variables are written - the header and all rows follow immediately,\n // without a re-render of the table\n this.setColumnWidth(this.resizerActiveName, width);\n this.setColumnWidth(this.resizerNextName, widthNext);\n\n this.customWidth = true;\n }\n }\n };\n\n resizerMouseUp = (): void => {\n this.localStorage.setItem(`${this.props.dialogName || 'App'}.table`, JSON.stringify(this.resizerCurrentWidths));\n this.resizerActiveName = null;\n this.resizerNextName = null;\n this.resizerActiveDiv = null;\n this.resizerNextDiv = null;\n window.removeEventListener('mousemove', this.resizerMouseMove);\n window.removeEventListener('mouseup', this.resizerMouseUp);\n };\n\n resizerMouseDown = (e: React.MouseEvent<HTMLDivElement>): void => {\n this.storedWidths ||= JSON.parse(JSON.stringify(this.screenWidths[this.width || 'lg'])) as ScreenWidthOne;\n\n this.resizerCurrentWidths ||= {};\n this.resizerActiveDiv = (e.target as HTMLDivElement).parentNode as HTMLDivElement;\n this.resizerActiveName = this.resizerActiveDiv.dataset.name || null;\n if (this.resizerActiveName) {\n let i = 0;\n if ((e.target as HTMLDivElement).dataset.left === 'true') {\n this.resizeLeft = true;\n this.resizerNextDiv = this.resizerActiveDiv.previousElementSibling as HTMLDivElement;\n let handle: HTMLDivElement | null = this.resizerNextDiv.querySelector('.iob-ob-resize-handler');\n while (this.resizerNextDiv && !handle && i < 10) {\n this.resizerNextDiv = this.resizerNextDiv.previousElementSibling as HTMLDivElement;\n handle = this.resizerNextDiv.querySelector('.iob-ob-resize-handler');\n i++;\n }\n if (handle?.dataset.left !== 'true') {\n this.resizerNextDiv = this.resizerNextDiv.nextElementSibling as HTMLDivElement;\n }\n } else {\n this.resizeLeft = false;\n this.resizerNextDiv = this.resizerActiveDiv.nextElementSibling as HTMLDivElement;\n /* while (this.resizerNextDiv && !this.resizerNextDiv.querySelector('.iob-ob-resize-handler') && i < 10) {\n this.resizerNextDiv = this.resizerNextDiv.nextElementSibling;\n i++;\n } */\n }\n this.resizerNextName = this.resizerNextDiv.dataset.name || null;\n\n this.resizerMin = parseInt(this.resizerActiveDiv.dataset.min as string, 10) || 0;\n this.resizerNextMin = parseInt(this.resizerNextDiv.dataset.min as string, 10) || 0;\n\n this.resizerPosition = e.clientX;\n\n this.resizerCurrentWidths[this.resizerActiveName] = this.resizerActiveDiv.offsetWidth;\n this.resizerOldWidth = this.resizerCurrentWidths[this.resizerActiveName];\n\n if (this.resizerNextName) {\n this.resizerCurrentWidths[this.resizerNextName] = this.resizerNextDiv.offsetWidth;\n this.resizerOldWidthNext = this.resizerCurrentWidths[this.resizerNextName];\n }\n\n window.addEventListener('mousemove', this.resizerMouseMove);\n window.addEventListener('mouseup', this.resizerMouseUp);\n }\n };\n\n /**\n * Handle keyboard events for navigation\n */\n navigateKeyPress(event: React.KeyboardEvent): void {\n const selectedId = this.state.selectedNonObject || this.state.selected[0];\n\n if (!selectedId) {\n return;\n }\n\n if (event.code === 'ArrowUp' || event.code === 'ArrowDown') {\n event.preventDefault();\n const ids: string[] = [];\n // the first child is the header, it has no ID\n this.tableRef.current?.childNodes.forEach((node: any) => {\n const nodeId = (node as HTMLDivElement).id;\n if (nodeId) {\n ids.push(nodeId);\n }\n });\n const idx = ids.indexOf(selectedId);\n const newIdx = event.code === 'ArrowDown' ? idx + 1 : idx - 1;\n const newId = ids[newIdx] || selectedId;\n this.onSelect(newId);\n this.scrollToItem(newId);\n }\n\n if (event.code === 'ArrowRight' || event.code === 'ArrowLeft') {\n this.toggleExpanded(selectedId);\n }\n\n if (event.code === 'Delete' && this.root && selectedId) {\n const item = ObjectBrowserClass.getItemFromRoot(this.root, selectedId);\n if (item) {\n const { obj } = item.data;\n if (obj && !obj.common?.dontDelete) {\n this.showDeleteDialog({ id: selectedId, obj, item });\n }\n }\n }\n }\n\n /**\n * Find the id from the root\n *\n * @param root The current root\n * @param id The object id to find\n */\n private static getItemFromRoot(root: TreeItem, id: string): TreeItem | null {\n const idArr = id.split('.');\n let currId = '';\n let _root: TreeItem | null | undefined = root;\n\n for (let i = 0; i < idArr.length; i++) {\n const idEntry = idArr[i];\n currId = currId ? `${currId}.${idEntry}` : idEntry;\n let found = false;\n if (_root.children) {\n for (let j = 0; j < _root.children.length; j++) {\n if (_root.children[j].data.id === currId) {\n _root = _root.children[j];\n found = true;\n break;\n }\n }\n }\n if (!found) {\n return null;\n }\n }\n\n return _root || null;\n }\n\n resizerReset = (): void => {\n this.customWidth = false;\n this.screenWidths[this.width || 'lg'] = JSON.parse(JSON.stringify(this.storedWidths));\n this.calculateColumnsVisibility();\n this.localStorage.removeItem(`${this.props.dialogName || 'App'}.table`);\n this.forceUpdate();\n };\n\n /**\n * Render the right handle for resizing\n */\n renderHandleRight(): JSX.Element {\n return toolbar.renderHandleRight(this);\n }\n\n // --- Routing (navigateTo / onNavigateTo) ---\n // The browser never reads the URL itself; the parent drives it via `navigateTo` and is informed\n // of user navigation via `onNavigateTo`. All URL parsing/writing lives in the parent component.\n\n /** Derive the current navigation target from the dialog/selection state. */\n private getStateNav(): ObjectBrowserNavigation | null {\n if (this.state.editObjectDialog) {\n return { mode: 'edit', id: this.state.editObjectDialog };\n }\n if (this.state.customDialog && this.state.customDialog.length === 1 && !this.state.customDialogAll) {\n return { mode: 'settings', id: this.state.customDialog[0] };\n }\n if (this.state.viewFileDialog) {\n return { mode: 'viewFile', id: this.state.viewFileDialog };\n }\n if (this.state.selected.length === 1 && this.state.selected[0]) {\n return { mode: 'select', id: this.state.selected[0] };\n }\n return null;\n }\n\n private static navEqual(a: ObjectBrowserNavigation | null, b: ObjectBrowserNavigation | null): boolean {\n if (!a || !b) {\n return !a && !b;\n }\n return a.mode === b.mode && a.id === b.id;\n }\n\n /** Apply a navigation target coming from the parent (`navigateTo`): select + open the dialog. */\n private applyNavigateTo(nav: ObjectBrowserNavigation | null): void {\n this.applyingNav = true;\n const done = (): void => {\n this.applyingNav = false;\n };\n if (!nav?.id) {\n // No target: just close any open dialog (keep the current selection).\n this.setState({ editObjectDialog: '', customDialog: null, viewFileDialog: '' }, done);\n return;\n }\n const { id } = nav;\n const open = (): void => {\n if (nav.mode === 'edit') {\n this.setState(\n { editObjectDialog: id, editObjectAlias: false, customDialog: null, viewFileDialog: '' },\n done,\n );\n } else if (nav.mode === 'settings') {\n this.setState(\n { customDialog: [id], customDialogAll: false, editObjectDialog: '', viewFileDialog: '' },\n done,\n );\n } else if (nav.mode === 'viewFile') {\n this.setState({ viewFileDialog: id, editObjectDialog: '', customDialog: null }, done);\n } else {\n this.setState({ editObjectDialog: '', customDialog: null, viewFileDialog: '' }, done);\n }\n };\n // Select the target (if needed), expand to it and scroll into view, then open the dialog.\n if (this.state.selected.length === 1 && this.state.selected[0] === id) {\n open();\n } else {\n this.onSelect(id, false, () =>\n this.expandAllSelected(() => {\n this.scrollToItem(id);\n open();\n }),\n );\n }\n }\n\n /** Apply the initial `navigateTo` after the tree has loaded (called from componentDidMount). */\n private applyInitialNavigateTo(): void {\n const nav = this.props.navigateTo ?? null;\n if (nav?.id) {\n this.lastNav = nav;\n this.applyNavigateTo(nav);\n } else {\n // Don't push the restored-from-localStorage selection into the URL on load.\n this.lastNav = this.getStateNav();\n }\n }\n\n /** Reconcile `navigateTo` (parent/URL) with the browser's selection/dialog state. */\n private reconcileNavigation(prevProps: ObjectBrowserProps): void {\n if (this.props.navigateTo === undefined && !this.props.onNavigateTo) {\n return; // routing not used by this consumer\n }\n if (this.applyingNav) {\n return; // currently applying a target; ignore the intermediate state\n }\n const propNav = this.props.navigateTo ?? null;\n const stateNav = this.getStateNav();\n if (ObjectBrowserClass.navEqual(propNav, stateNav)) {\n this.lastNav = stateNav;\n return;\n }\n if (!ObjectBrowserClass.navEqual(propNav, prevProps.navigateTo ?? null)) {\n // The parent (URL) drove a change → apply it to the browser.\n this.lastNav = propNav;\n this.applyNavigateTo(propNav);\n } else if (!ObjectBrowserClass.navEqual(stateNav, this.lastNav)) {\n // The user changed selection/dialog → report it so the parent can update the URL.\n this.lastNav = stateNav;\n this.props.onNavigateTo?.(stateNav);\n }\n }\n\n /**\n * Called when component is updated.\n */\n componentDidUpdate(prevProps: ObjectBrowserProps): void {\n // the table is rendered only after the objects are loaded\n this.observeContainerWidth();\n\n if (this.tableRef.current && this.selectFirst) {\n this.scrollToItem(this.selectFirst);\n }\n this.reconcileNavigation(prevProps);\n }\n\n scrollToItem(id: string): void {\n this.selectFirst = '';\n\n const node = window.document.getElementById(id);\n node?.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center',\n });\n }\n\n onUpdate(valAck: {\n val: ioBroker.StateValue;\n ack: boolean;\n q: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];\n expire: number | undefined;\n }): void {\n this.props.socket\n .setState(this.edit.id, {\n val: valAck.val,\n ack: valAck.ack,\n q: valAck.q || 0,\n expire: valAck.expire || undefined,\n })\n .catch(e => this.showError(`Cannot write value: ${e}`));\n }\n\n showAddDataPointDialog(id: string, initialType: ioBroker.ObjectType, initialStateType?: ioBroker.CommonType): void {\n this.setState({\n showContextMenu: null,\n modalNewObj: {\n id,\n initialType,\n initialStateType,\n },\n });\n }\n\n /** Renders the aliases list for one state (if more than 2) */\n\n doFilter(doNotStore?: boolean): void {\n if (!this.objects || !this.root) {\n return;\n }\n\n if (!doNotStore) {\n this.localStorage.setItem(\n `${this.props.dialogName || 'App'}.objectFilter`,\n JSON.stringify(this.state.filter),\n );\n }\n\n const counter = { count: 0 };\n\n applyFilter(\n this.root,\n this.state.filter,\n this.props.lang,\n this.objects,\n undefined,\n counter,\n this.props.customFilter,\n this.props.types,\n );\n\n if (counter.count < 500 && !this.state.expandAllVisible) {\n setTimeout(() => this.setState({ expandAllVisible: true }));\n } else if (counter.count >= 500 && this.state.expandAllVisible) {\n setTimeout(() => this.setState({ expandAllVisible: false }));\n } else {\n this.forceUpdate();\n }\n }\n\n /**\n * The rendering method of this component.\n */\n render(): JSX.Element {\n this.recordStates = [];\n if (this.unsubscribeTimer) {\n clearTimeout(this.unsubscribeTimer);\n }\n\n if (this.styleTheme !== this.props.themeType) {\n this.styles = {\n cellIdIconFolder: Utils.getStyle(this.props.theme, styles.cellIdIconFolder),\n cellIdIconDocument: Utils.getStyle(this.props.theme, styles.cellIdIconDocument),\n iconDeviceError: Utils.getStyle(this.props.theme, styles.iconDeviceError),\n iconDeviceConnected: Utils.getStyle(this.props.theme, styles.iconDeviceConnected),\n iconDeviceDisconnected: Utils.getStyle(this.props.theme, styles.iconDeviceDisconnected),\n cellButtonsButtonWithCustoms: Utils.getStyle(this.props.theme, styles.cellButtonsButtonWithCustoms),\n invertedBackground: Utils.getStyle(this.props.theme, styles.invertedBackground),\n invertedBackgroundFlex: Utils.getStyle(this.props.theme, styles.invertedBackgroundFlex),\n contextMenuEdit: Utils.getStyle(this.props.theme, styles.contextMenuEdit),\n contextMenuEditValue: Utils.getStyle(this.props.theme, styles.contextMenuEditValue),\n contextMenuView: Utils.getStyle(this.props.theme, styles.contextMenuView),\n contextMenuCustom: Utils.getStyle(this.props.theme, styles.contextMenuCustom),\n contextMenuACL: Utils.getStyle(this.props.theme, styles.contextMenuACL),\n contextMenuRoom: Utils.getStyle(this.props.theme, styles.contextMenuRoom),\n contextMenuRole: Utils.getStyle(this.props.theme, styles.contextMenuRole),\n contextMenuDelete: Utils.getStyle(this.props.theme, styles.contextMenuDelete),\n filterInput: Utils.getStyle(this.props.theme, styles.headerCellInput, styles.filterInput),\n iconCopy: Utils.getStyle(\n this.props.theme,\n styles.cellButtonsValueButton,\n styles.cellButtonsValueButtonCopy,\n ),\n aliasReadWrite: Utils.getStyle(this.props.theme, styles.cellIdAlias, styles.cellIdAliasReadWrite),\n aliasAlone: Utils.getStyle(this.props.theme, styles.cellIdAlias, styles.cellIdAliasAlone),\n };\n this.styleTheme = this.props.themeType;\n }\n\n this.unsubscribeTimer = setTimeout(() => {\n this.unsubscribeTimer = null;\n this.checkUnsubscribes();\n }, 200);\n\n if (this.expertMode !== !!this.state.filter.expertMode) {\n this.expertMode = !!this.state.filter.expertMode;\n this.doFilter(true);\n }\n\n if (!this.state.loaded) {\n return <CircularProgress key={`${this.props.dialogName}_c`} />;\n }\n\n // the container was resized into another width class => other columns are visible\n if (this.lastCalculatedWidth !== this.width) {\n this.lastCalculatedWidth = this.width;\n this.calculateColumnsVisibility();\n }\n\n const items = this.root ? this.renderItem(this.root, undefined) : null;\n\n return (\n <TabContainer\n key={this.props.dialogName}\n styles={{ root: this.props.style }}\n >\n <style>\n {`\n@keyframes newValueAnimation-light {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #000;\n }\n}\n@keyframes newValueAnimation-dark {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #fff;\n }\n}\n.newValueBrowser-dark {\n animation: newValueAnimation-dark 2s ease-in-out;\n}\n.newValueBrowser-light {\n animation: newValueAnimation-light 2s ease-in-out;\n}\n.highlight-link .iob-link {\n text-decoration: underline;\n cursor: pointer;\n}\n`}\n </style>\n <TabHeader>{this.getToolbar()}</TabHeader>\n <TabContent>\n {/* The header is a part of the scrolling container and sticks to its top, so it is\n always aligned with the rows and does not need to be synchronized with them. */}\n <Box\n style={{ ...styles.tableDiv, ...this.getColumnWidthVariables() }}\n ref={this.tableRef}\n onKeyDown={event => this.navigateKeyPress(event)}\n >\n {toolbar.renderHeader(this)}\n {items}\n </Box>\n </TabContent>\n {contextMenu.renderContextMenu(this)}\n {dialogs.renderAliasMenu(this)}\n {dialogs.renderToast(this)}\n {dialogs.renderColumnsEditCustomDialog(this)}\n {this.renderColumnsSelectorDialog()}\n {dialogs.renderCustomDialog(this)}\n {dialogs.renderEditValueDialog(this)}\n {dialogs.renderEditObjectDialog(this)}\n {dialogs.renderViewObjectFileDialog(this)}\n {dialogs.renderAliasEditorDialog(this)}\n {dialogs.renderEditRoleDialog(this)}\n {dialogs.renderEnumDialog(this)}\n {this.renderErrorDialog()}\n {this.renderExportDialog()}\n {this.renderRenameDialog()}\n {this.renderInputJsonDialog()}\n {this.state.modalNewObj && this.props.modalNewObject && this.props.modalNewObject(this)}\n {this.state.modalEditOfAccess &&\n this.state.modalEditOfAccessObjData &&\n this.props.modalEditOfAccessControl &&\n this.props.modalEditOfAccessControl(this, this.state.modalEditOfAccessObjData)}\n </TabContainer>\n );\n }\n}\n\n// The width class is measured from the container (see `ObjectBrowserClass.width`), so this component\n// does not need the `withWidth` HOC (which measures the window) anymore.\nexport const ObjectBrowser = ObjectBrowserClass;\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2020-2026, Denis Haev <dogafox@gmail.com>
|
|
3
|
+
*
|
|
4
|
+
* MIT License
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
import { type JSX } from 'react';
|
|
8
|
+
import type { ObjectBrowserFilter, ObjectBrowserPossibleColumns } from './types';
|
|
9
|
+
/** Indent of one level of the tree in pixels */
|
|
10
|
+
export declare const ITEM_LEVEL = 16;
|
|
11
|
+
export declare const SMALL_BUTTON_SIZE = 20;
|
|
12
|
+
export declare const COLOR_NAME_ERROR_DARK = "#ff413c";
|
|
13
|
+
export declare const COLOR_NAME_ERROR_LIGHT = "#86211f";
|
|
14
|
+
export declare const COLOR_NAME_CONNECTED_DARK = "#57ff45";
|
|
15
|
+
export declare const COLOR_NAME_CONNECTED_LIGHT = "#098c04";
|
|
16
|
+
export declare const COLOR_NAME_DISCONNECTED_DARK = "#f3ad11";
|
|
17
|
+
export declare const COLOR_NAME_DISCONNECTED_LIGHT = "#6c5008";
|
|
18
|
+
export declare const DEFAULT_DATE_FORMAT = "YYYY.MM.DD";
|
|
19
|
+
/** Icons of the object types */
|
|
20
|
+
export declare const ITEM_IMAGES: Record<string, JSX.Element>;
|
|
21
|
+
/** Which columns are visible by which screen width */
|
|
22
|
+
export interface ScreenWidthOne {
|
|
23
|
+
idWidth: string | number;
|
|
24
|
+
widths: {
|
|
25
|
+
room?: number;
|
|
26
|
+
val?: number;
|
|
27
|
+
name?: number;
|
|
28
|
+
func?: number;
|
|
29
|
+
buttons?: number;
|
|
30
|
+
type?: number;
|
|
31
|
+
role?: number;
|
|
32
|
+
changedFrom?: number;
|
|
33
|
+
qualityCode?: number;
|
|
34
|
+
timestamp?: number;
|
|
35
|
+
lastChange?: number;
|
|
36
|
+
};
|
|
37
|
+
fields: ObjectBrowserPossibleColumns[];
|
|
38
|
+
}
|
|
39
|
+
export interface ScreenWidth {
|
|
40
|
+
xs: ScreenWidthOne;
|
|
41
|
+
sm: ScreenWidthOne;
|
|
42
|
+
md: ScreenWidthOne;
|
|
43
|
+
lg: ScreenWidthOne;
|
|
44
|
+
xl: ScreenWidthOne;
|
|
45
|
+
}
|
|
46
|
+
export declare const SCREEN_WIDTHS: ScreenWidth;
|
|
47
|
+
/** Minimal width of the columns that take the remaining place */
|
|
48
|
+
export declare const MIN_COLUMN_WIDTHS: Record<string, number>;
|
|
49
|
+
/** Empty filter */
|
|
50
|
+
export declare const DEFAULT_FILTER: ObjectBrowserFilter;
|