UNPKG

@iobroker/adapter-react

Version:

React classes to develop admin interfaces for ioBroker with react.

1,721 lines (1,467 loc) 223 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof3 = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _copyToClipboard = _interopRequireDefault(require("./copy-to-clipboard")); var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles")); var _withWidth = _interopRequireDefault(require("@material-ui/core/withWidth")); var _reactInlinesvg = _interopRequireDefault(require("react-inlinesvg")); var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton")); var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress")); var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem")); var _Select = _interopRequireDefault(require("@material-ui/core/Select")); var _FormControl = _interopRequireDefault(require("@material-ui/core/FormControl")); var _Input = _interopRequireDefault(require("@material-ui/core/Input")); var _Grid = _interopRequireDefault(require("@material-ui/core/Grid")); var _Badge = _interopRequireDefault(require("@material-ui/core/Badge")); var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip")); var _Snackbar = _interopRequireDefault(require("@material-ui/core/Snackbar")); var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox")); var _List = _interopRequireDefault(require("@material-ui/core/List")); var _ListItem = _interopRequireDefault(require("@material-ui/core/ListItem")); var _ListItemIcon = _interopRequireDefault(require("@material-ui/core/ListItemIcon")); var _ListItemSecondaryAction = _interopRequireDefault(require("@material-ui/core/ListItemSecondaryAction")); var _ListItemText = _interopRequireDefault(require("@material-ui/core/ListItemText")); var _DialogTitle = _interopRequireDefault(require("@material-ui/core/DialogTitle")); var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog")); var _DialogContent = _interopRequireDefault(require("@material-ui/core/DialogContent")); var _DialogContentText = _interopRequireDefault(require("@material-ui/core/DialogContentText")); var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions")); var _Button = _interopRequireDefault(require("@material-ui/core/Button")); var _Fab = _interopRequireDefault(require("@material-ui/core/Fab")); var _TextField = _interopRequireDefault(require("@material-ui/core/TextField")); var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel")); var _Switch = _interopRequireDefault(require("@material-ui/core/Switch")); var _Slider = _interopRequireDefault(require("@material-ui/core/Slider")); var _Typography = _interopRequireDefault(require("@material-ui/core/Typography")); var _Edit = _interopRequireDefault(require("@material-ui/icons/Edit")); var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete")); var _Settings = _interopRequireDefault(require("@material-ui/icons/Settings")); var _SettingsApplications = _interopRequireDefault(require("@material-ui/icons/SettingsApplications")); var _Photo = _interopRequireDefault(require("@material-ui/icons/Photo")); var _SupervisedUserCircle = _interopRequireDefault(require("@material-ui/icons/SupervisedUserCircle")); var _CalendarToday = _interopRequireDefault(require("@material-ui/icons/CalendarToday")); var _PersonOutlined = _interopRequireDefault(require("@material-ui/icons/PersonOutlined")); var _Router = _interopRequireDefault(require("@material-ui/icons/Router")); var _Wifi = _interopRequireDefault(require("@material-ui/icons/Wifi")); var _Info = _interopRequireDefault(require("@material-ui/icons/Info")); var _Description = _interopRequireDefault(require("@material-ui/icons/Description")); var _Code = _interopRequireDefault(require("@material-ui/icons/Code")); var _ShowChart = _interopRequireDefault(require("@material-ui/icons/ShowChart")); var _ListAlt = _interopRequireDefault(require("@material-ui/icons/ListAlt")); var _ViewColumn = _interopRequireDefault(require("@material-ui/icons/ViewColumn")); var _Close = _interopRequireDefault(require("@material-ui/icons/Close")); var _Check = _interopRequireDefault(require("@material-ui/icons/Check")); var _Build = _interopRequireDefault(require("@material-ui/icons/Build")); var _Publish = _interopRequireDefault(require("@material-ui/icons/Publish")); var _Add = _interopRequireDefault(require("@material-ui/icons/Add")); var _Refresh = _interopRequireDefault(require("@material-ui/icons/Refresh")); var _LooksOne = _interopRequireDefault(require("@material-ui/icons/LooksOne")); var _RoomService = _interopRequireDefault(require("@material-ui/icons/RoomService")); var _Error = _interopRequireDefault(require("@material-ui/icons/Error")); var _WifiOff = _interopRequireDefault(require("@material-ui/icons/WifiOff")); var _IconExpert = _interopRequireDefault(require("../icons/IconExpert")); var _IconAdapter = _interopRequireDefault(require("../icons/IconAdapter")); var _IconAlias = _interopRequireDefault(require("../icons/IconAlias")); var _IconChannel = _interopRequireDefault(require("../icons/IconChannel")); var _IconCopy = _interopRequireDefault(require("../icons/IconCopy")); var _IconDevice = _interopRequireDefault(require("../icons/IconDevice")); var _IconDocument = _interopRequireDefault(require("../icons/IconDocument")); var _IconInstance = _interopRequireDefault(require("../icons/IconInstance")); var _IconState = _interopRequireDefault(require("../icons/IconState")); var _IconClosed = _interopRequireDefault(require("../icons/IconClosed")); var _IconOpen = _interopRequireDefault(require("../icons/IconOpen")); var _IconClearFilter = _interopRequireDefault(require("../icons/IconClearFilter")); var _Icon = _interopRequireDefault(require("./Icon")); var _Utils = _interopRequireDefault(require("./Utils")); var _TabContainer = _interopRequireDefault(require("./TabContainer")); var _TabContent = _interopRequireDefault(require("./TabContent")); var _TabHeader = _interopRequireDefault(require("./TabHeader")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ICON_SIZE = 24; var ROW_HEIGHT = 32; var ITEM_LEVEL = 16; var SMALL_BUTTON_SIZE = 20; var COLOR_NAME_SYSTEM = '#ff6d69'; var COLOR_NAME_SYSTEM_ADAPTER = '#5773ff'; var COLOR_NAME_ERROR_DARK = '#ff413c'; var COLOR_NAME_ERROR_LIGHT = '#86211f'; var COLOR_NAME_CONNECTED_DARK = '#57ff45'; var COLOR_NAME_CONNECTED_LIGHT = '#098c04'; var COLOR_NAME_DISCONNECTED_DARK = '#f3ad11'; var COLOR_NAME_DISCONNECTED_LIGHT = '#6c5008'; var styles = function styles(theme) { return { toolbar: { minHeight: 38 //Theme.toolbar.height, // boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)' }, toolbarButtons: { padding: 4, marginLeft: 4 }, switchColumnAuto: { marginLeft: theme.spacing(2) }, dialogColumns: { transition: 'opacity 1s' }, dialogColumnsLabel: { fontSize: 12, paddingTop: theme.spacing(1) }, columnCustom: { width: '100%', display: 'inline-block' }, columnCustomEditable: { cursor: 'text' }, columnCustomCenter: { textAlign: 'center' }, columnCustomLeft: { textAlign: 'left' }, columnCustomRight: { textAlign: 'right' }, width100: { width: '100%' }, transparent_10: { opacity: 0.1 }, transparent_20: { opacity: 0.2 }, transparent_30: { opacity: 0.3 }, transparent_40: { opacity: 0.4 }, transparent_50: { opacity: 0.5 }, transparent_60: { opacity: 0.6 }, transparent_70: { opacity: 0.7 }, transparent_80: { opacity: 0.8 }, transparent_90: { opacity: 0.9 }, transparent_100: { opacity: 1 }, columnsDialogInputWidth: { width: 80 }, headerRow: { paddingLeft: theme.spacing(1), height: 38, whiteSpace: 'nowrap' }, buttonClearFilter: { position: 'relative', "float": 'right', padding: 0 }, buttonClearFilterIcon: { zIndex: 2, position: 'absolute', top: 0, left: 0, color: '#FF0000', opacity: 0.7 }, tableDiv: { paddingTop: 0, //theme.spacing(1), paddingLeft: 0, width: "calc(100% - ".concat(theme.spacing(1), "px)"), height: "calc(100% - 38px)", overflow: 'auto' }, tableRow: { paddingLeft: theme.spacing(1), height: ROW_HEIGHT, lineHeight: ROW_HEIGHT + 'px', verticalAlign: 'top', userSelect: 'none', width: '100%', '&:hover': { background: "".concat(theme.palette.type === 'dark' ? theme.palette.primary.dark : theme.palette.primary.light, " !important"), color: _Utils["default"].invertColor(theme.palette.primary.main, true) }, whiteSpace: 'nowrap', flexWrap: 'nowrap' }, tableRowLines: { borderBottom: "1px solid ".concat(theme.palette.type === 'dark' ? '#8888882e' : '#8888882e') }, tableRowNoDragging: { cursor: 'pointer' }, tableRowAlias: { height: ROW_HEIGHT + 10 }, tableRowAliasReadWrite: { height: ROW_HEIGHT + 22 }, checkBox: { padding: 0 }, cellId: { position: 'relative', fontSize: '1rem', overflow: 'hidden', textOverflow: 'ellipsis', //verticalAlign: 'top', //position: 'relative', '& .copyButton': { display: 'none' }, '&:hover .copyButton': { display: 'block' }, '& .iconOwn': { display: 'block', width: ROW_HEIGHT - 4, height: ROW_HEIGHT - 4, marginTop: 2, "float": 'right' }, '&:hover .iconOwn': { display: 'none' }, '& *': { width: 'initial' } }, cellIdSpan: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' //display: 'inline-block', //verticalAlign: 'top', }, cellIdIconFolder: { marginRight: theme.spacing(1), width: ROW_HEIGHT - 4, height: ROW_HEIGHT - 4, cursor: 'pointer', color: theme.palette.secondary.main || '#fbff7d', verticalAlign: 'top' }, cellIdIconDocument: { verticalAlign: 'middle', marginLeft: (ROW_HEIGHT - SMALL_BUTTON_SIZE) / 2, marginRight: theme.spacing(1), width: SMALL_BUTTON_SIZE, height: SMALL_BUTTON_SIZE }, cellIdIconOwn: {}, cellCopyButton: { // color: 'white', width: SMALL_BUTTON_SIZE, height: SMALL_BUTTON_SIZE, top: (ROW_HEIGHT - SMALL_BUTTON_SIZE) / 2, opacity: 0.8, '&:hover': { opacity: 1 }, position: 'absolute', right: 3 }, cellEditButton: { width: SMALL_BUTTON_SIZE, height: SMALL_BUTTON_SIZE, color: 'white', position: 'absolute', top: (ROW_HEIGHT - SMALL_BUTTON_SIZE) / 2, right: SMALL_BUTTON_SIZE + 3, opacity: 0.7, '&:hover': { opacity: 1 } }, cellName: { display: 'inline-block', verticalAlign: 'top', fontSize: 14, marginLeft: 5, overflow: 'hidden', textOverflow: 'ellipsis', position: 'relative', '& .copyButton': { display: 'none' }, '&:hover .copyButton': { display: 'block' } }, cellIdAlias: { fontStyle: 'italic', fontSize: 12, opacity: 0.7, '&:hover': { color: theme.palette.type === 'dark' ? '#009900' : '#007700' } }, cellIdAliasReadWriteDiv: { height: 24, marginTop: -5 }, cellIdAliasAlone: { lineHeight: 0 }, cellIdAliasReadWrite: { lineHeight: '12px' }, cellType: { display: 'inline-block', verticalAlign: 'top', '& .itemIcon': { verticalAlign: 'middle', width: ICON_SIZE, height: ICON_SIZE, display: 'inline-block' }, '& .itemIconFolder': { marginLeft: 3 } }, cellRole: { display: 'inline-block', verticalAlign: 'top', textOverflow: 'ellipsis', overflow: 'hidden' }, cellRoom: { display: 'inline-block', verticalAlign: 'top', textOverflow: 'ellipsis', overflow: 'hidden' }, cellEnumParent: { opacity: 0.4 }, cellFunc: { display: 'inline-block', verticalAlign: 'top', textOverflow: 'ellipsis', overflow: 'hidden' }, cellValue: { display: 'inline-block', verticalAlign: 'top', textOverflow: 'ellipsis', overflow: 'hidden' }, cellValueButton: { marginTop: 5, '&:active': { transform: 'scale(0.8)' } }, cellValueButtonFalse: { opacity: 0.3 }, cellAdapter: { display: 'inline-block', verticalAlign: 'top' }, cellValueTooltip: { fontSize: 12 }, cellValueText: { width: '100%', height: ROW_HEIGHT, fontSize: 16, display: 'inline-block', overflow: 'hidden', textOverflow: 'ellipsis', position: 'relative', verticalAlign: 'top', '& .copyButton': { display: 'none' }, '&:hover .copyButton': { display: 'block' } }, cellValueFile: { color: '#2837b9' }, cellValueTooltipTitle: { fontStyle: 'italic', width: 100, display: 'inline-block' }, cellValueTooltipValue: { width: 120, display: 'inline-block', //overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }, cellValueTooltipBoth: { width: 220, display: 'inline-block', whiteSpace: 'nowrap' }, cellValueTooltipBox: { width: 250, overflow: 'hidden' }, cellValueTextUnit: { marginLeft: theme.spacing(0.5), opacity: 0.8 }, newValue: { animation: '$newValueAnimation 2s ease-in-out' }, '@keyframes newValueAnimation': { '0%': { color: '#00f900' }, '80%': { color: '#008000' }, '100%': { color: theme.palette.type === 'dark' ? '#fff' : '#000' } }, cellValueTextState: { opacity: 0.7 }, cellValueTooltipCopy: { position: 'absolute', bottom: 3, right: 3 }, cellValueTooltipEdit: { position: 'absolute', bottom: 3, right: 15 }, cellButtons: { display: 'inline-block', verticalAlign: 'top' }, cellButtonsButton: { display: 'inline-block', opacity: 0.7, width: SMALL_BUTTON_SIZE + 4, height: SMALL_BUTTON_SIZE + 4, '&:hover': { opacity: 1 }, paddingTop: 0, marginTop: -2 }, cellButtonsEmptyButton: { fontSize: 12 }, cellButtonMinWidth: { minWidth: 47 }, cellButtonsButtonAlone: { marginLeft: SMALL_BUTTON_SIZE + 4, paddingTop: 0, marginTop: -2 }, cellButtonsButtonWithCustoms: { color: theme.palette.secondary.main }, cellButtonsValueButton: { position: 'absolute', display: 'inline-block', top: SMALL_BUTTON_SIZE / 2 - 2, opacity: 0.7, width: SMALL_BUTTON_SIZE - 2, height: SMALL_BUTTON_SIZE - 2, color: theme.palette.action.active, '&:hover': { opacity: 1 } }, cellButtonsValueButtonCopy: { right: theme.spacing(1), cursor: 'pointer' }, cellButtonsValueButtonEdit: { right: SMALL_BUTTON_SIZE / 2 + theme.spacing(2) }, filteredOut: { opacity: 0.5 }, filteredParentOut: { opacity: 0.3 }, filterInput: { marginTop: 0, marginBottom: 0 }, selectIcon: { width: 24, height: 24, marginRight: 4 }, selectNone: { opacity: 0.5 }, itemSelected: { background: "".concat(theme.palette.primary.main, " !important"), color: "".concat(_Utils["default"].invertColor(theme.palette.primary.main, true), " !important") }, header: { width: '100%' }, headerCell: { display: 'inline-block', verticalAlign: 'top' }, headerCellValue: { paddingTop: 4, // paddingLeft: 5, fontSize: 16 }, headerCellInput: { width: 'calc(100% - 5px)', height: ROW_HEIGHT, paddingTop: 3, '& .itemIcon': { verticalAlign: 'middle', width: ICON_SIZE, height: ICON_SIZE, display: 'inline-block' } }, headerCellSelectItem: { '& .itemIcon': { width: ICON_SIZE, height: ICON_SIZE, marginRight: 5, display: 'inline-block' } }, visibleButtons: { color: '#2196f3', opacity: 0.7 }, grow: { flexGrow: 1 }, enumIconDiv: { marginRight: theme.spacing(1), width: 32, height: 32, borderRadius: 8, background: '#FFFFFF' }, enumIcon: { marginTop: 4, marginLeft: 4, width: 24, height: 24 }, enumDialog: { overflow: 'hidden' }, enumList: { minWidth: 250, height: 'calc(100% - 50px)', overflow: 'auto' }, enumButton: { "float": 'right' }, enumCheckbox: { minWidth: 0 }, buttonDiv: { display: 'flex', height: '100%', alignItems: 'center' }, aclText: { fontSize: 13 }, rightsObject: { color: '#55ff55', paddingLeft: 3 }, rightsState: { color: '#86b6ff', paddingLeft: 3 }, textCenter: { padding: 12, textAlign: 'center' }, tooltipAccessControl: { display: 'flex', flexDirection: 'column' }, '@media screen and (max-width: 465px)': { columnsDialogInputWidth: { width: 50 }, fontSizeTitle: { '& *': { fontSize: 12 } } }, '@media screen and (max-width: 700px)': {}, '@media screen and (max-width: 430px)': {}, draggable: { cursor: 'copy' }, nonDraggable: { cursor: 'no-drop' }, selectClearButton: { position: 'absolute', top: 0, right: 0, borderRadius: 20, backgroundColor: theme.palette.background["default"] }, iconDeviceConnected: { color: theme.palette.type === 'dark' ? COLOR_NAME_CONNECTED_DARK : COLOR_NAME_CONNECTED_LIGHT, opacity: 0.8, position: 'absolute', top: 4, right: 32, width: 20 }, iconDeviceDisconnected: { color: theme.palette.type === 'dark' ? COLOR_NAME_DISCONNECTED_DARK : COLOR_NAME_DISCONNECTED_LIGHT, opacity: 0.8, position: 'absolute', top: 4, right: 32, width: 20 }, iconDeviceError: { color: theme.palette.type === 'dark' ? COLOR_NAME_ERROR_DARK : COLOR_NAME_ERROR_LIGHT, opacity: 0.8, position: 'absolute', top: 4, right: 50, width: 20 } }; }; function generateFile(filename, obj) { var el = document.createElement('a'); el.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(obj, null, 2))); el.setAttribute('download', filename); el.style.display = 'none'; document.body.appendChild(el); el.click(); document.body.removeChild(el); } // d=data, t=target, s=start, e=end, m=middle function binarySearch(list, find, _start, _end) { _start = _start || 0; if (_end === undefined) { _end = list.length - 1; if (!_end) { return list[0] === find; } } var middle = Math.floor((_start + _end) / 2); if (find === list[middle]) { return list[middle]; } if (_end - 1 === _start) { return list[_start] === find || list[_end] === find; } if (find > list[middle]) { return binarySearch(list, find, middle, _end); } if (find < list[middle]) { return binarySearch(list, find, _start, middle); } } function applyFilter(item, filters, lang, objects, context, counter, customFilter, selectedTypes) { var filteredOut = false; if (!context) { context = {}; if (filters.id) { context.id = filters.id.toLowerCase(); } if (filters.name) { context.name = filters.name.toLowerCase(); } if (filters.type) { context.type = filters.type.toLowerCase(); } if (filters.custom) { context.custom = filters.custom.toLowerCase(); } if (filters.role) { context.role = filters.role.toLowerCase(); } if (filters.room) { context.room = objects[filters.room] && objects[filters.room].common && objects[filters.room].common.members || []; } if (filters.func) { context.func = objects[filters.func] && objects[filters.func].common && objects[filters.func].common.members || []; } } var data = item.data; if (data && data.id) { var common = data.obj && data.obj.common; if (customFilter) { if (customFilter.type && customFilter.type !== data.obj.type) { filteredOut = true; } else if (customFilter.common && customFilter.common.custom) { if (!common || !common.custom || customFilter.common.custom !== true && !common.custom[customFilter.common.custom]) { filteredOut = true; } } } if (!filteredOut && !filters.expertMode) { filteredOut = data.id === 'system' || data.id === 'enum' || // (data.obj && data.obj.type === 'meta') || data.id.startsWith('system.') || data.id.startsWith('enum.') || data.id.startsWith('_design/') || common && common.expert; } if (!filteredOut && context.id) { if (data.fID === undefined) { data.fID = data.id.toLowerCase(); } filteredOut = data.fID.indexOf(context.id) === -1; } if (!filteredOut && context.name) { if (common) { if (data.fName === undefined) { data.fName = common && getName(common.name, lang) || ''; data.fName = data.fName.toLowerCase(); } filteredOut = !data.fName.includes(context.name); } else { filteredOut = true; } } if (!filteredOut && filters.role && common) { if (common) { filteredOut = !(common.role && common.role.startsWith(context.role)); } else { filteredOut = true; } } if (!filteredOut && context.room) { filteredOut = !context.room.find(function (id) { return id === data.id || data.id.startsWith(id + '.'); }); } if (!filteredOut && context.func) { filteredOut = !context.func.find(function (id) { return id === data.id || data.id.startsWith(id + '.'); }); } if (!filteredOut && context.type) { filteredOut = !(data.obj && data.obj.type && data.obj.type === context.type); } if (!filteredOut && selectedTypes) { filteredOut = !(data.obj && data.obj.type && selectedTypes.includes(data.obj.type)); } if (!filteredOut && context.custom) { if (common) { filteredOut = !common.custom || !common.custom[context.custom]; } else { filteredOut = true; } } } data.visible = !filteredOut; data.hasVisibleChildren = false; if (item.children) { item.children.forEach(function (_item) { var visible = applyFilter(_item, filters, lang, objects, context, counter, customFilter, selectedTypes); if (visible) { data.hasVisibleChildren = true; } }); } //const visible = data.visible || data.hasVisibleChildren; data.sumVisibility = data.visible || data.hasVisibleChildren || data.hasVisibleParent; if (counter && data.sumVisibility) { counter.count++; } // show all children of visible object with opacity 0.5 if (data.id && data.sumVisibility && item.children) { item.children.forEach(function (_item) { return _item.data.hasVisibleParent = true; }); } return data.visible || data.hasVisibleChildren; } function getVisibleItems(item, type, objects, _result) { _result = _result || []; var data = item.data; if (data.sumVisibility) { var _item$children; data.id && objects[data.id] && (!type || objects[data.id].type === type) && _result.push(data.id); (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.forEach(function (_item) { return getVisibleItems(_item, type, objects, _result); }); } return _result; } function getSystemIcon(objects, id, k, imagePrefix) { var icon; // system or design have special icons if (id.startsWith('_design/') || id === 'system') { icon = /*#__PURE__*/_react["default"].createElement(_SettingsApplications["default"], { className: "iconOwn" }); } else if (id === '0_userdata' || id === '0_userdata.0') { icon = /*#__PURE__*/_react["default"].createElement(_Photo["default"], { className: "iconOwn" }); } else if (id === 'alias' || id === 'alias.0') { icon = /*#__PURE__*/_react["default"].createElement(_IconAlias["default"], { className: "iconOwn" }); } else if (id === 'system.adapter') { icon = /*#__PURE__*/_react["default"].createElement(_SettingsApplications["default"], { className: "iconOwn" }); } else if (id === 'system.group') { icon = /*#__PURE__*/_react["default"].createElement(_SupervisedUserCircle["default"], { className: "iconOwn" }); } else if (id === 'system.user') { icon = /*#__PURE__*/_react["default"].createElement(_PersonOutlined["default"], { className: "iconOwn" }); } else if (id === 'system.host') { icon = /*#__PURE__*/_react["default"].createElement(_Router["default"], { className: "iconOwn" }); } else if (id.endsWith('.connection') || id.endsWith('.connected')) { icon = /*#__PURE__*/_react["default"].createElement(_Wifi["default"], { className: "iconOwn" }); } else if (id.endsWith('.info')) { icon = /*#__PURE__*/_react["default"].createElement(_Info["default"], { className: "iconOwn" }); } else if (objects[id] && objects[id].type === 'meta') { icon = /*#__PURE__*/_react["default"].createElement(_Description["default"], { className: "iconOwn" }); } else if (k < 2) { // detect "cloud.0" if (objects['system.adapter.' + id]) { icon = getSelectIdIcon(objects, 'system.adapter.' + id, imagePrefix); } } return icon || null; } function buildTree(objects, options) { options = options || {}; var imagePrefix = options.imagePrefix || '.'; var ids = Object.keys(objects); ids.sort(function (a, b) { if (a === b) return 0; a = a.replace(/\./g, '!!!'); b = b.replace(/\./g, '!!!'); if (a > b) return 1; return -1; }); // find empty nodes and create names for it var currentPathArr = []; var currentPath = ''; var currentPathLen = 0; var root = { data: { name: '', id: '' }, children: [] }; var info = { funcEnums: [], roomEnums: [], roles: [], ids: [], types: [], objects: objects, customs: [], enums: [], hasSomeCustoms: false }; var croot = root; var _loop = function _loop(i) { var id = ids[i]; if (!id) { return "continue"; } var obj = objects[id]; var parts = id.split('.'); if (obj.type && !info.types.includes(obj.type)) { info.types.push(obj.type); } if (obj) { var _common$adminUI; var common = obj.common; var role = common && common.role; if (role && !info.roles.includes(role)) { info.roles.push(role); } else if (id.startsWith('enum.rooms.')) { info.roomEnums.push(id); info.enums.push(id); } else if (id.startsWith('enum.functions.')) { info.funcEnums.push(id); info.enums.push(id); } else if (obj.type === 'enum') { info.enums.push(id); } else if (obj.type === 'instance' && common && (common.supportCustoms || (_common$adminUI = common.adminUI) !== null && _common$adminUI !== void 0 && _common$adminUI.custom)) { info.hasSomeCustoms = true; info.customs.push(id.substring('system.adapter.'.length)); } } info.ids.push(id); var repeat = void 0; // if next level do { repeat = false; // If current level is still OK and we can add ID to children if (!currentPath || id.startsWith(currentPath + '.')) { var _obj$common, _obj$common2, _obj$common3; // if more than one level added if (parts.length - currentPathLen > 1) { var curPath = currentPath; // generate missing levels var _loop2 = function _loop2(k) { curPath += (curPath ? '.' : '') + parts[k]; // level does not exist if (!binarySearch(info.ids, curPath)) { var _croot2 = { data: { name: parts[k], parent: croot, id: curPath, obj: objects[curPath], level: k, icon: getSystemIcon(objects, curPath, k, imagePrefix), generated: true } }; croot.children = croot.children || []; croot.children.push(_croot2); croot = _croot2; info.ids.push(curPath); // IDs will be added by alphabet } else { croot = croot.children.find(function (item) { return item.data.name === parts[k]; }); } }; for (var k = currentPathLen; k < parts.length - 1; k++) { _loop2(k); } } var _croot = { data: { name: parts[parts.length - 1], title: getName(obj && obj.common && obj.common.name, options.lang), obj: obj, parent: croot, icon: getSelectIdIcon(objects, id, imagePrefix) || getSystemIcon(objects, id, 0, imagePrefix), id: id, hasCustoms: ((_obj$common = obj.common) === null || _obj$common === void 0 ? void 0 : _obj$common.custom) && Object.keys(obj.common.custom).length, level: parts.length - 1, generated: false, button: obj.type === 'state' && ((_obj$common2 = obj.common) === null || _obj$common2 === void 0 ? void 0 : _obj$common2.role) && typeof obj.common.role === 'string' && obj.common.role.startsWith('button') && ((_obj$common3 = obj.common) === null || _obj$common3 === void 0 ? void 0 : _obj$common3.write) !== false } }; croot.children = croot.children || []; croot.children.push(_croot); croot = _croot; currentPathLen = parts.length; currentPathArr = parts; currentPath = id; } else { var u = 0; while (currentPathArr[u] === parts[u]) { u++; } if (u > 0) { var move = currentPathArr.length; currentPathArr = currentPathArr.splice(0, u); currentPathLen = u; currentPath = currentPathArr.join('.'); while (move > u) { croot = croot.data.parent; move--; } } else { croot = root; currentPathArr = []; currentPath = ''; currentPathLen = 0; } repeat = true; } } while (repeat); }; for (var i = 0; i < ids.length; i++) { var _ret = _loop(i); if (_ret === "continue") continue; } info.roomEnums.sort(function (a, b) { var _objects$a, _objects$a$common, _objects$b, _objects$b$common; var aName = getName(((_objects$a = objects[a]) === null || _objects$a === void 0 ? void 0 : (_objects$a$common = _objects$a.common) === null || _objects$a$common === void 0 ? void 0 : _objects$a$common.name) || a.split('.').pop()); var bName = getName(((_objects$b = objects[b]) === null || _objects$b === void 0 ? void 0 : (_objects$b$common = _objects$b.common) === null || _objects$b$common === void 0 ? void 0 : _objects$b$common.name) || b.split('.').pop()); if (aName > bName) { return 1; } else if (aName < bName) { return -1; } else { return 0; } }); info.funcEnums.sort(function (a, b) { var _objects$a2, _objects$a2$common, _objects$b2, _objects$b2$common; var aName = getName(((_objects$a2 = objects[a]) === null || _objects$a2 === void 0 ? void 0 : (_objects$a2$common = _objects$a2.common) === null || _objects$a2$common === void 0 ? void 0 : _objects$a2$common.name) || a.split('.').pop()); var bName = getName(((_objects$b2 = objects[b]) === null || _objects$b2 === void 0 ? void 0 : (_objects$b2$common = _objects$b2.common) === null || _objects$b2$common === void 0 ? void 0 : _objects$b2$common.name) || b.split('.').pop()); if (aName > bName) { return 1; } else if (aName < bName) { return -1; } else { return 0; } }); info.roles.sort(); info.types.sort(); return { info: info, root: root }; } function findNode(root, id, _parts, _path, _level) { if (root.data.id === id) { return root; } if (!_parts) { _parts = id.split('.'); _level = 0; _path = _parts[_level]; } if (!root.children && root.data.id !== id) { return null; } else { var found; for (var i = 0; i < root.children.length; i++) { var _id = root.children[i].data.id; if (_id === _path) { found = root.children[i]; break; } else if (_id > _path) { break; } } if (found) { return findNode(found, id, _parts, _path + '.' + _parts[_level + 1], _level + 1); } else { return null; } } } function getName(name, lang) { if (name && (0, _typeof2["default"])(name) === 'object') { return (name[lang] || name.en || '').toString(); } else { return (name || '').toString(); } } function findRoomsForObject(data, id, lang, withParentInfo, rooms) { if (!id) { return { rooms: [], per: false }; } rooms = rooms || []; for (var i = 0; i < data.roomEnums.length; i++) { var _data$objects$data$ro, _common$members; var common = (_data$objects$data$ro = data.objects[data.roomEnums[i]]) === null || _data$objects$data$ro === void 0 ? void 0 : _data$objects$data$ro.common; var name = getName(common.name, lang); if (common !== null && common !== void 0 && (_common$members = common.members) !== null && _common$members !== void 0 && _common$members.includes(id) && !rooms.includes(name)) { if (!withParentInfo) { rooms.push(name); } else { rooms.push({ name: name, origin: id }); } } } var ownEnums; // Check parent var parts = id.split('.'); parts.pop(); id = parts.join('.'); if (data.objects[id]) { ownEnums = rooms.length; findRoomsForObject(data, id, lang, withParentInfo, rooms); } return { rooms: rooms, per: !ownEnums }; // pe is if the enums are from parent } function findEnumsForObjectAsIds(data, id, enumName, funcs) { if (!id) { return []; } funcs = funcs || []; for (var i = 0; i < data[enumName].length; i++) { var _data$objects$data$en, _common$members2; var common = (_data$objects$data$en = data.objects[data[enumName][i]]) === null || _data$objects$data$en === void 0 ? void 0 : _data$objects$data$en.common; if (common !== null && common !== void 0 && (_common$members2 = common.members) !== null && _common$members2 !== void 0 && _common$members2.includes(id) && !funcs.includes(data[enumName][i])) { funcs.push(data[enumName][i]); } } funcs.sort(); return funcs; } function findFunctionsForObject(data, id, lang, withParentInfo, funcs) { if (!id) { return { funcs: [], pef: false }; } funcs = funcs || []; for (var i = 0; i < data.funcEnums.length; i++) { var _data$objects$data$fu, _common$members3; var common = (_data$objects$data$fu = data.objects[data.funcEnums[i]]) === null || _data$objects$data$fu === void 0 ? void 0 : _data$objects$data$fu.common; var name = getName(common.name, lang); if (common !== null && common !== void 0 && (_common$members3 = common.members) !== null && _common$members3 !== void 0 && _common$members3.includes(id) && !funcs.includes(name)) { if (!withParentInfo) { funcs.push(name); } else { funcs.push({ name: name, origin: id }); } } } var ownEnums; // Check parent var parts = id.split('.'); parts.pop(); id = parts.join('.'); if (data.objects[id]) { ownEnums = funcs.length; findFunctionsForObject(data, id, lang, withParentInfo, funcs); } return { funcs: funcs, pef: !ownEnums }; } /*function quality2text(q) { if (!q) { return 'ok'; } const custom = q & 0xFFFF0000; let text = ''; if (q & 0x40) text += 'device'; if (q & 0x80) text += 'sensor'; if (q & 0x01) text += ' bad'; if (q & 0x02) text += ' not connected'; if (q & 0x04) text += ' error'; return text + (custom ? '|0x' + (custom >> 16).toString(16).toUpperCase() : '') + ' [0x' + q.toString(16).toUpperCase() + ']'; }*/ function formatValue(id, state, obj, texts, dateFormat, isFloatComma) { var states = _Utils["default"].getStates(obj); var isCommon = obj.common; var valText = {}; var v = isCommon && isCommon.type === 'file' ? '[file]' : !state || state.val === null ? '(null)' : state.val === undefined ? '[undef]' : state.val; var type = (0, _typeof2["default"])(v); if (isCommon && isCommon.role && typeof isCommon.role === 'string' && isCommon.role.match(/^value\.time|^date/)) { if (v && typeof v === 'string') { if (v.length === 13) { // (length of "1647597254924") warning, this solution only works till Nov 20 2286 18:46:39CET v = new Date(parseInt(v, 10)).toString(); } else if (v.length === 10) { // YYYY.MM.DD var parts = v.split(/[-.]/); if (parts.length === 3) { if (parts[0].length === 4) { // YYYY.MM.DD v = new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) + 1, parseInt(parts[2], 10)); } else if (parts[0].length === 4) { // DD.MM.YYYY v = new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) + 1, parseInt(parts[0], 10)); } } else { v = new Date(v).toString(); // Let the browser convert it somehow } } else if (v.length === 8) { // YY.MM.DD var _parts2 = v.split(/[-.]/); if (_parts2.length === 3) { v = new Date(parseInt(_parts2[0], 10), parseInt(_parts2[1], 10) + 1, parseInt(_parts2[2], 10)); } else { v = new Date(v).toString(); // Let the browser convert it somehow } } else { v = new Date(v).toString(); // Let the browser convert it somehow } } else { if (v === null || v === 'null') { v = 'null'; } else if (v === undefined) { v = 'undefined'; } else { v = v ? new Date(v).toString() : v; } } } else { if (type === 'number') { v = Math.round(v * 100000000) / 100000000; // remove 4.00000000000000001 if (isFloatComma) { v = v.toString().replace('.', ','); } } else if (type === 'object') { v = JSON.stringify(v); } else if (type !== 'string') { v = v.toString(); } if (typeof v !== 'string') { v = v.toString(); } } if (states && states[v] !== undefined) { valText.s = v; v = states[valText.s]; } var valFull; if (isCommon && isCommon.unit) { valText.u = isCommon.unit; } valFull = [{ t: texts.value, v: v }]; if (state) { if (state.ack !== undefined) { valFull.push({ t: texts.ack, v: state.ack.toString() }); } if (state.ts) { valFull.push({ t: texts.ts, v: state.ts ? _Utils["default"].formatDate(new Date(state.ts), dateFormat) : '' }); } if (state.lc) { valFull.push({ t: texts.lc, v: state.lc ? _Utils["default"].formatDate(new Date(state.lc), dateFormat) : '' }); } if (state.from) { var from = state.from || ''; if (from.startsWith('system.adapter.')) { from = from.substring(15); } valFull.push({ t: texts.from, v: from }); } if (state.user) { var user = state.user || ''; if (user.startsWith('system.user.')) { user = user.substring(12); } valFull.push({ t: texts.user, v: user }); } valFull.push({ t: texts.quality, v: _Utils["default"].quality2text(state.q || 0).join(', '), nbr: true }); } valText.v = v; return { valText: valText, valFull: valFull, style: { color: state !== null && state !== void 0 && state.ack ? state.q ? '#ffa500' : '' : '#ff2222c9' } }; } function getSelectIdIcon(objects, id, imagePrefix) { imagePrefix = imagePrefix || '.'; //http://localhost:8081'; var src = ''; var _id_ = 'system.adapter.' + id; var aIcon = id && objects[_id_] && objects[_id_].common && objects[_id_].common.icon; if (aIcon) { // if not BASE64 if (!aIcon.startsWith('data:image/')) { if (aIcon.includes('.')) { src = "".concat(imagePrefix, "/adapter/").concat(objects[_id_].common.name, "/").concat(aIcon); } else if (aIcon && aIcon.length < 3) { return aIcon; // utf-8 } else { return null; //'<i class="material-icons iob-list-icon">' + objects[_id_].common.icon + '</i>'; } } else { if (aIcon.startsWith('data:image/svg')) { src = /*#__PURE__*/_react["default"].createElement(_reactInlinesvg["default"], { src: aIcon, width: 28, height: 28 }); } else { src = aIcon; } } } else { var common = objects[id] && objects[id].common; if (common) { var cIcon = common.icon; if (cIcon) { if (!cIcon.startsWith('data:image/')) { if (cIcon.includes('.')) { var instance; if (objects[id].type === 'instance' || objects[id].type === 'adapter') { src = "".concat(imagePrefix, "/adapter/").concat(common.name, "/").concat(cIcon); } else if (id && id.startsWith('system.adapter.')) { instance = id.split('.', 3); if (cIcon[0] === '/') { instance[2] += cIcon; } else { instance[2] += '/' + cIcon; } src = "".concat(imagePrefix, "/adapter/").concat(instance[2]); } else { instance = id.split('.', 2); if (cIcon[0] === '/') { instance[0] += cIcon; } else { instance[0] += '/' + cIcon; } src = "".concat(imagePrefix, "/adapter/").concat(instance[0]); } } else if (aIcon && aIcon.length < 3) { return aIcon; // utf-8 } else { return null; } } else { // base 64 image if (cIcon.startsWith('data:image/svg')) { src = /*#__PURE__*/_react["default"].createElement(_reactInlinesvg["default"], { src: cIcon, width: 28, height: 28 }); } else { src = cIcon; } } } } } return src || null; } function prepareSparkData(values, from) { // set every hour one point var time = from; var i = 1; var v = []; while (i < values.length && time < from + 25 * 3600000) { // find the interval while (values[i - 1].ts < time && time <= values[i].ts && i < values.length) { i++; } if (i === 1 && values[i - 1].ts >= time) { // assume the value was always null v.push(0); } else if (i < values.length) { if (typeof values[i].val === 'boolean' || typeof values[i - 1].val === 'boolean') { v.push(values[i].val ? 1 : 0); } else { // remove nulls values[i - 1].val = values[i - 1].val || 0; values[i].val = values[i].val || 0; // interpolate var val = values[i - 1].val + (values[i].val - values[i - 1].val) * (time - values[i - 1].ts) / (values[i].ts - values[i - 1].ts); v.push(val); } } time += 3600000; } return v; } /** * @type {import('./types').ObjectBrowserTableFilter} */ var DEFAULT_FILTER = { id: '', name: '', room: '', func: '', role: '', type: '', custom: '', expertMode: false }; var ITEM_IMAGES = { state: /*#__PURE__*/_react["default"].createElement(_IconState["default"], { className: "itemIcon" }), channel: /*#__PURE__*/_react["default"].createElement(_IconChannel["default"], { className: "itemIcon" }), device: /*#__PURE__*/_react["default"].createElement(_IconDevice["default"], { className: "itemIcon" }), adapter: /*#__PURE__*/_react["default"].createElement(_IconAdapter["default"], { className: "itemIcon" }), meta: /*#__PURE__*/_react["default"].createElement(_Description["default"], { className: "itemIcon" }), instance: /*#__PURE__*/_react["default"].createElement(_IconInstance["default"], { className: "itemIcon", style: { color: '#7da7ff' } }), "enum": /*#__PURE__*/_react["default"].createElement(_ListAlt["default"], { className: