@iobroker/adapter-react-v5 7.2.6 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +3 -11
  2. package/build/Components/404.js +1 -1
  3. package/build/Components/404.js.map +1 -1
  4. package/build/Components/FileBrowser.d.ts +3 -1
  5. package/build/Components/FileBrowser.js +2 -1
  6. package/build/Components/FileBrowser.js.map +1 -1
  7. package/build/Components/FileViewer.d.ts +7 -6
  8. package/build/Components/FileViewer.js +16 -46
  9. package/build/Components/FileViewer.js.map +1 -1
  10. package/build/Components/Icon.js +1 -1
  11. package/build/Components/Icon.js.map +1 -1
  12. package/build/Components/Image.js +1 -1
  13. package/build/Components/Image.js.map +1 -1
  14. package/build/Components/ObjectBrowser.js +9 -8
  15. package/build/Components/ObjectBrowser.js.map +1 -1
  16. package/build/Components/SaveCloseButtons.js +1 -1
  17. package/build/Components/SaveCloseButtons.js.map +1 -1
  18. package/build/Components/ToggleThemeMenu.js +1 -1
  19. package/build/Components/ToggleThemeMenu.js.map +1 -1
  20. package/build/Components/UploadImage.js +1 -2
  21. package/build/Components/UploadImage.js.map +1 -1
  22. package/build/Components/withWidth.js +1 -1
  23. package/build/Components/withWidth.js.map +1 -1
  24. package/build/Dialogs/ComplexCron.js +1 -1
  25. package/build/Dialogs/ComplexCron.js.map +1 -1
  26. package/build/Dialogs/Cron.js +1 -1
  27. package/build/Dialogs/Cron.js.map +1 -1
  28. package/build/Dialogs/SelectFile.js +1 -1
  29. package/build/Dialogs/SelectFile.js.map +1 -1
  30. package/build/Dialogs/SimpleCron.js +1 -1
  31. package/build/Dialogs/SimpleCron.js.map +1 -1
  32. package/build/Dialogs/TextInput.js +1 -1
  33. package/build/Dialogs/TextInput.js.map +1 -1
  34. package/build/GenericApp.js +1 -1
  35. package/build/GenericApp.js.map +1 -1
  36. package/build/Theme.js +0 -1
  37. package/build/Theme.js.map +1 -1
  38. package/build/icons/IconAdapter.js +0 -1
  39. package/build/icons/IconAdapter.js.map +1 -1
  40. package/build/icons/IconAlias.js +0 -1
  41. package/build/icons/IconAlias.js.map +1 -1
  42. package/build/icons/IconChannel.js +0 -1
  43. package/build/icons/IconChannel.js.map +1 -1
  44. package/build/icons/IconClearFilter.js +0 -1
  45. package/build/icons/IconClearFilter.js.map +1 -1
  46. package/build/icons/IconClosed.js +0 -1
  47. package/build/icons/IconClosed.js.map +1 -1
  48. package/build/icons/IconCopy.js +0 -1
  49. package/build/icons/IconCopy.js.map +1 -1
  50. package/build/icons/IconDevice.js +0 -1
  51. package/build/icons/IconDevice.js.map +1 -1
  52. package/build/icons/IconDocument.js +0 -1
  53. package/build/icons/IconDocument.js.map +1 -1
  54. package/build/icons/IconDocumentReadOnly.js +0 -1
  55. package/build/icons/IconDocumentReadOnly.js.map +1 -1
  56. package/build/icons/IconExpert.js +0 -1
  57. package/build/icons/IconExpert.js.map +1 -1
  58. package/build/icons/IconFx.js +0 -1
  59. package/build/icons/IconFx.js.map +1 -1
  60. package/build/icons/IconInstance.js +0 -1
  61. package/build/icons/IconInstance.js.map +1 -1
  62. package/build/icons/IconLogout.js +0 -1
  63. package/build/icons/IconLogout.js.map +1 -1
  64. package/build/icons/IconNoIcon.js +0 -1
  65. package/build/icons/IconNoIcon.js.map +1 -1
  66. package/build/icons/IconOpen.js +1 -2
  67. package/build/icons/IconOpen.js.map +1 -1
  68. package/build/icons/IconState.js +1 -2
  69. package/build/icons/IconState.js.map +1 -1
  70. package/build/index.d.ts +10 -1
  71. package/build/index.js +10 -2
  72. package/build/index.js.map +1 -1
  73. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"FileBrowser.js","sourceRoot":"./src/","sources":["Components/FileBrowser.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2024, Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React, { Component, type JSX } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n LinearProgress,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Tooltip,\n CircularProgress,\n Toolbar,\n IconButton,\n Fab,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Input,\n Breadcrumbs,\n Box,\n} from '@mui/material';\n\n// MUI Icons\nimport {\n Refresh as RefreshIcon,\n Close as CloseIcon,\n Bookmark as JsonIcon,\n BookmarkBorder as CssIcon,\n Description as HtmlIcon,\n Edit as EditIcon,\n Code as JSIcon,\n InsertDriveFile as FileIcon,\n Publish as UploadIcon,\n MusicNote as MusicIcon,\n SaveAlt as DownloadIcon,\n CreateNewFolder as AddFolderIcon,\n FolderOpen as EmptyFilterIcon,\n List as IconList,\n ViewModule as IconTile,\n ArrowBack as IconBack,\n Delete as DeleteIcon,\n Brightness6 as Brightness5Icon,\n Image as TypeIconImages,\n FontDownload as TypeIconTxt,\n AudioFile as TypeIconAudio,\n Videocam as TypeIconVideo,\n KeyboardReturn as EnterIcon,\n FolderSpecial as RestrictedIcon,\n} from '@mui/icons-material';\n\nimport type { Connection } from '@iobroker/socket-client';\n\nimport { DialogError } from '../Dialogs/Error';\nimport { Utils } from './Utils';\nimport { DialogTextInput } from '../Dialogs/TextInput';\n\n// Custom Icons\nimport { IconExpert } from '../icons/IconExpert';\nimport { IconClosed } from '../icons/IconClosed';\nimport { IconOpen } from '../icons/IconOpen';\nimport { IconNoIcon } from '../icons/IconNoIcon';\nimport { Icon } from './Icon';\n\nimport { withWidth } from './withWidth';\nimport type { ThemeName, ThemeType, Translate, IobTheme } from '../types';\n\nimport { FileViewer, EXTENSIONS } from './FileViewer';\n\nconst ROW_HEIGHT = 32;\nconst BUTTON_WIDTH = 32;\nconst TILE_HEIGHT = 120;\nconst TILE_WIDTH = 64;\n\nconst NOT_FOUND = 'Not found';\n\n// Todo: replace with js-controller types\nexport interface MetaACL extends ioBroker.ObjectACL {\n file: number;\n}\n\n// Todo: replace with js-controller types\nexport interface MetaObject extends ioBroker.MetaObject {\n acl: MetaACL;\n}\n\nconst FILE_TYPE_ICONS: Record<string, React.FC<{ fontSize?: 'small' }>> = {\n all: FileIcon,\n images: TypeIconImages,\n code: JSIcon,\n txt: TypeIconTxt,\n audio: TypeIconAudio,\n video: TypeIconVideo,\n};\n\nconst styles: Record<string, any> = {\n root: {\n width: '100%',\n overflow: 'hidden',\n height: '100%',\n position: 'relative',\n },\n filesDiv: {\n width: 'calc(100% - 16px)',\n overflowX: 'hidden',\n overflowY: 'auto',\n padding: 8,\n },\n filesDivHint: {\n position: 'absolute',\n bottom: 0,\n left: 20,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 12,\n },\n filesDivTable: {\n height: 'calc(100% - 56px)',\n },\n filesDivTile: {\n height: `calc(100% - ${48 * 2 + 8}px)`,\n display: 'flex',\n alignContent: 'flex-start',\n alignItems: 'stretch',\n flexWrap: 'wrap',\n flex: `0 0 ${TILE_WIDTH}px`,\n },\n\n itemTile: (theme: IobTheme) => ({\n position: 'relative',\n userSelect: 'none',\n cursor: 'pointer',\n height: TILE_HEIGHT,\n width: TILE_WIDTH,\n display: 'inline-block',\n textAlign: 'center',\n opacity: 0.1,\n transition: 'opacity 1s',\n margin: '4px',\n borderRadius: '4px',\n '&:hover': {\n background: theme.palette.secondary.light,\n color: Utils.invertColor(theme.palette.secondary.main, true),\n },\n }),\n itemNameFolderTile: {\n fontWeight: 'bold',\n },\n itemNameTile: {\n width: '100%',\n height: 32,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: 12,\n textAlign: 'center',\n wordBreak: 'break-all',\n },\n itemFolderIconTile: (theme: IobTheme) => ({\n width: '100%',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n display: 'block',\n pl: 1,\n color: theme.palette.secondary.main || '#fbff7d',\n }),\n itemFolderIconBack: (theme: IobTheme) => ({\n position: 'absolute',\n top: 22,\n left: 18,\n zIndex: 1,\n color: theme.palette.mode === 'dark' ? '#FFF' : '#000',\n }),\n itemSizeTile: {\n width: '100%',\n height: 16,\n textAlign: 'center',\n fontSize: 10,\n },\n itemImageTile: {\n width: 'calc(100% - 8px)',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n margin: 4,\n display: 'block',\n textAlign: 'center',\n objectFit: 'contain',\n },\n itemIconTile: {\n width: '100%',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n display: 'block',\n objectFit: 'contain',\n },\n\n itemSelected: (theme: IobTheme) => ({\n background: theme.palette.primary.main,\n color: Utils.invertColor(theme.palette.primary.main, true),\n }),\n\n itemTable: (theme: IobTheme) => ({\n userSelect: 'none',\n cursor: 'pointer',\n height: ROW_HEIGHT,\n display: 'inline-flex',\n lineHeight: `${ROW_HEIGHT}px`,\n '&:hover': {\n background: theme.palette.secondary.light,\n color: Utils.invertColor(theme.palette.secondary.main, true),\n },\n }),\n itemNameTable: {\n display: 'inline-block',\n pl: '10px',\n fontSize: '1rem',\n verticalAlign: 'top',\n flexGrow: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n '@media screen and (max-width: 500px)': {\n textAlign: 'end',\n direction: 'rtl',\n },\n },\n itemNameFolderTable: {\n fontWeight: 'bold',\n },\n itemSizeTable: {\n display: 'inline-block',\n width: 60,\n verticalAlign: 'top',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n },\n itemAccessTable: {\n // display: 'inline-block',\n verticalAlign: 'top',\n width: 60,\n textAlign: 'right',\n paddingRight: 5,\n display: 'flex',\n justifyContent: 'center',\n },\n itemImageTable: {\n display: 'inline-block',\n width: 30,\n marginTop: 1,\n objectFit: 'contain',\n maxHeight: 30,\n },\n itemNoImageTable: {\n marginTop: 6,\n },\n itemIconTable: {\n display: 'inline-block',\n marginTop: 1,\n width: 30,\n height: 30,\n },\n itemFolderTable: {},\n itemFolderTemp: {\n opacity: 0.4,\n },\n itemFolderIconTable: (theme: IobTheme) => ({\n marginTop: '1px',\n marginLeft: '8px',\n display: 'inline-block',\n width: 30,\n height: 30,\n color: theme.palette.secondary.main || '#fbff7d',\n }),\n itemDownloadButtonTable: (theme: IobTheme) => ({\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'middle',\n textAlign: 'center',\n padding: 0,\n borderRadius: `${BUTTON_WIDTH / 2}px`,\n '&:hover': {\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n },\n '& span': {\n pt: '9px',\n },\n '& svg': {\n width: 14,\n height: 14,\n fontSize: '1rem',\n mt: '-3px',\n verticalAlign: 'middle',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n }),\n itemDownloadEmptyTable: {\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n padding: 0,\n },\n itemAclButtonTable: {\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'top',\n padding: 0,\n fontSize: 12,\n display: 'flex',\n },\n itemDeleteButtonTable: {\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'top',\n padding: 0,\n '& svg': {\n width: 18,\n height: 18,\n fontSize: '1.5rem',\n },\n },\n\n uploadDiv: {\n top: 0,\n zIndex: 1,\n bottom: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n opacity: 0.9,\n textAlign: 'center',\n background: '#FFFFFF',\n },\n uploadDivDragging: {\n opacity: 1,\n },\n\n uploadCenterDiv: (theme: IobTheme) => ({\n m: '20px',\n border: '3px dashed grey',\n borderRadius: '30px',\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n position: 'relative',\n color: theme.palette.mode === 'dark' ? '#222' : '#CCC',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n uploadCenterIcon: {\n width: '25%',\n height: '25%',\n },\n uploadCenterText: {\n fontSize: 24,\n fontWeight: 'bold',\n },\n uploadCloseButton: {\n zIndex: 2,\n position: 'absolute',\n top: 30,\n right: 30,\n },\n uploadCenterTextAndIcon: {\n position: 'absolute',\n height: '30%',\n width: '100%',\n margin: 'auto',\n opacity: 0.3,\n },\n menuButtonExpertActive: {\n color: '#c00000',\n },\n menuButtonRestrictActive: {\n color: '#c05000',\n },\n pathDiv: (theme: IobTheme) => ({\n display: 'flex',\n width: 'calc(100% - 16px)',\n ml: 1,\n mr: 1,\n textOverflow: 'clip',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n backgroundColor: theme.palette.secondary.main,\n }),\n pathDivInput: {\n width: '100%',\n },\n pathDivBreadcrumbDir: (theme: IobTheme) => ({\n pl: '2px',\n pr: '2px',\n cursor: 'pointer',\n '&:hover': {\n background: theme.palette.primary.main,\n },\n }),\n pathDivBreadcrumbSelected: {\n // todo: add style\n },\n backgroundImageLight: {\n background: 'white',\n },\n backgroundImageDark: {\n background: 'black',\n },\n backgroundImageColored: {\n background: 'silver',\n },\n specialFolder: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#229b0f' : '#5dd300',\n }),\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst USER_DATA = '0_userdata.0';\n\nfunction getParentDir(dir: string | null): string {\n const parts = (dir || '').split('/');\n if (parts.length) {\n parts.pop();\n }\n return parts.join('/');\n}\n\nfunction isFile(path: string): boolean {\n const ext = Utils.getFileExtension(path);\n return !!(ext?.toLowerCase().match(/[a-z]+/) && ext.length < 5);\n}\n\nconst TABLE = 'Table';\nconst TILE = 'Tile';\n\nexport interface FileBrowserProps {\n /** The key to identify this component. */\n key?: string;\n /** Additional styling for this component. */\n style?: React.CSSProperties;\n /** The CSS class name. */\n className?: string;\n /** Translation function. */\n t: Translate;\n /** The selected language. */\n lang: ioBroker.Languages;\n /** The socket connection. */\n socket: Connection;\n /** Is the component data ready. */\n ready?: boolean;\n /** Is expert mode enabled? (default: false) */\n expertMode?: boolean;\n /** Show the toolbar? (default: false) */\n showToolbar?: boolean;\n /** If defined, allow selecting only files from this folder and subfolders */\n limitPath?: string;\n /** Allow upload of new files? (default: false) */\n allowUpload?: boolean;\n /** Allow download of files? (default: false) */\n allowDownload?: boolean;\n /** Allow creation of new folders? (default: false) */\n allowCreateFolder?: boolean;\n /** Allow deleting files? (default: false) */\n allowDelete?: boolean;\n /** Allow viewing files? (default: false) */\n allowView?: boolean;\n /** Prefix (default: '.') */\n imagePrefix?: string;\n /** Show the expert button? */\n showExpertButton?: boolean;\n /** Type of view */\n viewType?: 'Table' | 'Tile';\n /** Show the buttons to switch the view from table to tile? (default: false) */\n showViewTypeButton?: boolean;\n /** The ID of the selected file. */\n selected?: string | string[];\n /** The file extensions to show, like ['png', 'svg', 'bmp', 'jpg', 'jpeg', 'gif']. */\n filterFiles?: string[];\n /** The file extension categories to show. */\n filterByType?: 'images' | 'code' | 'txt';\n /** Callback for file selection. */\n onSelect?: (id: string | string[], isDoubleClick?: boolean, isFolder?: boolean) => void;\n /** Theme name */\n themeName?: ThemeName;\n /** Theme type. */\n themeType?: ThemeType;\n /** Theme object. */\n theme: IobTheme;\n\n /** Padding in pixels for folder levels */\n levelPadding?: number;\n\n restrictToFolder?: string;\n\n modalEditOfAccessControl?: (obj: FileBrowserClass) => JSX.Element | null;\n\n allowNonRestricted?: boolean;\n\n showTypeSelector?: boolean;\n}\n\nexport interface FolderOrFileItem {\n id: string;\n level: number;\n name: string;\n folder: boolean;\n temp?: boolean;\n\n size?: number | undefined;\n ext?: string | null;\n modified?: number;\n title?: ioBroker.StringOrTranslated;\n meta?: boolean;\n from?: string;\n ts?: number;\n color?: string;\n icon?: string;\n acl?: ioBroker.EvaluatedFileACL | MetaACL;\n}\n\nexport type Folders = Record<string, FolderOrFileItem[]>;\n\nfunction sortFolders(a: FolderOrFileItem, b: FolderOrFileItem): number {\n if (a.folder && b.folder) {\n return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;\n }\n if (a.folder) {\n return -1;\n }\n if (b.folder) {\n return 1;\n }\n return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;\n}\n\ninterface FileBrowserState {\n viewType: string;\n folders: Folders;\n filterEmpty: boolean;\n expanded: string[];\n currentDir: string;\n expertMode: boolean;\n addFolder: boolean;\n uploadFile: boolean | 'dragging';\n deleteItem: string;\n viewer: string;\n formatEditFile: string | null;\n path: string;\n selected: string;\n errorText: string;\n modalEditOfAccess: boolean;\n backgroundImage: string | null;\n queueLength: number;\n loadAllFolders: boolean;\n fileErrors: string[];\n filterByType: string;\n showTypesMenu: HTMLButtonElement | null;\n restrictToFolder: string;\n pathFocus: boolean;\n}\n\nexport class FileBrowserClass extends Component<FileBrowserProps, FileBrowserState> {\n private readonly imagePrefix: string;\n\n private readonly levelPadding: number;\n\n private mounted: boolean;\n\n private suppressDeleteConfirm: number;\n\n private browseList:\n | {\n processing?: boolean;\n resolve: null | ((files: ioBroker.ReadDirResult[]) => void);\n reject: null | ((e: any) => void);\n adapter: string | null;\n relPath: string | null;\n }[]\n | null;\n\n private browseListRunning: boolean;\n\n private initialReadFinished: boolean;\n\n private supportSubscribes: boolean | null;\n\n private _tempTimeout: Record<string, ReturnType<typeof setTimeout>>;\n\n private readonly limitToObjectID: string | null = null;\n\n private readonly limitToPath: string | null = null;\n\n private lastSelect: number | null = null;\n\n private setOpacityTimer: ReturnType<typeof setTimeout> | null = null;\n\n private cacheFoldersTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private foldersLoading: boolean | null = null;\n\n private cacheFolders: Folders | null = null;\n\n private readonly localStorage: Storage;\n\n constructor(props: FileBrowserProps) {\n super(props);\n\n this.localStorage = (window as any)._localStorage || window.localStorage;\n const expandedStr = this.localStorage.getItem('files.expanded') || '[]';\n\n if (this.props.limitPath) {\n const parts = this.props.limitPath.split('/');\n this.limitToObjectID = parts[0];\n this.limitToPath = !parts.length ? null : parts.length === 1 && parts[0] === '' ? null : parts.join('/');\n if (this.limitToPath && this.limitToPath.endsWith('/')) {\n this.limitToPath.substring(0, this.limitToPath.length - 1);\n }\n }\n\n let expanded: string[];\n try {\n expanded = JSON.parse(expandedStr);\n if (this.limitToPath) {\n expanded = expanded.filter(\n id =>\n id.startsWith(`${this.limitToPath}/`) ||\n id === this.limitToPath ||\n this.limitToPath?.startsWith(`${id}/`),\n );\n }\n } catch {\n expanded = [];\n }\n\n let viewType;\n if (this.props.showViewTypeButton) {\n viewType = this.localStorage.getItem('files.viewType') || TABLE;\n } else {\n viewType = TABLE;\n }\n\n let selected = this.props.selected || this.localStorage.getItem('files.selected') || USER_DATA;\n\n let currentDir: string;\n\n if (props.restrictToFolder) {\n selected = props.restrictToFolder;\n currentDir = props.restrictToFolder;\n const parts = props.restrictToFolder.split('/');\n expanded = [];\n let path = '';\n for (let i = 0; i < parts.length; i++) {\n path += (path ? '/' : '') + parts[i];\n expanded.push(path);\n }\n } else {\n // TODO: Now we do not support multiple selection\n if (Array.isArray(selected)) {\n selected = selected[0];\n }\n\n if (isFile(selected)) {\n currentDir = getParentDir(selected);\n } else {\n currentDir = selected;\n }\n }\n const backgroundImage = this.localStorage.getItem('files.backgroundImage') || null;\n\n this.state = {\n viewType,\n folders: {},\n filterEmpty: this.localStorage.getItem('files.empty') !== 'false',\n expanded,\n currentDir,\n expertMode: !!props.expertMode,\n addFolder: false,\n uploadFile: false,\n deleteItem: '',\n // marked: [],\n viewer: '',\n formatEditFile: '',\n path: selected,\n selected,\n errorText: '',\n modalEditOfAccess: false,\n backgroundImage,\n queueLength: 0,\n loadAllFolders: false,\n // allFoldersLoaded: false,\n fileErrors: [],\n filterByType: props.filterByType || window.localStorage.getItem('files.filterByType') || '',\n showTypesMenu: null,\n restrictToFolder: props.restrictToFolder || '',\n pathFocus: false,\n };\n\n this.imagePrefix = this.props.imagePrefix || './files/';\n\n this.levelPadding = this.props.levelPadding || 20;\n this.mounted = true;\n this.suppressDeleteConfirm = 0;\n\n this.browseList = [];\n this.browseListRunning = false;\n this.initialReadFinished = false;\n this.supportSubscribes = null;\n this._tempTimeout = {};\n }\n\n static getDerivedStateFromProps(\n props: FileBrowserProps,\n state: FileBrowserState,\n ): Partial<FileBrowserState> | null {\n if (props.expertMode !== undefined && props.expertMode !== state.expertMode) {\n return { expertMode: props.expertMode, loadAllFolders: true };\n }\n\n return null;\n }\n\n async loadFolders(): Promise<void> {\n this.initialReadFinished = false;\n\n let folders = (await this.browseFolder('/')) as unknown as Folders;\n\n if (this.state.viewType === TABLE) {\n folders = (await this.browseFolders([...this.state.expanded], folders)) as unknown as Folders;\n } else if (\n this.state.currentDir &&\n this.state.currentDir !== '/' &&\n (!this.limitToObjectID || this.state.currentDir.startsWith(this.limitToObjectID))\n ) {\n folders = (await this.browseFolder(this.state.currentDir, folders)) as unknown as Folders;\n }\n\n this.setState({ folders }, () => {\n if (this.state.viewType === TABLE && !this.findItem(this.state.selected)) {\n const parts = this.state.selected.split('/');\n while (parts.length && !this.findItem(parts.join('/'))) {\n parts.pop();\n }\n let selected;\n if (parts.length) {\n selected = parts.join('/');\n } else {\n selected = USER_DATA;\n }\n this.setState({ selected, path: selected, pathFocus: false }, () => this.scrollToSelected());\n } else {\n this.scrollToSelected();\n }\n this.initialReadFinished = true;\n });\n }\n\n scrollToSelected(): void {\n if (this.mounted) {\n const el = document.getElementById(this.state.selected);\n el?.scrollIntoView();\n }\n }\n\n async componentDidMount(): Promise<void> {\n this.mounted = true;\n this.loadFolders().catch(error => console.error(`Cannot load folders: ${error}`));\n\n this.supportSubscribes = await this.props.socket.checkFeatureSupported('BINARY_STATE_EVENT');\n if (this.supportSubscribes) {\n await this.props.socket.subscribeFiles('*', '*', this.onFileChange);\n }\n }\n\n componentWillUnmount(): void {\n if (this.supportSubscribes) {\n this.props.socket.unsubscribeFiles('*', '*', this.onFileChange);\n }\n this.mounted = false;\n this.browseList = null;\n this.browseListRunning = false;\n Object.values(this._tempTimeout).forEach(timer => timer && clearTimeout(timer));\n this._tempTimeout = {};\n }\n\n browseFoldersCb(foldersList: string[], newFoldersNotNull: Folders, cb: (folders: Folders) => void): void {\n if (!foldersList?.length) {\n cb(newFoldersNotNull);\n } else {\n const folder = foldersList.shift();\n if (folder) {\n void this.browseFolder(folder, newFoldersNotNull)\n .catch((e: Error) => console.error(`Cannot read folder ${folder}: ${e.message}`))\n .then(() => {\n setTimeout(() => this.browseFoldersCb(foldersList, newFoldersNotNull, cb), 0);\n });\n } else {\n setTimeout(() => this.browseFoldersCb(foldersList, newFoldersNotNull, cb), 0);\n }\n }\n }\n\n browseFolders(foldersList: string[], _newFolders?: Folders | null): Promise<Folders> {\n let newFoldersNotNull: Folders;\n if (!_newFolders) {\n newFoldersNotNull = {};\n Object.keys(this.state.folders).forEach(folder => (newFoldersNotNull[folder] = this.state.folders[folder]));\n } else {\n newFoldersNotNull = _newFolders;\n }\n\n if (!foldersList?.length) {\n return Promise.resolve(newFoldersNotNull);\n }\n return new Promise(resolve => {\n this.browseFoldersCb(foldersList, newFoldersNotNull, resolve);\n });\n }\n\n readDirSerial(adapter: string, relPath: string): Promise<ioBroker.ReadDirResult[]> {\n return new Promise((resolve, reject) => {\n if (this.browseList) {\n // if component still mounted\n this.browseList.push({\n resolve: resolve as unknown as (files: ioBroker.ReadDirResult[]) => void,\n reject,\n adapter,\n relPath,\n });\n if (!this.browseListRunning) {\n this.processBrowseList();\n }\n }\n });\n }\n\n processBrowseList(level: number = 0): void {\n if (!this.browseListRunning && this.browseList && this.browseList.length) {\n this.browseListRunning = true;\n if (this.browseList.length > 10) {\n // not too often\n if (!(this.browseList.length % 10)) {\n this.setState({ queueLength: this.browseList.length });\n }\n } else {\n this.setState({ queueLength: this.browseList.length });\n }\n\n this.browseList[0].processing = true;\n this.props.socket\n .readDir(this.browseList[0].adapter, this.browseList[0].relPath as string)\n .then(files => {\n if (this.browseList) {\n // if component still mounted\n const item = this.browseList.shift();\n if (item) {\n const resolve = item.resolve;\n item.resolve = null;\n item.reject = null;\n item.adapter = null;\n item.relPath = null;\n if (resolve) {\n resolve(files);\n }\n this.browseListRunning = false;\n if (this.browseList.length) {\n if (level < 5) {\n this.processBrowseList(level + 1);\n } else {\n setTimeout(() => this.processBrowseList(0), 0);\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n }\n })\n .catch(e => {\n if (this.browseList) {\n // if component still mounted\n const item = this.browseList.shift();\n if (item) {\n const reject = item.reject;\n item.resolve = null;\n item.reject = null;\n item.adapter = null;\n item.relPath = null;\n if (reject) {\n reject(e);\n }\n this.browseListRunning = false;\n if (this.browseList.length) {\n if (level < 5) {\n this.processBrowseList(level + 1);\n } else {\n setTimeout(() => this.processBrowseList(0), 0);\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n }\n });\n }\n }\n\n async browseFolder(\n folderId: string,\n _newFolders?: Folders | null,\n _checkEmpty?: boolean,\n force?: boolean,\n ): Promise<Folders> {\n let newFoldersNotNull: Folders;\n if (!_newFolders) {\n newFoldersNotNull = {};\n Object.keys(this.state.folders).forEach(folder => {\n newFoldersNotNull[folder] = this.state.folders[folder];\n });\n } else {\n newFoldersNotNull = _newFolders;\n }\n\n if (newFoldersNotNull[folderId] && !force) {\n if (!_checkEmpty) {\n return new Promise((resolve, reject) => {\n Promise.all(\n newFoldersNotNull[folderId]\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true).catch(() => undefined)),\n )\n .then(() => resolve(newFoldersNotNull))\n .catch(error => reject(new Error(error)));\n });\n }\n\n return Promise.resolve(newFoldersNotNull);\n }\n\n // if root folder\n if (!folderId || folderId === '/') {\n try {\n let objs = (await this.props.socket.readMetaItems()) as MetaObject[];\n const _folders: FolderOrFileItem[] = [];\n let userData = null;\n\n if (this.state.restrictToFolder) {\n const adapter = this.state.restrictToFolder.split('/')[0];\n objs = objs.filter(obj => obj._id === adapter);\n } else if (!this.state.expertMode) {\n // load only adapter.admin and not other meta files like hm-rpc.0.devices.blablabla\n objs = objs.filter(obj => !obj._id.endsWith('.admin'));\n }\n\n const pos = objs.findIndex(obj => obj._id === 'system.meta.uuid');\n if (pos !== -1) {\n objs.splice(pos, 1);\n }\n\n objs.forEach(obj => {\n if (this.limitToObjectID && this.limitToObjectID !== obj._id) {\n return;\n }\n\n const item: FolderOrFileItem = {\n id: obj._id,\n name: obj._id,\n title: (obj.common && obj.common.name) || obj._id,\n meta: true,\n from: obj.from,\n ts: obj.ts,\n color: obj.common && obj.common.color,\n icon: obj.common && obj.common.icon,\n folder: true,\n acl: obj.acl,\n level: 0,\n };\n\n if (item.id === USER_DATA) {\n // user data must be first\n userData = item;\n } else {\n _folders.push(item);\n }\n });\n\n _folders.sort((a, b) => (a.id > b.id ? 1 : a.id < b.id ? -1 : 0));\n if (!this.limitToObjectID || this.limitToObjectID === USER_DATA) {\n if (userData) {\n _folders.unshift(userData);\n }\n }\n\n newFoldersNotNull[folderId || '/'] = _folders;\n\n if (!_checkEmpty) {\n return Promise.all(\n _folders\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true).catch(() => undefined)),\n ).then(() => newFoldersNotNull);\n }\n } catch (e: unknown) {\n const knownError = e as Error;\n if (this.initialReadFinished) {\n window.alert(`Cannot read meta items: ${knownError.message}`);\n }\n newFoldersNotNull[folderId || '/'] = [];\n }\n return newFoldersNotNull;\n }\n\n const parts = folderId.split('/');\n const level = parts.length;\n const adapter = parts.shift();\n const relPath = parts.join('/');\n\n // make all requests here serial\n let files: ioBroker.ReadDirResult[];\n try {\n files = await this.readDirSerial(adapter || '', relPath);\n } catch (error: unknown) {\n // work around: 0_userdata.0 is a special folder, that should exist event when other folders and itself do not exit, as the browser shows it anyway.\n if (error === 'Not exists' && adapter === '0_userdata.0') {\n files = [];\n } else {\n throw error;\n }\n }\n try {\n const _folders: FolderOrFileItem[] = [];\n\n files.forEach(file => {\n const item: FolderOrFileItem = {\n id: `${folderId}/${file.file}`,\n ext: Utils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats?.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n\n if (this.state.restrictToFolder) {\n if (\n item.folder &&\n (item.id.startsWith(`${this.state.restrictToFolder}/`) ||\n item.id === this.state.restrictToFolder ||\n this.state.restrictToFolder.startsWith(`${item.id}/`))\n ) {\n _folders.push(item);\n } else if (item.id.startsWith(`${this.state.restrictToFolder}/`)) {\n _folders.push(item);\n }\n } else if (this.limitToPath) {\n if (\n item.folder &&\n (item.id.startsWith(`${this.limitToPath}/`) ||\n item.id === this.limitToPath ||\n this.limitToPath.startsWith(`${item.id}/`))\n ) {\n _folders.push(item);\n } else if (item.id.startsWith(`${this.limitToPath}/`)) {\n _folders.push(item);\n }\n } else {\n _folders.push(item);\n }\n });\n\n _folders.sort(sortFolders);\n newFoldersNotNull[folderId] = _folders;\n\n if (!_checkEmpty) {\n return Promise.all(\n _folders\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true)),\n ).then(() => newFoldersNotNull);\n }\n } catch (e: unknown) {\n const knownError = e as Error;\n if (this.initialReadFinished) {\n window.alert(`Cannot read ${adapter}${relPath ? `/${relPath}` : ''}: ${knownError?.message}`);\n }\n newFoldersNotNull[folderId] = [];\n }\n\n return newFoldersNotNull;\n }\n\n toggleFolder(item: FolderOrFileItem, e: React.MouseEvent): void {\n e?.stopPropagation();\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(item.id);\n if (pos === -1) {\n expanded.push(item.id);\n expanded.sort();\n\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n\n if (!item.temp) {\n this.browseFolder(item.id)\n .then(folders => this.setState({ expanded, folders }))\n .catch(err =>\n window.alert(\n err === NOT_FOUND\n ? this.props.t('ra_Cannot find \"%s\"', item.id)\n : this.props.t('ra_Cannot read \"%s\"', item.id),\n ),\n );\n } else {\n this.setState({ expanded });\n }\n } else {\n expanded.splice(pos, 1);\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n this.setState({ expanded });\n }\n }\n\n onFileChange = (id: string, fileName: string, size: number | null): void => {\n const key = `${id}/${fileName}`;\n const pos = key.lastIndexOf('/');\n const folder = key.substring(0, pos);\n console.log(`File changed ${key}[${size}]`);\n\n if (this.state.folders[folder]) {\n if (this._tempTimeout[folder]) {\n clearTimeout(this._tempTimeout[folder]);\n }\n\n this._tempTimeout[folder] = setTimeout(() => {\n delete this._tempTimeout[folder];\n\n this.browseFolder(folder, null, false, true)\n .then(folders => this.setState({ folders }))\n .catch(e => console.error(`Cannot read folder: ${e.message}`));\n }, 300);\n }\n };\n\n changeFolder(e: React.MouseEvent<HTMLDivElement>, folder?: string): void {\n e?.stopPropagation();\n\n this.lastSelect = Date.now();\n\n let _folder = folder || getParentDir(this.state.currentDir);\n\n if (_folder === '/') {\n _folder = '';\n }\n\n this.localStorage.setItem('files.currentDir', _folder);\n\n if (folder && e && (e.altKey || e.shiftKey || e.ctrlKey || e.metaKey)) {\n this.setState({ selected: _folder });\n return;\n }\n\n // If desired folder is not yet loaded\n if (_folder && !this.state.folders[_folder]) {\n this.browseFolder(_folder)\n .then(folders =>\n this.setState(\n {\n folders,\n path: _folder,\n currentDir: _folder,\n selected: _folder,\n pathFocus: false,\n },\n () => this.props.onSelect && this.props.onSelect(''),\n ),\n )\n .catch(_e => console.error(`Cannot read folder: ${_e.message}`));\n return;\n }\n\n this.setState(\n {\n currentDir: _folder,\n selected: _folder,\n path: _folder,\n pathFocus: false,\n },\n () => this.props.onSelect && this.props.onSelect(''),\n );\n }\n\n select(id: string, e?: React.MouseEvent<HTMLDivElement> | null, cb?: () => void): void {\n if (e) {\n e.stopPropagation();\n }\n this.lastSelect = Date.now();\n\n this.localStorage.setItem('files.selected', id);\n\n this.setState({ selected: id, path: id, pathFocus: false }, () => {\n if (this.props.onSelect) {\n const ext = Utils.getFileExtension(id);\n if (\n (!this.props.filterFiles || (ext && this.props.filterFiles.includes(ext))) &&\n (!this.state.filterByType ||\n (ext && (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(ext)))\n ) {\n this.props.onSelect(id, false, !!this.state.folders[id]);\n } else {\n this.props.onSelect('');\n }\n }\n if (cb) {\n cb();\n }\n });\n }\n\n getText(text?: ioBroker.StringOrTranslated | null): string | undefined {\n if (text) {\n if (typeof text === 'object') {\n return text[this.props.lang] || text.en || undefined;\n }\n return text;\n }\n return undefined;\n }\n\n renderFolder(item: FolderOrFileItem, expanded?: boolean): JSX.Element | null {\n if (\n this.state.viewType === TABLE &&\n this.state.filterEmpty &&\n (!this.state.folders[item.id] || !this.state.folders[item.id].length) &&\n item.id !== USER_DATA &&\n !item.temp\n ) {\n return null;\n }\n const IconEl = expanded ? IconOpen : IconClosed;\n const padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;\n const isUserData = item.name === USER_DATA;\n const isSpecialData = isUserData || item.name === 'vis.0' || item.name === 'vis-2.0';\n\n const iconStyle = Utils.getStyle(\n this.props.theme,\n styles[`itemFolderIcon${this.state.viewType}`],\n isSpecialData && styles.specialFolder,\n );\n return (\n <Box\n component=\"div\"\n key={item.id}\n id={item.id}\n style={this.state.viewType === TABLE ? { marginLeft: padding, width: `calc(100% - ${padding}px` } : {}}\n onClick={e => (this.state.viewType === TABLE ? this.select(item.id, e) : this.changeFolder(e, item.id))}\n onDoubleClick={e => this.state.viewType === TABLE && this.toggleFolder(item, e)}\n title={this.getText(item.title)}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFolder${this.state.viewType}`],\n this.state.selected === item.id ? styles.itemSelected : {},\n item.temp ? styles.itemFolderTemp : {},\n )}\n >\n <IconEl\n style={iconStyle}\n onClick={\n this.state.viewType === TABLE ? (e: React.MouseEvent) => this.toggleFolder(item, e) : undefined\n }\n />\n\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`itemName${this.state.viewType}`],\n styles[`itemNameFolder${this.state.viewType}`],\n )}\n >\n {isUserData ? this.props.t('ra_User files') : item.name}\n </Box>\n\n <Box\n component=\"div\"\n style={styles[`itemSize${this.state.viewType}`]}\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.state.folders[item.id]\n ? this.state.folders[item.id].length\n : ''}\n </Box>\n\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode ? this.formatAcl(item.acl) : null}\n </Box>\n\n {this.state.viewType === TABLE && this.props.expertMode ? (\n <Box\n component=\"div\"\n sx={{ ...styles.itemDeleteButtonTable, display: { md: 'inline-block', sm: 'none' } }}\n />\n ) : null}\n\n {this.state.viewType === TABLE && this.props.allowDownload ? (\n <div style={styles[`itemDownloadEmpty${this.state.viewType}`]} />\n ) : null}\n\n {this.state.viewType === TABLE &&\n this.props.allowDelete &&\n this.state.folders[item.id] &&\n this.state.folders[item.id].length ? (\n <IconButton\n aria-label=\"delete\"\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(item.id);\n } else {\n this.setState({ deleteItem: item.id });\n }\n }}\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n size=\"large\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n ) : this.state.viewType === TABLE && this.props.allowDelete ? (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n ) : null}\n </Box>\n );\n }\n\n renderBackFolder(): JSX.Element {\n return (\n <Box\n component=\"div\"\n key={this.state.currentDir}\n id={this.state.currentDir}\n onClick={e => this.changeFolder(e)}\n title={this.props.t('ra_Back to %s', getParentDir(this.state.currentDir))}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFolder${this.state.viewType}`],\n )}\n >\n <IconClosed style={Utils.getStyle(this.props.theme, styles[`itemFolderIcon${this.state.viewType}`])} />\n <IconBack sx={styles.itemFolderIconBack} />\n\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`itemName${this.state.viewType}`],\n styles[`itemNameFolder${this.state.viewType}`],\n )}\n >\n ..\n </Box>\n </Box>\n );\n }\n\n formatSize(size: number | null | undefined): JSX.Element {\n return (\n <div style={styles[`itemSize${this.state.viewType}`]}>\n {size || size === 0 ? Utils.formatBytes(size) : ''}\n </div>\n );\n }\n\n formatAcl(acl: ioBroker.EvaluatedFileACL | MetaACL | undefined): JSX.Element {\n const access: number = acl ? (acl as ioBroker.EvaluatedFileACL).permissions || (acl as MetaACL).file : 0;\n let accessStr: string;\n if (access) {\n accessStr = access.toString(16).padStart(3, '0');\n } else {\n accessStr = '';\n }\n\n return (\n <div style={styles[`itemAccess${this.state.viewType}`]}>\n {this.props.modalEditOfAccessControl ? (\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ modalEditOfAccess: true })}\n sx={styles[`itemAclButton${this.state.viewType}`]}\n >\n {accessStr || '---'}\n </IconButton>\n ) : (\n accessStr || '---'\n )}\n </div>\n );\n }\n\n getFileIcon(ext: string | null): JSX.Element {\n switch (ext) {\n case 'json':\n case 'json5':\n return <JsonIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'css':\n return <CssIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'js':\n case 'ts':\n return <JSIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'html':\n case 'md':\n return <HtmlIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'mp3':\n case 'ogg':\n case 'wav':\n case 'm4a':\n case 'mp4':\n case 'flac':\n return <MusicIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n default:\n return <FileIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n }\n }\n\n static getEditFile(ext: string | null): boolean {\n switch (ext) {\n case 'json':\n case 'json5':\n case 'js':\n case 'html':\n case 'txt':\n case 'css':\n case 'log':\n return true;\n default:\n return false;\n }\n }\n\n setStateBackgroundImage = (): void => {\n const array = ['light', 'dark', 'colored', 'delete'];\n this.setState(({ backgroundImage }) => {\n if (\n backgroundImage &&\n array.indexOf(backgroundImage) !== -1 &&\n array.length - 1 !== array.indexOf(backgroundImage)\n ) {\n this.localStorage.setItem('files.backgroundImage', array[array.indexOf(backgroundImage) + 1]);\n return { backgroundImage: array[array.indexOf(backgroundImage) + 1] };\n }\n this.localStorage.setItem('files.backgroundImage', array[0]);\n return { backgroundImage: array[0] };\n });\n };\n\n getStyleBackgroundImage = (): React.CSSProperties | null => {\n // ['light', 'dark', 'colored', 'delete']\n switch (this.state.backgroundImage) {\n case 'light':\n return styles.backgroundImageLight;\n case 'dark':\n return styles.backgroundImageDark;\n case 'colored':\n return styles.backgroundImageColored;\n case 'delete':\n return null;\n default:\n return null;\n }\n };\n\n renderFile(item: FolderOrFileItem): JSX.Element {\n const padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;\n const ext = Utils.getFileExtension(item.name);\n\n return (\n <Box\n component=\"div\"\n key={item.id}\n id={item.id}\n onDoubleClick={e => {\n e.stopPropagation();\n if (!this.props.onSelect) {\n this.setState({ viewer: this.imagePrefix + item.id, formatEditFile: ext });\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n this.props.onSelect(item.id, true, !!this.state.folders[item.id]);\n }\n }}\n onClick={e => this.select(item.id, e)}\n style={this.state.viewType === TABLE ? { marginLeft: padding, width: `calc(100% - ${padding}px)` } : {}}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFile${this.state.viewType}`],\n this.state.selected === item.id ? styles.itemSelected : undefined,\n )}\n >\n {ext && EXTENSIONS.images.includes(ext) ? (\n this.state.fileErrors.includes(item.id) ? (\n <IconNoIcon\n style={{\n ...styles[`itemImage${this.state.viewType}`],\n ...this.getStyleBackgroundImage(),\n ...styles[`itemNoImage${this.state.viewType}`],\n }}\n />\n ) : (\n <Icon\n onError={e => {\n (e.target as HTMLImageElement).onerror = null;\n const fileErrors = [...this.state.fileErrors];\n if (!fileErrors.includes(item.id)) {\n fileErrors.push(item.id);\n this.setState({ fileErrors });\n }\n }}\n style={{ ...styles[`itemImage${this.state.viewType}`], ...this.getStyleBackgroundImage() }}\n src={this.imagePrefix + item.id}\n alt={item.name}\n />\n )\n ) : (\n this.getFileIcon(ext)\n )}\n <Box\n component=\"div\"\n sx={styles[`itemName${this.state.viewType}`]}\n >\n {item.name}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.formatSize(item.size)}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode ? this.formatAcl(item.acl) : null}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode && FileBrowserClass.getEditFile(ext) ? (\n <IconButton\n aria-label=\"edit\"\n onClick={e => {\n e.stopPropagation();\n if (!this.props.onSelect) {\n this.setState({ viewer: this.imagePrefix + item.id, formatEditFile: ext });\n } else if (\n (!this.props.filterFiles ||\n (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(\n item.ext,\n )))\n ) {\n this.props.onSelect(item.id, true, !!this.state.folders[item.id]);\n }\n }}\n sx={styles.itemDeleteButtonTable}\n size=\"large\"\n >\n <EditIcon fontSize=\"small\" />\n </IconButton>\n ) : (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n )}\n </Box>\n {this.state.viewType === TABLE && this.props.allowDownload ? (\n <Box\n component=\"a\"\n className=\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge\"\n sx={styles.itemDownloadButtonTable}\n tabIndex={0}\n download={item.id}\n href={this.imagePrefix + item.id}\n onClick={e => e.stopPropagation()}\n >\n <DownloadIcon />\n </Box>\n ) : null}\n\n {this.state.viewType === TABLE &&\n this.props.allowDelete &&\n item.id !== 'vis.0/' &&\n item.id !== 'vis-2.0/' &&\n item.id !== USER_DATA ? (\n <IconButton\n aria-label=\"delete\"\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(item.id);\n } else {\n this.setState({ deleteItem: item.id });\n }\n }}\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n size=\"large\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n ) : this.state.viewType === TABLE && this.props.allowDelete ? (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n ) : null}\n </Box>\n );\n }\n\n renderItems(folderId: string): JSX.Element | (JSX.Element | null)[] {\n if (this.state.folders && this.state.folders[folderId]) {\n // tile\n if (this.state.viewType === TILE) {\n const res: (JSX.Element | null)[] = [];\n if (folderId && folderId !== '/') {\n res.push(this.renderBackFolder());\n }\n this.state.folders[folderId].forEach(item => {\n if (item.folder) {\n res.push(this.renderFolder(item));\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n res.push(this.renderFile(item));\n }\n });\n return res;\n }\n\n const totalResult: (JSX.Element | null)[] = [];\n this.state.folders[folderId].forEach(item => {\n if (item.folder) {\n const expanded = this.state.expanded.includes(item.id);\n\n const folders = this.renderFolder(item, expanded);\n if (Array.isArray(folders)) {\n folders.forEach(folder => totalResult.push(folder));\n } else {\n totalResult.push(folders);\n }\n if (this.state.folders[item.id] && expanded) {\n const items = this.renderItems(item.id);\n if (Array.isArray(items)) {\n items.forEach(_item => totalResult.push(_item));\n } else {\n totalResult.push(items);\n }\n }\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n totalResult.push(this.renderFile(item));\n }\n });\n\n return totalResult;\n }\n\n return (\n <div style={{ position: 'relative' }}>\n <CircularProgress\n key={folderId}\n color=\"secondary\"\n size={24}\n />\n <div\n style={{\n position: 'absolute',\n zIndex: 2,\n top: 4,\n width: 24,\n textAlign: 'center',\n }}\n >\n {this.state.queueLength}\n </div>\n </div>\n );\n }\n\n renderToolbar(): JSX.Element {\n const IconType: React.FC<{ fontSize?: 'small' }> | null = this.props.showTypeSelector\n ? FILE_TYPE_ICONS[this.state.filterByType || 'all'] || FILE_TYPE_ICONS.all\n : null;\n\n const isInFolder = this.findFirstFolder(this.state.selected);\n\n return (\n <Toolbar\n key=\"toolbar\"\n variant=\"dense\"\n >\n {this.props.allowNonRestricted && this.props.restrictToFolder ? (\n <IconButton\n edge=\"start\"\n title={\n this.state.restrictToFolder\n ? this.props.t('ra_Show all folders')\n : this.props.t('ra_Restrict to folder')\n }\n style={{\n ...styles.menuButton,\n ...(this.state.restrictToFolder ? styles.menuButtonRestrictActive : undefined),\n }}\n aria-label=\"restricted to folder\"\n onClick={() =>\n this.setState({\n restrictToFolder:\n (this.state.restrictToFolder ? '' : this.props.restrictToFolder) || '',\n loadAllFolders: true,\n })\n }\n size=\"small\"\n >\n <RestrictedIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.showExpertButton ? (\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Toggle expert mode')}\n style={{\n ...styles.menuButton,\n ...(this.state.expertMode ? styles.menuButtonExpertActive : undefined),\n }}\n aria-label=\"expert mode\"\n onClick={() => this.setState({ expertMode: !this.state.expertMode })}\n size=\"small\"\n >\n <IconExpert />\n </IconButton>\n ) : null}\n {this.props.showViewTypeButton ? (\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Toggle view mode')}\n style={styles.menuButton}\n aria-label=\"view mode\"\n onClick={() => {\n const viewType = this.state.viewType === TABLE ? TILE : TABLE;\n this.localStorage.setItem('files.viewType', viewType);\n let currentDir = this.state.selected;\n if (isFile(currentDir)) {\n currentDir = getParentDir(currentDir);\n }\n this.setState({ viewType, currentDir }, () => {\n if (this.state.viewType === TABLE) {\n this.scrollToSelected();\n }\n });\n }}\n size=\"small\"\n >\n {this.state.viewType !== TABLE ? <IconList fontSize=\"small\" /> : <IconTile fontSize=\"small\" />}\n </IconButton>\n ) : null}\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Hide empty folders')}\n style={styles.menuButton}\n color={this.state.filterEmpty ? 'secondary' : 'inherit'}\n aria-label=\"filter empty\"\n onClick={() => {\n this.localStorage.setItem('file.empty', this.state.filterEmpty ? 'false' : 'true');\n this.setState({ filterEmpty: !this.state.filterEmpty });\n }}\n size=\"small\"\n >\n <EmptyFilterIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Reload files')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"reload files\"\n onClick={() => this.setState({ folders: {} }, () => this.loadFolders())}\n size=\"small\"\n >\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n {this.props.allowCreateFolder ? (\n <IconButton\n edge=\"start\"\n disabled={\n !this.state.selected ||\n !isInFolder ||\n (!!this.limitToPath &&\n !this.state.selected.startsWith(`${this.limitToPath}/`) &&\n this.limitToPath !== this.state.selected)\n }\n title={this.props.t('ra_Create folder')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"add folder\"\n onClick={() => this.setState({ addFolder: true })}\n size=\"small\"\n >\n <AddFolderIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.allowUpload ? (\n <IconButton\n edge=\"start\"\n disabled={\n !this.state.selected ||\n !isInFolder ||\n (!!this.limitToPath &&\n !this.state.selected.startsWith(`${this.limitToPath}/`) &&\n this.limitToPath !== this.state.selected)\n }\n title={this.props.t('ra_Upload file')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"upload file\"\n onClick={() => this.setState({ uploadFile: true })}\n size=\"small\"\n >\n <UploadIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.showTypeSelector && IconType ? (\n <Tooltip\n title={this.props.t('ra_Filter files')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={e => this.setState({ showTypesMenu: e.target as HTMLButtonElement })}\n >\n <IconType fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n ) : null}\n {this.state.showTypesMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.showTypesMenu}\n onClose={() => this.setState({ showTypesMenu: null })}\n >\n {Object.keys(FILE_TYPE_ICONS).map(type => {\n const MyIcon: React.FC<{ fontSize?: 'small' }> = FILE_TYPE_ICONS[type];\n return (\n <MenuItem\n key={type}\n selected={this.state.filterByType === type}\n onClick={() => {\n if (type === 'all') {\n this.localStorage.removeItem('files.filterByType');\n this.setState({ filterByType: '', showTypesMenu: null });\n } else {\n this.localStorage.setItem('files.filterByType', type);\n this.setState({ filterByType: type, showTypesMenu: null });\n }\n }}\n >\n <ListItemIcon>\n <MyIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{this.props.t(`ra_fileType_${type}`)}</ListItemText>\n </MenuItem>\n );\n })}\n </Menu>\n ) : null}\n <Tooltip\n title={this.props.t('ra_Background image')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n color=\"inherit\"\n edge=\"start\"\n style={styles.menuButton}\n onClick={this.setStateBackgroundImage}\n size=\"small\"\n >\n <Brightness5Icon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n {this.state.viewType !== TABLE && this.props.allowDelete ? (\n <Tooltip\n title={this.props.t('ra_Delete')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n aria-label=\"delete\"\n disabled={\n !this.state.selected ||\n this.state.selected === 'vis.0/' ||\n this.state.selected === 'vis-2.0/' ||\n this.state.selected === USER_DATA\n }\n color=\"inherit\"\n edge=\"start\"\n style={styles.menuButton}\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(this.state.selected);\n } else {\n this.setState({ deleteItem: this.state.selected });\n }\n }}\n size=\"small\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n </Toolbar>\n );\n }\n\n findItem(id: string, folders?: Folders | null): null | FolderOrFileItem {\n folders = folders || this.state.folders;\n if (!folders) {\n return null;\n }\n const parts = id.split('/');\n parts.pop();\n const parentFolder = parts.join('/') || '/';\n if (!folders[parentFolder]) {\n return null;\n }\n return folders[parentFolder].find(item => item.id === id) || null;\n }\n\n renderInputDialog(): JSX.Element | null {\n if (this.state.addFolder) {\n const parentFolder = this.findFirstFolder(this.state.selected);\n\n if (!parentFolder) {\n window.alert(this.props.t('ra_Invalid parent folder!'));\n return null;\n }\n\n return (\n <DialogTextInput\n key=\"inputDialog\"\n applyText={this.props.t('ra_Create')}\n cancelText={this.props.t('ra_Cancel')}\n titleText={this.props.t('ra_Create new folder in %s', this.state.selected)}\n promptText={this.props.t(\n 'ra_If no file will be created in the folder, it will disappear after the browser closed',\n )}\n labelText={this.props.t('ra_Folder name')}\n verify={(text: string) =>\n this.state.folders[parentFolder].find(item => item.name === text)\n ? ''\n : this.props.t('ra_Duplicate name')\n }\n onClose={(name: string | null) => {\n if (name) {\n const folders: Folders = {};\n Object.keys(this.state.folders).forEach(\n folder => (folders[folder] = this.state.folders[folder]),\n );\n const parent = this.findItem(parentFolder);\n const id = `${parentFolder}/${name}`;\n folders[parentFolder].push({\n id,\n level: (parent?.level || 0) + 1,\n name,\n folder: true,\n temp: true,\n });\n\n folders[parentFolder].sort(sortFolders);\n\n folders[id] = [];\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n }\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n this.setState({ addFolder: false, folders, expanded }, () => this.select(id));\n } else {\n this.setState({ addFolder: false });\n }\n }}\n replace={(text: string) => text.replace(/[^-_\\w]/, '_')}\n />\n );\n }\n return null;\n }\n\n componentDidUpdate(/* prevProps , prevState, snapshot */): void {\n if (this.setOpacityTimer) {\n clearTimeout(this.setOpacityTimer);\n }\n this.setOpacityTimer = setTimeout(() => {\n this.setOpacityTimer = null;\n const items = window.document.getElementsByClassName('browserItem');\n for (let i = 0; i < items.length; i++) {\n (items[i] as HTMLElement).style.opacity = '1';\n }\n }, 100);\n }\n\n findFirstFolder(id: string): string | null {\n let parentFolder = id;\n const item = this.findItem(parentFolder);\n // find folder\n if (item && !item.folder) {\n const parts = parentFolder.split('/');\n parts.pop();\n parentFolder = '';\n while (parts.length) {\n const _item = this.findItem(parts.join('/'));\n if (_item?.folder) {\n parentFolder = parts.join('/');\n break;\n }\n parts.pop();\n }\n if (!parts.length) {\n return null;\n }\n }\n\n return parentFolder;\n }\n\n async uploadFile(fileName: string, data: string): Promise<void> {\n const parts: string[] = fileName.split('/');\n const adapterName = parts.shift();\n try {\n await this.props.socket.writeFile64(adapterName || '', parts.join('/'), data);\n } catch (e: unknown) {\n const knownError = e as Error;\n window.alert(`Cannot write file: ${knownError?.message}`);\n }\n }\n\n renderUpload(): JSX.Element[] | null {\n if (this.state.uploadFile) {\n return [\n <Fab\n key=\"close\"\n color=\"primary\"\n aria-label=\"close\"\n style={styles.uploadCloseButton}\n onClick={() => this.setState({ uploadFile: false })}\n >\n <CloseIcon />\n </Fab>,\n <Dropzone\n key=\"dropzone\"\n onDragEnter={() => this.setState({ uploadFile: 'dragging' })}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={acceptedFiles => {\n let count = acceptedFiles.length;\n\n acceptedFiles.forEach(file => {\n const reader = new FileReader();\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n const parentFolder = this.findFirstFolder(this.state.selected);\n\n if (!parentFolder) {\n window.alert(this.props.t('ra_Invalid parent folder!'));\n } else {\n const id = `${parentFolder}/${file.name}`;\n\n void this.uploadFile(id, reader.result as string).then(() => {\n if (!--count) {\n this.setState({ uploadFile: false }, () => {\n if (this.supportSubscribes) {\n // open current folder\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n this.localStorage.setItem(\n 'files.expanded',\n JSON.stringify(expanded),\n );\n }\n this.setState({ expanded }, () => this.select(id));\n } else {\n setTimeout(\n () =>\n this.browseFolder(parentFolder, null, false, true).then(\n folders => {\n // open current folder\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n this.localStorage.setItem(\n 'files.expanded',\n JSON.stringify(expanded),\n );\n }\n this.setState({ folders, expanded }, () =>\n this.select(id),\n );\n },\n ),\n 500,\n );\n }\n });\n }\n });\n }\n };\n\n reader.readAsArrayBuffer(file);\n });\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n <Box\n component=\"div\"\n sx={styles.uploadCenterDiv}\n >\n <div style={styles.uploadCenterTextAndIcon}>\n <UploadIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? this.props.t('ra_Drop file here')\n : this.props.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </Box>\n </div>\n )}\n </Dropzone>,\n ];\n }\n return null;\n }\n\n deleteRecursive(id: string): Promise<void> {\n const item = this.findItem(id);\n if (item?.folder) {\n return (\n this.state.folders[id]\n ? Promise.all(this.state.folders[id].map(_item => this.deleteRecursive(_item.id)))\n : Promise.resolve()\n ).then(() => {\n // If it is a folder of second level\n if (item.level >= 1) {\n const parts = id.split('/');\n const adapter = parts.shift();\n void this.props.socket.deleteFolder(adapter || '', parts.join('/')).then(() => {\n // remove this folder\n const folders = JSON.parse(JSON.stringify(this.state.folders));\n delete folders[item.id];\n // delete folder from parent item\n const parentId = getParentDir(item.id);\n const parentFolder = folders[parentId];\n if (parentFolder) {\n const pos = parentFolder.findIndex((f: FolderOrFileItem) => f.id === item.id);\n if (pos !== -1) {\n parentFolder.splice(pos, 1);\n }\n\n this.select(parentId, null, () => this.setState({ folders }));\n }\n });\n }\n });\n }\n\n const parts = id.split('/');\n const adapter = parts.shift();\n if (parts.length) {\n return this.props.socket\n .deleteFile(adapter || '', parts.join('/'))\n .catch(e => window.alert(`Cannot delete file: ${e}`));\n }\n return Promise.resolve();\n }\n\n deleteItem(deleteItem: string): void {\n deleteItem = deleteItem || this.state.deleteItem;\n\n this.setState({ deleteItem: '' }, () =>\n this.deleteRecursive(deleteItem).then(() => {\n const newState: Partial<FileBrowserState> = {};\n const pos = this.state.expanded.indexOf(deleteItem);\n if (pos !== -1) {\n const expanded = [...this.state.expanded];\n expanded.splice(pos, 1);\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n newState.expanded = expanded;\n }\n\n if (this.state.selected === deleteItem) {\n const parts = this.state.selected.split('/');\n parts.pop();\n newState.selected = parts.join('/');\n }\n\n if (!this.supportSubscribes) {\n const parentFolder = this.findFirstFolder(deleteItem);\n const folders: Folders = {};\n\n Object.keys(this.state.folders).forEach(name => {\n if (name !== parentFolder && !name.startsWith(`${parentFolder}/`)) {\n folders[name] = this.state.folders[name];\n }\n });\n\n newState.folders = folders;\n\n this.setState(newState as FileBrowserState, () =>\n setTimeout(() => {\n this.browseFolders([...this.state.expanded], folders)\n .then(_folders => this.setState({ folders: _folders }))\n .catch(e => console.error(e));\n }, 200),\n );\n } else {\n this.setState(newState as FileBrowserState);\n }\n }),\n );\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (this.state.deleteItem) {\n return (\n <Dialog\n key=\"deleteDialog\"\n open={!0}\n onClose={() => this.setState({ deleteItem: '' })}\n aria-labelledby=\"ar_dialog_file_delete_title\"\n >\n <DialogTitle id=\"ar_dialog_file_delete_title\">\n {this.props.t('ra_Confirm deletion of %s', this.state.deleteItem.split('/').pop() as string)}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>{this.props.t('ra_Are you sure?')}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => {\n this.suppressDeleteConfirm = Date.now() + 60000 * 5;\n this.deleteItem('');\n }}\n >\n {this.props.t('ra_Delete (no confirm for 5 mins)')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.deleteItem('')}\n color=\"primary\"\n autoFocus\n >\n {this.props.t('ra_Delete')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ deleteItem: '' })}\n color=\"grey\"\n >\n {this.props.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderViewDialog(): JSX.Element | null {\n return this.state.viewer ? (\n <FileViewer\n supportSubscribes={this.supportSubscribes}\n key={this.state.viewer}\n href={this.state.viewer}\n formatEditFile={this.state.formatEditFile}\n themeType={this.props.themeType}\n setStateBackgroundImage={this.setStateBackgroundImage}\n getStyleBackgroundImage={this.getStyleBackgroundImage}\n t={this.props.t}\n socket={this.props.socket}\n lang={this.props.lang}\n expertMode={this.state.expertMode}\n onClose={() => this.setState({ viewer: '', formatEditFile: '' })}\n />\n ) : null;\n }\n\n renderError(): JSX.Element | null {\n if (this.state.errorText) {\n return (\n <DialogError\n key=\"errorDialog\"\n text={this.state.errorText}\n onClose={() => this.setState({ errorText: '' })}\n />\n );\n }\n return null;\n }\n\n // used in tabs/Files\n // eslint-disable-next-line react/no-unused-class-component-methods\n updateItemsAcl(info: FolderOrFileItem[]): void {\n this.cacheFolders = this.cacheFolders || JSON.parse(JSON.stringify(this.state.folders));\n let changed;\n\n info.forEach(it => {\n const item = this.findItem(it.id, this.cacheFolders);\n if (item && JSON.stringify(item.acl) !== JSON.stringify(it.acl)) {\n item.acl = it.acl;\n changed = true;\n }\n });\n if (changed) {\n if (this.cacheFoldersTimeout) {\n clearTimeout(this.cacheFoldersTimeout);\n }\n this.cacheFoldersTimeout = setTimeout(() => {\n this.cacheFoldersTimeout = null;\n const folders = this.cacheFolders || {};\n this.cacheFolders = null;\n this.setState({ folders });\n }, 200);\n }\n }\n\n changeToPath(): void {\n setTimeout(() => {\n if (this.state.path !== this.state.selected && (!this.lastSelect || Date.now() - this.lastSelect > 100)) {\n let folder = this.state.path;\n if (isFile(this.state.path)) {\n folder = getParentDir(this.state.path);\n }\n new Promise(resolve => {\n if (!this.state.folders[folder]) {\n this.browseFolder(folder)\n .then(folders => this.setState({ folders }, () => resolve(true)))\n .catch(err =>\n this.setState({\n errorText:\n err === NOT_FOUND\n ? this.props.t('ra_Cannot find \"%s\"', folder)\n : this.props.t('ra_Cannot read \"%s\"', folder),\n }),\n );\n } else {\n resolve(true);\n }\n })\n .then(\n result =>\n result &&\n this.setState({ selected: this.state.path, currentDir: folder, pathFocus: false }),\n )\n .catch(e => console.error(e));\n } else if (!this.lastSelect || Date.now() - this.lastSelect > 100) {\n this.setState({ pathFocus: false });\n }\n }, 100);\n }\n\n renderBreadcrumb(): JSX.Element {\n const parts = this.state.currentDir.startsWith('/')\n ? this.state.currentDir.split('/')\n : `/${this.state.currentDir}`.split('/');\n const p: string[] = [];\n return (\n <Breadcrumbs style={{ paddingLeft: 8 }}>\n {parts.map((part, i) => {\n if (part) {\n p.push(part);\n }\n const path = p.join('/');\n if (i < parts.length - 1) {\n return (\n <Box\n component=\"div\"\n key={`${this.state.selected}_${i}`}\n sx={styles.pathDivBreadcrumbDir}\n onClick={e => this.changeFolder(e, path || '/')}\n >\n {part || this.props.t('ra_Root')}\n </Box>\n );\n }\n\n return (\n <div\n style={styles.pathDivBreadcrumbSelected}\n key={`${this.state.selected}_${i}`}\n onClick={() => this.setState({ pathFocus: true })}\n >\n {part}\n </div>\n );\n })}\n </Breadcrumbs>\n );\n }\n\n renderPath(): JSX.Element {\n return (\n <Box\n component=\"div\"\n key=\"path\"\n sx={styles.pathDiv}\n >\n {this.state.pathFocus ? (\n <Input\n value={this.state.path}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n this.changeToPath();\n } else if (e.key === 'Escape') {\n this.setState({ pathFocus: false });\n }\n }}\n endAdornment={\n <IconButton\n size=\"small\"\n onClick={() => this.changeToPath()}\n >\n <EnterIcon />\n </IconButton>\n }\n onBlur={() => this.changeToPath()}\n onChange={e => this.setState({ path: e.target.value })}\n style={styles.pathDivInput}\n />\n ) : (\n this.renderBreadcrumb()\n )}\n </Box>\n );\n }\n\n render(): JSX.Element {\n if (!this.props.ready) {\n return <LinearProgress />;\n }\n\n if (this.state.loadAllFolders && !this.foldersLoading) {\n this.foldersLoading = true;\n setTimeout(() => {\n this.setState({ loadAllFolders: false, folders: {} }, () => {\n this.foldersLoading = false;\n this.loadFolders().catch(error => console.error(`Cannot load folders: ${error}`));\n });\n }, 300);\n }\n\n return (\n <div\n style={{ ...styles.root, ...this.props.style }}\n className={this.props.className}\n >\n {this.props.showToolbar ? this.renderToolbar() : null}\n {this.state.viewType === TILE ? this.renderPath() : null}\n <div\n style={{\n ...styles.filesDiv,\n ...styles[`filesDiv${this.state.viewType}`],\n }}\n onClick={e => {\n if (this.state.viewType !== TABLE) {\n if (this.state.selected !== (this.state.currentDir || '/')) {\n this.changeFolder(e, this.state.currentDir || '/');\n } else {\n e.stopPropagation();\n }\n }\n }}\n >\n {this.state.viewType === TABLE\n ? this.renderItems('/')\n : this.renderItems(this.state.currentDir || '/')}\n {this.state.viewType !== TABLE ? (\n <div style={styles.filesDivHint}>{this.props.t('ra_select_folder_hint')}</div>\n ) : null}\n </div>\n {this.props.allowUpload ? this.renderInputDialog() : null}\n {this.props.allowUpload ? this.renderUpload() : null}\n {this.props.allowDelete ? this.renderDeleteDialog() : null}\n {this.props.allowView ? this.renderViewDialog() : null}\n {this.state.modalEditOfAccess && this.props.modalEditOfAccessControl\n ? this.props.modalEditOfAccessControl(this)\n : null}\n {this.renderError()}\n </div>\n );\n }\n}\n\nexport const FileBrowser = withWidth()(FileBrowserClass);\n"]}
1
+ {"version":3,"file":"FileBrowser.js","sourceRoot":"./src/","sources":["Components/FileBrowser.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2020-2024, Denis Haev <dogafox@gmail.com>\n *\n * MIT License\n *\n */\nimport React, { Component, type JSX } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n LinearProgress,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Tooltip,\n CircularProgress,\n Toolbar,\n IconButton,\n Fab,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Input,\n Breadcrumbs,\n Box,\n} from '@mui/material';\n\n// MUI Icons\nimport {\n Refresh as RefreshIcon,\n Close as CloseIcon,\n Bookmark as JsonIcon,\n BookmarkBorder as CssIcon,\n Description as HtmlIcon,\n Edit as EditIcon,\n Code as JSIcon,\n InsertDriveFile as FileIcon,\n Publish as UploadIcon,\n MusicNote as MusicIcon,\n SaveAlt as DownloadIcon,\n CreateNewFolder as AddFolderIcon,\n FolderOpen as EmptyFilterIcon,\n List as IconList,\n ViewModule as IconTile,\n ArrowBack as IconBack,\n Delete as DeleteIcon,\n Brightness6 as Brightness5Icon,\n Image as TypeIconImages,\n FontDownload as TypeIconTxt,\n AudioFile as TypeIconAudio,\n Videocam as TypeIconVideo,\n KeyboardReturn as EnterIcon,\n FolderSpecial as RestrictedIcon,\n} from '@mui/icons-material';\n\nimport type { Connection } from '@iobroker/socket-client';\n\nimport { DialogError } from '../Dialogs/Error';\nimport { Utils } from './Utils';\nimport { DialogTextInput } from '../Dialogs/TextInput';\n\n// Custom Icons\nimport { IconExpert } from '../icons/IconExpert';\nimport { IconClosed } from '../icons/IconClosed';\nimport { IconOpen } from '../icons/IconOpen';\nimport { IconNoIcon } from '../icons/IconNoIcon';\nimport { Icon } from './Icon';\n\nimport { withWidth } from './withWidth';\nimport type { ThemeName, ThemeType, Translate, IobTheme } from '../types';\n\nimport { FileViewer, EXTENSIONS, type FileViewerProps } from './FileViewer';\n\nconst ROW_HEIGHT = 32;\nconst BUTTON_WIDTH = 32;\nconst TILE_HEIGHT = 120;\nconst TILE_WIDTH = 64;\n\nconst NOT_FOUND = 'Not found';\n\n// Todo: replace with js-controller types\nexport interface MetaACL extends ioBroker.ObjectACL {\n file: number;\n}\n\n// Todo: replace with js-controller types\nexport interface MetaObject extends ioBroker.MetaObject {\n acl: MetaACL;\n}\n\nconst FILE_TYPE_ICONS: Record<string, React.FC<{ fontSize?: 'small' }>> = {\n all: FileIcon,\n images: TypeIconImages,\n code: JSIcon,\n txt: TypeIconTxt,\n audio: TypeIconAudio,\n video: TypeIconVideo,\n};\n\nconst styles: Record<string, any> = {\n root: {\n width: '100%',\n overflow: 'hidden',\n height: '100%',\n position: 'relative',\n },\n filesDiv: {\n width: 'calc(100% - 16px)',\n overflowX: 'hidden',\n overflowY: 'auto',\n padding: 8,\n },\n filesDivHint: {\n position: 'absolute',\n bottom: 0,\n left: 20,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 12,\n },\n filesDivTable: {\n height: 'calc(100% - 56px)',\n },\n filesDivTile: {\n height: `calc(100% - ${48 * 2 + 8}px)`,\n display: 'flex',\n alignContent: 'flex-start',\n alignItems: 'stretch',\n flexWrap: 'wrap',\n flex: `0 0 ${TILE_WIDTH}px`,\n },\n\n itemTile: (theme: IobTheme) => ({\n position: 'relative',\n userSelect: 'none',\n cursor: 'pointer',\n height: TILE_HEIGHT,\n width: TILE_WIDTH,\n display: 'inline-block',\n textAlign: 'center',\n opacity: 0.1,\n transition: 'opacity 1s',\n margin: '4px',\n borderRadius: '4px',\n '&:hover': {\n background: theme.palette.secondary.light,\n color: Utils.invertColor(theme.palette.secondary.main, true),\n },\n }),\n itemNameFolderTile: {\n fontWeight: 'bold',\n },\n itemNameTile: {\n width: '100%',\n height: 32,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: 12,\n textAlign: 'center',\n wordBreak: 'break-all',\n },\n itemFolderIconTile: (theme: IobTheme) => ({\n width: '100%',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n display: 'block',\n pl: 1,\n color: theme.palette.secondary.main || '#fbff7d',\n }),\n itemFolderIconBack: (theme: IobTheme) => ({\n position: 'absolute',\n top: 22,\n left: 18,\n zIndex: 1,\n color: theme.palette.mode === 'dark' ? '#FFF' : '#000',\n }),\n itemSizeTile: {\n width: '100%',\n height: 16,\n textAlign: 'center',\n fontSize: 10,\n },\n itemImageTile: {\n width: 'calc(100% - 8px)',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n margin: 4,\n display: 'block',\n textAlign: 'center',\n objectFit: 'contain',\n },\n itemIconTile: {\n width: '100%',\n height: TILE_HEIGHT - 32 - 16 - 8, // name + size\n display: 'block',\n objectFit: 'contain',\n },\n\n itemSelected: (theme: IobTheme) => ({\n background: theme.palette.primary.main,\n color: Utils.invertColor(theme.palette.primary.main, true),\n }),\n\n itemTable: (theme: IobTheme) => ({\n userSelect: 'none',\n cursor: 'pointer',\n height: ROW_HEIGHT,\n display: 'inline-flex',\n lineHeight: `${ROW_HEIGHT}px`,\n '&:hover': {\n background: theme.palette.secondary.light,\n color: Utils.invertColor(theme.palette.secondary.main, true),\n },\n }),\n itemNameTable: {\n display: 'inline-block',\n pl: '10px',\n fontSize: '1rem',\n verticalAlign: 'top',\n flexGrow: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n '@media screen and (max-width: 500px)': {\n textAlign: 'end',\n direction: 'rtl',\n },\n },\n itemNameFolderTable: {\n fontWeight: 'bold',\n },\n itemSizeTable: {\n display: 'inline-block',\n width: 60,\n verticalAlign: 'top',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n },\n itemAccessTable: {\n // display: 'inline-block',\n verticalAlign: 'top',\n width: 60,\n textAlign: 'right',\n paddingRight: 5,\n display: 'flex',\n justifyContent: 'center',\n },\n itemImageTable: {\n display: 'inline-block',\n width: 30,\n marginTop: 1,\n objectFit: 'contain',\n maxHeight: 30,\n },\n itemNoImageTable: {\n marginTop: 6,\n },\n itemIconTable: {\n display: 'inline-block',\n marginTop: 1,\n width: 30,\n height: 30,\n },\n itemFolderTable: {},\n itemFolderTemp: {\n opacity: 0.4,\n },\n itemFolderIconTable: (theme: IobTheme) => ({\n marginTop: '1px',\n marginLeft: '8px',\n display: 'inline-block',\n width: 30,\n height: 30,\n color: theme.palette.secondary.main || '#fbff7d',\n }),\n itemDownloadButtonTable: (theme: IobTheme) => ({\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'middle',\n textAlign: 'center',\n padding: 0,\n borderRadius: `${BUTTON_WIDTH / 2}px`,\n '&:hover': {\n backgroundColor: theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.08)',\n },\n '& span': {\n pt: '9px',\n },\n '& svg': {\n width: 14,\n height: 14,\n fontSize: '1rem',\n mt: '-3px',\n verticalAlign: 'middle',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n }),\n itemDownloadEmptyTable: {\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n padding: 0,\n },\n itemAclButtonTable: {\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'top',\n padding: 0,\n fontSize: 12,\n display: 'flex',\n },\n itemDeleteButtonTable: {\n display: 'inline-block',\n width: BUTTON_WIDTH,\n height: ROW_HEIGHT,\n minWidth: BUTTON_WIDTH,\n verticalAlign: 'top',\n padding: 0,\n '& svg': {\n width: 18,\n height: 18,\n fontSize: '1.5rem',\n },\n },\n\n uploadDiv: {\n top: 0,\n zIndex: 1,\n bottom: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n opacity: 0.9,\n textAlign: 'center',\n background: '#FFFFFF',\n },\n uploadDivDragging: {\n opacity: 1,\n },\n\n uploadCenterDiv: (theme: IobTheme) => ({\n m: '20px',\n border: '3px dashed grey',\n borderRadius: '30px',\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n position: 'relative',\n color: theme.palette.mode === 'dark' ? '#222' : '#CCC',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n uploadCenterIcon: {\n width: '25%',\n height: '25%',\n },\n uploadCenterText: {\n fontSize: 24,\n fontWeight: 'bold',\n },\n uploadCloseButton: {\n zIndex: 2,\n position: 'absolute',\n top: 30,\n right: 30,\n },\n uploadCenterTextAndIcon: {\n position: 'absolute',\n height: '30%',\n width: '100%',\n margin: 'auto',\n opacity: 0.3,\n },\n menuButtonExpertActive: {\n color: '#c00000',\n },\n menuButtonRestrictActive: {\n color: '#c05000',\n },\n pathDiv: (theme: IobTheme) => ({\n display: 'flex',\n width: 'calc(100% - 16px)',\n ml: 1,\n mr: 1,\n textOverflow: 'clip',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n backgroundColor: theme.palette.secondary.main,\n }),\n pathDivInput: {\n width: '100%',\n },\n pathDivBreadcrumbDir: (theme: IobTheme) => ({\n pl: '2px',\n pr: '2px',\n cursor: 'pointer',\n '&:hover': {\n background: theme.palette.primary.main,\n },\n }),\n pathDivBreadcrumbSelected: {\n // todo: add style\n },\n backgroundImageLight: {\n background: 'white',\n },\n backgroundImageDark: {\n background: 'black',\n },\n backgroundImageColored: {\n background: 'silver',\n },\n specialFolder: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#229b0f' : '#5dd300',\n }),\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst USER_DATA = '0_userdata.0';\n\nfunction getParentDir(dir: string | null): string {\n const parts = (dir || '').split('/');\n if (parts.length) {\n parts.pop();\n }\n return parts.join('/');\n}\n\nfunction isFile(path: string): boolean {\n const ext = Utils.getFileExtension(path);\n return !!(ext?.toLowerCase().match(/[a-z]+/) && ext.length < 5);\n}\n\nconst TABLE = 'Table';\nconst TILE = 'Tile';\n\nexport interface FileBrowserProps {\n /** The key to identify this component. */\n key?: string;\n /** Additional styling for this component. */\n style?: React.CSSProperties;\n /** The CSS class name. */\n className?: string;\n /** Translation function. */\n t: Translate;\n /** The selected language. */\n lang: ioBroker.Languages;\n /** The socket connection. */\n socket: Connection;\n /** Shows if the component data ready. */\n ready?: boolean;\n /** Is expert mode enabled? (default: false) */\n expertMode?: boolean;\n /** Show the toolbar? (default: false) */\n showToolbar?: boolean;\n /** If defined, allow selecting only files from this folder and subfolders */\n limitPath?: string;\n /** Allow upload of new files? (default: false) */\n allowUpload?: boolean;\n /** Allow download of files? (default: false) */\n allowDownload?: boolean;\n /** Allow creation of new folders? (default: false) */\n allowCreateFolder?: boolean;\n /** Allow deleting files? (default: false) */\n allowDelete?: boolean;\n /** Allow viewing files? (default: false) */\n allowView?: boolean;\n /** Prefix (default: '.') */\n imagePrefix?: string;\n /** Show the expert button? */\n showExpertButton?: boolean;\n /** Type of view */\n viewType?: 'Table' | 'Tile';\n /** Show the buttons to switch the view from table to tile? (default: false) */\n showViewTypeButton?: boolean;\n /** The ID of the selected file. */\n selected?: string | string[];\n /** The file extensions to show, like ['png', 'svg', 'bmp', 'jpg', 'jpeg', 'gif']. */\n filterFiles?: string[];\n /** The file extension categories to show. */\n filterByType?: 'images' | 'code' | 'txt';\n /** Callback for file selection. */\n onSelect?: (id: string | string[], isDoubleClick?: boolean, isFolder?: boolean) => void;\n /** Theme name */\n themeName?: ThemeName;\n /** Theme type. */\n themeType?: ThemeType;\n /** Theme object. */\n theme: IobTheme;\n\n /** Padding in pixels for folder levels */\n levelPadding?: number;\n\n restrictToFolder?: string;\n\n modalEditOfAccessControl?: (obj: FileBrowserClass) => JSX.Element | null;\n\n allowNonRestricted?: boolean;\n\n showTypeSelector?: boolean;\n\n FileViewer?: React.FC<FileViewerProps>;\n}\n\nexport interface FolderOrFileItem {\n id: string;\n level: number;\n name: string;\n folder: boolean;\n temp?: boolean;\n\n size?: number | undefined;\n ext?: string | null;\n modified?: number;\n title?: ioBroker.StringOrTranslated;\n meta?: boolean;\n from?: string;\n ts?: number;\n color?: string;\n icon?: string;\n acl?: ioBroker.EvaluatedFileACL | MetaACL;\n}\n\nexport type Folders = Record<string, FolderOrFileItem[]>;\n\nfunction sortFolders(a: FolderOrFileItem, b: FolderOrFileItem): number {\n if (a.folder && b.folder) {\n return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;\n }\n if (a.folder) {\n return -1;\n }\n if (b.folder) {\n return 1;\n }\n return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;\n}\n\ninterface FileBrowserState {\n viewType: string;\n folders: Folders;\n filterEmpty: boolean;\n expanded: string[];\n currentDir: string;\n expertMode: boolean;\n addFolder: boolean;\n uploadFile: boolean | 'dragging';\n deleteItem: string;\n viewer: string;\n formatEditFile: string | null;\n path: string;\n selected: string;\n errorText: string;\n modalEditOfAccess: boolean;\n backgroundImage: string | null;\n queueLength: number;\n loadAllFolders: boolean;\n fileErrors: string[];\n filterByType: string;\n showTypesMenu: HTMLButtonElement | null;\n restrictToFolder: string;\n pathFocus: boolean;\n}\n\nexport class FileBrowserClass extends Component<FileBrowserProps, FileBrowserState> {\n private readonly imagePrefix: string;\n\n private readonly levelPadding: number;\n\n private mounted: boolean;\n\n private suppressDeleteConfirm: number;\n\n private browseList:\n | {\n processing?: boolean;\n resolve: null | ((files: ioBroker.ReadDirResult[]) => void);\n reject: null | ((e: any) => void);\n adapter: string | null;\n relPath: string | null;\n }[]\n | null;\n\n private browseListRunning: boolean;\n\n private initialReadFinished: boolean;\n\n private supportSubscribes: boolean | null;\n\n private _tempTimeout: Record<string, ReturnType<typeof setTimeout>>;\n\n private readonly limitToObjectID: string | null = null;\n\n private readonly limitToPath: string | null = null;\n\n private lastSelect: number | null = null;\n\n private setOpacityTimer: ReturnType<typeof setTimeout> | null = null;\n\n private cacheFoldersTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private foldersLoading: boolean | null = null;\n\n private cacheFolders: Folders | null = null;\n\n private readonly localStorage: Storage;\n\n constructor(props: FileBrowserProps) {\n super(props);\n\n this.localStorage = (window as any)._localStorage || window.localStorage;\n const expandedStr = this.localStorage.getItem('files.expanded') || '[]';\n\n if (this.props.limitPath) {\n const parts = this.props.limitPath.split('/');\n this.limitToObjectID = parts[0];\n this.limitToPath = !parts.length ? null : parts.length === 1 && parts[0] === '' ? null : parts.join('/');\n if (this.limitToPath && this.limitToPath.endsWith('/')) {\n this.limitToPath.substring(0, this.limitToPath.length - 1);\n }\n }\n\n let expanded: string[];\n try {\n expanded = JSON.parse(expandedStr);\n if (this.limitToPath) {\n expanded = expanded.filter(\n id =>\n id.startsWith(`${this.limitToPath}/`) ||\n id === this.limitToPath ||\n this.limitToPath?.startsWith(`${id}/`),\n );\n }\n } catch {\n expanded = [];\n }\n\n let viewType;\n if (this.props.showViewTypeButton) {\n viewType = this.localStorage.getItem('files.viewType') || TABLE;\n } else {\n viewType = TABLE;\n }\n\n let selected = this.props.selected || this.localStorage.getItem('files.selected') || USER_DATA;\n\n let currentDir: string;\n\n if (props.restrictToFolder) {\n selected = props.restrictToFolder;\n currentDir = props.restrictToFolder;\n const parts = props.restrictToFolder.split('/');\n expanded = [];\n let path = '';\n for (let i = 0; i < parts.length; i++) {\n path += (path ? '/' : '') + parts[i];\n expanded.push(path);\n }\n } else {\n // TODO: Now we do not support multiple selection\n if (Array.isArray(selected)) {\n selected = selected[0];\n }\n\n if (isFile(selected)) {\n currentDir = getParentDir(selected);\n } else {\n currentDir = selected;\n }\n }\n const backgroundImage = this.localStorage.getItem('files.backgroundImage') || null;\n\n this.state = {\n viewType,\n folders: {},\n filterEmpty: this.localStorage.getItem('files.empty') !== 'false',\n expanded,\n currentDir,\n expertMode: !!props.expertMode,\n addFolder: false,\n uploadFile: false,\n deleteItem: '',\n // marked: [],\n viewer: '',\n formatEditFile: '',\n path: selected,\n selected,\n errorText: '',\n modalEditOfAccess: false,\n backgroundImage,\n queueLength: 0,\n loadAllFolders: false,\n // allFoldersLoaded: false,\n fileErrors: [],\n filterByType: props.filterByType || window.localStorage.getItem('files.filterByType') || '',\n showTypesMenu: null,\n restrictToFolder: props.restrictToFolder || '',\n pathFocus: false,\n };\n\n this.imagePrefix = this.props.imagePrefix || './files/';\n\n this.levelPadding = this.props.levelPadding || 20;\n this.mounted = true;\n this.suppressDeleteConfirm = 0;\n\n this.browseList = [];\n this.browseListRunning = false;\n this.initialReadFinished = false;\n this.supportSubscribes = null;\n this._tempTimeout = {};\n }\n\n static getDerivedStateFromProps(\n props: FileBrowserProps,\n state: FileBrowserState,\n ): Partial<FileBrowserState> | null {\n if (props.expertMode !== undefined && props.expertMode !== state.expertMode) {\n return { expertMode: props.expertMode, loadAllFolders: true };\n }\n\n return null;\n }\n\n async loadFolders(): Promise<void> {\n this.initialReadFinished = false;\n\n let folders = (await this.browseFolder('/')) as unknown as Folders;\n\n if (this.state.viewType === TABLE) {\n folders = (await this.browseFolders([...this.state.expanded], folders)) as unknown as Folders;\n } else if (\n this.state.currentDir &&\n this.state.currentDir !== '/' &&\n (!this.limitToObjectID || this.state.currentDir.startsWith(this.limitToObjectID))\n ) {\n folders = (await this.browseFolder(this.state.currentDir, folders)) as unknown as Folders;\n }\n\n this.setState({ folders }, () => {\n if (this.state.viewType === TABLE && !this.findItem(this.state.selected)) {\n const parts = this.state.selected.split('/');\n while (parts.length && !this.findItem(parts.join('/'))) {\n parts.pop();\n }\n let selected;\n if (parts.length) {\n selected = parts.join('/');\n } else {\n selected = USER_DATA;\n }\n this.setState({ selected, path: selected, pathFocus: false }, () => this.scrollToSelected());\n } else {\n this.scrollToSelected();\n }\n this.initialReadFinished = true;\n });\n }\n\n scrollToSelected(): void {\n if (this.mounted) {\n const el = document.getElementById(this.state.selected);\n el?.scrollIntoView();\n }\n }\n\n async componentDidMount(): Promise<void> {\n this.mounted = true;\n this.loadFolders().catch(error => console.error(`Cannot load folders: ${error}`));\n\n this.supportSubscribes = await this.props.socket.checkFeatureSupported('BINARY_STATE_EVENT');\n if (this.supportSubscribes) {\n await this.props.socket.subscribeFiles('*', '*', this.onFileChange);\n }\n }\n\n componentWillUnmount(): void {\n if (this.supportSubscribes) {\n this.props.socket.unsubscribeFiles('*', '*', this.onFileChange);\n }\n this.mounted = false;\n this.browseList = null;\n this.browseListRunning = false;\n Object.values(this._tempTimeout).forEach(timer => timer && clearTimeout(timer));\n this._tempTimeout = {};\n }\n\n browseFoldersCb(foldersList: string[], newFoldersNotNull: Folders, cb: (folders: Folders) => void): void {\n if (!foldersList?.length) {\n cb(newFoldersNotNull);\n } else {\n const folder = foldersList.shift();\n if (folder) {\n void this.browseFolder(folder, newFoldersNotNull)\n .catch((e: Error) => console.error(`Cannot read folder ${folder}: ${e.message}`))\n .then(() => {\n setTimeout(() => this.browseFoldersCb(foldersList, newFoldersNotNull, cb), 0);\n });\n } else {\n setTimeout(() => this.browseFoldersCb(foldersList, newFoldersNotNull, cb), 0);\n }\n }\n }\n\n browseFolders(foldersList: string[], _newFolders?: Folders | null): Promise<Folders> {\n let newFoldersNotNull: Folders;\n if (!_newFolders) {\n newFoldersNotNull = {};\n Object.keys(this.state.folders).forEach(folder => (newFoldersNotNull[folder] = this.state.folders[folder]));\n } else {\n newFoldersNotNull = _newFolders;\n }\n\n if (!foldersList?.length) {\n return Promise.resolve(newFoldersNotNull);\n }\n return new Promise(resolve => {\n this.browseFoldersCb(foldersList, newFoldersNotNull, resolve);\n });\n }\n\n readDirSerial(adapter: string, relPath: string): Promise<ioBroker.ReadDirResult[]> {\n return new Promise((resolve, reject) => {\n if (this.browseList) {\n // if component still mounted\n this.browseList.push({\n resolve: resolve as unknown as (files: ioBroker.ReadDirResult[]) => void,\n reject,\n adapter,\n relPath,\n });\n if (!this.browseListRunning) {\n this.processBrowseList();\n }\n }\n });\n }\n\n processBrowseList(level: number = 0): void {\n if (!this.browseListRunning && this.browseList && this.browseList.length) {\n this.browseListRunning = true;\n if (this.browseList.length > 10) {\n // not too often\n if (!(this.browseList.length % 10)) {\n this.setState({ queueLength: this.browseList.length });\n }\n } else {\n this.setState({ queueLength: this.browseList.length });\n }\n\n this.browseList[0].processing = true;\n this.props.socket\n .readDir(this.browseList[0].adapter, this.browseList[0].relPath)\n .then(files => {\n if (this.browseList) {\n // if component still mounted\n const item = this.browseList.shift();\n if (item) {\n const resolve = item.resolve;\n item.resolve = null;\n item.reject = null;\n item.adapter = null;\n item.relPath = null;\n if (resolve) {\n resolve(files);\n }\n this.browseListRunning = false;\n if (this.browseList.length) {\n if (level < 5) {\n this.processBrowseList(level + 1);\n } else {\n setTimeout(() => this.processBrowseList(0), 0);\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n }\n })\n .catch(e => {\n if (this.browseList) {\n // if component still mounted\n const item = this.browseList.shift();\n if (item) {\n const reject = item.reject;\n item.resolve = null;\n item.reject = null;\n item.adapter = null;\n item.relPath = null;\n if (reject) {\n reject(e);\n }\n this.browseListRunning = false;\n if (this.browseList.length) {\n if (level < 5) {\n this.processBrowseList(level + 1);\n } else {\n setTimeout(() => this.processBrowseList(0), 0);\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n } else {\n this.setState({ queueLength: 0 });\n }\n }\n });\n }\n }\n\n async browseFolder(\n folderId: string,\n _newFolders?: Folders | null,\n _checkEmpty?: boolean,\n force?: boolean,\n ): Promise<Folders> {\n let newFoldersNotNull: Folders;\n if (!_newFolders) {\n newFoldersNotNull = {};\n Object.keys(this.state.folders).forEach(folder => {\n newFoldersNotNull[folder] = this.state.folders[folder];\n });\n } else {\n newFoldersNotNull = _newFolders;\n }\n\n if (newFoldersNotNull[folderId] && !force) {\n if (!_checkEmpty) {\n return new Promise((resolve, reject) => {\n Promise.all(\n newFoldersNotNull[folderId]\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true).catch(() => undefined)),\n )\n .then(() => resolve(newFoldersNotNull))\n .catch(error => reject(new Error(error)));\n });\n }\n\n return Promise.resolve(newFoldersNotNull);\n }\n\n // if root folder\n if (!folderId || folderId === '/') {\n try {\n let objs = (await this.props.socket.readMetaItems()) as MetaObject[];\n const _folders: FolderOrFileItem[] = [];\n let userData = null;\n\n if (this.state.restrictToFolder) {\n const adapter = this.state.restrictToFolder.split('/')[0];\n objs = objs.filter(obj => obj._id === adapter);\n } else if (!this.state.expertMode) {\n // load only adapter.admin and not other meta files like hm-rpc.0.devices.blablabla\n objs = objs.filter(obj => !obj._id.endsWith('.admin'));\n }\n\n const pos = objs.findIndex(obj => obj._id === 'system.meta.uuid');\n if (pos !== -1) {\n objs.splice(pos, 1);\n }\n\n objs.forEach(obj => {\n if (this.limitToObjectID && this.limitToObjectID !== obj._id) {\n return;\n }\n\n const item: FolderOrFileItem = {\n id: obj._id,\n name: obj._id,\n title: (obj.common && obj.common.name) || obj._id,\n meta: true,\n from: obj.from,\n ts: obj.ts,\n color: obj.common && obj.common.color,\n icon: obj.common && obj.common.icon,\n folder: true,\n acl: obj.acl,\n level: 0,\n };\n\n if (item.id === USER_DATA) {\n // user data must be first\n userData = item;\n } else {\n _folders.push(item);\n }\n });\n\n _folders.sort((a, b) => (a.id > b.id ? 1 : a.id < b.id ? -1 : 0));\n if (!this.limitToObjectID || this.limitToObjectID === USER_DATA) {\n if (userData) {\n _folders.unshift(userData);\n }\n }\n\n newFoldersNotNull[folderId || '/'] = _folders;\n\n if (!_checkEmpty) {\n return Promise.all(\n _folders\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true).catch(() => undefined)),\n ).then(() => newFoldersNotNull);\n }\n } catch (e: unknown) {\n const knownError = e as Error;\n if (this.initialReadFinished) {\n window.alert(`Cannot read meta items: ${knownError.message}`);\n }\n newFoldersNotNull[folderId || '/'] = [];\n }\n return newFoldersNotNull;\n }\n\n const parts = folderId.split('/');\n const level = parts.length;\n const adapter = parts.shift();\n const relPath = parts.join('/');\n\n // make all requests here serial\n let files: ioBroker.ReadDirResult[];\n try {\n files = await this.readDirSerial(adapter || '', relPath);\n } catch (error: unknown) {\n // work around: 0_userdata.0 is a special folder, that should exist event when other folders and itself do not exit, as the browser shows it anyway.\n if (error === 'Not exists' && adapter === '0_userdata.0') {\n files = [];\n } else {\n throw error;\n }\n }\n try {\n const _folders: FolderOrFileItem[] = [];\n\n files.forEach(file => {\n const item: FolderOrFileItem = {\n id: `${folderId}/${file.file}`,\n ext: Utils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats?.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n\n if (this.state.restrictToFolder) {\n if (\n item.folder &&\n (item.id.startsWith(`${this.state.restrictToFolder}/`) ||\n item.id === this.state.restrictToFolder ||\n this.state.restrictToFolder.startsWith(`${item.id}/`))\n ) {\n _folders.push(item);\n } else if (item.id.startsWith(`${this.state.restrictToFolder}/`)) {\n _folders.push(item);\n }\n } else if (this.limitToPath) {\n if (\n item.folder &&\n (item.id.startsWith(`${this.limitToPath}/`) ||\n item.id === this.limitToPath ||\n this.limitToPath.startsWith(`${item.id}/`))\n ) {\n _folders.push(item);\n } else if (item.id.startsWith(`${this.limitToPath}/`)) {\n _folders.push(item);\n }\n } else {\n _folders.push(item);\n }\n });\n\n _folders.sort(sortFolders);\n newFoldersNotNull[folderId] = _folders;\n\n if (!_checkEmpty) {\n return Promise.all(\n _folders\n .filter(item => item.folder)\n .map(item => this.browseFolder(item.id, newFoldersNotNull, true)),\n ).then(() => newFoldersNotNull);\n }\n } catch (e: unknown) {\n const knownError = e as Error;\n if (this.initialReadFinished) {\n window.alert(`Cannot read ${adapter}${relPath ? `/${relPath}` : ''}: ${knownError?.message}`);\n }\n newFoldersNotNull[folderId] = [];\n }\n\n return newFoldersNotNull;\n }\n\n toggleFolder(item: FolderOrFileItem, e: React.MouseEvent): void {\n e?.stopPropagation();\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(item.id);\n if (pos === -1) {\n expanded.push(item.id);\n expanded.sort();\n\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n\n if (!item.temp) {\n this.browseFolder(item.id)\n .then(folders => this.setState({ expanded, folders }))\n .catch(err =>\n window.alert(\n err === NOT_FOUND\n ? this.props.t('ra_Cannot find \"%s\"', item.id)\n : this.props.t('ra_Cannot read \"%s\"', item.id),\n ),\n );\n } else {\n this.setState({ expanded });\n }\n } else {\n expanded.splice(pos, 1);\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n this.setState({ expanded });\n }\n }\n\n onFileChange = (id: string, fileName: string, size: number | null): void => {\n const key = `${id}/${fileName}`;\n const pos = key.lastIndexOf('/');\n const folder = key.substring(0, pos);\n console.log(`File changed ${key}[${size}]`);\n\n if (this.state.folders[folder]) {\n if (this._tempTimeout[folder]) {\n clearTimeout(this._tempTimeout[folder]);\n }\n\n this._tempTimeout[folder] = setTimeout(() => {\n delete this._tempTimeout[folder];\n\n this.browseFolder(folder, null, false, true)\n .then(folders => this.setState({ folders }))\n .catch(e => console.error(`Cannot read folder: ${e.message}`));\n }, 300);\n }\n };\n\n changeFolder(e: React.MouseEvent<HTMLDivElement>, folder?: string): void {\n e?.stopPropagation();\n\n this.lastSelect = Date.now();\n\n let _folder = folder || getParentDir(this.state.currentDir);\n\n if (_folder === '/') {\n _folder = '';\n }\n\n this.localStorage.setItem('files.currentDir', _folder);\n\n if (folder && e && (e.altKey || e.shiftKey || e.ctrlKey || e.metaKey)) {\n this.setState({ selected: _folder });\n return;\n }\n\n // If desired folder is not yet loaded\n if (_folder && !this.state.folders[_folder]) {\n this.browseFolder(_folder)\n .then(folders =>\n this.setState(\n {\n folders,\n path: _folder,\n currentDir: _folder,\n selected: _folder,\n pathFocus: false,\n },\n () => this.props.onSelect && this.props.onSelect(''),\n ),\n )\n .catch(_e => console.error(`Cannot read folder: ${_e.message}`));\n return;\n }\n\n this.setState(\n {\n currentDir: _folder,\n selected: _folder,\n path: _folder,\n pathFocus: false,\n },\n () => this.props.onSelect && this.props.onSelect(''),\n );\n }\n\n select(id: string, e?: React.MouseEvent<HTMLDivElement> | null, cb?: () => void): void {\n if (e) {\n e.stopPropagation();\n }\n this.lastSelect = Date.now();\n\n this.localStorage.setItem('files.selected', id);\n\n this.setState({ selected: id, path: id, pathFocus: false }, () => {\n if (this.props.onSelect) {\n const ext = Utils.getFileExtension(id);\n if (\n (!this.props.filterFiles || (ext && this.props.filterFiles.includes(ext))) &&\n (!this.state.filterByType ||\n (ext && (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(ext)))\n ) {\n this.props.onSelect(id, false, !!this.state.folders[id]);\n } else {\n this.props.onSelect('');\n }\n }\n if (cb) {\n cb();\n }\n });\n }\n\n getText(text?: ioBroker.StringOrTranslated | null): string | undefined {\n if (text) {\n if (typeof text === 'object') {\n return text[this.props.lang] || text.en || undefined;\n }\n return text;\n }\n return undefined;\n }\n\n renderFolder(item: FolderOrFileItem, expanded?: boolean): JSX.Element | null {\n if (\n this.state.viewType === TABLE &&\n this.state.filterEmpty &&\n (!this.state.folders[item.id] || !this.state.folders[item.id].length) &&\n item.id !== USER_DATA &&\n !item.temp\n ) {\n return null;\n }\n const IconEl = expanded ? IconOpen : IconClosed;\n const padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;\n const isUserData = item.name === USER_DATA;\n const isSpecialData = isUserData || item.name === 'vis.0' || item.name === 'vis-2.0';\n\n const iconStyle = Utils.getStyle(\n this.props.theme,\n styles[`itemFolderIcon${this.state.viewType}`],\n isSpecialData && styles.specialFolder,\n );\n return (\n <Box\n component=\"div\"\n key={item.id}\n id={item.id}\n style={this.state.viewType === TABLE ? { marginLeft: padding, width: `calc(100% - ${padding}px` } : {}}\n onClick={e => (this.state.viewType === TABLE ? this.select(item.id, e) : this.changeFolder(e, item.id))}\n onDoubleClick={e => this.state.viewType === TABLE && this.toggleFolder(item, e)}\n title={this.getText(item.title)}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFolder${this.state.viewType}`],\n this.state.selected === item.id ? styles.itemSelected : {},\n item.temp ? styles.itemFolderTemp : {},\n )}\n >\n <IconEl\n style={iconStyle}\n onClick={\n this.state.viewType === TABLE ? (e: React.MouseEvent) => this.toggleFolder(item, e) : undefined\n }\n />\n\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`itemName${this.state.viewType}`],\n styles[`itemNameFolder${this.state.viewType}`],\n )}\n >\n {isUserData ? this.props.t('ra_User files') : item.name}\n </Box>\n\n <Box\n component=\"div\"\n style={styles[`itemSize${this.state.viewType}`]}\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.state.folders[item.id]\n ? this.state.folders[item.id].length\n : ''}\n </Box>\n\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode ? this.formatAcl(item.acl) : null}\n </Box>\n\n {this.state.viewType === TABLE && this.props.expertMode ? (\n <Box\n component=\"div\"\n sx={{ ...styles.itemDeleteButtonTable, display: { md: 'inline-block', sm: 'none' } }}\n />\n ) : null}\n\n {this.state.viewType === TABLE && this.props.allowDownload ? (\n <div style={styles[`itemDownloadEmpty${this.state.viewType}`]} />\n ) : null}\n\n {this.state.viewType === TABLE &&\n this.props.allowDelete &&\n this.state.folders[item.id] &&\n this.state.folders[item.id].length ? (\n <IconButton\n aria-label=\"delete\"\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(item.id);\n } else {\n this.setState({ deleteItem: item.id });\n }\n }}\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n size=\"large\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n ) : this.state.viewType === TABLE && this.props.allowDelete ? (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n ) : null}\n </Box>\n );\n }\n\n renderBackFolder(): JSX.Element {\n return (\n <Box\n component=\"div\"\n key={this.state.currentDir}\n id={this.state.currentDir}\n onClick={e => this.changeFolder(e)}\n title={this.props.t('ra_Back to %s', getParentDir(this.state.currentDir))}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFolder${this.state.viewType}`],\n )}\n >\n <IconClosed style={Utils.getStyle(this.props.theme, styles[`itemFolderIcon${this.state.viewType}`])} />\n <IconBack sx={styles.itemFolderIconBack} />\n\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`itemName${this.state.viewType}`],\n styles[`itemNameFolder${this.state.viewType}`],\n )}\n >\n ..\n </Box>\n </Box>\n );\n }\n\n formatSize(size: number | null | undefined): JSX.Element {\n return (\n <div style={styles[`itemSize${this.state.viewType}`]}>\n {size || size === 0 ? Utils.formatBytes(size) : ''}\n </div>\n );\n }\n\n formatAcl(acl: ioBroker.EvaluatedFileACL | MetaACL | undefined): JSX.Element {\n const access: number = acl ? (acl as ioBroker.EvaluatedFileACL).permissions || (acl as MetaACL).file : 0;\n let accessStr: string;\n if (access) {\n accessStr = access.toString(16).padStart(3, '0');\n } else {\n accessStr = '';\n }\n\n return (\n <div style={styles[`itemAccess${this.state.viewType}`]}>\n {this.props.modalEditOfAccessControl ? (\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ modalEditOfAccess: true })}\n sx={styles[`itemAclButton${this.state.viewType}`]}\n >\n {accessStr || '---'}\n </IconButton>\n ) : (\n accessStr || '---'\n )}\n </div>\n );\n }\n\n getFileIcon(ext: string | null): JSX.Element {\n switch (ext) {\n case 'json':\n case 'json5':\n return <JsonIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'css':\n return <CssIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'js':\n case 'ts':\n return <JSIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'html':\n case 'md':\n return <HtmlIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n case 'mp3':\n case 'ogg':\n case 'wav':\n case 'm4a':\n case 'mp4':\n case 'flac':\n return <MusicIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n\n default:\n return <FileIcon style={styles[`itemIcon${this.state.viewType}`]} />;\n }\n }\n\n static getEditFile(ext: string | null): boolean {\n switch (ext) {\n case 'json':\n case 'json5':\n case 'js':\n case 'html':\n case 'txt':\n case 'css':\n case 'log':\n return true;\n default:\n return false;\n }\n }\n\n setStateBackgroundImage = (): void => {\n const array = ['light', 'dark', 'colored', 'delete'];\n this.setState(({ backgroundImage }) => {\n if (\n backgroundImage &&\n array.indexOf(backgroundImage) !== -1 &&\n array.length - 1 !== array.indexOf(backgroundImage)\n ) {\n this.localStorage.setItem('files.backgroundImage', array[array.indexOf(backgroundImage) + 1]);\n return { backgroundImage: array[array.indexOf(backgroundImage) + 1] };\n }\n this.localStorage.setItem('files.backgroundImage', array[0]);\n return { backgroundImage: array[0] };\n });\n };\n\n getStyleBackgroundImage = (): React.CSSProperties | null => {\n // ['light', 'dark', 'colored', 'delete']\n switch (this.state.backgroundImage) {\n case 'light':\n return styles.backgroundImageLight;\n case 'dark':\n return styles.backgroundImageDark;\n case 'colored':\n return styles.backgroundImageColored;\n case 'delete':\n return null;\n default:\n return null;\n }\n };\n\n renderFile(item: FolderOrFileItem): JSX.Element {\n const padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;\n const ext = Utils.getFileExtension(item.name);\n\n return (\n <Box\n component=\"div\"\n key={item.id}\n id={item.id}\n onDoubleClick={e => {\n e.stopPropagation();\n if (!this.props.onSelect) {\n this.setState({ viewer: this.imagePrefix + item.id, formatEditFile: ext });\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n this.props.onSelect(item.id, true, !!this.state.folders[item.id]);\n }\n }}\n onClick={e => this.select(item.id, e)}\n style={this.state.viewType === TABLE ? { marginLeft: padding, width: `calc(100% - ${padding}px)` } : {}}\n className=\"browserItem\"\n sx={Utils.getStyle(\n this.props.theme,\n styles[`item${this.state.viewType}`],\n styles[`itemFile${this.state.viewType}`],\n this.state.selected === item.id ? styles.itemSelected : undefined,\n )}\n >\n {ext && EXTENSIONS.images.includes(ext) ? (\n this.state.fileErrors.includes(item.id) ? (\n <IconNoIcon\n style={{\n ...styles[`itemImage${this.state.viewType}`],\n ...this.getStyleBackgroundImage(),\n ...styles[`itemNoImage${this.state.viewType}`],\n }}\n />\n ) : (\n <Icon\n onError={e => {\n (e.target as HTMLImageElement).onerror = null;\n const fileErrors = [...this.state.fileErrors];\n if (!fileErrors.includes(item.id)) {\n fileErrors.push(item.id);\n this.setState({ fileErrors });\n }\n }}\n style={{ ...styles[`itemImage${this.state.viewType}`], ...this.getStyleBackgroundImage() }}\n src={this.imagePrefix + item.id}\n alt={item.name}\n />\n )\n ) : (\n this.getFileIcon(ext)\n )}\n <Box\n component=\"div\"\n sx={styles[`itemName${this.state.viewType}`]}\n >\n {item.name}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.formatSize(item.size)}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode ? this.formatAcl(item.acl) : null}\n </Box>\n <Box\n component=\"div\"\n sx={{ display: { md: 'inline-block', sm: 'none' } }}\n >\n {this.state.viewType === TABLE && this.props.expertMode && FileBrowserClass.getEditFile(ext) ? (\n <IconButton\n aria-label=\"edit\"\n onClick={e => {\n e.stopPropagation();\n if (!this.props.onSelect) {\n this.setState({ viewer: this.imagePrefix + item.id, formatEditFile: ext });\n } else if (\n (!this.props.filterFiles ||\n (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(\n item.ext,\n )))\n ) {\n this.props.onSelect(item.id, true, !!this.state.folders[item.id]);\n }\n }}\n sx={styles.itemDeleteButtonTable}\n size=\"large\"\n >\n <EditIcon fontSize=\"small\" />\n </IconButton>\n ) : (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n )}\n </Box>\n {this.state.viewType === TABLE && this.props.allowDownload ? (\n <Box\n component=\"a\"\n className=\"MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeLarge\"\n sx={styles.itemDownloadButtonTable}\n tabIndex={0}\n download={item.id}\n href={this.imagePrefix + item.id}\n onClick={e => e.stopPropagation()}\n >\n <DownloadIcon />\n </Box>\n ) : null}\n\n {this.state.viewType === TABLE &&\n this.props.allowDelete &&\n item.id !== 'vis.0/' &&\n item.id !== 'vis-2.0/' &&\n item.id !== USER_DATA ? (\n <IconButton\n aria-label=\"delete\"\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(item.id);\n } else {\n this.setState({ deleteItem: item.id });\n }\n }}\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n size=\"large\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n ) : this.state.viewType === TABLE && this.props.allowDelete ? (\n <Box\n component=\"div\"\n sx={styles[`itemDeleteButton${this.state.viewType}`]}\n />\n ) : null}\n </Box>\n );\n }\n\n renderItems(folderId: string): JSX.Element | (JSX.Element | null)[] {\n if (this.state.folders && this.state.folders[folderId]) {\n // tile\n if (this.state.viewType === TILE) {\n const res: (JSX.Element | null)[] = [];\n if (folderId && folderId !== '/') {\n res.push(this.renderBackFolder());\n }\n this.state.folders[folderId].forEach(item => {\n if (item.folder) {\n res.push(this.renderFolder(item));\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n res.push(this.renderFile(item));\n }\n });\n return res;\n }\n\n const totalResult: (JSX.Element | null)[] = [];\n this.state.folders[folderId].forEach(item => {\n if (item.folder) {\n const expanded = this.state.expanded.includes(item.id);\n\n const folders = this.renderFolder(item, expanded);\n if (Array.isArray(folders)) {\n folders.forEach(folder => totalResult.push(folder));\n } else {\n totalResult.push(folders);\n }\n if (this.state.folders[item.id] && expanded) {\n const items = this.renderItems(item.id);\n if (Array.isArray(items)) {\n items.forEach(_item => totalResult.push(_item));\n } else {\n totalResult.push(items);\n }\n }\n } else if (\n (!this.props.filterFiles || (item.ext && this.props.filterFiles.includes(item.ext))) &&\n (!this.state.filterByType ||\n (item.ext &&\n (EXTENSIONS as Record<string, string[]>)[this.state.filterByType].includes(item.ext)))\n ) {\n totalResult.push(this.renderFile(item));\n }\n });\n\n return totalResult;\n }\n\n return (\n <div style={{ position: 'relative' }}>\n <CircularProgress\n key={folderId}\n color=\"secondary\"\n size={24}\n />\n <div\n style={{\n position: 'absolute',\n zIndex: 2,\n top: 4,\n width: 24,\n textAlign: 'center',\n }}\n >\n {this.state.queueLength}\n </div>\n </div>\n );\n }\n\n renderToolbar(): JSX.Element {\n const IconType: React.FC<{ fontSize?: 'small' }> | null = this.props.showTypeSelector\n ? FILE_TYPE_ICONS[this.state.filterByType || 'all'] || FILE_TYPE_ICONS.all\n : null;\n\n const isInFolder = this.findFirstFolder(this.state.selected);\n\n return (\n <Toolbar\n key=\"toolbar\"\n variant=\"dense\"\n >\n {this.props.allowNonRestricted && this.props.restrictToFolder ? (\n <IconButton\n edge=\"start\"\n title={\n this.state.restrictToFolder\n ? this.props.t('ra_Show all folders')\n : this.props.t('ra_Restrict to folder')\n }\n style={{\n ...styles.menuButton,\n ...(this.state.restrictToFolder ? styles.menuButtonRestrictActive : undefined),\n }}\n aria-label=\"restricted to folder\"\n onClick={() =>\n this.setState({\n restrictToFolder:\n (this.state.restrictToFolder ? '' : this.props.restrictToFolder) || '',\n loadAllFolders: true,\n })\n }\n size=\"small\"\n >\n <RestrictedIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.showExpertButton ? (\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Toggle expert mode')}\n style={{\n ...styles.menuButton,\n ...(this.state.expertMode ? styles.menuButtonExpertActive : undefined),\n }}\n aria-label=\"expert mode\"\n onClick={() => this.setState({ expertMode: !this.state.expertMode })}\n size=\"small\"\n >\n <IconExpert />\n </IconButton>\n ) : null}\n {this.props.showViewTypeButton ? (\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Toggle view mode')}\n style={styles.menuButton}\n aria-label=\"view mode\"\n onClick={() => {\n const viewType = this.state.viewType === TABLE ? TILE : TABLE;\n this.localStorage.setItem('files.viewType', viewType);\n let currentDir = this.state.selected;\n if (isFile(currentDir)) {\n currentDir = getParentDir(currentDir);\n }\n this.setState({ viewType, currentDir }, () => {\n if (this.state.viewType === TABLE) {\n this.scrollToSelected();\n }\n });\n }}\n size=\"small\"\n >\n {this.state.viewType !== TABLE ? <IconList fontSize=\"small\" /> : <IconTile fontSize=\"small\" />}\n </IconButton>\n ) : null}\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Hide empty folders')}\n style={styles.menuButton}\n color={this.state.filterEmpty ? 'secondary' : 'inherit'}\n aria-label=\"filter empty\"\n onClick={() => {\n this.localStorage.setItem('file.empty', this.state.filterEmpty ? 'false' : 'true');\n this.setState({ filterEmpty: !this.state.filterEmpty });\n }}\n size=\"small\"\n >\n <EmptyFilterIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n edge=\"start\"\n title={this.props.t('ra_Reload files')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"reload files\"\n onClick={() => this.setState({ folders: {} }, () => this.loadFolders())}\n size=\"small\"\n >\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n {this.props.allowCreateFolder ? (\n <IconButton\n edge=\"start\"\n disabled={\n !this.state.selected ||\n !isInFolder ||\n (!!this.limitToPath &&\n !this.state.selected.startsWith(`${this.limitToPath}/`) &&\n this.limitToPath !== this.state.selected)\n }\n title={this.props.t('ra_Create folder')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"add folder\"\n onClick={() => this.setState({ addFolder: true })}\n size=\"small\"\n >\n <AddFolderIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.allowUpload ? (\n <IconButton\n edge=\"start\"\n disabled={\n !this.state.selected ||\n !isInFolder ||\n (!!this.limitToPath &&\n !this.state.selected.startsWith(`${this.limitToPath}/`) &&\n this.limitToPath !== this.state.selected)\n }\n title={this.props.t('ra_Upload file')}\n style={styles.menuButton}\n color=\"inherit\"\n aria-label=\"upload file\"\n onClick={() => this.setState({ uploadFile: true })}\n size=\"small\"\n >\n <UploadIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {this.props.showTypeSelector && IconType ? (\n <Tooltip\n title={this.props.t('ra_Filter files')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"small\"\n onClick={e => this.setState({ showTypesMenu: e.target as HTMLButtonElement })}\n >\n <IconType fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n ) : null}\n {this.state.showTypesMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.showTypesMenu}\n onClose={() => this.setState({ showTypesMenu: null })}\n >\n {Object.keys(FILE_TYPE_ICONS).map(type => {\n const MyIcon: React.FC<{ fontSize?: 'small' }> = FILE_TYPE_ICONS[type];\n return (\n <MenuItem\n key={type}\n selected={this.state.filterByType === type}\n onClick={() => {\n if (type === 'all') {\n this.localStorage.removeItem('files.filterByType');\n this.setState({ filterByType: '', showTypesMenu: null });\n } else {\n this.localStorage.setItem('files.filterByType', type);\n this.setState({ filterByType: type, showTypesMenu: null });\n }\n }}\n >\n <ListItemIcon>\n <MyIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{this.props.t(`ra_fileType_${type}`)}</ListItemText>\n </MenuItem>\n );\n })}\n </Menu>\n ) : null}\n <Tooltip\n title={this.props.t('ra_Background image')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n color=\"inherit\"\n edge=\"start\"\n style={styles.menuButton}\n onClick={this.setStateBackgroundImage}\n size=\"small\"\n >\n <Brightness5Icon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n {this.state.viewType !== TABLE && this.props.allowDelete ? (\n <Tooltip\n title={this.props.t('ra_Delete')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <IconButton\n aria-label=\"delete\"\n disabled={\n !this.state.selected ||\n this.state.selected === 'vis.0/' ||\n this.state.selected === 'vis-2.0/' ||\n this.state.selected === USER_DATA\n }\n color=\"inherit\"\n edge=\"start\"\n style={styles.menuButton}\n onClick={e => {\n e.stopPropagation();\n if (this.suppressDeleteConfirm > Date.now()) {\n this.deleteItem(this.state.selected);\n } else {\n this.setState({ deleteItem: this.state.selected });\n }\n }}\n size=\"small\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n ) : null}\n </Toolbar>\n );\n }\n\n findItem(id: string, folders?: Folders | null): null | FolderOrFileItem {\n folders = folders || this.state.folders;\n if (!folders) {\n return null;\n }\n const parts = id.split('/');\n parts.pop();\n const parentFolder = parts.join('/') || '/';\n if (!folders[parentFolder]) {\n return null;\n }\n return folders[parentFolder].find(item => item.id === id) || null;\n }\n\n renderInputDialog(): JSX.Element | null {\n if (this.state.addFolder) {\n const parentFolder = this.findFirstFolder(this.state.selected);\n\n if (!parentFolder) {\n window.alert(this.props.t('ra_Invalid parent folder!'));\n return null;\n }\n\n return (\n <DialogTextInput\n key=\"inputDialog\"\n applyText={this.props.t('ra_Create')}\n cancelText={this.props.t('ra_Cancel')}\n titleText={this.props.t('ra_Create new folder in %s', this.state.selected)}\n promptText={this.props.t(\n 'ra_If no file will be created in the folder, it will disappear after the browser closed',\n )}\n labelText={this.props.t('ra_Folder name')}\n verify={(text: string) =>\n this.state.folders[parentFolder].find(item => item.name === text)\n ? ''\n : this.props.t('ra_Duplicate name')\n }\n onClose={(name: string | null) => {\n if (name) {\n const folders: Folders = {};\n Object.keys(this.state.folders).forEach(\n folder => (folders[folder] = this.state.folders[folder]),\n );\n const parent = this.findItem(parentFolder);\n const id = `${parentFolder}/${name}`;\n folders[parentFolder].push({\n id,\n level: (parent?.level || 0) + 1,\n name,\n folder: true,\n temp: true,\n });\n\n folders[parentFolder].sort(sortFolders);\n\n folders[id] = [];\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n }\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n this.setState({ addFolder: false, folders, expanded }, () => this.select(id));\n } else {\n this.setState({ addFolder: false });\n }\n }}\n replace={(text: string) => text.replace(/[^-_\\w]/, '_')}\n />\n );\n }\n return null;\n }\n\n componentDidUpdate(/* prevProps , prevState, snapshot */): void {\n if (this.setOpacityTimer) {\n clearTimeout(this.setOpacityTimer);\n }\n this.setOpacityTimer = setTimeout(() => {\n this.setOpacityTimer = null;\n const items = window.document.getElementsByClassName('browserItem');\n for (let i = 0; i < items.length; i++) {\n (items[i] as HTMLElement).style.opacity = '1';\n }\n }, 100);\n }\n\n findFirstFolder(id: string): string | null {\n let parentFolder = id;\n const item = this.findItem(parentFolder);\n // find folder\n if (item && !item.folder) {\n const parts = parentFolder.split('/');\n parts.pop();\n parentFolder = '';\n while (parts.length) {\n const _item = this.findItem(parts.join('/'));\n if (_item?.folder) {\n parentFolder = parts.join('/');\n break;\n }\n parts.pop();\n }\n if (!parts.length) {\n return null;\n }\n }\n\n return parentFolder;\n }\n\n async uploadFile(fileName: string, data: string): Promise<void> {\n const parts: string[] = fileName.split('/');\n const adapterName = parts.shift();\n try {\n await this.props.socket.writeFile64(adapterName || '', parts.join('/'), data);\n } catch (e: unknown) {\n const knownError = e as Error;\n window.alert(`Cannot write file: ${knownError?.message}`);\n }\n }\n\n renderUpload(): JSX.Element[] | null {\n if (this.state.uploadFile) {\n return [\n <Fab\n key=\"close\"\n color=\"primary\"\n aria-label=\"close\"\n style={styles.uploadCloseButton}\n onClick={() => this.setState({ uploadFile: false })}\n >\n <CloseIcon />\n </Fab>,\n <Dropzone\n key=\"dropzone\"\n onDragEnter={() => this.setState({ uploadFile: 'dragging' })}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={acceptedFiles => {\n let count = acceptedFiles.length;\n\n acceptedFiles.forEach(file => {\n const reader = new FileReader();\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n const parentFolder = this.findFirstFolder(this.state.selected);\n\n if (!parentFolder) {\n window.alert(this.props.t('ra_Invalid parent folder!'));\n } else {\n const id = `${parentFolder}/${file.name}`;\n\n void this.uploadFile(id, reader.result as string).then(() => {\n if (!--count) {\n this.setState({ uploadFile: false }, () => {\n if (this.supportSubscribes) {\n // open current folder\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n this.localStorage.setItem(\n 'files.expanded',\n JSON.stringify(expanded),\n );\n }\n this.setState({ expanded }, () => this.select(id));\n } else {\n setTimeout(\n () =>\n this.browseFolder(parentFolder, null, false, true).then(\n folders => {\n // open current folder\n const expanded = [...this.state.expanded];\n if (!expanded.includes(parentFolder)) {\n expanded.push(parentFolder);\n expanded.sort();\n this.localStorage.setItem(\n 'files.expanded',\n JSON.stringify(expanded),\n );\n }\n this.setState({ folders, expanded }, () =>\n this.select(id),\n );\n },\n ),\n 500,\n );\n }\n });\n }\n });\n }\n };\n\n reader.readAsArrayBuffer(file);\n });\n }}\n >\n {({ getRootProps, getInputProps }) => (\n <div\n style={{\n ...styles.uploadDiv,\n ...(this.state.uploadFile === 'dragging' ? styles.uploadDivDragging : undefined),\n }}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n <Box\n component=\"div\"\n sx={styles.uploadCenterDiv}\n >\n <div style={styles.uploadCenterTextAndIcon}>\n <UploadIcon style={styles.uploadCenterIcon} />\n <div style={styles.uploadCenterText}>\n {this.state.uploadFile === 'dragging'\n ? this.props.t('ra_Drop file here')\n : this.props.t(\n 'ra_Place your files here or click here to open the browse dialog',\n )}\n </div>\n </div>\n </Box>\n </div>\n )}\n </Dropzone>,\n ];\n }\n return null;\n }\n\n deleteRecursive(id: string): Promise<void> {\n const item = this.findItem(id);\n if (item?.folder) {\n return (\n this.state.folders[id]\n ? Promise.all(this.state.folders[id].map(_item => this.deleteRecursive(_item.id)))\n : Promise.resolve()\n ).then(() => {\n // If it is a folder of second level\n if (item.level >= 1) {\n const parts = id.split('/');\n const adapter = parts.shift();\n void this.props.socket.deleteFolder(adapter || '', parts.join('/')).then(() => {\n // remove this folder\n const folders = JSON.parse(JSON.stringify(this.state.folders));\n delete folders[item.id];\n // delete folder from parent item\n const parentId = getParentDir(item.id);\n const parentFolder = folders[parentId];\n if (parentFolder) {\n const pos = parentFolder.findIndex((f: FolderOrFileItem) => f.id === item.id);\n if (pos !== -1) {\n parentFolder.splice(pos, 1);\n }\n\n this.select(parentId, null, () => this.setState({ folders }));\n }\n });\n }\n });\n }\n\n const parts = id.split('/');\n const adapter = parts.shift();\n if (parts.length) {\n return this.props.socket\n .deleteFile(adapter || '', parts.join('/'))\n .catch(e => window.alert(`Cannot delete file: ${e}`));\n }\n return Promise.resolve();\n }\n\n deleteItem(deleteItem: string): void {\n deleteItem = deleteItem || this.state.deleteItem;\n\n this.setState({ deleteItem: '' }, () =>\n this.deleteRecursive(deleteItem).then(() => {\n const newState: Partial<FileBrowserState> = {};\n const pos = this.state.expanded.indexOf(deleteItem);\n if (pos !== -1) {\n const expanded = [...this.state.expanded];\n expanded.splice(pos, 1);\n this.localStorage.setItem('files.expanded', JSON.stringify(expanded));\n newState.expanded = expanded;\n }\n\n if (this.state.selected === deleteItem) {\n const parts = this.state.selected.split('/');\n parts.pop();\n newState.selected = parts.join('/');\n }\n\n if (!this.supportSubscribes) {\n const parentFolder = this.findFirstFolder(deleteItem);\n const folders: Folders = {};\n\n Object.keys(this.state.folders).forEach(name => {\n if (name !== parentFolder && !name.startsWith(`${parentFolder}/`)) {\n folders[name] = this.state.folders[name];\n }\n });\n\n newState.folders = folders;\n\n this.setState(newState as FileBrowserState, () =>\n setTimeout(() => {\n this.browseFolders([...this.state.expanded], folders)\n .then(_folders => this.setState({ folders: _folders }))\n .catch(e => console.error(e));\n }, 200),\n );\n } else {\n this.setState(newState as FileBrowserState);\n }\n }),\n );\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (this.state.deleteItem) {\n return (\n <Dialog\n key=\"deleteDialog\"\n open={!0}\n onClose={() => this.setState({ deleteItem: '' })}\n aria-labelledby=\"ar_dialog_file_delete_title\"\n >\n <DialogTitle id=\"ar_dialog_file_delete_title\">\n {this.props.t('ra_Confirm deletion of %s', this.state.deleteItem.split('/').pop())}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>{this.props.t('ra_Are you sure?')}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => {\n this.suppressDeleteConfirm = Date.now() + 60000 * 5;\n this.deleteItem('');\n }}\n >\n {this.props.t('ra_Delete (no confirm for 5 mins)')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.deleteItem('')}\n color=\"primary\"\n autoFocus\n >\n {this.props.t('ra_Delete')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ deleteItem: '' })}\n color=\"grey\"\n >\n {this.props.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderViewDialog(): JSX.Element | null {\n const FileViewerComponent = this.props.FileViewer || FileViewer;\n\n return this.state.viewer ? (\n <FileViewerComponent\n supportSubscribes={this.supportSubscribes}\n key={this.state.viewer}\n href={this.state.viewer}\n formatEditFile={this.state.formatEditFile}\n themeType={this.props.themeType}\n setStateBackgroundImage={this.setStateBackgroundImage}\n getStyleBackgroundImage={this.getStyleBackgroundImage}\n t={this.props.t}\n socket={this.props.socket}\n onClose={() => this.setState({ viewer: '', formatEditFile: '' })}\n />\n ) : null;\n }\n\n renderError(): JSX.Element | null {\n if (this.state.errorText) {\n return (\n <DialogError\n key=\"errorDialog\"\n text={this.state.errorText}\n onClose={() => this.setState({ errorText: '' })}\n />\n );\n }\n return null;\n }\n\n // used in tabs/Files\n // eslint-disable-next-line react/no-unused-class-component-methods\n updateItemsAcl(info: FolderOrFileItem[]): void {\n this.cacheFolders = this.cacheFolders || JSON.parse(JSON.stringify(this.state.folders));\n let changed;\n\n info.forEach(it => {\n const item = this.findItem(it.id, this.cacheFolders);\n if (item && JSON.stringify(item.acl) !== JSON.stringify(it.acl)) {\n item.acl = it.acl;\n changed = true;\n }\n });\n if (changed) {\n if (this.cacheFoldersTimeout) {\n clearTimeout(this.cacheFoldersTimeout);\n }\n this.cacheFoldersTimeout = setTimeout(() => {\n this.cacheFoldersTimeout = null;\n const folders = this.cacheFolders || {};\n this.cacheFolders = null;\n this.setState({ folders });\n }, 200);\n }\n }\n\n changeToPath(): void {\n setTimeout(() => {\n if (this.state.path !== this.state.selected && (!this.lastSelect || Date.now() - this.lastSelect > 100)) {\n let folder = this.state.path;\n if (isFile(this.state.path)) {\n folder = getParentDir(this.state.path);\n }\n new Promise(resolve => {\n if (!this.state.folders[folder]) {\n this.browseFolder(folder)\n .then(folders => this.setState({ folders }, () => resolve(true)))\n .catch(err =>\n this.setState({\n errorText:\n err === NOT_FOUND\n ? this.props.t('ra_Cannot find \"%s\"', folder)\n : this.props.t('ra_Cannot read \"%s\"', folder),\n }),\n );\n } else {\n resolve(true);\n }\n })\n .then(\n result =>\n result &&\n this.setState({ selected: this.state.path, currentDir: folder, pathFocus: false }),\n )\n .catch(e => console.error(e));\n } else if (!this.lastSelect || Date.now() - this.lastSelect > 100) {\n this.setState({ pathFocus: false });\n }\n }, 100);\n }\n\n renderBreadcrumb(): JSX.Element {\n const parts = this.state.currentDir.startsWith('/')\n ? this.state.currentDir.split('/')\n : `/${this.state.currentDir}`.split('/');\n const p: string[] = [];\n return (\n <Breadcrumbs style={{ paddingLeft: 8 }}>\n {parts.map((part, i) => {\n if (part) {\n p.push(part);\n }\n const path = p.join('/');\n if (i < parts.length - 1) {\n return (\n <Box\n component=\"div\"\n key={`${this.state.selected}_${i}`}\n sx={styles.pathDivBreadcrumbDir}\n onClick={e => this.changeFolder(e, path || '/')}\n >\n {part || this.props.t('ra_Root')}\n </Box>\n );\n }\n\n return (\n <div\n style={styles.pathDivBreadcrumbSelected}\n key={`${this.state.selected}_${i}`}\n onClick={() => this.setState({ pathFocus: true })}\n >\n {part}\n </div>\n );\n })}\n </Breadcrumbs>\n );\n }\n\n renderPath(): JSX.Element {\n return (\n <Box\n component=\"div\"\n key=\"path\"\n sx={styles.pathDiv}\n >\n {this.state.pathFocus ? (\n <Input\n value={this.state.path}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n this.changeToPath();\n } else if (e.key === 'Escape') {\n this.setState({ pathFocus: false });\n }\n }}\n endAdornment={\n <IconButton\n size=\"small\"\n onClick={() => this.changeToPath()}\n >\n <EnterIcon />\n </IconButton>\n }\n onBlur={() => this.changeToPath()}\n onChange={e => this.setState({ path: e.target.value })}\n style={styles.pathDivInput}\n />\n ) : (\n this.renderBreadcrumb()\n )}\n </Box>\n );\n }\n\n render(): JSX.Element {\n if (!this.props.ready) {\n return <LinearProgress />;\n }\n\n if (this.state.loadAllFolders && !this.foldersLoading) {\n this.foldersLoading = true;\n setTimeout(() => {\n this.setState({ loadAllFolders: false, folders: {} }, () => {\n this.foldersLoading = false;\n this.loadFolders().catch(error => console.error(`Cannot load folders: ${error}`));\n });\n }, 300);\n }\n\n return (\n <div\n style={{ ...styles.root, ...this.props.style }}\n className={this.props.className}\n >\n {this.props.showToolbar ? this.renderToolbar() : null}\n {this.state.viewType === TILE ? this.renderPath() : null}\n <div\n style={{\n ...styles.filesDiv,\n ...styles[`filesDiv${this.state.viewType}`],\n }}\n onClick={e => {\n if (this.state.viewType !== TABLE) {\n if (this.state.selected !== (this.state.currentDir || '/')) {\n this.changeFolder(e, this.state.currentDir || '/');\n } else {\n e.stopPropagation();\n }\n }\n }}\n >\n {this.state.viewType === TABLE\n ? this.renderItems('/')\n : this.renderItems(this.state.currentDir || '/')}\n {this.state.viewType !== TABLE ? (\n <div style={styles.filesDivHint}>{this.props.t('ra_select_folder_hint')}</div>\n ) : null}\n </div>\n {this.props.allowUpload ? this.renderInputDialog() : null}\n {this.props.allowUpload ? this.renderUpload() : null}\n {this.props.allowDelete ? this.renderDeleteDialog() : null}\n {this.props.allowView ? this.renderViewDialog() : null}\n {this.state.modalEditOfAccess && this.props.modalEditOfAccessControl\n ? this.props.modalEditOfAccessControl(this)\n : null}\n {this.renderError()}\n </div>\n );\n }\n}\n\nexport const FileBrowser = withWidth()(FileBrowserClass);\n"]}