@iobroker/adapter-react-v5 2.1.9 → 3.0.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.
- package/Components/404.js.map +1 -1
- package/Components/ColorPicker.js.map +1 -1
- package/Components/ComplexCron.js.map +1 -1
- package/Components/FileBrowser.js +248 -222
- package/Components/FileBrowser.js.map +1 -1
- package/Components/FileViewer.js +219 -75
- package/Components/FileViewer.js.map +1 -1
- package/Components/Icon.js.map +1 -1
- package/Components/IconPicker.js.map +1 -1
- package/Components/IconSelector.js.map +1 -1
- package/Components/Image.js.map +1 -1
- package/Components/JsonConfigComponent/ChipInput.js +925 -0
- package/Components/JsonConfigComponent/ChipInput.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigAlive.js +135 -0
- package/Components/JsonConfigComponent/ConfigAlive.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigAutocomplete.js +204 -0
- package/Components/JsonConfigComponent/ConfigAutocomplete.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js +311 -0
- package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigCRON.js +195 -0
- package/Components/JsonConfigComponent/ConfigCRON.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigCertificateSelect.js +178 -0
- package/Components/JsonConfigComponent/ConfigCertificateSelect.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigCheckbox.js +112 -0
- package/Components/JsonConfigComponent/ConfigCheckbox.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigChip.js +149 -0
- package/Components/JsonConfigComponent/ConfigChip.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigColor.js +156 -0
- package/Components/JsonConfigComponent/ConfigColor.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigCoordinates.js +165 -0
- package/Components/JsonConfigComponent/ConfigCoordinates.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigCustomEasyAccess.js +180 -0
- package/Components/JsonConfigComponent/ConfigCustomEasyAccess.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigDatePicker.js +117 -0
- package/Components/JsonConfigComponent/ConfigDatePicker.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigGeneric.js +660 -0
- package/Components/JsonConfigComponent/ConfigGeneric.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigIP.js +151 -0
- package/Components/JsonConfigComponent/ConfigIP.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigImageUpload.js +215 -0
- package/Components/JsonConfigComponent/ConfigImageUpload.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigInstanceSelect.js +197 -0
- package/Components/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigJsonEditor.js +211 -0
- package/Components/JsonConfigComponent/ConfigJsonEditor.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigLanguage.js +175 -0
- package/Components/JsonConfigComponent/ConfigLanguage.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigNumber.js +194 -0
- package/Components/JsonConfigComponent/ConfigNumber.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigObjectId.js +201 -0
- package/Components/JsonConfigComponent/ConfigObjectId.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigPanel.js +421 -0
- package/Components/JsonConfigComponent/ConfigPanel.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigPassword.js +236 -0
- package/Components/JsonConfigComponent/ConfigPassword.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigPattern.js +94 -0
- package/Components/JsonConfigComponent/ConfigPattern.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigSelect.js +163 -0
- package/Components/JsonConfigComponent/ConfigSelect.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigSelectSendTo.js +258 -0
- package/Components/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigSendto.js +282 -0
- package/Components/JsonConfigComponent/ConfigSendto.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigSetState.js +266 -0
- package/Components/JsonConfigComponent/ConfigSetState.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigStaticDivider.js +88 -0
- package/Components/JsonConfigComponent/ConfigStaticDivider.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigStaticHeader.js +81 -0
- package/Components/JsonConfigComponent/ConfigStaticHeader.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigStaticImage.js +88 -0
- package/Components/JsonConfigComponent/ConfigStaticImage.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigStaticText.js +104 -0
- package/Components/JsonConfigComponent/ConfigStaticText.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigTable.js +651 -0
- package/Components/JsonConfigComponent/ConfigTable.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigTabs.js +166 -0
- package/Components/JsonConfigComponent/ConfigTabs.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigText.js +170 -0
- package/Components/JsonConfigComponent/ConfigText.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigTextSendTo.js +168 -0
- package/Components/JsonConfigComponent/ConfigTextSendTo.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigTimePicker.js +111 -0
- package/Components/JsonConfigComponent/ConfigTimePicker.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigTopic.js +140 -0
- package/Components/JsonConfigComponent/ConfigTopic.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigUser.js +176 -0
- package/Components/JsonConfigComponent/ConfigUser.js.map +1 -0
- package/Components/JsonConfigComponent/index.js +511 -0
- package/Components/JsonConfigComponent/index.js.map +1 -0
- package/Components/Loader.js.map +1 -1
- package/Components/Loaders/PT.js.map +1 -1
- package/Components/Loaders/Vendor.js.map +1 -1
- package/Components/Logo.js.map +1 -1
- package/Components/MDUtils.js.map +1 -1
- package/Components/ObjectBrowser.js +24 -42
- package/Components/ObjectBrowser.js.map +1 -1
- package/Components/Router.js.map +1 -1
- package/Components/SaveCloseButtons.js.map +1 -1
- package/Components/Schedule.js.map +1 -1
- package/Components/SelectWithIcon.js.map +1 -1
- package/Components/SimpleCron/cronText.js.map +1 -1
- package/Components/SimpleCron/index.js.map +1 -1
- package/Components/TabContainer.js.map +1 -1
- package/Components/TabContent.js.map +1 -1
- package/Components/TabHeader.js.map +1 -1
- package/Components/TextWithIcon.js.map +1 -1
- package/Components/TreeTable.js.map +1 -1
- package/Components/Utils.js +25 -0
- package/Components/Utils.js.map +1 -1
- package/Components/withWidth.js +42 -0
- package/Components/withWidth.js.map +1 -0
- package/Connection.js.map +1 -1
- package/Dialogs/ComplexCron.js.map +1 -1
- package/Dialogs/Confirm.js.map +1 -1
- package/Dialogs/Cron.js.map +1 -1
- package/Dialogs/Error.js.map +1 -1
- package/Dialogs/Message.js.map +1 -1
- package/Dialogs/SelectID.js.map +1 -1
- package/Dialogs/SimpleCron.js.map +1 -1
- package/Dialogs/TextInput.js.map +1 -1
- package/GenericApp.js.map +1 -1
- package/README.md +11 -1
- package/Theme.js.map +1 -1
- package/icons/IconAdapter.js.map +1 -1
- package/icons/IconAlias.js.map +1 -1
- package/icons/IconChannel.js.map +1 -1
- package/icons/IconClearFilter.js.map +1 -1
- package/icons/IconClosed.js.map +1 -1
- package/icons/IconCopy.js.map +1 -1
- package/icons/IconDevice.js.map +1 -1
- package/icons/IconDocument.js.map +1 -1
- package/icons/IconExpert.js.map +1 -1
- package/icons/IconFx.js.map +1 -1
- package/icons/IconInstance.js.map +1 -1
- package/icons/IconLogout.js.map +1 -1
- package/icons/IconOpen.js.map +1 -1
- package/icons/IconState.js.map +1 -1
- package/package.json +5 -5
package/Components/FileViewer.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -11,20 +13,26 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
|
|
|
11
13
|
|
|
12
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
15
|
|
|
16
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
17
|
+
|
|
14
18
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
19
|
|
|
16
20
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
21
|
|
|
18
22
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
23
|
|
|
20
|
-
var
|
|
24
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
+
|
|
26
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
21
27
|
|
|
22
|
-
var
|
|
28
|
+
var _styles = require("@mui/styles");
|
|
23
29
|
|
|
24
|
-
var
|
|
30
|
+
var _withWidth = _interopRequireDefault(require("./withWidth"));
|
|
25
31
|
|
|
26
32
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
27
33
|
|
|
34
|
+
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
35
|
+
|
|
28
36
|
var _Button = _interopRequireDefault(require("@mui/material/Button"));
|
|
29
37
|
|
|
30
38
|
var _Dialog = _interopRequireDefault(require("@mui/material/Dialog"));
|
|
@@ -35,7 +43,7 @@ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent
|
|
|
35
43
|
|
|
36
44
|
var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
|
|
37
45
|
|
|
38
|
-
var
|
|
46
|
+
var _material = require("@mui/material");
|
|
39
47
|
|
|
40
48
|
var _no_icon = _interopRequireDefault(require("../assets/no_icon.svg"));
|
|
41
49
|
|
|
@@ -43,29 +51,27 @@ var _Utils = _interopRequireDefault(require("./Utils"));
|
|
|
43
51
|
|
|
44
52
|
var _fa = require("react-icons/fa");
|
|
45
53
|
|
|
54
|
+
var _Brightness = _interopRequireDefault(require("@mui/icons-material/Brightness6"));
|
|
55
|
+
|
|
46
56
|
var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
|
|
47
57
|
|
|
58
|
+
var _Save = _interopRequireDefault(require("@mui/icons-material/Save"));
|
|
59
|
+
|
|
60
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
61
|
+
|
|
62
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
63
|
+
|
|
48
64
|
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); }; }
|
|
49
65
|
|
|
50
66
|
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; } }
|
|
51
67
|
|
|
52
|
-
// FIXME checkout https://mui.com/components/use-media-query/#migrating-from-withwidth
|
|
53
|
-
var withWidth = function withWidth() {
|
|
54
|
-
return function (WrappedComponent) {
|
|
55
|
-
return function (props) {
|
|
56
|
-
return /*#__PURE__*/_react["default"].createElement(WrappedComponent, (0, _extends2["default"])({}, props, {
|
|
57
|
-
width: "xs"
|
|
58
|
-
}));
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
|
|
63
68
|
var styles = function styles(theme) {
|
|
64
69
|
return {
|
|
65
70
|
dialog: {
|
|
66
|
-
height: '100%'
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
height: '100%'
|
|
72
|
+
},
|
|
73
|
+
paper: {
|
|
74
|
+
height: 'calc(100% - 64px)'
|
|
69
75
|
},
|
|
70
76
|
content: {
|
|
71
77
|
textAlign: 'center'
|
|
@@ -78,15 +84,32 @@ var styles = function styles(theme) {
|
|
|
78
84
|
width: 'auto',
|
|
79
85
|
height: 'calc(100% - 5px)',
|
|
80
86
|
objectFit: 'contain'
|
|
87
|
+
},
|
|
88
|
+
dialogTitle: {
|
|
89
|
+
justifyContent: 'space-between',
|
|
90
|
+
display: 'flex'
|
|
81
91
|
}
|
|
82
92
|
};
|
|
83
93
|
};
|
|
84
94
|
|
|
85
95
|
var EXTENSIONS = {
|
|
86
|
-
images: ['png', 'jpg', 'svg', 'jpeg', '
|
|
87
|
-
code: ['js', 'json'],
|
|
96
|
+
images: ['png', 'jpg', 'svg', 'jpeg', 'bmp'],
|
|
97
|
+
code: ['js', 'json', 'md'],
|
|
88
98
|
txt: ['log', 'txt', 'html', 'css', 'xml']
|
|
89
99
|
};
|
|
100
|
+
exports.EXTENSIONS = EXTENSIONS;
|
|
101
|
+
|
|
102
|
+
function bufferToBase64(buffer) {
|
|
103
|
+
var binary = '';
|
|
104
|
+
var bytes = new Uint8Array(buffer);
|
|
105
|
+
var len = bytes.byteLength;
|
|
106
|
+
|
|
107
|
+
for (var i = 0; i < len && i < 50; i++) {
|
|
108
|
+
binary += String.fromCharCode(bytes[i]);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return window.btoa(binary);
|
|
112
|
+
}
|
|
90
113
|
/**
|
|
91
114
|
* @typedef {object} FileViewerProps
|
|
92
115
|
* @property {string} [key] The key to identify this component.
|
|
@@ -99,10 +122,9 @@ var EXTENSIONS = {
|
|
|
99
122
|
* @extends {React.Component<FileViewerProps>}
|
|
100
123
|
*/
|
|
101
124
|
|
|
102
|
-
exports.EXTENSIONS = EXTENSIONS;
|
|
103
125
|
|
|
104
|
-
var FileViewer = /*#__PURE__*/function (
|
|
105
|
-
(0, _inherits2["default"])(FileViewer,
|
|
126
|
+
var FileViewer = /*#__PURE__*/function (_Component) {
|
|
127
|
+
(0, _inherits2["default"])(FileViewer, _Component);
|
|
106
128
|
|
|
107
129
|
var _super = _createSuper(FileViewer);
|
|
108
130
|
|
|
@@ -114,63 +136,167 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
|
|
|
114
136
|
|
|
115
137
|
(0, _classCallCheck2["default"])(this, FileViewer);
|
|
116
138
|
_this = _super.call(this, props);
|
|
117
|
-
|
|
139
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFileChanged", function (id, fileName, size) {
|
|
140
|
+
if (!_this.state.changed) {
|
|
141
|
+
_this.timeout && clearTimeout(_this.timeout);
|
|
142
|
+
_this.timeout = setTimeout(function () {
|
|
143
|
+
_this.timeout = null;
|
|
144
|
+
|
|
145
|
+
if (size === null) {
|
|
146
|
+
window.alert('Show file was deleted!');
|
|
147
|
+
} else if (_this.state.text !== null || _this.state.code !== null) {
|
|
148
|
+
_this.readFile();
|
|
149
|
+
} else {
|
|
150
|
+
_this.setState({
|
|
151
|
+
forceUpdate: Date.now()
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}, 300);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "writeFile64", function () {
|
|
158
|
+
var parts = _this.props.href.split('/');
|
|
159
|
+
|
|
160
|
+
var data = _this.state.editingValue;
|
|
161
|
+
parts.splice(0, 2);
|
|
162
|
+
var adapter = parts[0];
|
|
163
|
+
var name = parts.splice(1).join('/');
|
|
164
|
+
|
|
165
|
+
_this.props.socket.writeFile64(adapter, name, Buffer.from(data).toString('base64')).then(function (_) {
|
|
166
|
+
return _this.props.onClose();
|
|
167
|
+
})["catch"](function (e) {
|
|
168
|
+
return window.alert('Cannot write file: ' + e);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
var ext = _Utils["default"].getFileExtension(_this.props.href);
|
|
173
|
+
|
|
118
174
|
_this.state = {
|
|
119
175
|
text: null,
|
|
120
176
|
code: null,
|
|
121
|
-
|
|
177
|
+
ext: ext,
|
|
178
|
+
editing: !!_this.props.formatEditFile || false,
|
|
179
|
+
editingValue: null,
|
|
180
|
+
copyPossible: EXTENSIONS.code.includes(ext) || EXTENSIONS.txt.includes(ext),
|
|
181
|
+
forceUpdate: Date.now(),
|
|
182
|
+
changed: false
|
|
122
183
|
};
|
|
123
|
-
|
|
124
|
-
if (_this.state.copyPossible) {
|
|
125
|
-
fetch(_this.props.href).then(function (response) {
|
|
126
|
-
return response.text();
|
|
127
|
-
}).then(function (data) {
|
|
128
|
-
if (EXTENSIONS.txt.includes(_this.ext)) {
|
|
129
|
-
_this.setState({
|
|
130
|
-
text: data
|
|
131
|
-
});
|
|
132
|
-
} else if (EXTENSIONS.code.includes(_this.ext)) {
|
|
133
|
-
_this.setState({
|
|
134
|
-
code: data
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
184
|
return _this;
|
|
141
185
|
}
|
|
142
186
|
|
|
143
187
|
(0, _createClass2["default"])(FileViewer, [{
|
|
188
|
+
key: "readFile",
|
|
189
|
+
value: function readFile() {
|
|
190
|
+
var _this2 = this;
|
|
191
|
+
|
|
192
|
+
if (this.props.href) {
|
|
193
|
+
var parts = this.props.href.split('/');
|
|
194
|
+
parts.splice(0, 2);
|
|
195
|
+
var adapter = parts[0];
|
|
196
|
+
var name = parts.splice(1).join('/');
|
|
197
|
+
this.props.socket.readFile(adapter, name).then(function (data) {
|
|
198
|
+
if (data.file !== undefined) {
|
|
199
|
+
data = data.file;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
var newState = {
|
|
203
|
+
copyPossible: _this2.state.copyPossible
|
|
204
|
+
}; // try to detect valid extension
|
|
205
|
+
|
|
206
|
+
if (data.type === 'Buffer') {
|
|
207
|
+
var ext = AdminUtils.detectMimeType(bufferToBase64(data.data));
|
|
208
|
+
|
|
209
|
+
if (ext) {
|
|
210
|
+
newState.ext = ext;
|
|
211
|
+
newState.copyPossible = EXTENSIONS.code.includes(ext) || EXTENSIONS.txt.includes(ext);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (newState.copyPossible) {
|
|
216
|
+
if (EXTENSIONS.txt.includes(_this2.state.ext)) {
|
|
217
|
+
newState.text = data;
|
|
218
|
+
newState.editingValue = data;
|
|
219
|
+
} else if (EXTENSIONS.code.includes(_this2.state.ext)) {
|
|
220
|
+
newState.code = data;
|
|
221
|
+
newState.editingValue = data;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
_this2.setState(newState);
|
|
226
|
+
})["catch"](function (e) {
|
|
227
|
+
return window.alert('Cannot read file: ' + e);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}, {
|
|
232
|
+
key: "componentDidMount",
|
|
233
|
+
value: function componentDidMount() {
|
|
234
|
+
this.readFile();
|
|
235
|
+
var parts = this.props.href.split('/');
|
|
236
|
+
parts.splice(0, 2);
|
|
237
|
+
var adapter = parts[0];
|
|
238
|
+
var name = parts.splice(1).join('/');
|
|
239
|
+
this.props.supportSubscribes && this.props.socket.subscribeFiles(adapter, name, this.onFileChanged);
|
|
240
|
+
}
|
|
241
|
+
}, {
|
|
242
|
+
key: "componentWillUnmount",
|
|
243
|
+
value: function componentWillUnmount() {
|
|
244
|
+
this.timeout && clearTimeout(this.timeout);
|
|
245
|
+
var parts = this.props.href.split('/');
|
|
246
|
+
parts.splice(0, 2);
|
|
247
|
+
var adapter = parts[0];
|
|
248
|
+
var name = parts.splice(1).join('/');
|
|
249
|
+
this.props.supportSubscribes && this.props.socket.subscribeFiles(adapter, name, this.onFileChanged);
|
|
250
|
+
}
|
|
251
|
+
}, {
|
|
252
|
+
key: "getEditFile",
|
|
253
|
+
value: function getEditFile(ext) {
|
|
254
|
+
switch (ext) {
|
|
255
|
+
case 'json':
|
|
256
|
+
return 'json';
|
|
257
|
+
|
|
258
|
+
case 'js':
|
|
259
|
+
return 'javascript';
|
|
260
|
+
|
|
261
|
+
case 'html':
|
|
262
|
+
return 'html';
|
|
263
|
+
|
|
264
|
+
case 'txt':
|
|
265
|
+
return 'html';
|
|
266
|
+
|
|
267
|
+
default:
|
|
268
|
+
return 'json';
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}, {
|
|
144
272
|
key: "getContent",
|
|
145
273
|
value: function getContent() {
|
|
146
|
-
|
|
274
|
+
var _this3 = this;
|
|
275
|
+
|
|
276
|
+
if (EXTENSIONS.images.includes(this.state.ext)) {
|
|
147
277
|
return /*#__PURE__*/_react["default"].createElement("img", {
|
|
148
278
|
onError: function onError(e) {
|
|
149
279
|
e.target.onerror = null;
|
|
150
280
|
e.target.src = _no_icon["default"];
|
|
151
281
|
},
|
|
152
|
-
className: this.props.classes.img,
|
|
153
|
-
src: this.props.href,
|
|
282
|
+
className: _Utils["default"].clsx(this.props.classes.img, this.props.getClassBackgroundImage()),
|
|
283
|
+
src: this.props.href + '?ts=' + this.state.forceUpdate,
|
|
154
284
|
alt: this.props.href
|
|
155
285
|
});
|
|
156
|
-
} else if (this.state.code !== null) {
|
|
286
|
+
} else if (this.state.code !== null || this.state.text !== null || this.state.editing) {
|
|
157
287
|
return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
|
|
158
288
|
variant: "standard",
|
|
159
289
|
className: this.props.classes.textarea,
|
|
160
290
|
multiline: true,
|
|
161
|
-
value: this.state.code,
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
variant: "standard",
|
|
169
|
-
className: this.props.classes.textarea,
|
|
170
|
-
value: this.state.code,
|
|
171
|
-
multiline: true,
|
|
291
|
+
value: this.state.editingValue || this.state.code || this.state.text,
|
|
292
|
+
onChange: function onChange(newValue) {
|
|
293
|
+
return _this3.setState({
|
|
294
|
+
editingValue: newValue,
|
|
295
|
+
changed: true
|
|
296
|
+
});
|
|
297
|
+
},
|
|
172
298
|
InputProps: {
|
|
173
|
-
readOnly:
|
|
299
|
+
readOnly: !this.state.editing
|
|
174
300
|
}
|
|
175
301
|
});
|
|
176
302
|
}
|
|
@@ -178,49 +304,67 @@ var FileViewer = /*#__PURE__*/function (_React$Component) {
|
|
|
178
304
|
}, {
|
|
179
305
|
key: "render",
|
|
180
306
|
value: function render() {
|
|
181
|
-
var
|
|
307
|
+
var _this4 = this;
|
|
182
308
|
|
|
183
309
|
return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
184
|
-
|
|
310
|
+
classes: {
|
|
311
|
+
scrollPaper: this.props.classes.dialog,
|
|
312
|
+
paper: this.props.classes.paper
|
|
313
|
+
},
|
|
314
|
+
scroll: "paper",
|
|
185
315
|
open: !!this.props.href,
|
|
186
316
|
onClose: function onClose() {
|
|
187
|
-
return
|
|
317
|
+
return _this4.props.onClose();
|
|
188
318
|
},
|
|
189
319
|
fullWidth: true,
|
|
190
|
-
|
|
320
|
+
maxWidth: "xl",
|
|
191
321
|
"aria-labelledby": "form-dialog-title"
|
|
322
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
323
|
+
className: this.props.classes.dialogTitle
|
|
192
324
|
}, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
|
|
193
325
|
id: "form-dialog-title"
|
|
194
|
-
}, this.props.t('
|
|
326
|
+
}, this.props.t(this.state.editing ? 'Edit' : 'View') + ': ' + this.props.href), EXTENSIONS.images.includes(this.state.ext) && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
|
|
327
|
+
size: "large",
|
|
328
|
+
color: 'inherit',
|
|
329
|
+
onClick: this.props.setStateBackgroundImage
|
|
330
|
+
}, /*#__PURE__*/_react["default"].createElement(_Brightness["default"], null)))), /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], {
|
|
195
331
|
className: this.props.classes.content
|
|
196
332
|
}, this.getContent()), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, this.state.copyPossible ? /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
197
333
|
color: "grey",
|
|
198
334
|
onClick: function onClick(e) {
|
|
199
|
-
return _Utils["default"].copyToClipboard(
|
|
200
|
-
}
|
|
201
|
-
|
|
335
|
+
return _Utils["default"].copyToClipboard(_this4.state.text || _this4.state.code, e);
|
|
336
|
+
},
|
|
337
|
+
startIcon: /*#__PURE__*/_react["default"].createElement(_fa.FaCopy, null)
|
|
338
|
+
}, this.props.t('Copy content')) : null, this.state.editing ? /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
339
|
+
color: "grey",
|
|
340
|
+
disabled: this.state.editingValue === this.state.code || this.state.editingValue === this.state.text,
|
|
341
|
+
variant: "contained",
|
|
342
|
+
onClick: this.writeFile64,
|
|
343
|
+
startIcon: /*#__PURE__*/_react["default"].createElement(_Save["default"], null)
|
|
344
|
+
}, this.props.t('Save')) : null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
345
|
+
variant: "contained",
|
|
202
346
|
onClick: function onClick() {
|
|
203
|
-
return
|
|
347
|
+
return _this4.props.onClose();
|
|
204
348
|
},
|
|
205
|
-
color: "primary"
|
|
206
|
-
|
|
349
|
+
color: "primary",
|
|
350
|
+
startIcon: /*#__PURE__*/_react["default"].createElement(_Close["default"], null)
|
|
351
|
+
}, this.props.t('Close'))));
|
|
207
352
|
}
|
|
208
|
-
}], [{
|
|
209
|
-
key: "getDerivedStateFromProps",
|
|
210
|
-
value: function getDerivedStateFromProps() {}
|
|
211
353
|
}]);
|
|
212
354
|
return FileViewer;
|
|
213
|
-
}(_react
|
|
355
|
+
}(_react.Component);
|
|
214
356
|
|
|
215
357
|
FileViewer.propTypes = {
|
|
216
358
|
t: _propTypes["default"].func,
|
|
359
|
+
lang: _propTypes["default"].string,
|
|
360
|
+
expertMode: _propTypes["default"].bool,
|
|
217
361
|
onClose: _propTypes["default"].func,
|
|
218
362
|
href: _propTypes["default"].string.isRequired,
|
|
219
|
-
|
|
363
|
+
supportSubscribes: _propTypes["default"].bool
|
|
220
364
|
};
|
|
221
365
|
/** @type {typeof FileViewer} */
|
|
222
366
|
|
|
223
|
-
var _export =
|
|
367
|
+
var _export = (0, _withWidth["default"])()((0, _styles.withStyles)(styles)(FileViewer));
|
|
224
368
|
|
|
225
369
|
var _default = _export;
|
|
226
370
|
exports["default"] = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileViewer.js","names":["withWidth","WrappedComponent","props","styles","theme","dialog","height","maxHeight","maxWidth","content","textAlign","textarea","width","img","objectFit","EXTENSIONS","images","code","txt","FileViewer","ext","Utils","getFileExtension","href","state","text","copyPossible","includes","fetch","then","response","data","setState","e","target","onerror","src","NoImage","classes","readOnly","onClose","fullScreen","undefined","t","getContent","copyToClipboard","React","Component","propTypes","PropTypes","func","string","isRequired","bool","_export"],"sources":["FileViewer.js"],"sourcesContent":["import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\nimport PropTypes from 'prop-types';\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 DialogTitle from '@mui/material/DialogTitle';\nimport TextField from '@mui/material/TextField';\n\nimport NoImage from '../assets/no_icon.svg';\nimport Utils from './Utils';\n\n// Icons\nimport {FaCopy as CopyIcon} from 'react-icons/fa';\nimport CloseIcon from '@mui/icons-material/Close';\n\n// FIXME checkout https://mui.com/components/use-media-query/#migrating-from-withwidth\nconst withWidth = () => WrappedComponent => props => <WrappedComponent {...props} width=\"xs\" />;\n\nconst styles = theme => ({\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n content: {\n textAlign: 'center',\n },\n textarea: {\n width: '100%',\n height: '100%',\n },\n img: {\n width: 'auto',\n height: 'calc(100% - 5px)',\n objectFit: 'contain',\n }\n});\n\nexport const EXTENSIONS = {\n images: ['png', 'jpg', 'svg', 'jpeg', 'jpg'],\n code: ['js', 'json'],\n txt: ['log', 'txt', 'html', 'css', 'xml'],\n};\n\n/**\n * @typedef {object} FileViewerProps\n * @property {string} [key] The key to identify this component.\n * @property {import('../types').Translator} t Translation function\n * @property {ioBroker.Languages} [lang] The selected language.\n * @property {boolean} [expertMode] Is expert mode enabled? (default: false)\n * @property {() => void} onClose Callback when the viewer is closed.\n * @property {string} href The URL to the file to be displayed.\n *\n * @extends {React.Component<FileViewerProps>}\n */\nclass FileViewer extends React.Component {\n /**\n * @param {Readonly<FileViewerProps>} props\n */\n constructor(props) {\n super(props);\n\n this.ext = Utils.getFileExtension(this.props.href);\n\n this.state = {\n text: null,\n code: null,\n copyPossible: EXTENSIONS.code.includes(this.ext) || EXTENSIONS.txt.includes(this.ext),\n };\n\n if (this.state.copyPossible) {\n fetch(this.props.href)\n .then(response => response.text())\n .then(data => {\n if (EXTENSIONS.txt.includes(this.ext)) {\n this.setState({ text: data });\n } else if (EXTENSIONS.code.includes(this.ext)) {\n this.setState({ code: data });\n }\n });\n }\n }\n\n static getDerivedStateFromProps() {\n\n }\n\n getContent() {\n if (EXTENSIONS.images.includes(this.ext)) {\n return <img\n onError={ e => {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n className={ this.props.classes.img }\n src={ this.props.href }\n alt={ this.props.href }\n />;\n } else if (this.state.code !== null) {\n return <TextField\n variant=\"standard\"\n className={ this.props.classes.textarea }\n multiline\n value={ this.state.code }\n InputProps={{\n readOnly: true,\n }}\n />;\n } else if (this.state.text !== null) {\n return <TextField\n variant=\"standard\"\n className={ this.props.classes.textarea }\n value={ this.state.code }\n multiline\n InputProps={{\n readOnly: true,\n }}\n />;\n }\n }\n\n render() {\n return <Dialog\n className={ this.props.classes.dialog }\n open={ !!this.props.href }\n onClose={ () => this.props.onClose() }\n fullWidth\n fullScreen={this.props.fullScreen !== undefined ? this.props.fullScreen : true}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{ this.props.t('ra_View: %s', this.props.href) }</DialogTitle>\n <DialogContent className={ this.props.classes.content }>\n { this.getContent() }\n </DialogContent>\n <DialogActions>\n { this.state.copyPossible ? <Button color=\"grey\" onClick={e => Utils.copyToClipboard(this.state.text || this.state.code, e) } >\n <CopyIcon />\n { this.props.t('ra_Copy content') }\n </Button> : null }\n\n <Button onClick={() => this.props.onClose()} color=\"primary\">\n <CloseIcon />\n { this.props.t('ra_Close') }\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nFileViewer.propTypes = {\n t: PropTypes.func,\n\n onClose: PropTypes.func,\n href: PropTypes.string.isRequired,\n fullScreen: PropTypes.bool,\n};\n\n/** @type {typeof FileViewer} */\nconst _export = withWidth()(withStyles(styles)(FileViewer));\nexport default _export;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileViewer.js","names":["styles","theme","dialog","height","paper","content","textAlign","textarea","width","img","objectFit","dialogTitle","justifyContent","display","EXTENSIONS","images","code","txt","bufferToBase64","buffer","binary","bytes","Uint8Array","len","byteLength","i","String","fromCharCode","window","btoa","FileViewer","props","id","fileName","size","state","changed","timeout","clearTimeout","setTimeout","alert","text","readFile","setState","forceUpdate","Date","now","parts","href","split","data","editingValue","splice","adapter","name","join","socket","writeFile64","Buffer","from","toString","then","_","onClose","e","ext","Utils","getFileExtension","editing","formatEditFile","copyPossible","includes","file","undefined","newState","type","AdminUtils","detectMimeType","supportSubscribes","subscribeFiles","onFileChanged","target","onerror","src","NoImage","clsx","classes","getClassBackgroundImage","newValue","readOnly","scrollPaper","t","setStateBackgroundImage","getContent","copyToClipboard","Component","propTypes","PropTypes","func","lang","string","expertMode","bool","isRequired","_export","withWidth","withStyles"],"sources":["FileViewer.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport withWidth from './withWidth';\nimport PropTypes from 'prop-types';\n\nimport TextField from '@mui/material/TextField';\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 DialogTitle from '@mui/material/DialogTitle';\nimport { IconButton } from '@mui/material';\n\nimport NoImage from '../assets/no_icon.svg';\nimport Utils from './Utils';\n\n// Icons\nimport { FaCopy as CopyIcon } from 'react-icons/fa';\nimport Brightness5Icon from '@mui/icons-material/Brightness6';\nimport CloseIcon from '@mui/icons-material/Close';\nimport SaveIcon from '@mui/icons-material/Save';\n\nconst styles = theme => ({\n dialog: {\n height: '100%',\n },\n paper: {\n height: 'calc(100% - 64px)',\n },\n content: {\n textAlign: 'center',\n },\n textarea: {\n width: '100%',\n height: '100%',\n },\n img: {\n width: 'auto',\n height: 'calc(100% - 5px)',\n objectFit: 'contain',\n },\n dialogTitle: {\n justifyContent: 'space-between',\n display: 'flex'\n }\n});\n\nexport const EXTENSIONS = {\n images: ['png', 'jpg', 'svg', 'jpeg', 'bmp'],\n code: ['js', 'json', 'md'],\n txt: ['log', 'txt', 'html', 'css', 'xml'],\n};\n\nfunction bufferToBase64(buffer) {\n let binary = '';\n let bytes = new Uint8Array(buffer);\n let len = bytes.byteLength;\n for (let i = 0; i < len && i < 50; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\n/**\n * @typedef {object} FileViewerProps\n * @property {string} [key] The key to identify this component.\n * @property {import('../types').Translator} t Translation function\n * @property {ioBroker.Languages} [lang] The selected language.\n * @property {boolean} [expertMode] Is expert mode enabled? (default: false)\n * @property {() => void} onClose Callback when the viewer is closed.\n * @property {string} href The URL to the file to be displayed.\n *\n * @extends {React.Component<FileViewerProps>}\n */\nclass FileViewer extends Component {\n /**\n * @param {Readonly<FileViewerProps>} props\n */\n constructor(props) {\n super(props);\n const ext = Utils.getFileExtension(this.props.href);\n\n this.state = {\n text: null,\n code: null,\n ext,\n editing: !!this.props.formatEditFile || false,\n editingValue: null,\n copyPossible: EXTENSIONS.code.includes(ext) || EXTENSIONS.txt.includes(ext),\n forceUpdate: Date.now(),\n changed: false,\n };\n }\n\n readFile() {\n if (this.props.href) {\n const parts = this.props.href.split('/');\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n\n this.props.socket.readFile(adapter, name)\n .then(data => {\n if (data.file !== undefined) {\n data = data.file;\n }\n\n const newState = {copyPossible: this.state.copyPossible};\n // try to detect valid extension\n if (data.type === 'Buffer') {\n const ext = AdminUtils.detectMimeType(bufferToBase64(data.data));\n if (ext) {\n newState.ext = ext;\n newState.copyPossible = EXTENSIONS.code.includes(ext) || EXTENSIONS.txt.includes(ext);\n }\n }\n\n if (newState.copyPossible) {\n if (EXTENSIONS.txt.includes(this.state.ext)) {\n newState.text = data;\n newState.editingValue = data;\n } else if (EXTENSIONS.code.includes(this.state.ext)) {\n newState.code = data;\n newState.editingValue = data;\n }\n }\n\n this.setState(newState);\n })\n .catch(e => window.alert('Cannot read file: ' + e));\n }\n }\n\n componentDidMount() {\n this.readFile();\n\n const parts = this.props.href.split('/');\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n\n this.props.supportSubscribes && this.props.socket.subscribeFiles(adapter, name, this.onFileChanged);\n }\n\n componentWillUnmount() {\n this.timeout && clearTimeout(this.timeout);\n const parts = this.props.href.split('/');\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n this.props.supportSubscribes && this.props.socket.subscribeFiles(adapter, name, this.onFileChanged);\n }\n\n onFileChanged = (id, fileName, size) => {\n if (!this.state.changed) {\n this.timeout && clearTimeout(this.timeout);\n this.timeout = setTimeout(() => {\n this.timeout = null;\n if (size === null) {\n window.alert('Show file was deleted!');\n } else if (this.state.text !== null || this.state.code !== null) {\n this.readFile();\n } else {\n this.setState({ forceUpdate: Date.now() });\n }\n }, 300);\n }\n };\n\n writeFile64 = () => {\n const parts = this.props.href.split('/');\n const data = this.state.editingValue;\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n this.props.socket.writeFile64(adapter, name, Buffer.from(data).toString('base64'))\n .then(_ => this.props.onClose())\n .catch(e => window.alert('Cannot write file: ' + e));\n }\n\n getEditFile(ext) {\n switch (ext) {\n case 'json':\n return 'json';\n case 'js':\n return 'javascript';\n case 'html':\n return 'html';\n case 'txt':\n return 'html';\n default:\n return 'json';\n }\n }\n\n getContent() {\n if (EXTENSIONS.images.includes(this.state.ext)) {\n return <img\n onError={e => {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n className={Utils.clsx(this.props.classes.img, this.props.getClassBackgroundImage())}\n src={this.props.href + '?ts=' + this.state.forceUpdate}\n alt={this.props.href}\n />;\n } else if (this.state.code !== null || this.state.text !== null || this.state.editing) {\n return <TextField\n variant=\"standard\"\n className={ this.props.classes.textarea }\n multiline\n value={ this.state.editingValue || this.state.code || this.state.text }\n onChange={newValue => this.setState({ editingValue: newValue, changed: true })}\n InputProps={{ readOnly: !this.state.editing,}}\n />;\n }\n }\n\n render() {\n return <Dialog\n classes={{ scrollPaper: this.props.classes.dialog, paper: this.props.classes.paper }}\n scroll=\"paper\"\n open={!!this.props.href}\n onClose={() => this.props.onClose()}\n fullWidth={true}\n maxWidth=\"xl\"\n aria-labelledby=\"form-dialog-title\"\n >\n <div className={this.props.classes.dialogTitle}>\n <DialogTitle id=\"form-dialog-title\">{this.props.t(this.state.editing ? 'Edit' : 'View') + ': ' + this.props.href}</DialogTitle>\n {EXTENSIONS.images.includes(this.state.ext) && <div>\n <IconButton size=\"large\"\n color={'inherit'}\n onClick={this.props.setStateBackgroundImage}\n >\n <Brightness5Icon />\n </IconButton>\n </div>\n }\n </div>\n <DialogContent className={this.props.classes.content}>\n {this.getContent()}\n </DialogContent>\n <DialogActions>\n {this.state.copyPossible ?\n <Button\n color=\"grey\"\n onClick={e => Utils.copyToClipboard(this.state.text || this.state.code, e)}\n startIcon={<CopyIcon />}\n >\n {this.props.t('Copy content')}\n </Button> : null}\n {this.state.editing ?\n <Button\n color=\"grey\"\n disabled={this.state.editingValue === this.state.code || this.state.editingValue === this.state.text}\n variant=\"contained\"\n onClick={this.writeFile64}\n startIcon={<SaveIcon />}\n >\n {this.props.t('Save')}\n </Button> : null}\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"primary\"\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nFileViewer.propTypes = {\n t: PropTypes.func,\n lang: PropTypes.string,\n expertMode: PropTypes.bool,\n onClose: PropTypes.func,\n href: PropTypes.string.isRequired,\n supportSubscribes: PropTypes.bool,\n};\n\n/** @type {typeof FileViewer} */\nconst _export = withWidth()(withStyles(styles)(FileViewer));\nexport default _export;\n"],"mappings":"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"}
|
package/Components/Icon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","names":["getSystemIcon","obj","icon","id","_id","startsWith","endsWith","type","getSelectIdIcon","imagePrefix","src","common","cIcon","includes","instance","name","split","Icon","props","length","title","undefined","Object","assign","height","marginTop","styleUTF8","style","Utils","clsx","className","width","React","Component","propTypes","color","PropTypes","string","oneOfType","object","isRequired"],"sources":["Icon.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nimport IconSystem from '@mui/icons-material/SettingsApplications';\nimport IconPhoto from '@mui/icons-material/Photo';\nimport IconGroup from '@mui/icons-material/SupervisedUserCircle';\nimport IconUser from '@mui/icons-material/PersonOutlined';\nimport IconHost from '@mui/icons-material/Router';\nimport IconConnection from '@mui/icons-material/Wifi';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconMeta from '@mui/icons-material/Description';\nimport IconAlias from '../icons/IconAlias';\n\nimport Utils from './Utils';\n\nexport function getSystemIcon(obj) {\n let icon;\n const id = obj?._id;\n\n if (!id) {\n return null;\n }\n\n // system or design have special icons\n if (id.startsWith('_design/') || (id === 'system')) {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === '0_userdata' || id === '0_userdata.0') {\n icon = <IconPhoto className=\"iconOwn\" />;\n } else if (id === 'alias' || id === 'alias.0') {\n icon = <IconAlias className=\"iconOwn\" />;\n } else if (id === 'system.adapter') {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === 'system.group') {\n icon = <IconGroup className=\"iconOwn\" />;\n } else if (id === 'system.user') {\n icon = <IconUser className=\"iconOwn\" />;\n } else if (id === 'system.host') {\n icon = <IconHost className=\"iconOwn\" />;\n } else if (id.endsWith('.connection') || id.endsWith('.connected')) {\n icon = <IconConnection className=\"iconOwn\" />;\n } else if (id.endsWith('.info')) {\n icon = <IconInfo className=\"iconOwn\" />;\n } else if (obj?.type === 'meta') {\n icon = <IconMeta className=\"iconOwn\" />;\n }\n\n return icon || null;\n}\n\nexport function getSelectIdIcon(obj, imagePrefix) {\n imagePrefix = imagePrefix || '.';//http://localhost:8081';\n let src = '';\n const common = obj?.common;\n\n if (common) {\n const cIcon = common.icon;\n if (cIcon) {\n if (!cIcon.startsWith('data:image/')) {\n if (cIcon.includes('.')) {\n let instance;\n if (obj.type === 'instance' || obj.type === 'adapter') {\n src = imagePrefix + '/adapter/' + common.name + '/' + cIcon;\n } else if (obj._id && obj._id.startsWith('system.adapter.')) {\n instance = obj._id.split('.', 3);\n if (cIcon[0] === '/') {\n instance[2] += cIcon;\n } else {\n instance[2] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[2];\n } else {\n instance = obj._id.split('.', 2);\n if (cIcon[0] === '/') {\n instance[0] += cIcon;\n } else {\n instance[0] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[0];\n }\n } else {\n return null;\n }\n } else {\n // base 64 image\n src = cIcon;\n }\n }\n }\n\n return src || null;\n}\n\nclass Icon extends React.Component {\n render() {\n if (this.props.src) {\n if (typeof this.props.src === 'string') {\n if (this.props.src.length < 3) {\n return <span title={this.props.title || undefined} style={Object.assign({height: 27, marginTop: -8}, this.props.styleUTF8 || this.props.style)} className={ Utils.clsx(this.props.className, 'iconOwn') }>{this.props.src}</span>; // utf-8 char\n } else {\n if (this.props.src.startsWith('data:image/svg')) {\n return <SVG title={this.props.title || undefined} src={this.props.src} className={ Utils.clsx(this.props.className, 'iconOwn') } width={this.props.style?.width || 28} height={this.props.style?.height || this.props.style?.width || 28} style={this.props.style || {}}/>;\n } else {\n return <img title={this.props.title || undefined} style={this.props.style || {}} className={ Utils.clsx(this.props.className, 'iconOwn') } src={ this.props.src } alt=\"\" />;\n }\n }\n } else {\n return this.props.src;\n }\n } else {\n return null;\n }\n }\n}\n\nIcon.propTypes = {\n color: PropTypes.string,\n title: PropTypes.string,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n style: PropTypes.object,\n styleUTF8: PropTypes.object,\n};\n\nexport default Icon;"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Icon.js","names":["getSystemIcon","obj","icon","id","_id","startsWith","endsWith","type","getSelectIdIcon","imagePrefix","src","common","cIcon","includes","instance","name","split","Icon","props","length","title","undefined","Object","assign","height","marginTop","styleUTF8","style","Utils","clsx","className","width","React","Component","propTypes","color","PropTypes","string","oneOfType","object","isRequired"],"sources":["Icon.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport SVG from 'react-inlinesvg';\n\nimport IconSystem from '@mui/icons-material/SettingsApplications';\nimport IconPhoto from '@mui/icons-material/Photo';\nimport IconGroup from '@mui/icons-material/SupervisedUserCircle';\nimport IconUser from '@mui/icons-material/PersonOutlined';\nimport IconHost from '@mui/icons-material/Router';\nimport IconConnection from '@mui/icons-material/Wifi';\nimport IconInfo from '@mui/icons-material/Info';\nimport IconMeta from '@mui/icons-material/Description';\nimport IconAlias from '../icons/IconAlias';\n\nimport Utils from './Utils';\n\nexport function getSystemIcon(obj) {\n let icon;\n const id = obj?._id;\n\n if (!id) {\n return null;\n }\n\n // system or design have special icons\n if (id.startsWith('_design/') || (id === 'system')) {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === '0_userdata' || id === '0_userdata.0') {\n icon = <IconPhoto className=\"iconOwn\" />;\n } else if (id === 'alias' || id === 'alias.0') {\n icon = <IconAlias className=\"iconOwn\" />;\n } else if (id === 'system.adapter') {\n icon = <IconSystem className=\"iconOwn\" />;\n } else if (id === 'system.group') {\n icon = <IconGroup className=\"iconOwn\" />;\n } else if (id === 'system.user') {\n icon = <IconUser className=\"iconOwn\" />;\n } else if (id === 'system.host') {\n icon = <IconHost className=\"iconOwn\" />;\n } else if (id.endsWith('.connection') || id.endsWith('.connected')) {\n icon = <IconConnection className=\"iconOwn\" />;\n } else if (id.endsWith('.info')) {\n icon = <IconInfo className=\"iconOwn\" />;\n } else if (obj?.type === 'meta') {\n icon = <IconMeta className=\"iconOwn\" />;\n }\n\n return icon || null;\n}\n\nexport function getSelectIdIcon(obj, imagePrefix) {\n imagePrefix = imagePrefix || '.';//http://localhost:8081';\n let src = '';\n const common = obj?.common;\n\n if (common) {\n const cIcon = common.icon;\n if (cIcon) {\n if (!cIcon.startsWith('data:image/')) {\n if (cIcon.includes('.')) {\n let instance;\n if (obj.type === 'instance' || obj.type === 'adapter') {\n src = imagePrefix + '/adapter/' + common.name + '/' + cIcon;\n } else if (obj._id && obj._id.startsWith('system.adapter.')) {\n instance = obj._id.split('.', 3);\n if (cIcon[0] === '/') {\n instance[2] += cIcon;\n } else {\n instance[2] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[2];\n } else {\n instance = obj._id.split('.', 2);\n if (cIcon[0] === '/') {\n instance[0] += cIcon;\n } else {\n instance[0] += '/' + cIcon;\n }\n src = imagePrefix + '/adapter/' + instance[0];\n }\n } else {\n return null;\n }\n } else {\n // base 64 image\n src = cIcon;\n }\n }\n }\n\n return src || null;\n}\n\nclass Icon extends React.Component {\n render() {\n if (this.props.src) {\n if (typeof this.props.src === 'string') {\n if (this.props.src.length < 3) {\n return <span title={this.props.title || undefined} style={Object.assign({height: 27, marginTop: -8}, this.props.styleUTF8 || this.props.style)} className={ Utils.clsx(this.props.className, 'iconOwn') }>{this.props.src}</span>; // utf-8 char\n } else {\n if (this.props.src.startsWith('data:image/svg')) {\n return <SVG title={this.props.title || undefined} src={this.props.src} className={ Utils.clsx(this.props.className, 'iconOwn') } width={this.props.style?.width || 28} height={this.props.style?.height || this.props.style?.width || 28} style={this.props.style || {}}/>;\n } else {\n return <img title={this.props.title || undefined} style={this.props.style || {}} className={ Utils.clsx(this.props.className, 'iconOwn') } src={ this.props.src } alt=\"\" />;\n }\n }\n } else {\n return this.props.src;\n }\n } else {\n return null;\n }\n }\n}\n\nIcon.propTypes = {\n color: PropTypes.string,\n title: PropTypes.string,\n src: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n className: PropTypes.string,\n imagePrefix: PropTypes.string,\n style: PropTypes.object,\n styleUTF8: PropTypes.object,\n};\n\nexport default Icon;"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconPicker.js","names":["IconPicker","props","IconCustom","icon","useStyles","theme","formContainer","display","justifyContent","alignItems","formControl","padding","flexGrow","divContainer","width","height","whiteSpace","lineHeight","marginRight","dragField","textAlign","minHeight","border","borderRadius","formIcon","margin","opacity","text","verticalAlign","classes","onDrop","acceptedFiles","reader","FileReader","addEventListener","onChange","result","readAsDataURL","getRootProps","getInputProps","isDragActive","root","customClasses","label","value","Utils","clsx","previewClassName","disabled","I18n","t","icons","onlyRooms","onlyDevices","base64","getLanguage","backgroundColor","cursor","propTypes","PropTypes","string","object","any","bool","func","isRequired","array"],"sources":["IconPicker.js"],"sourcesContent":["import React, {useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport {useDropzone} from 'react-dropzone';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport IconSelector from './IconSelector';\nimport Icon from './Icon';\nimport I18n from '../i18n';\nimport Utils from './Utils';\n\n/**\n * @typedef {object} IconPickerProps\n * @property {string} [value] The value.\n * @property {string} [label] The label.\n * @property {boolean} [disabled] Set to true to disable the icon picker.\n * @property {(icon: string) => void} onChange The icon change callback.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {React.CSSProperties} [style] Additional styling for this component.\n * @property {string} [className] The CSS class name.\n *\n * @extends {React.Component<IconPickerProps>}\n */\nlet IconPicker = function (props) {\n let IconCustom = props.icon;\n\n const useStyles = makeStyles(theme => ({\n formContainer : {\n display: 'flex',\n justifyContent: 'left',\n alignItems: 'center'\n },\n formControl : {\n display: 'flex',\n padding: 24,\n flexGrow: 1000\n },\n divContainer: {\n width: 32 + 24,\n height: 32,\n whiteSpace: 'nowrap',\n lineHeight: '32px',\n marginRight: 8\n },\n dragField: {\n textAlign: 'center',\n display: 'table',\n minHeight: 90,\n width: 'calc(100% - 60px)',\n border: '2px dashed #777',\n borderRadius: 10,\n padding: 4,\n },\n formIcon : {\n margin: 10,\n opacity: 0.6\n },\n text: {\n display: 'table-cell',\n verticalAlign: 'middle',\n }\n }));\n\n const classes = useStyles();\n\n const onDrop = useCallback(acceptedFiles => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () =>\n props.onChange(reader.result), false);\n\n if (acceptedFiles[0]) {\n reader.readAsDataURL(acceptedFiles[0]);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});\n\n return <div className={classes.formContainer}>\n {IconCustom ? <IconCustom className={ classes.formIcon }/> : null}\n <FormControl variant=\"standard\" className={classes.formControl} style={{padding: 3}}>\n <InputLabel shrink classes={{root: props.customClasses?.label}}>\n { props.label }\n </InputLabel>\n <div className={ classes.formContainer }>\n {props.value ?\n <div className={ classes.divContainer }>\n <Icon alt=\"\" className={Utils.clsx(props.previewClassName, props.customClasses?.icon)} src={props.value}/>\n {!props.disabled && <IconButton\n style={{verticalAlign: 'top'}}\n title={I18n.t('ra_Clear icon')}\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <ClearIcon/>\n </IconButton>}\n </div>\n :\n (!props.disabled && <IconSelector\n icons={props.icons}\n onlyRooms={props.onlyRooms}\n onlyDevices={props.onlyDevices}\n onSelect={base64 => props.onChange(base64)}\n t={I18n.t}\n lang={I18n.getLanguage()}\n />)\n }\n\n {!props.disabled && <div\n {...getRootProps()}\n className={classes.dragField}\n style={isDragActive ? {backgroundColor: 'rgba(0, 255, 0, 0.1)'} : {cursor: 'pointer'}}\n >\n <input {...getInputProps()} />\n {\n isDragActive ?\n <span className={classes.text}>{I18n.t('ra_Drop the files here...')}</span> :\n <span className={classes.text}>{I18n.t(`ra_Drag 'n' drop some files here, or click to select files`)}</span>\n }\n </div>}\n </div>\n </FormControl>\n </div>;\n};\n\nIconPicker.propTypes = {\n previewClassName: PropTypes.string,\n icon: PropTypes.object,\n customClasses: PropTypes.object,\n label: PropTypes.string,\n value: PropTypes.any,\n disabled: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n};\n\n/** @type {typeof IconPicker} */\nexport default IconPicker;"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,UAAU,GAAG,SAAbA,UAAa,CAAUC,KAAV,EAAiB;EAAA;;EAC9B,IAAIC,UAAU,GAAGD,KAAK,CAACE,IAAvB;EAEA,IAAMC,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"IconPicker.js","names":["IconPicker","props","IconCustom","icon","useStyles","makeStyles","theme","formContainer","display","justifyContent","alignItems","formControl","padding","flexGrow","divContainer","width","height","whiteSpace","lineHeight","marginRight","dragField","textAlign","minHeight","border","borderRadius","formIcon","margin","opacity","text","verticalAlign","classes","onDrop","useCallback","acceptedFiles","reader","FileReader","addEventListener","onChange","result","readAsDataURL","useDropzone","getRootProps","getInputProps","isDragActive","root","customClasses","label","value","Utils","clsx","previewClassName","disabled","I18n","t","icons","onlyRooms","onlyDevices","base64","getLanguage","backgroundColor","cursor","propTypes","PropTypes","string","object","any","bool","func","isRequired","array"],"sources":["IconPicker.js"],"sourcesContent":["import React, {useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport {useDropzone} from 'react-dropzone';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport IconSelector from './IconSelector';\nimport Icon from './Icon';\nimport I18n from '../i18n';\nimport Utils from './Utils';\n\n/**\n * @typedef {object} IconPickerProps\n * @property {string} [value] The value.\n * @property {string} [label] The label.\n * @property {boolean} [disabled] Set to true to disable the icon picker.\n * @property {(icon: string) => void} onChange The icon change callback.\n * @property {import('../Connection').default} socket The socket connection.\n * @property {string} [imagePrefix] The image prefix (default: './files/')\n * @property {React.CSSProperties} [style] Additional styling for this component.\n * @property {string} [className] The CSS class name.\n *\n * @extends {React.Component<IconPickerProps>}\n */\nlet IconPicker = function (props) {\n let IconCustom = props.icon;\n\n const useStyles = makeStyles(theme => ({\n formContainer : {\n display: 'flex',\n justifyContent: 'left',\n alignItems: 'center'\n },\n formControl : {\n display: 'flex',\n padding: 24,\n flexGrow: 1000\n },\n divContainer: {\n width: 32 + 24,\n height: 32,\n whiteSpace: 'nowrap',\n lineHeight: '32px',\n marginRight: 8\n },\n dragField: {\n textAlign: 'center',\n display: 'table',\n minHeight: 90,\n width: 'calc(100% - 60px)',\n border: '2px dashed #777',\n borderRadius: 10,\n padding: 4,\n },\n formIcon : {\n margin: 10,\n opacity: 0.6\n },\n text: {\n display: 'table-cell',\n verticalAlign: 'middle',\n }\n }));\n\n const classes = useStyles();\n\n const onDrop = useCallback(acceptedFiles => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () =>\n props.onChange(reader.result), false);\n\n if (acceptedFiles[0]) {\n reader.readAsDataURL(acceptedFiles[0]);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});\n\n return <div className={classes.formContainer}>\n {IconCustom ? <IconCustom className={ classes.formIcon }/> : null}\n <FormControl variant=\"standard\" className={classes.formControl} style={{padding: 3}}>\n <InputLabel shrink classes={{root: props.customClasses?.label}}>\n { props.label }\n </InputLabel>\n <div className={ classes.formContainer }>\n {props.value ?\n <div className={ classes.divContainer }>\n <Icon alt=\"\" className={Utils.clsx(props.previewClassName, props.customClasses?.icon)} src={props.value}/>\n {!props.disabled && <IconButton\n style={{verticalAlign: 'top'}}\n title={I18n.t('ra_Clear icon')}\n size=\"small\"\n onClick={() => props.onChange('')}\n >\n <ClearIcon/>\n </IconButton>}\n </div>\n :\n (!props.disabled && <IconSelector\n icons={props.icons}\n onlyRooms={props.onlyRooms}\n onlyDevices={props.onlyDevices}\n onSelect={base64 => props.onChange(base64)}\n t={I18n.t}\n lang={I18n.getLanguage()}\n />)\n }\n\n {!props.disabled && <div\n {...getRootProps()}\n className={classes.dragField}\n style={isDragActive ? {backgroundColor: 'rgba(0, 255, 0, 0.1)'} : {cursor: 'pointer'}}\n >\n <input {...getInputProps()} />\n {\n isDragActive ?\n <span className={classes.text}>{I18n.t('ra_Drop the files here...')}</span> :\n <span className={classes.text}>{I18n.t(`ra_Drag 'n' drop some files here, or click to select files`)}</span>\n }\n </div>}\n </div>\n </FormControl>\n </div>;\n};\n\nIconPicker.propTypes = {\n previewClassName: PropTypes.string,\n icon: PropTypes.object,\n customClasses: PropTypes.object,\n label: PropTypes.string,\n value: PropTypes.any,\n disabled: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n\n icons: PropTypes.array,\n onlyRooms: PropTypes.bool,\n onlyDevices: PropTypes.bool,\n};\n\n/** @type {typeof IconPicker} */\nexport default IconPicker;"],"mappings":"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"}
|