@iobroker/adapter-react-v5 7.7.1 → 7.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/Components/CustomModal.js +4 -2
- package/build/Components/CustomModal.js.map +1 -1
- package/build/Components/FileBrowser.d.ts +1 -1
- package/build/Components/FileBrowser.js +12 -5
- package/build/Components/FileBrowser.js.map +1 -1
- package/build/Components/FileViewer.js +1 -1
- package/build/Components/FileViewer.js.map +1 -1
- package/build/Components/ObjectBrowser.d.ts +2 -0
- package/build/Components/ObjectBrowser.js +31 -7
- package/build/Components/ObjectBrowser.js.map +1 -1
- package/build/Components/Utils.d.ts +7 -6
- package/build/Components/Utils.js +68 -62
- package/build/Components/Utils.js.map +1 -1
- package/build/Dialogs/SelectFile.d.ts +2 -0
- package/build/Dialogs/SelectFile.js +2 -3
- package/build/Dialogs/SelectFile.js.map +1 -1
- package/build/Dialogs/SelectID.d.ts +2 -1
- package/build/Dialogs/SelectID.js +3 -3
- package/build/Dialogs/SelectID.js.map +1 -1
- package/build/LegacyConnection.d.ts +14 -1
- package/build/LegacyConnection.js +26 -2
- package/build/LegacyConnection.js.map +1 -1
- package/build/i18n/de.json +8 -0
- package/build/i18n/en.json +8 -0
- package/build/i18n/es.json +8 -0
- package/build/i18n/fr.json +8 -0
- package/build/i18n/it.json +3 -0
- package/build/i18n/nl.json +3 -0
- package/build/i18n/pl.json +6 -3
- package/build/i18n/pt.json +3 -0
- package/build/i18n/ru.json +3 -0
- package/build/i18n/uk.json +3 -0
- package/build/i18n/zh-cn.json +3 -0
- package/build/types.d.ts +2 -0
- package/i18n/de.json +8 -0
- package/i18n/en.json +8 -0
- package/i18n/es.json +8 -0
- package/i18n/fr.json +8 -0
- package/i18n/it.json +3 -0
- package/i18n/nl.json +3 -0
- package/i18n/pl.json +6 -3
- package/i18n/pt.json +3 -0
- package/i18n/ru.json +3 -0
- package/i18n/uk.json +3 -0
- package/i18n/zh-cn.json +3 -0
- package/package.json +9 -8
- package/craco-module-federation.js +0 -62
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Button } from '@mui/material';
|
|
2
|
+
import { Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Button, useMediaQuery, useTheme } from '@mui/material';
|
|
3
3
|
import { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';
|
|
4
4
|
import { I18n } from '../i18n';
|
|
5
5
|
import { Utils } from './Utils';
|
|
@@ -33,11 +33,13 @@ export function CustomModal(props) {
|
|
|
33
33
|
useEffect(() => {
|
|
34
34
|
setValue(defaultValue || '');
|
|
35
35
|
}, [defaultValue]);
|
|
36
|
+
const muiTheme = useTheme();
|
|
37
|
+
const isSmallScreen = useMediaQuery(muiTheme.breakpoints.down('md'));
|
|
36
38
|
let Icon = null;
|
|
37
39
|
if (icon) {
|
|
38
40
|
Icon = icon;
|
|
39
41
|
}
|
|
40
|
-
return (React.createElement(Dialog, { open: open, maxWidth: maxWidth || 'md', fullWidth: !!fullWidth, disableEscapeKeyDown: false, onClose: onClose, sx: { '& .MuiDialog-paper': styles.modalDialog } },
|
|
42
|
+
return (React.createElement(Dialog, { open: open, maxWidth: isSmallScreen ? false : maxWidth || 'md', fullWidth: !!fullWidth, fullScreen: isSmallScreen, disableEscapeKeyDown: false, onClose: onClose, sx: { '& .MuiDialog-paper': isSmallScreen ? {} : styles.modalDialog } },
|
|
41
43
|
title && (React.createElement(DialogTitle, null,
|
|
42
44
|
icon ? React.createElement(Icon, { style: styles.titleIcon }) : null,
|
|
43
45
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomModal.js","sourceRoot":"./src/","sources":["Components/CustomModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomModal.js","sourceRoot":"./src/","sources":["Components/CustomModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport { Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Button, useMediaQuery, useTheme } from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n } from '../i18n';\nimport type { IobTheme } from '../types';\nimport { Utils } from './Utils';\n\nconst styles: Record<string, any> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface CustomModalProps {\n icon?: any;\n open: boolean;\n onClose: () => void;\n children: React.JSX.Element | null;\n titleButtonClose?: string;\n titleButtonApply?: string;\n onApply: (result: string) => void;\n fullWidth?: boolean;\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n applyButton?: boolean;\n applyDisabled?: boolean;\n overflowHidden?: boolean;\n help?: string;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n title?: string;\n progress?: boolean;\n textInput?: boolean;\n defaultValue?: string;\n theme: IobTheme;\n}\n\nexport function CustomModal(props: CustomModalProps): React.JSX.Element {\n const {\n open,\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n applyDisabled,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n } = props;\n\n const [value, setValue] = useState<string>(defaultValue || '');\n\n useEffect(() => {\n setValue(defaultValue || '');\n }, [defaultValue]);\n\n const muiTheme = useTheme();\n const isSmallScreen = useMediaQuery(muiTheme.breakpoints.down('md'));\n\n let Icon = null;\n\n if (icon) {\n Icon = icon;\n }\n\n return (\n <Dialog\n open={open}\n maxWidth={isSmallScreen ? false : maxWidth || 'md'}\n fullWidth={!!fullWidth}\n fullScreen={isSmallScreen}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiDialog-paper': isSmallScreen ? {} : styles.modalDialog }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n sx={Utils.getStyle(\n props.theme,\n styles.languageButton,\n noTranslation && styles.languageButtonActive,\n )}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n style={{ ...styles.content, ...(overflowHidden ? styles.overflowHidden : undefined), paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"outlined\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {applyButton !== false && (\n <Button\n startIcon={<CheckIcon />}\n disabled={progress || (applyDisabled && defaultValue === value)}\n onClick={() => onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'ra_Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright 2020-
|
|
2
|
+
* Copyright 2020-2025, Denis Haev <dogafox@gmail.com>
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
@@ -544,6 +544,8 @@ export class FileBrowserClass extends Component {
|
|
|
544
544
|
async componentDidMount() {
|
|
545
545
|
this.mounted = true;
|
|
546
546
|
this.loadFolders().catch(error => console.error(`Cannot load folders: ${error}`));
|
|
547
|
+
this.browseList = [];
|
|
548
|
+
this.browseListRunning = false;
|
|
547
549
|
this.supportSubscribes = await this.props.socket.checkFeatureSupported('BINARY_STATE_EVENT');
|
|
548
550
|
if (this.supportSubscribes) {
|
|
549
551
|
await this.props.socket.subscribeFiles('*', '*', this.onFileChange);
|
|
@@ -556,7 +558,11 @@ export class FileBrowserClass extends Component {
|
|
|
556
558
|
this.mounted = false;
|
|
557
559
|
this.browseList = null;
|
|
558
560
|
this.browseListRunning = false;
|
|
559
|
-
Object.values(this._tempTimeout).forEach(timer =>
|
|
561
|
+
Object.values(this._tempTimeout).forEach(timer => {
|
|
562
|
+
if (timer) {
|
|
563
|
+
clearTimeout(timer);
|
|
564
|
+
}
|
|
565
|
+
});
|
|
560
566
|
this._tempTimeout = {};
|
|
561
567
|
}
|
|
562
568
|
browseFoldersCb(foldersList, newFoldersNotNull, cb) {
|
|
@@ -623,7 +629,7 @@ export class FileBrowserClass extends Component {
|
|
|
623
629
|
}
|
|
624
630
|
this.browseList[0].processing = true;
|
|
625
631
|
this.props.socket
|
|
626
|
-
.readDir(this.browseList[0].adapter, this.browseList[0].relPath)
|
|
632
|
+
.readDir(this.browseList[0].adapter, this.browseList[0].relPath || '')
|
|
627
633
|
.then(files => {
|
|
628
634
|
if (this.browseList) {
|
|
629
635
|
// if component still mounted
|
|
@@ -987,7 +993,7 @@ export class FileBrowserClass extends Component {
|
|
|
987
993
|
const isSpecialData = isUserData || item.name === 'vis.0' || item.name === 'vis-2.0';
|
|
988
994
|
const iconStyle = Utils.getStyle(this.props.theme, styles[`itemFolderIcon${this.state.viewType}`], isSpecialData && styles.specialFolder);
|
|
989
995
|
return (React.createElement(Box, { component: "div", key: item.id, id: item.id, style: this.state.viewType === TABLE
|
|
990
|
-
? { marginLeft: padding, width: `calc(100% - ${padding}px` }
|
|
996
|
+
? { marginLeft: padding, width: `calc(100% - ${padding}px)` }
|
|
991
997
|
: undefined, onClick: e => (this.state.viewType === TABLE ? this.select(item.id, e) : this.changeFolder(e, item.id)), onDoubleClick: e => this.state.viewType === TABLE && this.toggleFolder(item, e), title: this.getText(item.title), className: "browserItem", sx: Utils.getStyle(this.props.theme, styles[`item${this.state.viewType}`], styles[`itemFolder${this.state.viewType}`], this.state.selected === item.id ? styles.itemSelected : {}, item.temp ? styles.itemFolderTemp : {}) },
|
|
992
998
|
React.createElement(IconEl, { style: iconStyle, onClick: this.state.viewType === TABLE ? (e) => this.toggleFolder(item, e) : undefined }),
|
|
993
999
|
React.createElement(Box, { component: "div", sx: Utils.getStyle(this.props.theme, styles[`itemName${this.state.viewType}`], styles[`itemNameFolder${this.state.viewType}`]) }, isUserData ? this.props.t('ra_User files') : item.name),
|
|
@@ -1064,6 +1070,7 @@ export class FileBrowserClass extends Component {
|
|
|
1064
1070
|
case 'txt':
|
|
1065
1071
|
case 'css':
|
|
1066
1072
|
case 'log':
|
|
1073
|
+
case 'csv':
|
|
1067
1074
|
return true;
|
|
1068
1075
|
default:
|
|
1069
1076
|
return false;
|
|
@@ -1568,7 +1575,7 @@ export class FileBrowserClass extends Component {
|
|
|
1568
1575
|
}
|
|
1569
1576
|
renderViewDialog() {
|
|
1570
1577
|
const FileViewerComponent = this.props.FileViewer || FileViewer;
|
|
1571
|
-
return this.state.viewer ? (React.createElement(FileViewerComponent, { supportSubscribes: this.supportSubscribes, key: this.state.viewer, href: this.state.viewer, formatEditFile: this.state.formatEditFile, themeType: this.props.themeType, setStateBackgroundImage: this.setStateBackgroundImage, getStyleBackgroundImage: this.getStyleBackgroundImage, t: this.props.t, socket: this.props.socket, onClose: () => this.setState({ viewer: '', formatEditFile: '' }) })) : null;
|
|
1578
|
+
return this.state.viewer ? (React.createElement(FileViewerComponent, { supportSubscribes: this.supportSubscribes || undefined, key: this.state.viewer, href: this.state.viewer, formatEditFile: this.state.formatEditFile || undefined, themeType: this.props.themeType || 'light', setStateBackgroundImage: this.setStateBackgroundImage, getStyleBackgroundImage: this.getStyleBackgroundImage, t: this.props.t, socket: this.props.socket, onClose: () => this.setState({ viewer: '', formatEditFile: '' }) })) : null;
|
|
1572
1579
|
}
|
|
1573
1580
|
renderError() {
|
|
1574
1581
|
if (this.state.errorText) {
|