UNPKG

@iobroker/adapter-react-v5

Version:

React components to develop ioBroker interfaces with react.

188 lines (187 loc) 7.18 kB
/** * Copyright 2020-2025, Denis Haev <dogafox@gmail.com> * * MIT License * */ import React, { Component, type JSX } from 'react'; import type { Connection } from '@iobroker/socket-client'; import type { ThemeName, ThemeType, Translate, IobTheme } from '../types'; import { type FileViewerProps } from './FileViewer'; export interface MetaACL extends ioBroker.ObjectACL { file: number; } export interface MetaObject extends ioBroker.MetaObject { acl: MetaACL; } export interface FileBrowserProps { /** The key to identify this component. */ key?: string; /** Additional styling for this component. */ style?: React.CSSProperties; /** The CSS class name. */ className?: string; /** Translation function. */ t: Translate; /** The selected language. */ lang: ioBroker.Languages; /** The socket connection. */ socket: Connection; /** Shows if the component data ready. */ ready?: boolean; /** Is expert mode enabled? (default: false) */ expertMode?: boolean; /** Show the toolbar? (default: false) */ showToolbar?: boolean; /** If defined, allow selecting only files from this folder and subfolders */ limitPath?: string; /** Allow upload of new files? (default: false) */ allowUpload?: boolean; /** Allow download of files? (default: false) */ allowDownload?: boolean; /** Allow creation of new folders? (default: false) */ allowCreateFolder?: boolean; /** Allow deleting files? (default: false) */ allowDelete?: boolean; /** Allow viewing files? (default: false) */ allowView?: boolean; /** Prefix (default: '.') */ imagePrefix?: string; /** Show the expert button? */ showExpertButton?: boolean; /** Type of view */ viewType?: 'Table' | 'Tile'; /** Show the buttons to switch the view from table to tile? (default: false) */ showViewTypeButton?: boolean; /** The ID of the selected file. */ selected?: string | string[]; /** The file extensions to show, like ['png', 'svg', 'bmp', 'jpg', 'jpeg', 'gif']. */ filterFiles?: string[]; /** The file extension categories to show. */ filterByType?: 'images' | 'code' | 'txt'; /** Callback for file selection. */ onSelect?: (id: string | string[], isDoubleClick?: boolean, isFolder?: boolean) => void; /** Theme name */ themeName?: ThemeName; /** Theme type. */ themeType?: ThemeType; /** Theme object. */ theme: IobTheme; /** Padding in pixels for folder levels */ levelPadding?: number; restrictToFolder?: string; modalEditOfAccessControl?: (obj: FileBrowserClass) => JSX.Element | null; allowNonRestricted?: boolean; showTypeSelector?: boolean; FileViewer?: React.FC<FileViewerProps>; } export interface FolderOrFileItem { id: string; level: number; name: string; folder: boolean; temp?: boolean; size?: number | undefined; ext?: string | null; modified?: number; title?: ioBroker.StringOrTranslated; meta?: boolean; from?: string; ts?: number; color?: string; icon?: string; acl?: ioBroker.EvaluatedFileACL | MetaACL; } export type Folders = Record<string, FolderOrFileItem[]>; interface FileBrowserState { viewType: 'Table' | 'Tile'; folders: Folders; filterEmpty: boolean; expanded: string[]; currentDir: string; expertMode: boolean; addFolder: boolean; uploadFile: boolean | 'dragging'; deleteItem: string; suppressDeleteConfirm: boolean; viewer: string; formatEditFile: string | null; path: string; selected: string; errorText: string; modalEditOfAccess: boolean; backgroundImage: string | null; queueLength: number; loadAllFolders: boolean; fileErrors: string[]; filterByType: string; showTypesMenu: HTMLButtonElement | null; restrictToFolder: string; pathFocus: boolean; } export declare class FileBrowserClass extends Component<FileBrowserProps, FileBrowserState> { private readonly imagePrefix; private readonly levelPadding; private mounted; private suppressDeleteConfirm; private browseList; private browseListRunning; private initialReadFinished; private supportSubscribes; private _tempTimeout; private readonly limitToObjectID; private readonly limitToPath; private lastSelect; private setOpacityTimer; private cacheFoldersTimeout; private foldersLoading; private cacheFolders; private readonly localStorage; private readonly scrollPositions; private readonly refFileDiv; constructor(props: FileBrowserProps); static getDerivedStateFromProps(props: FileBrowserProps, state: FileBrowserState): Partial<FileBrowserState> | null; loadFolders(): Promise<void>; scrollToSelected(): void; componentDidMount(): Promise<void>; componentWillUnmount(): void; browseFoldersCb(foldersList: string[], newFoldersNotNull: Folders, cb: (folders: Folders) => void): void; browseFolders(foldersList: string[], _newFolders?: Folders | null): Promise<Folders>; readDirSerial(adapter: string, relPath: string): Promise<ioBroker.ReadDirResult[]>; processBrowseList(level?: number): void; browseFolder(folderId: string, _newFolders?: Folders | null, _checkEmpty?: boolean, force?: boolean): Promise<Folders>; toggleFolder(item: FolderOrFileItem, e: React.MouseEvent): void; onFileChange: (id: string, fileName: string, size: number | null) => void; changeFolder(e: React.MouseEvent<HTMLDivElement>, folder?: string): void; select(id: string, e?: React.MouseEvent<HTMLDivElement> | null, cb?: () => void): void; getText(text?: ioBroker.StringOrTranslated | null): string | undefined; renderFolder(item: FolderOrFileItem, expanded?: boolean): JSX.Element | null; renderBackFolder(): JSX.Element; formatSize(size: number | null | undefined): JSX.Element; formatAcl(acl: ioBroker.EvaluatedFileACL | MetaACL | undefined): JSX.Element; getFileIcon(ext: string | null): JSX.Element; static getEditFile(ext: string | null): boolean; setStateBackgroundImage: () => void; getStyleBackgroundImage: () => React.CSSProperties | null; renderFile(item: FolderOrFileItem): JSX.Element; renderItems(folderId: string): JSX.Element | (JSX.Element | null)[]; renderToolbar(): JSX.Element; findItem(id: string, folders?: Folders | null): null | FolderOrFileItem; renderInputDialog(): JSX.Element | null; componentDidUpdate(): void; findFirstFolder(id: string): string | null; uploadFile(fileName: string, data: string): Promise<void>; renderUpload(): JSX.Element[] | null; deleteRecursive(id: string): Promise<void>; deleteItem(deleteItem: string): void; renderDeleteDialog(): JSX.Element | null; renderViewDialog(): JSX.Element | null; renderError(): JSX.Element | null; updateItemsAcl(info: FolderOrFileItem[]): void; changeToPath(): void; renderBreadcrumb(): JSX.Element; renderPath(): JSX.Element; render(): JSX.Element; } export declare const FileBrowser: (props: Record<string, any>) => JSX.Element; export {};