@iobroker/gui-components 10.4.0 → 10.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -178,7 +178,7 @@ export function getToolbar(that) {
178
178
  },
179
179
  }), size: "large" },
180
180
  React.createElement(AddIcon, null))))) : null,
181
- that.props.objectImportExport && (React.createElement(Tooltip, { title: that.props.t('ra_Add objects tree from JSON file'), slotProps: { popper: { sx: styles.tooltip } } },
181
+ that.props.objectImportExport && !that.props.objectsNotEditable && (React.createElement(Tooltip, { title: that.props.t('ra_Add objects tree from JSON file'), slotProps: { popper: { sx: styles.tooltip } } },
182
182
  React.createElement(IconButton, { onClick: e => {
183
183
  if (that.props.objectBrowserInsertJsonObjects) {
184
184
  that.setState({ showImportMenu: e.currentTarget });
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"./src/","sources":["Components/ObjectBrowser/toolbar.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2026, Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n * Part of the object browser, see ./ObjectBrowserClass.tsx\n */\nimport React, { type JSX } from 'react';\nimport { Badge, Box, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, type Theme, Tooltip } from '@mui/material';\nimport {\n Add as AddIcon,\n Build as BuildIcon,\n LooksOne as LooksOneIcon,\n TextFields as TextFieldsIcon,\n ViewColumn as IconColumns,\n ContentPaste,\n UploadFile,\n} from '@mui/icons-material';\nimport { Utils } from '../Utils';\nimport { IconExpertMode } from '../AnimatedIcons/IconExpertMode';\nimport { IconFilter } from '../AnimatedIcons/IconFilter';\nimport { IconFolder } from '../AnimatedIcons/IconFolder';\nimport { IconUpload } from '../AnimatedIcons/IconUpload';\nimport { Icon } from '../Icon';\nimport { IconRefresh } from '../AnimatedIcons/IconRefresh';\nimport {\n colGrow,\n colWidth,\n CustomFilterInput,\n CustomFilterSelect,\n getName,\n getSelectIdIconFromObjects,\n getVisibleItems,\n} from './utils';\nimport type { IobTheme } from '../../types';\nimport { type InputSelectItem } from './types';\nimport { styles } from './styles';\nimport { ITEM_IMAGES } from './constants';\nimport type { ObjectBrowserClass } from './ObjectBrowserClass';\n\nexport function getFilterInput(that: ObjectBrowserClass, name: 'id' | 'name'): JSX.Element {\n return (\n <CustomFilterInput\n key={`${name}_${that.state.filterKey}`}\n styles={that.styles.filterInput}\n name={name}\n texts={that.texts}\n t={that.props.t}\n initialValue={that.state.filter[name]}\n onChange={(name, value) => {\n const filter = { ...that.state.filter };\n if (value === undefined) {\n delete filter[name];\n } else {\n filter[name] = value;\n }\n that.setState({ filter }, () => {\n that.doFilter();\n that.props.onFilterChanged?.(filter);\n });\n }}\n />\n );\n}\n\nexport function getFilterSelect(\n that: ObjectBrowserClass,\n name: 'room' | 'func' | 'type' | 'custom' | 'role',\n values?: (string | InputSelectItem)[],\n): JSX.Element {\n return (\n <CustomFilterSelect\n key={`${name}_${that.state.filterKey}`}\n name={name}\n texts={that.texts}\n initialValue={that.state.filter[name] || []}\n values={values || []}\n onChange={(name, value) => {\n const filter = { ...that.state.filter };\n if (value === undefined) {\n delete filter[name];\n } else {\n filter[name] = value;\n }\n that.setState({ filter }, () => {\n that.doFilter();\n that.props.onFilterChanged?.(filter);\n });\n }}\n />\n );\n}\n\nexport function getFilterSelectRole(that: ObjectBrowserClass): JSX.Element {\n return getFilterSelect(\n that,\n 'role',\n that.info.roles.map(it => it.role),\n );\n}\n\nexport function getFilterSelectRoom(that: ObjectBrowserClass): JSX.Element {\n const rooms: InputSelectItem[] = that.info.roomEnums.map(\n id =>\n ({\n name: getName(that.objects[id]?.common?.name, that.props.lang) || id.split('.').pop(),\n value: id,\n icon: (\n <Icon\n src={that.objects[id]?.common?.icon || ''}\n style={styles.selectIcon}\n />\n ),\n }) as InputSelectItem,\n );\n\n return getFilterSelect(that, 'room', rooms);\n}\n\nexport function getFilterSelectFunction(that: ObjectBrowserClass): JSX.Element {\n const func: InputSelectItem[] = that.info.funcEnums.map(\n id =>\n ({\n name: getName(that.objects[id]?.common?.name, that.props.lang) || id.split('.').pop(),\n value: id,\n icon: (\n <Icon\n src={that.objects[id]?.common?.icon || ''}\n style={styles.selectIcon}\n />\n ),\n }) as InputSelectItem,\n );\n\n return getFilterSelect(that, 'func', func);\n}\n\nexport function getFilterSelectType(that: ObjectBrowserClass): JSX.Element {\n const types = that.info.types.map(type => ({\n name: type,\n value: type,\n icon: ITEM_IMAGES[type] || null,\n }));\n\n return getFilterSelect(that, 'type', types);\n}\n\nexport function getFilterSelectCustoms(that: ObjectBrowserClass): JSX.Element | null {\n if (that.info.customs.length > 1) {\n const customs = that.info.customs.map(id => ({\n name: id === '_' ? that.texts.filterCustomsWithout : id,\n value: id,\n icon:\n id === '_' ? null : (\n <Icon\n src={getSelectIdIconFromObjects(that.objects, id, that.props.lang, that.imagePrefix) || ''}\n style={styles.selectIcon}\n />\n ),\n }));\n return getFilterSelect(that, 'custom', customs);\n }\n return null;\n}\n\n/**\n * Renders the toolbar.\n */\nexport function getToolbar(that: ObjectBrowserClass): JSX.Element {\n let allowObjectCreation = false;\n if (that.state.selected.length || that.state.selectedNonObject) {\n const id = that.state.selected[0] || that.state.selectedNonObject;\n\n if (id.split('.').length < 2 || (that.objects[id] && that.objects[id].type === 'state')) {\n allowObjectCreation = false;\n } else if (that.state.filter.expertMode) {\n allowObjectCreation = true;\n } else if (id.startsWith('alias.0') || id.startsWith('0_userdata')) {\n allowObjectCreation = true;\n }\n }\n\n return (\n <div\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n overflowX: 'auto',\n }}\n >\n <div\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n }}\n >\n <Tooltip\n title={that.props.t('ra_Refresh tree')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div>\n <IconButton\n onClick={() => that.refreshComponent()}\n disabled={that.state.updating}\n size=\"large\"\n >\n <IconRefresh loading={!!that.state.updating} />\n </IconButton>\n </div>\n </Tooltip>\n {that.props.showExpertButton && !that.props.expertMode && (\n <Tooltip\n title={that.props.t('ra_expertMode')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expertMode\"\n sx={(theme: IobTheme) => ({\n color: that.state.filter.expertMode ? theme.palette.expert : undefined,\n })}\n onClick={() => {\n const filter = { ...that.state.filter };\n filter.expertMode = !filter.expertMode;\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.objectFilter`,\n JSON.stringify(filter),\n );\n\n that.setState({\n filter,\n });\n }}\n size=\"large\"\n >\n <IconExpertMode active={!!that.state.filter.expertMode} />\n </IconButton>\n </Tooltip>\n )}\n {!that.props.disableColumnSelector && that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Configure')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"columnSelector\"\n color={that.state.columnsAuto ? 'primary' : 'default'}\n onClick={() => that.setState({ columnsSelectorShow: true })}\n size=\"large\"\n >\n <IconColumns />\n </IconButton>\n </Tooltip>\n )}\n {that.width !== 'xs' && that.state.expandAllVisible && (\n <Tooltip\n title={that.props.t('ra_Expand all nodes')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expandAll\"\n onClick={() => that.onExpandAll()}\n size=\"large\"\n >\n {/* the folder opens on hover: it shows what the button does */}\n <IconFolder\n open={false}\n toggleOnHover\n fontSize={20}\n />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={that.props.t('ra_Collapse all nodes')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"collapseAll\"\n onClick={() => that.onCollapseAll()}\n size=\"large\"\n >\n <IconFolder\n open\n toggleOnHover\n fontSize={20}\n />\n </IconButton>\n </Tooltip>\n {that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Expand one step node')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expandVisible\"\n color=\"primary\"\n onClick={() => that.onExpandVisible()}\n size=\"large\"\n >\n <Badge\n badgeContent={that.state.depth}\n color=\"secondary\"\n sx={(theme: Theme) => ({\n badge: {\n right: 3,\n top: 3,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: '0 4px',\n },\n })}\n >\n <IconFolder\n open={false}\n toggleOnHover\n fontSize={20}\n />\n </Badge>\n </IconButton>\n </Tooltip>\n )}\n {that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Collapse one step node')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"collapseVisible\"\n color=\"primary\"\n onClick={() => that.onCollapseVisible()}\n size=\"large\"\n >\n <Badge\n sx={(theme: Theme) => ({\n badge: {\n right: 3,\n top: 3,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: '0 4px',\n },\n })}\n badgeContent={that.state.depth}\n color=\"secondary\"\n >\n <IconFolder\n open\n toggleOnHover\n fontSize={20}\n />\n </Badge>\n </IconButton>\n </Tooltip>\n )}\n {that.props.objectStatesView && (\n <Tooltip\n title={that.props.t('ra_Toggle the states view')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => that.onStatesViewVisible()}\n size=\"large\"\n >\n <LooksOneIcon color={that.state.statesView ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n )}\n\n <Tooltip\n title={that.props.t('ra_Show/Hide object descriptions')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => {\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.desc`,\n that.state.showDescription ? 'false' : 'true',\n );\n that.setState({ showDescription: !that.state.showDescription });\n }}\n size=\"large\"\n >\n <TextFieldsIcon color={that.state.showDescription ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n\n {that.props.objectAddBoolean ? (\n <Tooltip\n title={that.toolTipObjectCreating()}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div>\n <IconButton\n disabled={!allowObjectCreation}\n onClick={() =>\n that.setState({\n modalNewObj: {\n id: that.state.selected[0] || that.state.selectedNonObject,\n },\n })\n }\n size=\"large\"\n >\n <AddIcon />\n </IconButton>\n </div>\n </Tooltip>\n ) : null}\n\n {that.props.objectImportExport && (\n <Tooltip\n title={that.props.t('ra_Add objects tree from JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={e => {\n if (that.props.objectBrowserInsertJsonObjects) {\n that.setState({ showImportMenu: e.currentTarget });\n } else {\n that.onOpenFile();\n }\n }}\n size=\"large\"\n >\n <IconUpload />\n </IconButton>\n </Tooltip>\n )}\n {that.props.objectBrowserInsertJsonObjects ? (\n <Menu\n anchorEl={that.state.showImportMenu}\n open={!!that.state.showImportMenu}\n onClose={() => that.setState({ showImportMenu: null })}\n >\n <MenuItem onClick={() => that.setState({ showImportMenu: null }, () => that.onOpenFile())}>\n <ListItemIcon>\n <UploadFile />\n </ListItemIcon>\n <ListItemText>{that.props.t('ra_From file')}</ListItemText>\n </MenuItem>\n <MenuItem onClick={() => that.setState({ showImportMenu: null, showImportDialog: true })}>\n <ListItemIcon>\n <ContentPaste />\n </ListItemIcon>\n <ListItemText>{that.props.t('ra_From text')}</ListItemText>\n </MenuItem>\n </Menu>\n ) : null}\n {that.props.objectImportExport && (!!that.state.selected.length || that.state.selectedNonObject) && (\n <Tooltip\n title={that.props.t('ra_Save objects tree as JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => that.setState({ showExportDialog: that._getSelectedIdsForExport().length })}\n size=\"large\"\n >\n {/* turned: the arrow goes down into the bar on hover */}\n <IconUpload style={{ transform: 'rotate(180deg)' }} />\n </IconButton>\n </Tooltip>\n )}\n </div>\n {!!that.props.objectBrowserEditObject && that.width !== 'xs' && (\n <div style={{ display: 'flex', whiteSpace: 'nowrap' }}>\n {`${that.props.t('ra_Objects')}: ${Object.keys(that.info.objects).length}, ${that.props.t(\n 'ra_States',\n )}: ${Object.keys(that.info.objects).filter(el => that.info.objects[el].type === 'state').length}`}\n </div>\n )}\n {that.props.objectEditBoolean && (\n <Tooltip\n title={that.props.t('ra_Edit custom config')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => {\n // get all visible states\n const ids = that.root ? getVisibleItems(that.root, 'state', that.objects) : [];\n\n if (ids.length) {\n that.pauseSubscribe(true);\n\n if (ids.length === 1) {\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.objectSelected`,\n that.state.selected[0],\n );\n that.props.router?.doNavigate(null, 'custom', that.state.selected[0]);\n }\n that.setState({ customDialog: ids, customDialogAll: true });\n } else {\n that.setState({ toast: that.props.t('ra_please select object') });\n }\n }}\n size=\"large\"\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n )}\n </div>\n );\n}\n\n/**\n * Render the right handle for resizing\n */\nexport function renderHandleRight(that: ObjectBrowserClass): JSX.Element {\n return (\n <Box\n component=\"div\"\n className=\"iob-ob-resize-handler\"\n sx={{ ...styles.resizeHandle, ...styles.resizeHandleRight }}\n onMouseDown={that.resizerMouseDown}\n onDoubleClick={that.resizerReset}\n title={that.props.t('ra_Double click to reset table layout')}\n />\n );\n}\n\nexport function renderHeader(that: ObjectBrowserClass): JSX.Element {\n let filterClearInValue = null;\n\n if (!that.columnsVisibility.buttons) {\n // The button stays in the page without a filter (invisible), so that its cross can jump away\n const filterSet = !that.isFilterEmpty();\n filterClearInValue = (\n <IconButton\n onClick={() => that.clearFilter()}\n style={{\n ...styles.buttonClearFilter,\n ...(filterSet ? styles.buttonClearFilterVisible : styles.buttonClearFilterHidden),\n }}\n title={that.props.t('ra_Clear filter')}\n size=\"large\"\n >\n <IconFilter active={filterSet} />\n </IconButton>\n );\n }\n\n if (that.width === 'xs') {\n return (\n <div style={Utils.getStyle(that.props.theme, styles.headerRow)}>\n <div style={{ ...styles.headerCell, width: '100%' }}>{getFilterInput(that, 'id')}</div>\n </div>\n );\n }\n\n return (\n <div style={Utils.getStyle(that.props.theme, styles.headerRow)}>\n <div\n style={{ ...styles.headerCell, width: colWidth('id'), flexGrow: colGrow('id'), position: 'relative' }}\n data-min={240}\n data-name=\"id\"\n >\n {getFilterInput(that, 'id')}\n {renderHandleRight(that)}\n </div>\n {that.columnsVisibility.name ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('name'),\n flexGrow: colGrow('name'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"name\"\n >\n {getFilterInput(that, 'name')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {!that.state.statesView && (\n <>\n {that.columnsVisibility.type ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('type'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"type\"\n >\n {getFilterSelectType(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.role ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('role'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"role\"\n >\n {getFilterSelectRole(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.room ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('room'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"room\"\n >\n {getFilterSelectRoom(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.func ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('func'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"func\"\n >\n {getFilterSelectFunction(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n </>\n )}\n {that.state.statesView && (\n <>\n {/* Every one of these columns can be switched off in the configuration dialog,\n so the header must ask for it just like the columns of the normal view do. */}\n {that.columnsVisibility.changedFrom ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('changedFrom'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"changedFrom\"\n >\n {that.props.t('ra_Changed from')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.qualityCode ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('qualityCode'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"qualityCode\"\n >\n {that.props.t('ra_Quality code')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.timestamp ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('timestamp'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"timestamp\"\n >\n {that.props.t('ra_Timestamp')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.lastChange ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('lastChange'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"lastChange\"\n >\n {that.props.t('ra_Last change')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n </>\n )}\n {that.adapterColumns.map(item => (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: (that.columnsVisibility as Record<string, number | string>)[item.id],\n }}\n title={item.adapter}\n key={item.id}\n data-min={100}\n data-name={item.id}\n >\n {item.name}\n </div>\n ))}\n {that.columnsVisibility.val ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('val'),\n position: 'relative',\n }}\n data-min={120}\n data-name=\"val\"\n >\n {that.props.t('ra_Value')}\n {filterClearInValue}\n {/* A handle takes the place from the column that follows, so it is only useful\n if there is one. It is the only way to resize the buttons column. */}\n {that.columnsVisibility.buttons ? renderHandleRight(that) : null}\n </div>\n ) : null}\n {that.columnsVisibility.buttons ? (\n <div\n title={that.texts.filter_custom}\n style={{ ...styles.headerCell, width: colWidth('buttons') }}\n data-min={80}\n data-name=\"buttons\"\n >\n {' '}\n {getFilterSelectCustoms(that)}\n </div>\n ) : null}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"./src/","sources":["Components/ObjectBrowser/toolbar.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2026, Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n * Part of the object browser, see ./ObjectBrowserClass.tsx\n */\nimport React, { type JSX } from 'react';\nimport { Badge, Box, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, type Theme, Tooltip } from '@mui/material';\nimport {\n Add as AddIcon,\n Build as BuildIcon,\n LooksOne as LooksOneIcon,\n TextFields as TextFieldsIcon,\n ViewColumn as IconColumns,\n ContentPaste,\n UploadFile,\n} from '@mui/icons-material';\nimport { Utils } from '../Utils';\nimport { IconExpertMode } from '../AnimatedIcons/IconExpertMode';\nimport { IconFilter } from '../AnimatedIcons/IconFilter';\nimport { IconFolder } from '../AnimatedIcons/IconFolder';\nimport { IconUpload } from '../AnimatedIcons/IconUpload';\nimport { Icon } from '../Icon';\nimport { IconRefresh } from '../AnimatedIcons/IconRefresh';\nimport {\n colGrow,\n colWidth,\n CustomFilterInput,\n CustomFilterSelect,\n getName,\n getSelectIdIconFromObjects,\n getVisibleItems,\n} from './utils';\nimport type { IobTheme } from '../../types';\nimport { type InputSelectItem } from './types';\nimport { styles } from './styles';\nimport { ITEM_IMAGES } from './constants';\nimport type { ObjectBrowserClass } from './ObjectBrowserClass';\n\nexport function getFilterInput(that: ObjectBrowserClass, name: 'id' | 'name'): JSX.Element {\n return (\n <CustomFilterInput\n key={`${name}_${that.state.filterKey}`}\n styles={that.styles.filterInput}\n name={name}\n texts={that.texts}\n t={that.props.t}\n initialValue={that.state.filter[name]}\n onChange={(name, value) => {\n const filter = { ...that.state.filter };\n if (value === undefined) {\n delete filter[name];\n } else {\n filter[name] = value;\n }\n that.setState({ filter }, () => {\n that.doFilter();\n that.props.onFilterChanged?.(filter);\n });\n }}\n />\n );\n}\n\nexport function getFilterSelect(\n that: ObjectBrowserClass,\n name: 'room' | 'func' | 'type' | 'custom' | 'role',\n values?: (string | InputSelectItem)[],\n): JSX.Element {\n return (\n <CustomFilterSelect\n key={`${name}_${that.state.filterKey}`}\n name={name}\n texts={that.texts}\n initialValue={that.state.filter[name] || []}\n values={values || []}\n onChange={(name, value) => {\n const filter = { ...that.state.filter };\n if (value === undefined) {\n delete filter[name];\n } else {\n filter[name] = value;\n }\n that.setState({ filter }, () => {\n that.doFilter();\n that.props.onFilterChanged?.(filter);\n });\n }}\n />\n );\n}\n\nexport function getFilterSelectRole(that: ObjectBrowserClass): JSX.Element {\n return getFilterSelect(\n that,\n 'role',\n that.info.roles.map(it => it.role),\n );\n}\n\nexport function getFilterSelectRoom(that: ObjectBrowserClass): JSX.Element {\n const rooms: InputSelectItem[] = that.info.roomEnums.map(\n id =>\n ({\n name: getName(that.objects[id]?.common?.name, that.props.lang) || id.split('.').pop(),\n value: id,\n icon: (\n <Icon\n src={that.objects[id]?.common?.icon || ''}\n style={styles.selectIcon}\n />\n ),\n }) as InputSelectItem,\n );\n\n return getFilterSelect(that, 'room', rooms);\n}\n\nexport function getFilterSelectFunction(that: ObjectBrowserClass): JSX.Element {\n const func: InputSelectItem[] = that.info.funcEnums.map(\n id =>\n ({\n name: getName(that.objects[id]?.common?.name, that.props.lang) || id.split('.').pop(),\n value: id,\n icon: (\n <Icon\n src={that.objects[id]?.common?.icon || ''}\n style={styles.selectIcon}\n />\n ),\n }) as InputSelectItem,\n );\n\n return getFilterSelect(that, 'func', func);\n}\n\nexport function getFilterSelectType(that: ObjectBrowserClass): JSX.Element {\n const types = that.info.types.map(type => ({\n name: type,\n value: type,\n icon: ITEM_IMAGES[type] || null,\n }));\n\n return getFilterSelect(that, 'type', types);\n}\n\nexport function getFilterSelectCustoms(that: ObjectBrowserClass): JSX.Element | null {\n if (that.info.customs.length > 1) {\n const customs = that.info.customs.map(id => ({\n name: id === '_' ? that.texts.filterCustomsWithout : id,\n value: id,\n icon:\n id === '_' ? null : (\n <Icon\n src={getSelectIdIconFromObjects(that.objects, id, that.props.lang, that.imagePrefix) || ''}\n style={styles.selectIcon}\n />\n ),\n }));\n return getFilterSelect(that, 'custom', customs);\n }\n return null;\n}\n\n/**\n * Renders the toolbar.\n */\nexport function getToolbar(that: ObjectBrowserClass): JSX.Element {\n let allowObjectCreation = false;\n if (that.state.selected.length || that.state.selectedNonObject) {\n const id = that.state.selected[0] || that.state.selectedNonObject;\n\n if (id.split('.').length < 2 || (that.objects[id] && that.objects[id].type === 'state')) {\n allowObjectCreation = false;\n } else if (that.state.filter.expertMode) {\n allowObjectCreation = true;\n } else if (id.startsWith('alias.0') || id.startsWith('0_userdata')) {\n allowObjectCreation = true;\n }\n }\n\n return (\n <div\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n overflowX: 'auto',\n }}\n >\n <div\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n }}\n >\n <Tooltip\n title={that.props.t('ra_Refresh tree')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div>\n <IconButton\n onClick={() => that.refreshComponent()}\n disabled={that.state.updating}\n size=\"large\"\n >\n <IconRefresh loading={!!that.state.updating} />\n </IconButton>\n </div>\n </Tooltip>\n {that.props.showExpertButton && !that.props.expertMode && (\n <Tooltip\n title={that.props.t('ra_expertMode')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expertMode\"\n sx={(theme: IobTheme) => ({\n color: that.state.filter.expertMode ? theme.palette.expert : undefined,\n })}\n onClick={() => {\n const filter = { ...that.state.filter };\n filter.expertMode = !filter.expertMode;\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.objectFilter`,\n JSON.stringify(filter),\n );\n\n that.setState({\n filter,\n });\n }}\n size=\"large\"\n >\n <IconExpertMode active={!!that.state.filter.expertMode} />\n </IconButton>\n </Tooltip>\n )}\n {!that.props.disableColumnSelector && that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Configure')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"columnSelector\"\n color={that.state.columnsAuto ? 'primary' : 'default'}\n onClick={() => that.setState({ columnsSelectorShow: true })}\n size=\"large\"\n >\n <IconColumns />\n </IconButton>\n </Tooltip>\n )}\n {that.width !== 'xs' && that.state.expandAllVisible && (\n <Tooltip\n title={that.props.t('ra_Expand all nodes')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expandAll\"\n onClick={() => that.onExpandAll()}\n size=\"large\"\n >\n {/* the folder opens on hover: it shows what the button does */}\n <IconFolder\n open={false}\n toggleOnHover\n fontSize={20}\n />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={that.props.t('ra_Collapse all nodes')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"collapseAll\"\n onClick={() => that.onCollapseAll()}\n size=\"large\"\n >\n <IconFolder\n open\n toggleOnHover\n fontSize={20}\n />\n </IconButton>\n </Tooltip>\n {that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Expand one step node')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"expandVisible\"\n color=\"primary\"\n onClick={() => that.onExpandVisible()}\n size=\"large\"\n >\n <Badge\n badgeContent={that.state.depth}\n color=\"secondary\"\n sx={(theme: Theme) => ({\n badge: {\n right: 3,\n top: 3,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: '0 4px',\n },\n })}\n >\n <IconFolder\n open={false}\n toggleOnHover\n fontSize={20}\n />\n </Badge>\n </IconButton>\n </Tooltip>\n )}\n {that.width !== 'xs' && (\n <Tooltip\n title={that.props.t('ra_Collapse one step node')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n key=\"collapseVisible\"\n color=\"primary\"\n onClick={() => that.onCollapseVisible()}\n size=\"large\"\n >\n <Badge\n sx={(theme: Theme) => ({\n badge: {\n right: 3,\n top: 3,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: '0 4px',\n },\n })}\n badgeContent={that.state.depth}\n color=\"secondary\"\n >\n <IconFolder\n open\n toggleOnHover\n fontSize={20}\n />\n </Badge>\n </IconButton>\n </Tooltip>\n )}\n {that.props.objectStatesView && (\n <Tooltip\n title={that.props.t('ra_Toggle the states view')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => that.onStatesViewVisible()}\n size=\"large\"\n >\n <LooksOneIcon color={that.state.statesView ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n )}\n\n <Tooltip\n title={that.props.t('ra_Show/Hide object descriptions')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => {\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.desc`,\n that.state.showDescription ? 'false' : 'true',\n );\n that.setState({ showDescription: !that.state.showDescription });\n }}\n size=\"large\"\n >\n <TextFieldsIcon color={that.state.showDescription ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n\n {that.props.objectAddBoolean ? (\n <Tooltip\n title={that.toolTipObjectCreating()}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <div>\n <IconButton\n disabled={!allowObjectCreation}\n onClick={() =>\n that.setState({\n modalNewObj: {\n id: that.state.selected[0] || that.state.selectedNonObject,\n },\n })\n }\n size=\"large\"\n >\n <AddIcon />\n </IconButton>\n </div>\n </Tooltip>\n ) : null}\n\n {that.props.objectImportExport && !that.props.objectsNotEditable && (\n <Tooltip\n title={that.props.t('ra_Add objects tree from JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={e => {\n if (that.props.objectBrowserInsertJsonObjects) {\n that.setState({ showImportMenu: e.currentTarget });\n } else {\n that.onOpenFile();\n }\n }}\n size=\"large\"\n >\n <IconUpload />\n </IconButton>\n </Tooltip>\n )}\n {that.props.objectBrowserInsertJsonObjects ? (\n <Menu\n anchorEl={that.state.showImportMenu}\n open={!!that.state.showImportMenu}\n onClose={() => that.setState({ showImportMenu: null })}\n >\n <MenuItem onClick={() => that.setState({ showImportMenu: null }, () => that.onOpenFile())}>\n <ListItemIcon>\n <UploadFile />\n </ListItemIcon>\n <ListItemText>{that.props.t('ra_From file')}</ListItemText>\n </MenuItem>\n <MenuItem onClick={() => that.setState({ showImportMenu: null, showImportDialog: true })}>\n <ListItemIcon>\n <ContentPaste />\n </ListItemIcon>\n <ListItemText>{that.props.t('ra_From text')}</ListItemText>\n </MenuItem>\n </Menu>\n ) : null}\n {that.props.objectImportExport && (!!that.state.selected.length || that.state.selectedNonObject) && (\n <Tooltip\n title={that.props.t('ra_Save objects tree as JSON file')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => that.setState({ showExportDialog: that._getSelectedIdsForExport().length })}\n size=\"large\"\n >\n {/* turned: the arrow goes down into the bar on hover */}\n <IconUpload style={{ transform: 'rotate(180deg)' }} />\n </IconButton>\n </Tooltip>\n )}\n </div>\n {!!that.props.objectBrowserEditObject && that.width !== 'xs' && (\n <div style={{ display: 'flex', whiteSpace: 'nowrap' }}>\n {`${that.props.t('ra_Objects')}: ${Object.keys(that.info.objects).length}, ${that.props.t(\n 'ra_States',\n )}: ${Object.keys(that.info.objects).filter(el => that.info.objects[el].type === 'state').length}`}\n </div>\n )}\n {that.props.objectEditBoolean && (\n <Tooltip\n title={that.props.t('ra_Edit custom config')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n onClick={() => {\n // get all visible states\n const ids = that.root ? getVisibleItems(that.root, 'state', that.objects) : [];\n\n if (ids.length) {\n that.pauseSubscribe(true);\n\n if (ids.length === 1) {\n that.localStorage.setItem(\n `${that.props.dialogName || 'App'}.objectSelected`,\n that.state.selected[0],\n );\n that.props.router?.doNavigate(null, 'custom', that.state.selected[0]);\n }\n that.setState({ customDialog: ids, customDialogAll: true });\n } else {\n that.setState({ toast: that.props.t('ra_please select object') });\n }\n }}\n size=\"large\"\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n )}\n </div>\n );\n}\n\n/**\n * Render the right handle for resizing\n */\nexport function renderHandleRight(that: ObjectBrowserClass): JSX.Element {\n return (\n <Box\n component=\"div\"\n className=\"iob-ob-resize-handler\"\n sx={{ ...styles.resizeHandle, ...styles.resizeHandleRight }}\n onMouseDown={that.resizerMouseDown}\n onDoubleClick={that.resizerReset}\n title={that.props.t('ra_Double click to reset table layout')}\n />\n );\n}\n\nexport function renderHeader(that: ObjectBrowserClass): JSX.Element {\n let filterClearInValue = null;\n\n if (!that.columnsVisibility.buttons) {\n // The button stays in the page without a filter (invisible), so that its cross can jump away\n const filterSet = !that.isFilterEmpty();\n filterClearInValue = (\n <IconButton\n onClick={() => that.clearFilter()}\n style={{\n ...styles.buttonClearFilter,\n ...(filterSet ? styles.buttonClearFilterVisible : styles.buttonClearFilterHidden),\n }}\n title={that.props.t('ra_Clear filter')}\n size=\"large\"\n >\n <IconFilter active={filterSet} />\n </IconButton>\n );\n }\n\n if (that.width === 'xs') {\n return (\n <div style={Utils.getStyle(that.props.theme, styles.headerRow)}>\n <div style={{ ...styles.headerCell, width: '100%' }}>{getFilterInput(that, 'id')}</div>\n </div>\n );\n }\n\n return (\n <div style={Utils.getStyle(that.props.theme, styles.headerRow)}>\n <div\n style={{ ...styles.headerCell, width: colWidth('id'), flexGrow: colGrow('id'), position: 'relative' }}\n data-min={240}\n data-name=\"id\"\n >\n {getFilterInput(that, 'id')}\n {renderHandleRight(that)}\n </div>\n {that.columnsVisibility.name ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('name'),\n flexGrow: colGrow('name'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"name\"\n >\n {getFilterInput(that, 'name')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {!that.state.statesView && (\n <>\n {that.columnsVisibility.type ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('type'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"type\"\n >\n {getFilterSelectType(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.role ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('role'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"role\"\n >\n {getFilterSelectRole(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.room ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('room'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"room\"\n >\n {getFilterSelectRoom(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.func ? (\n <div\n style={{\n ...styles.headerCell,\n width: colWidth('func'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"func\"\n >\n {getFilterSelectFunction(that)}\n {renderHandleRight(that)}\n </div>\n ) : null}\n </>\n )}\n {that.state.statesView && (\n <>\n {/* Every one of these columns can be switched off in the configuration dialog,\n so the header must ask for it just like the columns of the normal view do. */}\n {that.columnsVisibility.changedFrom ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('changedFrom'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"changedFrom\"\n >\n {that.props.t('ra_Changed from')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.qualityCode ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('qualityCode'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"qualityCode\"\n >\n {that.props.t('ra_Quality code')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.timestamp ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('timestamp'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"timestamp\"\n >\n {that.props.t('ra_Timestamp')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n {that.columnsVisibility.lastChange ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('lastChange'),\n position: 'relative',\n }}\n data-min={100}\n data-name=\"lastChange\"\n >\n {that.props.t('ra_Last change')}\n {renderHandleRight(that)}\n </div>\n ) : null}\n </>\n )}\n {that.adapterColumns.map(item => (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: (that.columnsVisibility as Record<string, number | string>)[item.id],\n }}\n title={item.adapter}\n key={item.id}\n data-min={100}\n data-name={item.id}\n >\n {item.name}\n </div>\n ))}\n {that.columnsVisibility.val ? (\n <div\n style={{\n ...styles.headerCell,\n ...styles.headerCellValue,\n width: colWidth('val'),\n position: 'relative',\n }}\n data-min={120}\n data-name=\"val\"\n >\n {that.props.t('ra_Value')}\n {filterClearInValue}\n {/* A handle takes the place from the column that follows, so it is only useful\n if there is one. It is the only way to resize the buttons column. */}\n {that.columnsVisibility.buttons ? renderHandleRight(that) : null}\n </div>\n ) : null}\n {that.columnsVisibility.buttons ? (\n <div\n title={that.texts.filter_custom}\n style={{ ...styles.headerCell, width: colWidth('buttons') }}\n data-min={80}\n data-name=\"buttons\"\n >\n {' '}\n {getFilterSelectCustoms(that)}\n </div>\n ) : null}\n </div>\n );\n}\n"]}
@@ -358,7 +358,13 @@ export interface ObjectBrowserProps {
358
358
  t: Translate;
359
359
  lang: ioBroker.Languages;
360
360
  multiSelect?: boolean;
361
+ /** Nothing can be changed: neither the values of the states nor the objects */
361
362
  notEditable?: boolean;
363
+ /**
364
+ * The objects cannot be changed, the values of the states still can: no names, rooms, functions,
365
+ * aliases, renaming, import or editable custom columns. E.g. for a user who may write states, but not objects
366
+ */
367
+ objectsNotEditable?: boolean;
362
368
  foldersFirst?: boolean;
363
369
  disableColumnSelector?: boolean;
364
370
  isFloatComma?: boolean;
@@ -8,16 +8,38 @@ interface UploadImageProps {
8
8
  icon: string | null;
9
9
  removeIconFunc: () => void | null;
10
10
  accept?: Record<string, string[]>;
11
+ /**
12
+ * The parent uploads the image given with `onChange`, e.g. writes it into a file: the upload arrow moves up in
13
+ * the corner of the image. When it becomes false, a check mark is shown there for a moment.
14
+ */
15
+ uploading?: boolean;
16
+ /** The upload failed: when `uploading` becomes false, a cross is shown instead of the check mark */
17
+ uploadError?: boolean;
11
18
  }
12
19
  interface UploadImageState {
13
20
  uploadFile: boolean | 'dragging';
14
21
  anchorEl: HTMLElement | null;
15
22
  cropHandler: boolean;
23
+ /** The dropped file is being read */
24
+ reading: boolean;
25
+ /** Result of the last upload of the parent, shown for a moment */
26
+ result: {
27
+ type: 'success' | 'error';
28
+ count: number;
29
+ } | null;
16
30
  }
17
31
  export declare class UploadImage extends Component<UploadImageProps, UploadImageState> {
18
32
  private readonly cropperRef;
33
+ private readonly imageRef;
34
+ private resultTimeout;
19
35
  constructor(props: UploadImageProps);
36
+ componentDidUpdate(prevProps: UploadImageProps): void;
37
+ componentWillUnmount(): void;
38
+ /** Shows a check mark or a cross in the corner of the image for a moment */
39
+ showResult(type: 'success' | 'error'): void;
20
40
  onDrop(acceptedFiles: File[]): void;
41
+ /** Upload of the parent and its result in the corner of the image (without image, the big upload symbol shows it) */
42
+ renderUploadIndicator(): JSX.Element | null;
21
43
  render(): JSX.Element;
22
44
  }
23
45
  export {};
@@ -1,10 +1,16 @@
1
1
  import React, { Component, createRef } from 'react';
2
2
  import Dropzone from 'react-dropzone';
3
3
  import { Cropper } from 'react-cropper';
4
- import { Menu, MenuItem, Tooltip, IconButton } from '@mui/material';
5
- import { Close as IconClose, Crop as CropIcon, UploadFileOutlined as UploadIcon } from '@mui/icons-material';
4
+ import { Menu, MenuItem, Tooltip, IconButton, Box } from '@mui/material';
5
+ import { alpha } from '@mui/material/styles';
6
+ import { Close as IconClose, Crop as CropIcon } from '@mui/icons-material';
6
7
  import { I18n } from '../i18n';
7
8
  import { Icon } from './Icon';
9
+ import { IconUpload } from './AnimatedIcons/IconUpload';
10
+ import { IconResult } from './AnimatedIcons/IconResult';
11
+ import { play } from './AnimatedIcons/common';
12
+ /** How long the result of an upload stays visible */
13
+ const RESULT_DURATION = 2500;
8
14
  // import 'cropperjs/dist/cropper.css';
9
15
  const cropperStyles = `
10
16
  /*!
@@ -326,6 +332,12 @@ const styles = {
326
332
  width: '100%',
327
333
  height: '100%',
328
334
  },
335
+ /** The new image fades in */
336
+ imageWrapper: {
337
+ display: 'flex',
338
+ width: '100%',
339
+ height: '100%',
340
+ },
329
341
  uploadDiv: {
330
342
  position: 'relative',
331
343
  width: '100%',
@@ -339,9 +351,9 @@ const styles = {
339
351
  opacity: 1,
340
352
  background: 'rgba(128,255,128,0.1)',
341
353
  },
354
+ /** The border is set with `dropAreaSx`, so that it can pulse */
342
355
  uploadCenterDiv: {
343
356
  margin: 5,
344
- border: '3px dashed grey',
345
357
  borderRadius: 5,
346
358
  width: 'calc(100% - 10px)',
347
359
  height: 'calc(100% - 10px)',
@@ -349,13 +361,29 @@ const styles = {
349
361
  display: 'flex',
350
362
  },
351
363
  uploadCenterIcon: {
352
- paddingTop: 10,
353
- width: 48,
354
- height: 48,
364
+ marginTop: 10,
355
365
  },
356
366
  uploadCenterText: {
357
367
  fontSize: 16,
358
368
  },
369
+ /** A file is dragged over an existing image */
370
+ dropOverImage: {
371
+ position: 'absolute',
372
+ inset: 0,
373
+ zIndex: 1,
374
+ pointerEvents: 'none',
375
+ },
376
+ /** Upload and its result in the corner of the image */
377
+ uploadIndicator: {
378
+ position: 'absolute',
379
+ top: 8,
380
+ left: 8,
381
+ zIndex: 223,
382
+ display: 'flex',
383
+ padding: 4,
384
+ borderRadius: '50%',
385
+ pointerEvents: 'none',
386
+ },
359
387
  uploadCenterTextAndIcon: {
360
388
  textAlign: 'center',
361
389
  position: 'absolute',
@@ -383,21 +411,42 @@ const styles = {
383
411
  right: 0,
384
412
  top: 50,
385
413
  },
386
- error: {
387
- border: '2px solid red',
388
- boxSizing: 'border-box',
389
- },
390
414
  };
415
+ /** Border of the drop area: red on error, and it pulses while a file is dragged over it */
416
+ function dropAreaSx(theme, error, dragging) {
417
+ if (error) {
418
+ return { border: '2px solid red', boxSizing: 'border-box' };
419
+ }
420
+ if (!dragging) {
421
+ return { border: '3px dashed grey' };
422
+ }
423
+ return {
424
+ border: `3px dashed ${theme.palette.primary.main}`,
425
+ animation: 'iob-upload-image-pulse 1.2s ease-in-out infinite',
426
+ '@keyframes iob-upload-image-pulse': {
427
+ '0%': { boxShadow: `0 0 0 0 ${alpha(theme.palette.primary.main, 0.4)}` },
428
+ '70%, 100%': { boxShadow: `0 0 0 14px ${alpha(theme.palette.primary.main, 0)}` },
429
+ },
430
+ '@media (prefers-reduced-motion: reduce)': {
431
+ animation: 'none',
432
+ },
433
+ };
434
+ }
391
435
  export class UploadImage extends Component {
392
436
  cropperRef;
437
+ imageRef;
438
+ resultTimeout = null;
393
439
  constructor(props) {
394
440
  super(props);
395
441
  this.state = {
396
442
  uploadFile: false,
397
443
  anchorEl: null,
398
444
  cropHandler: false,
445
+ reading: false,
446
+ result: null,
399
447
  };
400
448
  this.cropperRef = createRef();
449
+ this.imageRef = createRef();
401
450
  if (!window.document.getElementById('cropper-style-json-component')) {
402
451
  const style = window.document.createElement('style');
403
452
  style.setAttribute('id', 'cropper-style-json-component');
@@ -405,14 +454,51 @@ export class UploadImage extends Component {
405
454
  window.document.head.appendChild(style);
406
455
  }
407
456
  }
457
+ componentDidUpdate(prevProps) {
458
+ if (prevProps.uploading && !this.props.uploading) {
459
+ this.showResult(this.props.uploadError ? 'error' : 'success');
460
+ }
461
+ if (this.props.icon && prevProps.icon !== this.props.icon) {
462
+ // the new image fades in
463
+ play(this.imageRef.current, [
464
+ { opacity: 0, transform: 'scale(0.92)' },
465
+ { opacity: 1, transform: 'scale(1)' },
466
+ ], { duration: 280, easing: 'cubic-bezier(0.2, 0.8, 0.3, 1)' });
467
+ }
468
+ }
469
+ componentWillUnmount() {
470
+ if (this.resultTimeout) {
471
+ clearTimeout(this.resultTimeout);
472
+ this.resultTimeout = null;
473
+ }
474
+ }
475
+ /** Shows a check mark or a cross in the corner of the image for a moment */
476
+ showResult(type) {
477
+ if (this.resultTimeout) {
478
+ clearTimeout(this.resultTimeout);
479
+ }
480
+ this.setState({ result: { type, count: (this.state.result?.count || 0) + 1 } });
481
+ this.resultTimeout = setTimeout(() => {
482
+ this.resultTimeout = null;
483
+ this.setState({ result: null });
484
+ }, RESULT_DURATION);
485
+ }
408
486
  onDrop(acceptedFiles) {
409
487
  const onChange = this.props.onChange;
410
488
  const maxSize = this.props.maxSize || 10 * 1024;
411
489
  const file = acceptedFiles[0];
412
490
  const reader = new FileReader();
413
- reader.onabort = () => console.log('file reading was aborted');
414
- reader.onerror = () => console.log('file reading has failed');
491
+ // the upload arrow moves up while the file is read
492
+ reader.onabort = () => {
493
+ console.log('file reading was aborted');
494
+ this.setState({ reading: false });
495
+ };
496
+ reader.onerror = () => {
497
+ console.log('file reading has failed');
498
+ this.setState({ reading: false });
499
+ };
415
500
  reader.onload = () => {
501
+ this.setState({ reading: false });
416
502
  if (!file || !file.name) {
417
503
  return;
418
504
  }
@@ -437,13 +523,23 @@ export class UploadImage extends Component {
437
523
  }
438
524
  }
439
525
  };
526
+ this.setState({ reading: true });
440
527
  reader.readAsArrayBuffer(file);
441
528
  }
529
+ /** Upload of the parent and its result in the corner of the image (without image, the big upload symbol shows it) */
530
+ renderUploadIndicator() {
531
+ const { result } = this.state;
532
+ if (!this.props.icon || (!result && !this.props.uploading)) {
533
+ return null;
534
+ }
535
+ return (React.createElement(Box, { style: styles.uploadIndicator, sx: { bgcolor: 'background.paper', color: 'text.primary' } }, result ? (React.createElement(IconResult, { type: result.type, replay: result.count })) : (React.createElement(IconUpload, { uploading: true }))));
536
+ }
442
537
  render() {
443
538
  const { disabled, icon, removeIconFunc, error, crop, onChange } = this.props;
444
539
  const maxSize = this.props.maxSize || 10 * 1024;
445
540
  let accept = this.props.accept || { 'image/*': [] };
446
541
  const { uploadFile, anchorEl, cropHandler } = this.state;
542
+ const dragging = uploadFile === 'dragging';
447
543
  // covert '"image/png"' to { 'image/*': [] }
448
544
  if (typeof accept === 'string') {
449
545
  accept = { [accept]: [] };
@@ -471,10 +567,10 @@ export class UploadImage extends Component {
471
567
  ...(!icon ? styles.dropZoneEmpty : undefined),
472
568
  }, ...getRootProps() },
473
569
  React.createElement("input", { ...getInputProps() }),
474
- React.createElement("div", { style: { ...styles.uploadCenterDiv, ...(error ? styles.error : undefined) } },
570
+ React.createElement(Box, { style: styles.uploadCenterDiv, sx: (theme) => dropAreaSx(theme, !!error, dragging) },
475
571
  !icon ? (React.createElement("div", { style: styles.uploadCenterTextAndIcon },
476
- React.createElement(UploadIcon, { style: styles.uploadCenterIcon }),
477
- React.createElement("div", { style: styles.uploadCenterText }, uploadFile === 'dragging'
572
+ React.createElement(IconUpload, { fontSize: 48, style: styles.uploadCenterIcon, ready: dragging, uploading: this.state.reading || !!this.props.uploading }),
573
+ React.createElement("div", { style: styles.uploadCenterText }, dragging
478
574
  ? I18n.t('ra_Drop file here')
479
575
  : I18n.t('ra_Place your files here or click here to open the browse dialog')))) : (removeIconFunc &&
480
576
  !cropHandler && (React.createElement("div", { style: styles.buttonRemoveWrapper },
@@ -509,7 +605,14 @@ export class UploadImage extends Component {
509
605
  }
510
606
  }) }, I18n.t('ra_Save')),
511
607
  React.createElement(MenuItem, { onClick: () => this.setState({ anchorEl: null, cropHandler: false }) }, I18n.t('ra_Close'))))),
512
- icon && !cropHandler ? (React.createElement(Icon, { src: icon, style: styles.image, alt: "icon" })) : null,
608
+ icon && !cropHandler ? (React.createElement("div", { ref: this.imageRef, style: styles.imageWrapper },
609
+ React.createElement(Icon, { src: icon, style: styles.image, alt: "icon" }))) : null,
610
+ icon && dragging ? (React.createElement(Box, { style: { ...styles.uploadCenterTextAndIcon, ...styles.dropOverImage }, sx: (theme) => ({
611
+ bgcolor: alpha(theme.palette.background.paper, 0.85),
612
+ }) },
613
+ React.createElement(IconUpload, { fontSize: 48, style: styles.uploadCenterIcon, ready: true }),
614
+ React.createElement("div", { style: styles.uploadCenterText }, I18n.t('ra_Drop file here')))) : null,
615
+ this.renderUploadIndicator(),
513
616
  icon && crop && cropHandler ? (React.createElement(Cropper, { ref: this.cropperRef, style: styles.image, src: icon, initialAspectRatio: 1, viewMode: 1, guides: false, minCropBoxHeight: 10, minCropBoxWidth: 10, background: false, checkOrientation: false })) : null)))));
514
617
  }
515
618
  }