@iobroker/adapter-react-v5 3.1.3 → 3.1.4
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/Components/FileBrowser.js +277 -237
- package/Components/FileBrowser.js.map +1 -1
- package/Components/FileViewer.js +3 -1
- package/Components/FileViewer.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigAutocomplete.js +5 -3
- package/Components/JsonConfigComponent/ConfigAutocomplete.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js +5 -3
- package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigCertificateSelect.js +16 -2
- package/Components/JsonConfigComponent/ConfigCertificateSelect.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigCustom.js +148 -25
- package/Components/JsonConfigComponent/ConfigCustom.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigGeneric.js +105 -20
- package/Components/JsonConfigComponent/ConfigGeneric.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigInstanceSelect.js +132 -46
- package/Components/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigLanguage.js +25 -1
- package/Components/JsonConfigComponent/ConfigLanguage.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigNumber.js +5 -4
- package/Components/JsonConfigComponent/ConfigNumber.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigObjectId.js +3 -2
- package/Components/JsonConfigComponent/ConfigObjectId.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigPanel.js +51 -40
- package/Components/JsonConfigComponent/ConfigPanel.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigPattern.js +1 -1
- package/Components/JsonConfigComponent/ConfigPattern.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigSelect.js +4 -2
- package/Components/JsonConfigComponent/ConfigSelect.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigSendto.js +2 -2
- package/Components/JsonConfigComponent/ConfigSendto.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigSetState.js +2 -2
- package/Components/JsonConfigComponent/ConfigSetState.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigStaticHeader.js +31 -8
- package/Components/JsonConfigComponent/ConfigStaticHeader.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigStaticImage.js +1 -1
- package/Components/JsonConfigComponent/ConfigStaticImage.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigTable.js +1 -1
- package/Components/JsonConfigComponent/ConfigTable.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigTabs.js +12 -3
- package/Components/JsonConfigComponent/ConfigTabs.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigText.js +4 -2
- package/Components/JsonConfigComponent/ConfigText.js.map +1 -1
- package/Components/JsonConfigComponent/ConfigTopic.js.map +1 -1
- package/Components/JsonConfigComponent/index.js +12 -4
- package/Components/JsonConfigComponent/index.js.map +1 -1
- package/Components/ObjectBrowser.js +228 -222
- package/Components/ObjectBrowser.js.map +1 -1
- package/Components/TableResize.js +34 -16
- package/Components/TableResize.js.map +1 -1
- package/Components/TreeTable.js +2 -2
- package/Components/TreeTable.js.map +1 -1
- package/Components/Utils.js +5 -5
- package/Components/Utils.js.map +1 -1
- package/Dialogs/Confirm.js +3 -3
- package/Dialogs/Confirm.js.map +1 -1
- package/Dialogs/FileSelect.js +259 -0
- package/Dialogs/FileSelect.js.map +1 -0
- package/Dialogs/SelectID.js +15 -16
- package/Dialogs/SelectID.js.map +1 -1
- package/README.md +3 -0
- package/package.json +1 -1
- package/GenericApp.js +0 -1025
- package/GenericApp.js.map +0 -1
- package/Prompt.js +0 -21
- package/Prompt.js.map +0 -1
- package/Theme.js +0 -422
- package/Theme.js.map +0 -1
- package/i18n.js +0 -180
- package/i18n.js.map +0 -1
package/Dialogs/Confirm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Confirm.js","names":["styles","suppress","fontSize","suppressRoot","marginTop","DialogConfirm","props","dialogName","suppressQuestionMinutes","Error","parseInt","window","localStorage","getItem","Date","now","removeItem","state","setItem","onClose","setTimeout","event","reason","handleCancel","title","I18n","t","icon","text","label","classes","root","setState","suppressText","handleOk","ok","cancel","React","Component","propTypes","PropTypes","func","isRequired","string","object","number","_export","withStyles"],"sources":["Confirm.js"],"sourcesContent":["/**\n * Copyright 2019-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport IconCheck from '@mui/icons-material/Check';\nimport IconClose from '@mui/icons-material/Close';\n\nimport I18n from '../i18n';\n\nconst styles = {\n suppress: {\n fontSize: 12,\n },\n suppressRoot: {\n marginTop: 16\n }\n};\n\n/**\n * @typedef {object} DialogConfirmProps\n * @property {string} [key] The key to identify this component.\n * @property {string} [title] The dialog title; default: Are you sure? (translated)\n * @property {string} text The dialog text.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {string} [suppressQuestionMinutes] interval in minutes for which the confirm dialog will be suppressed if activated.\n * @property {string} [suppressText] The suppress checkbox text; default: Suppress question for next %s minutes (translated)\n * @property {string} [dialogName] Name of the dialog. Used only with suppressQuestionMinutes to store the user choice\n * @property {(ok: boolean) => void} [onClose] Close handler.\n *\n * @extends {React.Component<DialogConfirmProps>}\n */\nclass DialogConfirm extends React.Component {\n constructor(props) {\n super(props);\n\n if (!this.props.dialogName && this.props.suppressQuestionMinutes) {\n throw new Error('dialogName required if suppressQuestionMinutes used');\n }\n let suppress = false;\n\n if (this.props.suppressQuestionMinutes) {\n suppress = parseInt(window.localStorage.getItem(this.props.dialogName), 10) || 0;\n\n if (!suppress) {\n suppress = false;\n } else if (Date.now() > suppress) {\n window.localStorage.removeItem(this.props.dialogName);\n suppress = false;\n }\n }\n\n this.state = {\n suppress,\n };\n }\n\n handleOk() {\n if (this.state.suppress) {\n window.localStorage.setItem(this.props.dialogName, Date.now() + this.props.suppressQuestionMinutes * 60000);\n }\n this.props.onClose && this.props.onClose(true);\n };\n\n handleCancel() {\n this.props.onClose && this.props.onClose(false);\n };\n\n render() {\n if (typeof this.state.suppress === 'number') {\n setTimeout(() => this.props.onClose && this.props.onClose(true), 100);\n return null;\n }\n\n return <Dialog\n open={true}\n maxWidth=\"md\"\n fullWidth={true}\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n this.handleCancel()\n }\n }}\n aria-labelledby=\"confirmation-dialog-title\"\n aria-describedby=\"confirmation-dialog-description\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('ra_Are you sure?')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"confirmation-dialog-description\">\n {this.props.icon || null}\n {this.props.text}\n {this.props.suppressQuestionMinutes ? <br/> : null}\n {this.props.suppressQuestionMinutes ?\n <FormControlLabel\n classes={{label: this.props.classes.suppress, root: this.props.classes.suppressRoot}}\n control={<Checkbox checked={!!this.state.suppress} onChange={() => this.setState({suppress: !this.state.suppress})} />}\n label={this.props.suppressText || I18n.t('ra_Suppress question for next %s minutes', this.props.suppressQuestionMinutes)}\n /> :\n null}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconCheck />}>{this.props.ok || I18n.t('ra_Ok')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"grey\" startIcon={<IconClose />}>{this.props.cancel || I18n.t('ra_Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogConfirm.propTypes = {\n onClose: PropTypes.func.isRequired,\n title: PropTypes.string,\n text: PropTypes.string,\n ok: PropTypes.string,\n cancel: PropTypes.string,\n icon: PropTypes.object,\n suppressQuestionMinutes: PropTypes.number,\n suppressText: PropTypes.string,\n dialogName: PropTypes.string,\n};\n\nconst _export = withStyles(styles)(DialogConfirm);\nexport default _export;"],"mappings":";;;;;;;;;;;;;;;;;;;AAQA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;;;;;AAEA,IAAMA,MAAM,GAAG;EACXC,QAAQ,EAAE;IACNC,QAAQ,EAAE;EADJ,CADC;EAIXC,YAAY,EAAE;IACVC,SAAS,EAAE;EADD;AAJH,CAAf;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACMC,a;;;;;EACF,uBAAYC,KAAZ,EAAmB;IAAA;;IAAA;IACf,0BAAMA,KAAN;;IAEA,IAAI,CAAC,MAAKA,KAAL,CAAWC,UAAZ,IAA0B,MAAKD,KAAL,CAAWE,uBAAzC,EAAkE;MAC9D,MAAM,IAAIC,KAAJ,CAAU,qDAAV,CAAN;IACH;;IACD,IAAIR,QAAQ,GAAG,KAAf;;IAEA,IAAI,MAAKK,KAAL,CAAWE,uBAAf,EAAwC;MACpCP,QAAQ,GAAGS,QAAQ,CAACC,MAAM,CAACC,
|
|
1
|
+
{"version":3,"file":"Confirm.js","names":["styles","suppress","fontSize","suppressRoot","marginTop","DialogConfirm","props","dialogName","suppressQuestionMinutes","Error","parseInt","window","_localStorage","localStorage","getItem","Date","now","removeItem","state","setItem","onClose","setTimeout","event","reason","handleCancel","title","I18n","t","icon","text","label","classes","root","setState","suppressText","handleOk","ok","cancel","React","Component","propTypes","PropTypes","func","isRequired","string","object","number","_export","withStyles"],"sources":["Confirm.js"],"sourcesContent":["/**\n * Copyright 2019-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport IconCheck from '@mui/icons-material/Check';\nimport IconClose from '@mui/icons-material/Close';\n\nimport I18n from '../i18n';\n\nconst styles = {\n suppress: {\n fontSize: 12,\n },\n suppressRoot: {\n marginTop: 16\n }\n};\n\n/**\n * @typedef {object} DialogConfirmProps\n * @property {string} [key] The key to identify this component.\n * @property {string} [title] The dialog title; default: Are you sure? (translated)\n * @property {string} text The dialog text.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {string} [suppressQuestionMinutes] interval in minutes for which the confirm dialog will be suppressed if activated.\n * @property {string} [suppressText] The suppress checkbox text; default: Suppress question for next %s minutes (translated)\n * @property {string} [dialogName] Name of the dialog. Used only with suppressQuestionMinutes to store the user choice\n * @property {(ok: boolean) => void} [onClose] Close handler.\n *\n * @extends {React.Component<DialogConfirmProps>}\n */\nclass DialogConfirm extends React.Component {\n constructor(props) {\n super(props);\n\n if (!this.props.dialogName && this.props.suppressQuestionMinutes) {\n throw new Error('dialogName required if suppressQuestionMinutes used');\n }\n let suppress = false;\n\n if (this.props.suppressQuestionMinutes) {\n suppress = parseInt((window._localStorage || window.localStorage).getItem(this.props.dialogName), 10) || 0;\n\n if (!suppress) {\n suppress = false;\n } else if (Date.now() > suppress) {\n (window._localStorage || window.localStorage).removeItem(this.props.dialogName);\n suppress = false;\n }\n }\n\n this.state = {\n suppress,\n };\n }\n\n handleOk() {\n if (this.state.suppress) {\n (window._localStorage || window.localStorage).setItem(this.props.dialogName, Date.now() + this.props.suppressQuestionMinutes * 60000);\n }\n this.props.onClose && this.props.onClose(true);\n };\n\n handleCancel() {\n this.props.onClose && this.props.onClose(false);\n };\n\n render() {\n if (typeof this.state.suppress === 'number') {\n setTimeout(() => this.props.onClose && this.props.onClose(true), 100);\n return null;\n }\n\n return <Dialog\n open={true}\n maxWidth=\"md\"\n fullWidth={true}\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n this.handleCancel()\n }\n }}\n aria-labelledby=\"confirmation-dialog-title\"\n aria-describedby=\"confirmation-dialog-description\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('ra_Are you sure?')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"confirmation-dialog-description\">\n {this.props.icon || null}\n {this.props.text}\n {this.props.suppressQuestionMinutes ? <br/> : null}\n {this.props.suppressQuestionMinutes ?\n <FormControlLabel\n classes={{label: this.props.classes.suppress, root: this.props.classes.suppressRoot}}\n control={<Checkbox checked={!!this.state.suppress} onChange={() => this.setState({suppress: !this.state.suppress})} />}\n label={this.props.suppressText || I18n.t('ra_Suppress question for next %s minutes', this.props.suppressQuestionMinutes)}\n /> :\n null}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconCheck />}>{this.props.ok || I18n.t('ra_Ok')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"grey\" startIcon={<IconClose />}>{this.props.cancel || I18n.t('ra_Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogConfirm.propTypes = {\n onClose: PropTypes.func.isRequired,\n title: PropTypes.string,\n text: PropTypes.string,\n ok: PropTypes.string,\n cancel: PropTypes.string,\n icon: PropTypes.object,\n suppressQuestionMinutes: PropTypes.number,\n suppressText: PropTypes.string,\n dialogName: PropTypes.string,\n};\n\nconst _export = withStyles(styles)(DialogConfirm);\nexport default _export;"],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _react = _interopRequireDefault(require("react"));
|
|
21
|
+
|
|
22
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
23
|
+
|
|
24
|
+
var _withStyles = _interopRequireDefault(require("@mui/styles/withStyles"));
|
|
25
|
+
|
|
26
|
+
var _Button = _interopRequireDefault(require("@mui/material/Button"));
|
|
27
|
+
|
|
28
|
+
var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
|
|
29
|
+
|
|
30
|
+
var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
|
|
31
|
+
|
|
32
|
+
var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions"));
|
|
33
|
+
|
|
34
|
+
var _Dialog = _interopRequireDefault(require("@mui/material/Dialog"));
|
|
35
|
+
|
|
36
|
+
var _Cancel = _interopRequireDefault(require("@mui/icons-material/Cancel"));
|
|
37
|
+
|
|
38
|
+
var _Check = _interopRequireDefault(require("@mui/icons-material/Check"));
|
|
39
|
+
|
|
40
|
+
var _i18n = _interopRequireDefault(require("../i18n"));
|
|
41
|
+
|
|
42
|
+
var _Utils = _interopRequireDefault(require("../Components/Utils"));
|
|
43
|
+
|
|
44
|
+
var _FileBrowser = _interopRequireDefault(require("../Components/FileBrowser"));
|
|
45
|
+
|
|
46
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
47
|
+
|
|
48
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
49
|
+
|
|
50
|
+
var styles = function styles(theme) {
|
|
51
|
+
return {
|
|
52
|
+
headerID: {
|
|
53
|
+
fontWeight: 'bold',
|
|
54
|
+
fontStyle: 'italic'
|
|
55
|
+
},
|
|
56
|
+
dialog: {
|
|
57
|
+
height: '95%'
|
|
58
|
+
},
|
|
59
|
+
dialogMobile: {
|
|
60
|
+
padding: 4,
|
|
61
|
+
width: '100%',
|
|
62
|
+
maxWidth: '100%',
|
|
63
|
+
maxHeight: 'calc(100% - 16px)',
|
|
64
|
+
height: '100%'
|
|
65
|
+
},
|
|
66
|
+
content: {
|
|
67
|
+
height: '100%',
|
|
68
|
+
overflow: 'hidden'
|
|
69
|
+
},
|
|
70
|
+
contentMobile: {
|
|
71
|
+
padding: '8px 4px'
|
|
72
|
+
},
|
|
73
|
+
titleRoot: {
|
|
74
|
+
whiteSpace: 'nowrap',
|
|
75
|
+
width: 'calc(100% - 72px)',
|
|
76
|
+
overflow: 'hidden',
|
|
77
|
+
display: 'inline-block',
|
|
78
|
+
textOverflow: 'ellipsis'
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* @typedef {object} FileSelectDialogProps
|
|
84
|
+
* @property {string} [dialogName] The internal name of the dialog; default: "default"
|
|
85
|
+
* @property {string} [title] The dialog title; default: Please select object ID... (translated)
|
|
86
|
+
* @property {string} [imagePrefix] Prefix (default: '.')
|
|
87
|
+
* @property {boolean} [dialogName] PropTypes.string, // where to store settings in localStorage
|
|
88
|
+
* @property {boolean} [selected] Pre-selected file
|
|
89
|
+
* @property {() => void} onClose Close handler that is always called when the dialog is closed.
|
|
90
|
+
* @property {(selected: string | undefined) => void} onOk Handler that is called when the user presses OK.
|
|
91
|
+
* @property {string} [ok] The ok button text; default: OK (translated)
|
|
92
|
+
* @property {string} [cancel] The cancel button text; default: Cancel (translated)
|
|
93
|
+
* @property {boolean} [socket] Socket class (required)
|
|
94
|
+
* @property {boolean} [allowUpload] If download of files enabled
|
|
95
|
+
* @property {boolean} [allowDownload] If download of files enabled
|
|
96
|
+
* @property {boolean} [allowCreateFolder] If creation of folders enabled
|
|
97
|
+
* @property {boolean} [allowDelete] If creation of folders enabled
|
|
98
|
+
* @property {boolean} [allowView] if tile view enabled (default true)
|
|
99
|
+
* @property {boolean} [showToolbar] Show toolbar (default true)
|
|
100
|
+
* @property {array} [limitPath] Limit file browser to one specific objectID of type meta and following path (like vis.0/main)
|
|
101
|
+
* @property {array} [filterFiles] like `['png', 'svg', 'bmp', 'jpg', 'jpeg']`
|
|
102
|
+
* @property {string} [filterByType] images, code, txt, audio, video
|
|
103
|
+
* @property {bool} [selectOnlyFolders] allow only folders selection
|
|
104
|
+
*
|
|
105
|
+
* @extends {React.Component<FileSelectDialogProps>}
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
var DialogFileSelect = /*#__PURE__*/function (_React$Component) {
|
|
110
|
+
(0, _inherits2["default"])(DialogFileSelect, _React$Component);
|
|
111
|
+
|
|
112
|
+
var _super = _createSuper(DialogFileSelect);
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @param {FileSelectDialogProps} props
|
|
116
|
+
*/
|
|
117
|
+
function DialogFileSelect(props) {
|
|
118
|
+
var _this;
|
|
119
|
+
|
|
120
|
+
(0, _classCallCheck2["default"])(this, DialogFileSelect);
|
|
121
|
+
_this = _super.call(this, props);
|
|
122
|
+
_this.dialogName = _this.props.dialogName || 'default';
|
|
123
|
+
_this.dialogName = 'FileSelect.' + _this.dialogName;
|
|
124
|
+
_this.filters = (window._localStorage || window.localStorage).getItem(_this.dialogName) || '{}';
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
_this.filters = JSON.parse(_this.filters);
|
|
128
|
+
} catch (e) {
|
|
129
|
+
_this.filters = {};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
_this.state = {
|
|
133
|
+
selected: _this.props.selected || '',
|
|
134
|
+
isFolder: false,
|
|
135
|
+
name: '',
|
|
136
|
+
isMobile: window.innerWidth < 800
|
|
137
|
+
};
|
|
138
|
+
return _this;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
(0, _createClass2["default"])(DialogFileSelect, [{
|
|
142
|
+
key: "handleCancel",
|
|
143
|
+
value: function handleCancel() {
|
|
144
|
+
this.props.onClose();
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
key: "handleOk",
|
|
148
|
+
value: function handleOk() {
|
|
149
|
+
this.props.onOk(this.state.selected || '');
|
|
150
|
+
this.props.onClose();
|
|
151
|
+
}
|
|
152
|
+
}, {
|
|
153
|
+
key: "render",
|
|
154
|
+
value: function render() {
|
|
155
|
+
var _this2 = this;
|
|
156
|
+
|
|
157
|
+
var title;
|
|
158
|
+
|
|
159
|
+
if (this.state.name || this.state.selected.length) {
|
|
160
|
+
title = [/*#__PURE__*/_react["default"].createElement("span", {
|
|
161
|
+
key: "selected"
|
|
162
|
+
}, _i18n["default"].t('ra_Selected'), " "), /*#__PURE__*/_react["default"].createElement("span", {
|
|
163
|
+
key: "id",
|
|
164
|
+
className: this.props.classes.headerID
|
|
165
|
+
}, this.state.selected)];
|
|
166
|
+
} else {
|
|
167
|
+
title = this.props.title || _i18n["default"].t('ra_Please select file...');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
171
|
+
onClose: function onClose() {},
|
|
172
|
+
maxWidth: false,
|
|
173
|
+
classes: {
|
|
174
|
+
paper: _Utils["default"].clsx(this.props.classes.dialog, this.props.classes.dialogMobile)
|
|
175
|
+
},
|
|
176
|
+
fullWidth: true,
|
|
177
|
+
open: true,
|
|
178
|
+
"aria-labelledby": "file-dialog-title"
|
|
179
|
+
}, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
|
|
180
|
+
id: "file-dialog-title",
|
|
181
|
+
classes: {
|
|
182
|
+
root: this.props.classes.titleRoot
|
|
183
|
+
}
|
|
184
|
+
}, title), /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], {
|
|
185
|
+
className: _Utils["default"].clsx(this.props.classes.content, this.props.classes.contentMobile)
|
|
186
|
+
}, /*#__PURE__*/_react["default"].createElement(_FileBrowser["default"], {
|
|
187
|
+
ready: true,
|
|
188
|
+
imagePrefix: this.props.imagePrefix,
|
|
189
|
+
allowUpload: !!this.props.allowUpload,
|
|
190
|
+
allowDownload: this.props.allowDownload !== false,
|
|
191
|
+
allowCreateFolder: !!this.props.allowCreateFolder,
|
|
192
|
+
allowDelete: !!this.props.allowDelete,
|
|
193
|
+
showViewTypeButton: this.props.allowView !== false,
|
|
194
|
+
showToolbar: this.props.showToolbar !== false,
|
|
195
|
+
limitPath: this.props.limitPath,
|
|
196
|
+
filterFiles: this.props.filterFiles,
|
|
197
|
+
filterByType: this.props.filterByType,
|
|
198
|
+
selected: this.props.selected,
|
|
199
|
+
onSelect: function onSelect(selected, isDoubleClick, isFolder) {
|
|
200
|
+
_this2.setState({
|
|
201
|
+
selected: selected,
|
|
202
|
+
isFolder: isFolder
|
|
203
|
+
}, function () {
|
|
204
|
+
return isDoubleClick && (_this2.props.selectOnlyFolders && isFolder || !_this2.props.selectOnlyFolders && !isFolder) && _this2.handleOk();
|
|
205
|
+
});
|
|
206
|
+
},
|
|
207
|
+
t: _i18n["default"].t,
|
|
208
|
+
lang: _i18n["default"].getLanguage(),
|
|
209
|
+
socket: this.props.socket
|
|
210
|
+
})), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
211
|
+
variant: "contained",
|
|
212
|
+
onClick: function onClick() {
|
|
213
|
+
return _this2.handleOk();
|
|
214
|
+
},
|
|
215
|
+
startIcon: /*#__PURE__*/_react["default"].createElement(_Check["default"], null),
|
|
216
|
+
disabled: !this.state.selected || this.props.selectOnlyFolders && !this.state.isFolder || !this.props.selectOnlyFolders && this.state.isFolder,
|
|
217
|
+
color: "primary"
|
|
218
|
+
}, this.props.ok || _i18n["default"].t('ra_Ok')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
219
|
+
color: "grey",
|
|
220
|
+
variant: "contained",
|
|
221
|
+
onClick: function onClick() {
|
|
222
|
+
return _this2.handleCancel();
|
|
223
|
+
},
|
|
224
|
+
startIcon: /*#__PURE__*/_react["default"].createElement(_Cancel["default"], null)
|
|
225
|
+
}, this.props.cancel || _i18n["default"].t('ra_Cancel'))));
|
|
226
|
+
}
|
|
227
|
+
}]);
|
|
228
|
+
return DialogFileSelect;
|
|
229
|
+
}(_react["default"].Component);
|
|
230
|
+
|
|
231
|
+
DialogFileSelect.propTypes = {
|
|
232
|
+
imagePrefix: _propTypes["default"].string,
|
|
233
|
+
dialogName: _propTypes["default"].string,
|
|
234
|
+
// where to store settings in localStorage
|
|
235
|
+
selected: _propTypes["default"].string,
|
|
236
|
+
onClose: _propTypes["default"].func.isRequired,
|
|
237
|
+
onOk: _propTypes["default"].func.isRequired,
|
|
238
|
+
ok: _propTypes["default"].string,
|
|
239
|
+
cancel: _propTypes["default"].string,
|
|
240
|
+
socket: _propTypes["default"].object.isRequired,
|
|
241
|
+
allowUpload: _propTypes["default"].bool,
|
|
242
|
+
allowDownload: _propTypes["default"].bool,
|
|
243
|
+
allowCreateFolder: _propTypes["default"].bool,
|
|
244
|
+
allowDelete: _propTypes["default"].bool,
|
|
245
|
+
allowView: _propTypes["default"].bool,
|
|
246
|
+
showToolbar: _propTypes["default"].bool,
|
|
247
|
+
objectID: _propTypes["default"].string,
|
|
248
|
+
filterFiles: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
249
|
+
filterByType: _propTypes["default"].string,
|
|
250
|
+
limitPath: _propTypes["default"].string,
|
|
251
|
+
selectOnlyFolders: _propTypes["default"].bool
|
|
252
|
+
};
|
|
253
|
+
/** @type {typeof DialogFileSelect} */
|
|
254
|
+
|
|
255
|
+
var _export = (0, _withStyles["default"])(styles)(DialogFileSelect);
|
|
256
|
+
|
|
257
|
+
var _default = _export;
|
|
258
|
+
exports["default"] = _default;
|
|
259
|
+
//# sourceMappingURL=FileSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSelect.js","names":["styles","theme","headerID","fontWeight","fontStyle","dialog","height","dialogMobile","padding","width","maxWidth","maxHeight","content","overflow","contentMobile","titleRoot","whiteSpace","display","textOverflow","DialogFileSelect","props","dialogName","filters","window","_localStorage","localStorage","getItem","JSON","parse","e","state","selected","isFolder","name","isMobile","innerWidth","onClose","onOk","title","length","I18n","t","classes","paper","Utils","clsx","root","imagePrefix","allowUpload","allowDownload","allowCreateFolder","allowDelete","allowView","showToolbar","limitPath","filterFiles","filterByType","isDoubleClick","setState","selectOnlyFolders","handleOk","getLanguage","socket","ok","handleCancel","cancel","React","Component","propTypes","PropTypes","string","func","isRequired","object","bool","objectID","arrayOf","_export","withStyles"],"sources":["FileSelect.js"],"sourcesContent":["/**\n * Copyright 2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '../i18n';\nimport Utils from '../Components/Utils';\nimport FileBrowser from '../Components/FileBrowser';\n\nconst styles = theme => ({\n headerID: {\n fontWeight: 'bold',\n fontStyle: 'italic'\n },\n dialog: {\n height: '95%'\n },\n dialogMobile: {\n padding: 4,\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n height: '100%'\n },\n content: {\n height: '100%',\n overflow: 'hidden'\n },\n contentMobile: {\n padding: '8px 4px'\n },\n titleRoot: {\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }\n});\n\n/**\n * @typedef {object} FileSelectDialogProps\n * @property {string} [dialogName] The internal name of the dialog; default: \"default\"\n * @property {string} [title] The dialog title; default: Please select object ID... (translated)\n * @property {string} [imagePrefix] Prefix (default: '.')\n * @property {boolean} [dialogName] PropTypes.string, // where to store settings in localStorage\n * @property {boolean} [selected] Pre-selected file\n * @property {() => void} onClose Close handler that is always called when the dialog is closed.\n * @property {(selected: string | undefined) => void} onOk Handler that is called when the user presses OK.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {boolean} [socket] Socket class (required)\n * @property {boolean} [allowUpload] If download of files enabled\n * @property {boolean} [allowDownload] If download of files enabled\n * @property {boolean} [allowCreateFolder] If creation of folders enabled\n * @property {boolean} [allowDelete] If creation of folders enabled\n * @property {boolean} [allowView] if tile view enabled (default true)\n * @property {boolean} [showToolbar] Show toolbar (default true)\n * @property {array} [limitPath] Limit file browser to one specific objectID of type meta and following path (like vis.0/main)\n * @property {array} [filterFiles] like `['png', 'svg', 'bmp', 'jpg', 'jpeg']`\n * @property {string} [filterByType] images, code, txt, audio, video\n * @property {bool} [selectOnlyFolders] allow only folders selection\n *\n * @extends {React.Component<FileSelectDialogProps>}\n */\nclass DialogFileSelect extends React.Component {\n /**\n * @param {FileSelectDialogProps} props\n */\n constructor(props) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = 'FileSelect.' + this.dialogName;\n\n this.filters = (window._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(this.filters);\n } catch (e) {\n this.filters = {};\n }\n\n this.state = {\n selected: this.props.selected || '',\n isFolder: false,\n name: '',\n isMobile: window.innerWidth < 800\n };\n }\n\n handleCancel() {\n this.props.onClose();\n };\n\n handleOk() {\n this.props.onOk(this.state.selected || '');\n this.props.onClose();\n };\n\n render() {\n let title;\n if (this.state.name || this.state.selected.length) {\n title = [\n <span key=\"selected\">{ I18n.t('ra_Selected') } </span>,\n <span key=\"id\" className={ this.props.classes.headerID }>{this.state.selected}</span>\n ];\n } else {\n title = this.props.title || I18n.t('ra_Please select file...');\n }\n\n return <Dialog\n onClose={() => {}}\n maxWidth={false}\n classes={{ paper: Utils.clsx(this.props.classes.dialog, this.props.classes.dialogMobile) }}\n fullWidth={true}\n open={true}\n aria-labelledby=\"file-dialog-title\"\n >\n <DialogTitle id=\"file-dialog-title\" classes={{ root: this.props.classes.titleRoot }}>{ title }</DialogTitle>\n <DialogContent className={Utils.clsx(this.props.classes.content, this.props.classes.contentMobile)}>\n <FileBrowser\n ready\n imagePrefix={this.props.imagePrefix}\n allowUpload={!!this.props.allowUpload}\n allowDownload={this.props.allowDownload !== false}\n allowCreateFolder={!!this.props.allowCreateFolder}\n allowDelete={!!this.props.allowDelete}\n showViewTypeButton={this.props.allowView !== false}\n showToolbar={this.props.showToolbar !== false}\n limitPath={this.props.limitPath}\n filterFiles={this.props.filterFiles}\n filterByType={this.props.filterByType}\n selected={this.props.selected}\n onSelect={(selected, isDoubleClick, isFolder) => {\n this.setState({ selected, isFolder }, () =>\n isDoubleClick && ((this.props.selectOnlyFolders && isFolder) || (!this.props.selectOnlyFolders && !isFolder)) && this.handleOk());\n }}\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.props.socket}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={ () => this.handleOk() } startIcon={<IconOk />} disabled={ !this.state.selected || ((this.props.selectOnlyFolders && !this.state.isFolder) || (!this.props.selectOnlyFolders && this.state.isFolder)) } color=\"primary\">{ this.props.ok || I18n.t('ra_Ok') }</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={ () => this.handleCancel() } startIcon={<IconCancel />}>{ this.props.cancel || I18n.t('ra_Cancel') }</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogFileSelect.propTypes = {\n imagePrefix: PropTypes.string,\n dialogName: PropTypes.string, // where to store settings in localStorage\n selected: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n onOk: PropTypes.func.isRequired,\n ok: PropTypes.string,\n cancel: PropTypes.string,\n socket: PropTypes.object.isRequired,\n allowUpload: PropTypes.bool,\n allowDownload: PropTypes.bool,\n allowCreateFolder: PropTypes.bool,\n allowDelete: PropTypes.bool,\n allowView: PropTypes.bool,\n showToolbar: PropTypes.bool,\n objectID: PropTypes.string,\n filterFiles: PropTypes.arrayOf(PropTypes.string),\n filterByType: PropTypes.string,\n limitPath: PropTypes.string,\n selectOnlyFolders: PropTypes.bool,\n};\n\n/** @type {typeof DialogFileSelect} */\nconst _export = withStyles(styles)(DialogFileSelect);\nexport default _export;\n"],"mappings":"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"}
|
package/Dialogs/SelectID.js
CHANGED
|
@@ -82,8 +82,7 @@ var styles = function styles(theme) {
|
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
84
|
/**
|
|
85
|
-
* @typedef {object}
|
|
86
|
-
* @property {string} [key] The key to identify this component.
|
|
85
|
+
* @typedef {object} DialogSelectIDProps
|
|
87
86
|
* @property {string} [dialogName] The internal name of the dialog; default: "default"
|
|
88
87
|
* @property {string} [title] The dialog title; default: Please select object ID... (translated)
|
|
89
88
|
* @property {boolean} [multiSelect] Set to true to allow the selection of multiple IDs.
|
|
@@ -105,26 +104,26 @@ var styles = function styles(theme) {
|
|
|
105
104
|
* @property {(selected: string | string[] | undefined, name: string) => void} onOk Handler that is called when the user presses OK.
|
|
106
105
|
* @property {{headerID: string; dialog: string; content: string}} [classes] The styling class names.
|
|
107
106
|
*
|
|
108
|
-
* @extends {React.Component<
|
|
107
|
+
* @extends {React.Component<DialogSelectIDProps>}
|
|
109
108
|
*/
|
|
110
109
|
|
|
111
110
|
|
|
112
|
-
var
|
|
113
|
-
(0, _inherits2["default"])(
|
|
111
|
+
var DialogSelectID = /*#__PURE__*/function (_React$Component) {
|
|
112
|
+
(0, _inherits2["default"])(DialogSelectID, _React$Component);
|
|
114
113
|
|
|
115
|
-
var _super = _createSuper(
|
|
114
|
+
var _super = _createSuper(DialogSelectID);
|
|
116
115
|
|
|
117
116
|
/**
|
|
118
|
-
* @param {
|
|
117
|
+
* @param {DialogSelectIDProps} props
|
|
119
118
|
*/
|
|
120
|
-
function
|
|
119
|
+
function DialogSelectID(props) {
|
|
121
120
|
var _this;
|
|
122
121
|
|
|
123
|
-
(0, _classCallCheck2["default"])(this,
|
|
122
|
+
(0, _classCallCheck2["default"])(this, DialogSelectID);
|
|
124
123
|
_this = _super.call(this, props);
|
|
125
124
|
_this.dialogName = _this.props.dialogName || 'default';
|
|
126
125
|
_this.dialogName = 'SelectID.' + _this.dialogName;
|
|
127
|
-
_this.filters = window.localStorage.getItem(_this.dialogName) || '{}';
|
|
126
|
+
_this.filters = (window._localStorage || window.localStorage).getItem(_this.dialogName) || '{}';
|
|
128
127
|
|
|
129
128
|
try {
|
|
130
129
|
_this.filters = JSON.parse(_this.filters);
|
|
@@ -149,7 +148,7 @@ var SelectID = /*#__PURE__*/function (_React$Component) {
|
|
|
149
148
|
return _this;
|
|
150
149
|
}
|
|
151
150
|
|
|
152
|
-
(0, _createClass2["default"])(
|
|
151
|
+
(0, _createClass2["default"])(DialogSelectID, [{
|
|
153
152
|
key: "handleCancel",
|
|
154
153
|
value: function handleCancel() {
|
|
155
154
|
this.props.onClose();
|
|
@@ -228,7 +227,7 @@ var SelectID = /*#__PURE__*/function (_React$Component) {
|
|
|
228
227
|
customFilter: this.props.customFilter,
|
|
229
228
|
onFilterChanged: function onFilterChanged(filterConfig) {
|
|
230
229
|
_this2.filters = filterConfig;
|
|
231
|
-
window.localStorage.setItem(_this2.dialogName, JSON.stringify(filterConfig));
|
|
230
|
+
(window._localStorage || window.localStorage).setItem(_this2.dialogName, JSON.stringify(filterConfig));
|
|
232
231
|
},
|
|
233
232
|
onSelect: function onSelect(selected, name, isDouble) {
|
|
234
233
|
if (JSON.stringify(selected) !== JSON.stringify(_this2.state.selected)) {
|
|
@@ -261,7 +260,7 @@ var SelectID = /*#__PURE__*/function (_React$Component) {
|
|
|
261
260
|
}, this.props.cancel || _i18n["default"].t('ra_Cancel'))));
|
|
262
261
|
}
|
|
263
262
|
}]);
|
|
264
|
-
return
|
|
263
|
+
return DialogSelectID;
|
|
265
264
|
}(_react["default"].Component);
|
|
266
265
|
|
|
267
266
|
SelectID.propTypes = {
|
|
@@ -292,13 +291,13 @@ SelectID.propTypes = {
|
|
|
292
291
|
// optional ['state', 'instance', 'channel']
|
|
293
292
|
columns: _propTypes["default"].array,
|
|
294
293
|
// optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons']
|
|
295
|
-
filterFunc: _propTypes["default"].func // function to filter out all
|
|
294
|
+
filterFunc: _propTypes["default"].func // function to filter out all unnecessary objects. It cannot be used together with "types"
|
|
296
295
|
// Example for function: `obj => obj.common && obj.common.type === 'boolean'` to show only boolean states
|
|
297
296
|
|
|
298
297
|
};
|
|
299
|
-
/** @type {typeof
|
|
298
|
+
/** @type {typeof DialogSelectID} */
|
|
300
299
|
|
|
301
|
-
var _export = (0, _withStyles["default"])(styles)(
|
|
300
|
+
var _export = (0, _withStyles["default"])(styles)(DialogSelectID);
|
|
302
301
|
|
|
303
302
|
var _default = _export;
|
|
304
303
|
exports["default"] = _default;
|
package/Dialogs/SelectID.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectID.js","names":["styles","theme","headerID","fontWeight","fontStyle","dialog","height","dialogMobile","padding","width","maxWidth","maxHeight","content","overflow","contentMobile","titleRoot","whiteSpace","display","textOverflow","SelectID","props","dialogName","filters","window","localStorage","getItem","JSON","parse","e","selected","filter","id","state","name","isMobile","innerWidth","onClose","onOk","multiSelect","title","length","I18n","t","classes","paper","Utils","clsx","root","foldersFirst","imagePrefix","prefix","showExpertButton","undefined","columns","types","lang","getLanguage","socket","notEditable","themeName","themeType","customFilter","filterConfig","setItem","stringify","isDouble","setState","handleOk","filterFunc","ok","handleCancel","cancel","React","Component","propTypes","PropTypes","string","object","bool","func","isRequired","isFloatComma","dateFormat","oneOfType","array","statesOnly","_export","withStyles"],"sources":["SelectID.js"],"sourcesContent":["/**\n * Copyright 2018-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport Utils from '../Components/Utils';\nimport I18n from '../i18n';\nimport ObjectBrowser from '../Components/ObjectBrowser';\n\nconst styles = theme => ({\n headerID: {\n fontWeight: 'bold',\n fontStyle: 'italic'\n },\n dialog: {\n height: '95%'\n },\n dialogMobile: {\n padding: 4,\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n height: '100%'\n },\n content: {\n height: '100%',\n overflow: 'hidden'\n },\n contentMobile: {\n padding: '8px 4px'\n },\n titleRoot: {\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }\n});\n\n/**\n * @typedef {object} SelectIDProps\n * @property {string} [key] The key to identify this component.\n * @property {string} [dialogName] The internal name of the dialog; default: \"default\"\n * @property {string} [title] The dialog title; default: Please select object ID... (translated)\n * @property {boolean} [multiSelect] Set to true to allow the selection of multiple IDs.\n * @property {boolean} [foldersFirst] Show folders before any leaves.\n * @property {string} [imagePrefix] Prefix (default: '.')\n * @property {boolean} [showExpertButton] Show the expert button?\n * @property {import('../Components/types').ObjectBrowserColumn[]} [columns] Columns to display; default: 'name', 'type', 'role', 'room', 'func', 'val'\n * @property {import('../Components/types').ObjectBrowserType[]} [types] Object types to show; default: 'state' only\n * @property {ioBroker.Languages} [lang] The language.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {boolean} [notEditable] Can't objects be edited? (default: true)\n * @property {string} [themeName] Theme name.\n * @property {string} [themeType] Theme type.\n * @property {import('../Components/types').ObjectBrowserCustomFilter} [customFilter] Custom filter.\n * @property {string | string[]} [selected] The selected IDs.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {() => void} onClose Close handler that is always called when the dialog is closed.\n * @property {(selected: string | string[] | undefined, name: string) => void} onOk Handler that is called when the user presses OK.\n * @property {{headerID: string; dialog: string; content: string}} [classes] The styling class names.\n *\n * @extends {React.Component<SelectIDProps>}\n */\nclass SelectID extends React.Component {\n /**\n * @param {SelectIDProps} props\n */\n constructor(props) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = 'SelectID.' + this.dialogName;\n\n this.filters = window.localStorage.getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(this.filters);\n } catch (e) {\n this.filters = {};\n }\n\n let selected = this.props.selected || [];\n if (typeof selected !== 'object') {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n this.state = {\n selected,\n name: '',\n isMobile: window.innerWidth < 800\n };\n }\n\n handleCancel() {\n this.props.onClose();\n };\n\n handleOk() {\n this.props.onOk(this.props.multiSelect ? this.state.selected : this.state.selected[0] || '', this.state.name);\n this.props.onClose();\n };\n\n render() {\n let title;\n if (this.state.name || this.state.selected.length) {\n if (this.state.selected.length === 1) {\n title = [\n <span key=\"selected\">{ I18n.t('ra_Selected') } </span>,\n <span key=\"id\" className={ this.props.classes.headerID }>{\n (this.state.name || this.state.selected) + (this.state.name ? ' [' + this.state.selected + ']' : '')\n }</span>\n ];\n } else {\n title = [\n <span key=\"selected\">{ I18n.t('ra_Selected') } </span>,\n <span key=\"id\" className={ this.props.classes.headerID }>{\n I18n.t('%s items', this.state.selected.length)\n }</span>\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return <Dialog\n onClose={() => {}}\n maxWidth={false}\n classes={{paper: Utils.clsx(this.props.classes.dialog, this.props.classes.dialogMobile)}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"selectid-dialog-title\"\n >\n <DialogTitle id=\"selectid-dialog-title\" classes={{root: this.props.classes.titleRoot}}>{ title }</DialogTitle>\n <DialogContent className={Utils.clsx(this.props.classes.content, this.props.classes.contentMobile)}>\n <ObjectBrowser\n foldersFirst={ this.props.foldersFirst }\n imagePrefix={ this.props.imagePrefix || this.props.prefix } // prefix is for back compatibility\n defaultFilters={ this.filters }\n dialogName={this.dialogName}\n showExpertButton={ this.props.showExpertButton !== undefined ? this.props.showExpertButton : true }\n style={ {width: '100%', height: '100%'} }\n columns={ this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val'] }\n types={ this.props.types || ['state'] }\n t={ I18n.t }\n lang={ this.props.lang || I18n.getLanguage() }\n socket={ this.props.socket }\n selected={ this.state.selected }\n multiSelect={ this.props.multiSelect }\n notEditable={ this.props.notEditable === undefined ? true : this.props.notEditable }\n name={ this.state.name }\n themeName={ this.props.themeName }\n themeType={ this.props.themeType }\n customFilter={ this.props.customFilter }\n onFilterChanged={ filterConfig => {\n this.filters = filterConfig;\n window.localStorage.setItem(this.dialogName, JSON.stringify(filterConfig));\n } }\n onSelect={ (selected, name, isDouble) => {\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({selected, name}, () =>\n isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n } }\n filterFunc={this.props.filterFunc}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={ () => this.handleOk() } startIcon={<IconOk />} disabled={ !this.state.selected.length } color=\"primary\">{ this.props.ok || I18n.t('ra_Ok') }</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={ () => this.handleCancel() } startIcon={<IconCancel />}>{ this.props.cancel || I18n.t('ra_Cancel') }</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nSelectID.propTypes = {\n dialogName: PropTypes.string, // where to store settings in localStorage\n classes: PropTypes.object,\n notEditable: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onOk: PropTypes.func.isRequired,\n title: PropTypes.string,\n lang: PropTypes.string,\n foldersFirst: PropTypes.bool,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n selected: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array\n ]),\n customFilter: PropTypes.object, // optional {common: {custom: true}} or {common: {custom: 'sql.0'}}\n statesOnly: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n cancel: PropTypes.string,\n imagePrefix: PropTypes.string,\n ok: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n showExpertButton: PropTypes.bool,\n multiSelect: PropTypes.bool,\n types: PropTypes.array, // optional ['state', 'instance', 'channel']\n columns: PropTypes.array, // optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons']\n\n filterFunc: PropTypes.func, // function to filter out all unneccessary objects. It cannot be used together with \"types\"\n // Example for function: `obj => obj.common && obj.common.type === 'boolean'` to show only boolean states\n};\n\n/** @type {typeof SelectID} */\nconst _export = withStyles(styles)(SelectID);\nexport default _export;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectID.js","names":["styles","theme","headerID","fontWeight","fontStyle","dialog","height","dialogMobile","padding","width","maxWidth","maxHeight","content","overflow","contentMobile","titleRoot","whiteSpace","display","textOverflow","DialogSelectID","props","dialogName","filters","window","_localStorage","localStorage","getItem","JSON","parse","e","selected","filter","id","state","name","isMobile","innerWidth","onClose","onOk","multiSelect","title","length","I18n","t","classes","paper","Utils","clsx","root","foldersFirst","imagePrefix","prefix","showExpertButton","undefined","columns","types","lang","getLanguage","socket","notEditable","themeName","themeType","customFilter","filterConfig","setItem","stringify","isDouble","setState","handleOk","filterFunc","ok","handleCancel","cancel","React","Component","SelectID","propTypes","PropTypes","string","object","bool","func","isRequired","isFloatComma","dateFormat","oneOfType","array","statesOnly","_export","withStyles"],"sources":["SelectID.js"],"sourcesContent":["/**\n * Copyright 2018-2022 bluefox <dogafox@gmail.com>\n *\n * MIT License\n *\n **/\n// please do not delete React, as without it other projects could not be compiled: ReferenceError: React is not defined\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport Utils from '../Components/Utils';\nimport I18n from '../i18n';\nimport ObjectBrowser from '../Components/ObjectBrowser';\n\nconst styles = theme => ({\n headerID: {\n fontWeight: 'bold',\n fontStyle: 'italic'\n },\n dialog: {\n height: '95%'\n },\n dialogMobile: {\n padding: 4,\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'calc(100% - 16px)',\n height: '100%'\n },\n content: {\n height: '100%',\n overflow: 'hidden'\n },\n contentMobile: {\n padding: '8px 4px'\n },\n titleRoot: {\n whiteSpace: 'nowrap',\n width: 'calc(100% - 72px)',\n overflow: 'hidden',\n display: 'inline-block',\n textOverflow: 'ellipsis',\n }\n});\n\n/**\n * @typedef {object} DialogSelectIDProps\n * @property {string} [dialogName] The internal name of the dialog; default: \"default\"\n * @property {string} [title] The dialog title; default: Please select object ID... (translated)\n * @property {boolean} [multiSelect] Set to true to allow the selection of multiple IDs.\n * @property {boolean} [foldersFirst] Show folders before any leaves.\n * @property {string} [imagePrefix] Prefix (default: '.')\n * @property {boolean} [showExpertButton] Show the expert button?\n * @property {import('../Components/types').ObjectBrowserColumn[]} [columns] Columns to display; default: 'name', 'type', 'role', 'room', 'func', 'val'\n * @property {import('../Components/types').ObjectBrowserType[]} [types] Object types to show; default: 'state' only\n * @property {ioBroker.Languages} [lang] The language.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {boolean} [notEditable] Can't objects be edited? (default: true)\n * @property {string} [themeName] Theme name.\n * @property {string} [themeType] Theme type.\n * @property {import('../Components/types').ObjectBrowserCustomFilter} [customFilter] Custom filter.\n * @property {string | string[]} [selected] The selected IDs.\n * @property {string} [ok] The ok button text; default: OK (translated)\n * @property {string} [cancel] The cancel button text; default: Cancel (translated)\n * @property {() => void} onClose Close handler that is always called when the dialog is closed.\n * @property {(selected: string | string[] | undefined, name: string) => void} onOk Handler that is called when the user presses OK.\n * @property {{headerID: string; dialog: string; content: string}} [classes] The styling class names.\n *\n * @extends {React.Component<DialogSelectIDProps>}\n */\nclass DialogSelectID extends React.Component {\n /**\n * @param {DialogSelectIDProps} props\n */\n constructor(props) {\n super(props);\n this.dialogName = this.props.dialogName || 'default';\n this.dialogName = 'SelectID.' + this.dialogName;\n\n this.filters = (window._localStorage || window.localStorage).getItem(this.dialogName) || '{}';\n\n try {\n this.filters = JSON.parse(this.filters);\n } catch (e) {\n this.filters = {};\n }\n\n let selected = this.props.selected || [];\n if (typeof selected !== 'object') {\n selected = [selected];\n }\n selected = selected.filter(id => id);\n\n this.state = {\n selected,\n name: '',\n isMobile: window.innerWidth < 800\n };\n }\n\n handleCancel() {\n this.props.onClose();\n };\n\n handleOk() {\n this.props.onOk(this.props.multiSelect ? this.state.selected : this.state.selected[0] || '', this.state.name);\n this.props.onClose();\n };\n\n render() {\n let title;\n if (this.state.name || this.state.selected.length) {\n if (this.state.selected.length === 1) {\n title = [\n <span key=\"selected\">{ I18n.t('ra_Selected') } </span>,\n <span key=\"id\" className={ this.props.classes.headerID }>{\n (this.state.name || this.state.selected) + (this.state.name ? ' [' + this.state.selected + ']' : '')\n }</span>\n ];\n } else {\n title = [\n <span key=\"selected\">{ I18n.t('ra_Selected') } </span>,\n <span key=\"id\" className={ this.props.classes.headerID }>{\n I18n.t('%s items', this.state.selected.length)\n }</span>\n ];\n }\n } else {\n title = this.props.title || I18n.t('ra_Please select object ID...');\n }\n\n return <Dialog\n onClose={() => {}}\n maxWidth={false}\n classes={{paper: Utils.clsx(this.props.classes.dialog, this.props.classes.dialogMobile)}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"selectid-dialog-title\"\n >\n <DialogTitle id=\"selectid-dialog-title\" classes={{root: this.props.classes.titleRoot}}>{ title }</DialogTitle>\n <DialogContent className={Utils.clsx(this.props.classes.content, this.props.classes.contentMobile)}>\n <ObjectBrowser\n foldersFirst={ this.props.foldersFirst }\n imagePrefix={ this.props.imagePrefix || this.props.prefix } // prefix is for back compatibility\n defaultFilters={ this.filters }\n dialogName={this.dialogName}\n showExpertButton={ this.props.showExpertButton !== undefined ? this.props.showExpertButton : true }\n style={ {width: '100%', height: '100%'} }\n columns={ this.props.columns || ['name', 'type', 'role', 'room', 'func', 'val'] }\n types={ this.props.types || ['state'] }\n t={ I18n.t }\n lang={ this.props.lang || I18n.getLanguage() }\n socket={ this.props.socket }\n selected={ this.state.selected }\n multiSelect={ this.props.multiSelect }\n notEditable={ this.props.notEditable === undefined ? true : this.props.notEditable }\n name={ this.state.name }\n themeName={ this.props.themeName }\n themeType={ this.props.themeType }\n customFilter={ this.props.customFilter }\n onFilterChanged={ filterConfig => {\n this.filters = filterConfig;\n (window._localStorage || window.localStorage).setItem(this.dialogName, JSON.stringify(filterConfig));\n } }\n onSelect={ (selected, name, isDouble) => {\n if (JSON.stringify(selected) !== JSON.stringify(this.state.selected)) {\n this.setState({selected, name}, () =>\n isDouble && this.handleOk());\n } else if (isDouble) {\n this.handleOk();\n }\n } }\n filterFunc={this.props.filterFunc}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={ () => this.handleOk() } startIcon={<IconOk />} disabled={ !this.state.selected.length } color=\"primary\">{ this.props.ok || I18n.t('ra_Ok') }</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={ () => this.handleCancel() } startIcon={<IconCancel />}>{ this.props.cancel || I18n.t('ra_Cancel') }</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nSelectID.propTypes = {\n dialogName: PropTypes.string, // where to store settings in localStorage\n classes: PropTypes.object,\n notEditable: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onOk: PropTypes.func.isRequired,\n title: PropTypes.string,\n lang: PropTypes.string,\n foldersFirst: PropTypes.bool,\n isFloatComma: PropTypes.bool,\n dateFormat: PropTypes.string,\n selected: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array\n ]),\n customFilter: PropTypes.object, // optional {common: {custom: true}} or {common: {custom: 'sql.0'}}\n statesOnly: PropTypes.bool,\n socket: PropTypes.object.isRequired,\n cancel: PropTypes.string,\n imagePrefix: PropTypes.string,\n ok: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n showExpertButton: PropTypes.bool,\n multiSelect: PropTypes.bool,\n types: PropTypes.array, // optional ['state', 'instance', 'channel']\n columns: PropTypes.array, // optional ['name', 'type', 'role', 'room', 'func', 'val', 'buttons']\n\n filterFunc: PropTypes.func, // function to filter out all unnecessary objects. It cannot be used together with \"types\"\n // Example for function: `obj => obj.common && obj.common.type === 'boolean'` to show only boolean states\n};\n\n/** @type {typeof DialogSelectID} */\nconst _export = withStyles(styles)(DialogSelectID);\nexport default _export;\n"],"mappings":"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"}
|
package/README.md
CHANGED
|
@@ -641,6 +641,9 @@ If you still have questions, try to find an answer [here](https://mui.com/guides
|
|
|
641
641
|
-->
|
|
642
642
|
|
|
643
643
|
## Changelog
|
|
644
|
+
### 3.1.4 (2022-06-19)
|
|
645
|
+
* (bluefox) Added file select dialog
|
|
646
|
+
|
|
644
647
|
### 3.1.3 (2022-06-13)
|
|
645
648
|
* (bluefox) Added table with resized headers
|
|
646
649
|
|