@robotical/webapp-types 1.1.2 → 3.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-types/src/application/ApplicationManager/ApplicationManager.d.ts +11 -2
- package/dist-types/src/application/ApplicationManager/ApplicationManager.js +127 -38
- package/dist-types/src/application/RAFTs/RAFT.js +2 -1
- package/dist-types/src/components/modals/ SensorsDashboardModal/index.d.ts +2 -0
- package/dist-types/src/components/modals/ SensorsDashboardModal/index.js +61 -0
- package/dist-types/src/components/modals/DetailedFeedbackModal/index.d.ts +5 -0
- package/dist-types/src/components/modals/DetailedFeedbackModal/index.js +37 -0
- package/dist-types/src/components/modals/LEDLightsOrQRVerificationModal/index.d.ts +1 -0
- package/dist-types/src/components/modals/LEDLightsOrQRVerificationModal/index.js +141 -0
- package/dist-types/src/state-observables/modal/DraggableModalState.d.ts +16 -0
- package/dist-types/src/state-observables/modal/DraggableModalState.js +52 -0
- package/dist-types/src/wrapper-app/connectors/ConnectorFactory.js +1 -1
- package/package.json +1 -1
- package/dist-types/src/application/RAFTs/Cog/PublishedDataGetter.d.ts +0 -23
- package/dist-types/src/application/RAFTs/Cog/PublishedDataGetter.js +0 -65
|
@@ -47,12 +47,16 @@ export default class ApplicationManager {
|
|
|
47
47
|
* Disconnect from RAFT generic
|
|
48
48
|
* This method is called from various environments (connection button, blocksjr, blocks etc.)
|
|
49
49
|
*/
|
|
50
|
-
disconnectGeneric(raft: RAFT, afterRaftDisconnectedCb?: () => void): Promise<void>;
|
|
50
|
+
disconnectGeneric(raft: RAFT, afterRaftDisconnectedCb?: () => void, skipConfirmation?: boolean): Promise<void>;
|
|
51
51
|
/**
|
|
52
52
|
* Selects a RAFT in Phone's verification modal
|
|
53
53
|
*/
|
|
54
54
|
selectRaft(ricToConnectTo: FOUND_RAFT_ON_DISCOVERY_RESPONSE['foundRIC'], method: RaftConnectionMethod): Promise<RAFT | null>;
|
|
55
|
-
connectToRIC(method: RaftConnectionMethod, uuids: string[]): Promise<RAFT | null>;
|
|
55
|
+
connectToRIC(method: RaftConnectionMethod, uuids: string[], withoutVerification?: boolean): Promise<RAFT | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Toggles the Sensors Dashboard modal
|
|
58
|
+
*/
|
|
59
|
+
toggleSensorsDashboard(): void;
|
|
56
60
|
/**
|
|
57
61
|
* Disconnect from RAFT
|
|
58
62
|
*/
|
|
@@ -67,6 +71,11 @@ export default class ApplicationManager {
|
|
|
67
71
|
* This is used from the Phone App only
|
|
68
72
|
*/
|
|
69
73
|
startDiscovery(ricSelectedCb: (raft: RAFT) => void, uuids: string[]): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Start discovery without verification
|
|
76
|
+
* This is used from the Phone App only, when the user wants to connect to a RAFT with qr code
|
|
77
|
+
*/
|
|
78
|
+
startDiscoveryWithoutVerification(uuids: string[], afterRaftConnectedCb: (raft: RAFT) => void): Promise<void>;
|
|
70
79
|
/**
|
|
71
80
|
* Stοp discovery
|
|
72
81
|
* When the user cancels the discovery process without having first connected to a robot
|
|
@@ -52,6 +52,9 @@ import Toaster from "../../utils/Toaster";
|
|
|
52
52
|
import { AnalyticsManager } from "../../analytics/AnalyticsManager";
|
|
53
53
|
import { ConnManager } from "@robotical/roboticaljs";
|
|
54
54
|
import ConnectingLoadingSpinnerModal from "../../components/modals/ConnectingLoadingSpinnerModal";
|
|
55
|
+
import draggableModalState from "../../state-observables/modal/DraggableModalState";
|
|
56
|
+
import SensorsDashboardModal from "../../components/modals/ SensorsDashboardModal";
|
|
57
|
+
import LEDLightsOrQRVerificationModal from "../../components/modals/LEDLightsOrQRVerificationModal";
|
|
55
58
|
var SHOW_LOGS = true;
|
|
56
59
|
var TAG = "ApplicationManager";
|
|
57
60
|
var ApplicationManager = /** @class */ (function () {
|
|
@@ -132,51 +135,69 @@ var ApplicationManager = /** @class */ (function () {
|
|
|
132
135
|
*/
|
|
133
136
|
ApplicationManager.prototype.connectGeneric = function (afterRaftConnectedCb, uuids) {
|
|
134
137
|
return __awaiter(this, void 0, void 0, function () {
|
|
135
|
-
var e_1, newRaft, e_2;
|
|
138
|
+
var specificUUIDs, isQRVerification, e_1, newRaft, e_2;
|
|
136
139
|
var _this = this;
|
|
137
140
|
return __generator(this, function (_a) {
|
|
138
141
|
switch (_a.label) {
|
|
139
|
-
case 0:
|
|
140
|
-
if (!uuids) {
|
|
141
|
-
uuids = [ConnManager.COGUUID, ConnManager.RICUUID];
|
|
142
|
-
}
|
|
143
|
-
if (!isPhoneApp()) return [3 /*break*/, 5];
|
|
144
|
-
_a.label = 1;
|
|
142
|
+
case 0: return [4 /*yield*/, modalState.setModal(createElement(LEDLightsOrQRVerificationModal), "Verification Method")];
|
|
145
143
|
case 1:
|
|
146
|
-
_a.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
specificUUIDs = _a.sent();
|
|
145
|
+
isQRVerification = false;
|
|
146
|
+
if (specificUUIDs === false) {
|
|
147
|
+
return [2 /*return*/];
|
|
148
|
+
}
|
|
149
|
+
if (specificUUIDs.length > 0) {
|
|
150
|
+
uuids = specificUUIDs;
|
|
151
|
+
isQRVerification = true;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
if (!uuids) {
|
|
155
|
+
uuids = [ConnManager.COGUUID, ConnManager.RICUUID];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (!isPhoneApp()) return [3 /*break*/, 9];
|
|
159
|
+
_a.label = 2;
|
|
151
160
|
case 2:
|
|
152
|
-
_a.
|
|
153
|
-
return [3 /*break*/, 4];
|
|
161
|
+
_a.trys.push([2, 7, , 8]);
|
|
162
|
+
if (!isQRVerification) return [3 /*break*/, 4];
|
|
163
|
+
return [4 /*yield*/, window.applicationManager.startDiscoveryWithoutVerification(uuids, afterRaftConnectedCb)];
|
|
154
164
|
case 3:
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
165
|
+
_a.sent();
|
|
166
|
+
return [3 /*break*/, 6];
|
|
167
|
+
case 4: return [4 /*yield*/, window.applicationManager.startDiscovery(function (newRaft) {
|
|
168
|
+
_this.connectedRaftContextMethods.addConnectedRaft({ id: newRaft.id, type: newRaft.type, name: newRaft.getFriendlyName() || "", isSelected: true });
|
|
169
|
+
afterRaftConnectedCb(newRaft);
|
|
170
|
+
}, uuids)];
|
|
159
171
|
case 5:
|
|
160
|
-
|
|
172
|
+
_a.sent();
|
|
161
173
|
_a.label = 6;
|
|
162
|
-
case 6:
|
|
163
|
-
_a.trys.push([6, 8, , 9]);
|
|
164
|
-
return [4 /*yield*/, window.applicationManager.connectToRIC(RaftConnectionMethod.WEB_BLE, uuids)];
|
|
174
|
+
case 6: return [3 /*break*/, 8];
|
|
165
175
|
case 7:
|
|
176
|
+
e_1 = _a.sent();
|
|
177
|
+
Logger.error(SHOW_LOGS, TAG, "Failed to start discovery: ".concat(e_1));
|
|
178
|
+
return [3 /*break*/, 8];
|
|
179
|
+
case 8: return [3 /*break*/, 14];
|
|
180
|
+
case 9:
|
|
181
|
+
secondaryModalState.setModal(createElement(ConnectingLoadingSpinnerModal, {}), "Connecting...", false);
|
|
182
|
+
_a.label = 10;
|
|
183
|
+
case 10:
|
|
184
|
+
_a.trys.push([10, 12, , 13]);
|
|
185
|
+
return [4 /*yield*/, window.applicationManager.connectToRIC(RaftConnectionMethod.WEB_BLE, uuids, isQRVerification)];
|
|
186
|
+
case 11:
|
|
166
187
|
newRaft = _a.sent();
|
|
167
188
|
if (newRaft) {
|
|
168
189
|
this.connectedRaftContextMethods.addConnectedRaft({ id: newRaft.id, type: newRaft.type, name: newRaft.getFriendlyName() || "", isSelected: true });
|
|
169
190
|
afterRaftConnectedCb(newRaft);
|
|
170
191
|
}
|
|
171
|
-
return [3 /*break*/,
|
|
172
|
-
case
|
|
192
|
+
return [3 /*break*/, 13];
|
|
193
|
+
case 12:
|
|
173
194
|
e_2 = _a.sent();
|
|
174
195
|
Logger.error(SHOW_LOGS, TAG, "Failed to connect to new robot: ".concat(e_2));
|
|
175
|
-
return [3 /*break*/,
|
|
176
|
-
case
|
|
196
|
+
return [3 /*break*/, 13];
|
|
197
|
+
case 13:
|
|
177
198
|
secondaryModalState.closeModal();
|
|
178
|
-
_a.label =
|
|
179
|
-
case
|
|
199
|
+
_a.label = 14;
|
|
200
|
+
case 14: return [2 /*return*/];
|
|
180
201
|
}
|
|
181
202
|
});
|
|
182
203
|
});
|
|
@@ -185,31 +206,34 @@ var ApplicationManager = /** @class */ (function () {
|
|
|
185
206
|
* Disconnect from RAFT generic
|
|
186
207
|
* This method is called from various environments (connection button, blocksjr, blocks etc.)
|
|
187
208
|
*/
|
|
188
|
-
ApplicationManager.prototype.disconnectGeneric = function (raft, afterRaftDisconnectedCb) {
|
|
209
|
+
ApplicationManager.prototype.disconnectGeneric = function (raft, afterRaftDisconnectedCb, skipConfirmation) {
|
|
210
|
+
if (skipConfirmation === void 0) { skipConfirmation = false; }
|
|
189
211
|
return __awaiter(this, void 0, void 0, function () {
|
|
190
212
|
var confirmDisconnect, e_3;
|
|
191
213
|
return __generator(this, function (_a) {
|
|
192
214
|
switch (_a.label) {
|
|
193
215
|
case 0:
|
|
194
|
-
_a.trys.push([0,
|
|
216
|
+
_a.trys.push([0, 4, , 5]);
|
|
217
|
+
if (!!skipConfirmation) return [3 /*break*/, 2];
|
|
195
218
|
return [4 /*yield*/, modalState.setModal(createElement(DisconnectConfirmationModal), "Are you sure you want to disconnect from your ".concat(raft.getFriendlyName(), "?"))];
|
|
196
219
|
case 1:
|
|
197
220
|
confirmDisconnect = _a.sent();
|
|
198
221
|
if (!confirmDisconnect) {
|
|
199
222
|
return [2 /*return*/];
|
|
200
223
|
}
|
|
201
|
-
|
|
202
|
-
case 2:
|
|
224
|
+
_a.label = 2;
|
|
225
|
+
case 2: return [4 /*yield*/, window.applicationManager.disconnectFromRaft(raft.id)];
|
|
226
|
+
case 3:
|
|
203
227
|
_a.sent();
|
|
204
228
|
if (afterRaftDisconnectedCb) {
|
|
205
229
|
afterRaftDisconnectedCb();
|
|
206
230
|
}
|
|
207
|
-
return [3 /*break*/,
|
|
208
|
-
case
|
|
231
|
+
return [3 /*break*/, 5];
|
|
232
|
+
case 4:
|
|
209
233
|
e_3 = _a.sent();
|
|
210
234
|
Logger.error(SHOW_LOGS, TAG, "Failed to disconnect from robot: ".concat(e_3));
|
|
211
|
-
return [3 /*break*/,
|
|
212
|
-
case
|
|
235
|
+
return [3 /*break*/, 5];
|
|
236
|
+
case 5: return [2 /*return*/];
|
|
213
237
|
}
|
|
214
238
|
});
|
|
215
239
|
});
|
|
@@ -263,7 +287,7 @@ var ApplicationManager = /** @class */ (function () {
|
|
|
263
287
|
});
|
|
264
288
|
});
|
|
265
289
|
};
|
|
266
|
-
ApplicationManager.prototype.connectToRIC = function (method, uuids) {
|
|
290
|
+
ApplicationManager.prototype.connectToRIC = function (method, uuids, withoutVerification) {
|
|
267
291
|
var _a, _b;
|
|
268
292
|
return __awaiter(this, void 0, void 0, function () {
|
|
269
293
|
var wasConnectedObj, raftId, raftType, raft;
|
|
@@ -296,13 +320,27 @@ var ApplicationManager = /** @class */ (function () {
|
|
|
296
320
|
case 2:
|
|
297
321
|
_c.sent();
|
|
298
322
|
// start verification process
|
|
299
|
-
|
|
323
|
+
if (!withoutVerification) {
|
|
324
|
+
modalState.setModal(createElement(VerificationModal, { connectedRAFT_: raft }), "Looking for ".concat(raft.type));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
raft.stopVerifyingRaft(true);
|
|
328
|
+
}
|
|
300
329
|
return [2 /*return*/, raft];
|
|
301
330
|
case 3: return [2 /*return*/, null];
|
|
302
331
|
}
|
|
303
332
|
});
|
|
304
333
|
});
|
|
305
334
|
};
|
|
335
|
+
/**
|
|
336
|
+
* Toggles the Sensors Dashboard modal
|
|
337
|
+
*/
|
|
338
|
+
ApplicationManager.prototype.toggleSensorsDashboard = function () {
|
|
339
|
+
if (draggableModalState.modalContent) {
|
|
340
|
+
return draggableModalState.closeModal();
|
|
341
|
+
}
|
|
342
|
+
return draggableModalState.setModal(createElement(SensorsDashboardModal), "Sensor Insights Hub (βETA)", "sensors-dashboard");
|
|
343
|
+
};
|
|
306
344
|
/**
|
|
307
345
|
* Disconnect from RAFT
|
|
308
346
|
*/
|
|
@@ -378,6 +416,57 @@ var ApplicationManager = /** @class */ (function () {
|
|
|
378
416
|
});
|
|
379
417
|
});
|
|
380
418
|
};
|
|
419
|
+
/**
|
|
420
|
+
* Start discovery without verification
|
|
421
|
+
* This is used from the Phone App only, when the user wants to connect to a RAFT with qr code
|
|
422
|
+
*/
|
|
423
|
+
ApplicationManager.prototype.startDiscoveryWithoutVerification = function (uuids, afterRaftConnectedCb) {
|
|
424
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
425
|
+
var foundRICs, wasDiscoveryStarted;
|
|
426
|
+
var _this = this;
|
|
427
|
+
return __generator(this, function (_a) {
|
|
428
|
+
switch (_a.label) {
|
|
429
|
+
case 0:
|
|
430
|
+
foundRICs = [];
|
|
431
|
+
raftFoundSubscriptionHelper().subscribe(function (_a) {
|
|
432
|
+
var discoveredDevice = _a.discoveredDevice;
|
|
433
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
434
|
+
var newRaft;
|
|
435
|
+
return __generator(this, function (_b) {
|
|
436
|
+
switch (_b.label) {
|
|
437
|
+
case 0:
|
|
438
|
+
// connect to the first device found, block the rest
|
|
439
|
+
if (foundRICs.length > 0) {
|
|
440
|
+
return [2 /*return*/];
|
|
441
|
+
}
|
|
442
|
+
foundRICs.push(discoveredDevice);
|
|
443
|
+
return [4 /*yield*/, this.selectRaft(discoveredDevice, RaftConnectionMethod.PHONE_BLE)];
|
|
444
|
+
case 1:
|
|
445
|
+
newRaft = _b.sent();
|
|
446
|
+
if (newRaft) {
|
|
447
|
+
this.connectedRaftContextMethods.addConnectedRaft({ id: newRaft.id, type: newRaft.type, name: newRaft.getFriendlyName() || "", isSelected: true });
|
|
448
|
+
afterRaftConnectedCb(newRaft);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
foundRICs = [];
|
|
452
|
+
}
|
|
453
|
+
return [2 /*return*/];
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.RAFT_START_DISCOVERY, { uuids: uuids })];
|
|
459
|
+
case 1:
|
|
460
|
+
wasDiscoveryStarted = _a.sent();
|
|
461
|
+
if (!wasDiscoveryStarted) {
|
|
462
|
+
return [2 /*return*/, raftFoundSubscriptionHelper().unsubscribe()];
|
|
463
|
+
}
|
|
464
|
+
raftFoundSubscriptionHelper().unsubscribe();
|
|
465
|
+
return [2 /*return*/];
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
};
|
|
381
470
|
/**
|
|
382
471
|
* Stοp discovery
|
|
383
472
|
* When the user cancels the discovery process without having first connected to a robot
|
|
@@ -284,7 +284,8 @@ var RAFT = /** @class */ (function () {
|
|
|
284
284
|
case RaftConnEvent.CONN_VERIFIED_CORRECT:
|
|
285
285
|
window.applicationManager.analyticsManager.logEvent("connection", { raftType: this.type, systemInfo: this.systemInfo });
|
|
286
286
|
break;
|
|
287
|
-
case RaftConnEvent.CONN_DISCONNECTED:
|
|
287
|
+
case RaftConnEvent.CONN_DISCONNECTED: // this runs when the RAFT is disconnected on its own (due to a timeout or other reasons)
|
|
288
|
+
window.applicationManager.disconnectGeneric(this, function () { }, true); // disconnects the RAFT and removes it from the connectedRafts list
|
|
288
289
|
window.applicationManager.analyticsManager.logEvent("disconnection", { raftType: this.type });
|
|
289
290
|
break;
|
|
290
291
|
case RaftConnEvent.CONN_ISSUE_DETECTED:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { createElement, useEffect, useRef, useState } from 'react';
|
|
14
|
+
import SensorsDashboard from '@robotical/sensors-dashboard/dist/App';
|
|
15
|
+
import { ReactComponent as BetaSignSVG } from "../../../assets/beta-sign.svg";
|
|
16
|
+
import modalState from "../../../state-observables/modal/ModalState";
|
|
17
|
+
import DetailedFeedbackModal from '../DetailedFeedbackModal';
|
|
18
|
+
import styles from './styles.module.css';
|
|
19
|
+
function SensorsDashboardModal() {
|
|
20
|
+
var _a = useState(true), showBetaSign = _a[0], setShowBetaSign = _a[1];
|
|
21
|
+
var betaSignRef = useRef(null);
|
|
22
|
+
// if (window.mv2Dashboard) {
|
|
23
|
+
// window.mv2Dashboard.setIsModal(true);
|
|
24
|
+
// }
|
|
25
|
+
var updateBetaSignVisibility = function () {
|
|
26
|
+
if (!betaSignRef.current) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
var parent = betaSignRef.current.parentElement;
|
|
30
|
+
if (!parent) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
var parentHeight = parent.clientHeight;
|
|
34
|
+
if (parentHeight > 100) {
|
|
35
|
+
setShowBetaSign(true);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
setShowBetaSign(false);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
useEffect(function () {
|
|
42
|
+
updateBetaSignVisibility();
|
|
43
|
+
if (!betaSignRef.current) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
var resizeObserver = new ResizeObserver(function () {
|
|
47
|
+
updateBetaSignVisibility();
|
|
48
|
+
});
|
|
49
|
+
if (!betaSignRef.current.parentElement) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
resizeObserver.observe(betaSignRef.current.parentElement);
|
|
53
|
+
return function () {
|
|
54
|
+
resizeObserver.disconnect();
|
|
55
|
+
};
|
|
56
|
+
}, [betaSignRef]);
|
|
57
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", __assign({ style: { visibility: showBetaSign ? "visible" : "hidden" }, className: styles.betaSign, onClick: function () {
|
|
58
|
+
return modalState.setModal(createElement(DetailedFeedbackModal), "Anonymous Bug Report");
|
|
59
|
+
}, ref: betaSignRef }, { children: _jsx(BetaSignSVG, {}) })), _jsx(SensorsDashboard, { isInModal: true })] }));
|
|
60
|
+
}
|
|
61
|
+
export default SensorsDashboardModal;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
import { useState } from "react";
|
|
14
|
+
import modalState from "../../../state-observables/modal/ModalState";
|
|
15
|
+
import styles from "./styles.module.css";
|
|
16
|
+
import SimpleButton from "../../disposables/buttons/SimpleButton";
|
|
17
|
+
export default function DetailedFeedbackModal(_a) {
|
|
18
|
+
var otherInfoObject = _a.otherInfoObject;
|
|
19
|
+
var _b = useState(""), report = _b[0], setReport = _b[1];
|
|
20
|
+
var _c = useState(""), email = _c[0], setEmail = _c[1];
|
|
21
|
+
var _d = useState(false), reportSent = _d[0], setReportSent = _d[1];
|
|
22
|
+
var onReport = function () {
|
|
23
|
+
if (!report)
|
|
24
|
+
return;
|
|
25
|
+
if (!email) {
|
|
26
|
+
var confirm_1 = window.confirm("We noticed you didn't leave your email. Without it we won't be able to reach out and help you. If you want to leave your email, press cancel and fill in the email field, otherwise press OK to send the report without your email.");
|
|
27
|
+
if (!confirm_1)
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
var reportWithContact = { text: "".concat(email ? email : "Anonymous", ": ").concat(report) };
|
|
31
|
+
window.applicationManager.analyticsManager.logEvent("textfeedback", __assign(__assign({}, reportWithContact), otherInfoObject));
|
|
32
|
+
setReportSent(true);
|
|
33
|
+
modalState.updateModalProps({ modalTitle: "🚀" });
|
|
34
|
+
setTimeout(function () { return modalState.closeModal(); }, 1500);
|
|
35
|
+
};
|
|
36
|
+
return (_jsx("div", __assign({ className: styles.bugReportModalContainer }, { children: reportSent ? ("Thank you for your feedback!") : (_jsxs(_Fragment, { children: [_jsxs("div", __assign({ className: styles.bugReportModalInfo }, { children: ["Please help up improve Marty! Please let us know if you spot any irregularities/bugs. ", _jsx("strong", __assign({ className: styles.bugReportModalInfoStrong }, { children: "You can optionally leave your contact details so we can reach out and help you" })), ". Thank you!"] })), _jsxs("div", __assign({ className: styles.bugReportModalForm }, { children: [_jsx("textarea", { className: styles.bugReportModalTextInput, placeholder: "Your report...", onChange: function (e) { return setReport(e.target.value); }, value: report }), _jsx("label", __assign({ className: styles.bugReportModalEmailLabel }, { children: "Provide your email if you want us to get back to you with a solution!" })), _jsx("input", { type: "email", className: styles.bugReportModalEmailInput, placeholder: "Email (optional)", onChange: function (e) { return setEmail(e.target.value); }, value: email })] })), _jsxs("div", __assign({ className: styles.bugReportModalButtons }, { children: [_jsx(SimpleButton, { onClick: function () { return modalState.closeModal(); }, title: "Cancel" }), _jsx(SimpleButton, { onClick: onReport, title: "Report" })] }))] })) })));
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function LEDLightsOrQRVerificationModal(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
49
|
+
import { useEffect, useState } from "react";
|
|
50
|
+
import modalState from "../../../state-observables/modal/ModalState";
|
|
51
|
+
import styles from "./styles.module.css";
|
|
52
|
+
import { HiOutlineLightBulb } from "react-icons/hi";
|
|
53
|
+
import { MdQrCode } from "react-icons/md";
|
|
54
|
+
//@ts-ignore
|
|
55
|
+
import { Scanner, centerText } from '@yudiel/react-qr-scanner';
|
|
56
|
+
import { ConnManager } from "@robotical/roboticaljs";
|
|
57
|
+
var options = [
|
|
58
|
+
{
|
|
59
|
+
id: "qr",
|
|
60
|
+
title: "QR Code Verification",
|
|
61
|
+
subtitle: "Scan a QR code to verify.",
|
|
62
|
+
icon: _jsx(MdQrCode, { size: 32 }),
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "led",
|
|
66
|
+
title: "LED Lights Verification",
|
|
67
|
+
subtitle: "Check LED signals for verification.",
|
|
68
|
+
icon: _jsx(HiOutlineLightBulb, { size: 32 }),
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
export default function LEDLightsOrQRVerificationModal() {
|
|
72
|
+
var _a = useState(true), qrSelected = _a[0], setQRSelected = _a[1];
|
|
73
|
+
var _b = useState(undefined), serialNoFromQR = _b[0], setSerialNoFromQR = _b[1];
|
|
74
|
+
useEffect(function () {
|
|
75
|
+
if (serialNoFromQR) {
|
|
76
|
+
modalState.closeModal([ConnManager.generateServiceFilterUUID(serialNoFromQR)]);
|
|
77
|
+
// modalState.closeModal([ConnManager.generateServiceFilterUUID('00000000202302111d28b4dc5f0d46d5')]);
|
|
78
|
+
}
|
|
79
|
+
}, [serialNoFromQR]);
|
|
80
|
+
var handleSelect = function (id) {
|
|
81
|
+
if (id === 'qr') {
|
|
82
|
+
setQRSelected(function (prev) { return !prev; });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
modalState.closeModal([]);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return (_jsxs("div", __assign({ className: styles.container }, { children: [_jsx("div", __assign({ className: styles.cards }, { children: options.map(function (_a) {
|
|
89
|
+
var id = _a.id, title = _a.title, subtitle = _a.subtitle, icon = _a.icon;
|
|
90
|
+
return (_jsxs("div", __assign({ className: qrSelected && id === 'qr' ? [styles.card, styles.qrselected].join(" ") : styles.card, onClick: function () { return handleSelect(id); } }, { children: [_jsx("div", __assign({ className: styles.icon }, { children: icon })), _jsx("h3", __assign({ className: styles.title }, { children: title })), _jsx("p", __assign({ className: styles.subtitle }, { children: subtitle }))] }), id));
|
|
91
|
+
}) })), qrSelected && _jsx(QRContent, { setSerialNo: setSerialNoFromQR }), _jsx("button", __assign({ className: styles.cancelButton, onClick: function () { return modalState.closeModal(false); } }, { children: "Cancel" }))] })));
|
|
92
|
+
}
|
|
93
|
+
function QRContent(_a) {
|
|
94
|
+
var _this = this;
|
|
95
|
+
var setSerialNo = _a.setSerialNo;
|
|
96
|
+
var onQrCodeFound = function (result) { return __awaiter(_this, void 0, void 0, function () {
|
|
97
|
+
var rawValue, today, serialNo;
|
|
98
|
+
var _a;
|
|
99
|
+
return __generator(this, function (_b) {
|
|
100
|
+
rawValue = (_a = result[0]) === null || _a === void 0 ? void 0 : _a.rawValue;
|
|
101
|
+
if (!rawValue || !rawValue.includes("CV1-")) {
|
|
102
|
+
window.applicationManager.toaster.error("No Valid QR Code Found");
|
|
103
|
+
return [2 /*return*/];
|
|
104
|
+
}
|
|
105
|
+
today = new Date();
|
|
106
|
+
serialNo = "00000000" + today.toISOString().split("T")[0].replaceAll("-", "") + rawValue.split("-").slice(-1)[0].padStart(16, "0");
|
|
107
|
+
setSerialNo(serialNo);
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
});
|
|
110
|
+
}); };
|
|
111
|
+
return (_jsx("div", __assign({ className: styles.QRcontainer }, { children: _jsx("div", __assign({ className: styles.QRscannerContainer }, { children: _jsx(Scanner, { formats: [
|
|
112
|
+
"qr_code",
|
|
113
|
+
"micro_qr_code",
|
|
114
|
+
"rm_qr_code",
|
|
115
|
+
"maxi_code",
|
|
116
|
+
"pdf417",
|
|
117
|
+
"aztec",
|
|
118
|
+
"data_matrix",
|
|
119
|
+
"matrix_codes",
|
|
120
|
+
"dx_film_edge",
|
|
121
|
+
"databar",
|
|
122
|
+
"databar_expanded",
|
|
123
|
+
"codabar",
|
|
124
|
+
"code_39",
|
|
125
|
+
"code_93",
|
|
126
|
+
"code_128",
|
|
127
|
+
"ean_8",
|
|
128
|
+
"ean_13",
|
|
129
|
+
"itf",
|
|
130
|
+
"linear_codes",
|
|
131
|
+
"upc_a",
|
|
132
|
+
"upc_e",
|
|
133
|
+
], allowMultiple: false, scanDelay: 2000, onScan: onQrCodeFound, components: {
|
|
134
|
+
audio: true,
|
|
135
|
+
onOff: false,
|
|
136
|
+
torch: true,
|
|
137
|
+
zoom: true,
|
|
138
|
+
finder: true,
|
|
139
|
+
tracker: centerText, // boundingBox // outline //
|
|
140
|
+
} }) })) })));
|
|
141
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ModalContentType, ModalEventTopics, ModalObservable, ModalObserver, ModalStateData } from "./ModalObserver";
|
|
2
|
+
declare class DraggableModalState implements ModalObservable {
|
|
3
|
+
modalContent: ModalContentType | null;
|
|
4
|
+
modalTitle: string;
|
|
5
|
+
modalNewWindowLink: string | undefined;
|
|
6
|
+
private _observers;
|
|
7
|
+
private onClose?;
|
|
8
|
+
constructor();
|
|
9
|
+
setModal(modalContent: ModalContentType, modalTitle: string, newWindowLink?: string, onClose?: () => void): void;
|
|
10
|
+
closeModal(): void;
|
|
11
|
+
subscribe(observer: ModalObserver, topics: Array<ModalEventTopics>): void;
|
|
12
|
+
unsubscribe(observer: ModalObserver): void;
|
|
13
|
+
publish(eventTopic: ModalEventTopics, eventData?: ModalStateData): void;
|
|
14
|
+
}
|
|
15
|
+
declare const draggableModalState: DraggableModalState;
|
|
16
|
+
export default draggableModalState;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var DraggableModalState = /** @class */ (function () {
|
|
2
|
+
function DraggableModalState() {
|
|
3
|
+
this._observers = {};
|
|
4
|
+
}
|
|
5
|
+
DraggableModalState.prototype.setModal = function (modalContent, modalTitle, newWindowLink, onClose) {
|
|
6
|
+
this.modalContent = modalContent;
|
|
7
|
+
this.modalTitle = modalTitle;
|
|
8
|
+
this.modalNewWindowLink = newWindowLink;
|
|
9
|
+
this.publish("SetModal", { modalContent: modalContent, modalTitle: modalTitle, newWindowLink: newWindowLink });
|
|
10
|
+
this.onClose = onClose;
|
|
11
|
+
};
|
|
12
|
+
DraggableModalState.prototype.closeModal = function () {
|
|
13
|
+
var _a;
|
|
14
|
+
this.modalContent = null;
|
|
15
|
+
this.modalTitle = "";
|
|
16
|
+
this.modalNewWindowLink = undefined;
|
|
17
|
+
this.publish("CloseModal");
|
|
18
|
+
(_a = this.onClose) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
19
|
+
};
|
|
20
|
+
DraggableModalState.prototype.subscribe = function (observer, topics) {
|
|
21
|
+
for (var _i = 0, topics_1 = topics; _i < topics_1.length; _i++) {
|
|
22
|
+
var topic = topics_1[_i];
|
|
23
|
+
if (!this._observers[topic]) {
|
|
24
|
+
this._observers[topic] = [];
|
|
25
|
+
}
|
|
26
|
+
if (this._observers[topic].indexOf(observer) === -1) {
|
|
27
|
+
this._observers[topic].push(observer);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
DraggableModalState.prototype.unsubscribe = function (observer) {
|
|
32
|
+
for (var topic in this._observers) {
|
|
33
|
+
if (this._observers.hasOwnProperty(topic)) {
|
|
34
|
+
var index = this._observers[topic].indexOf(observer);
|
|
35
|
+
if (index !== -1) {
|
|
36
|
+
this._observers[topic].splice(index, 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
DraggableModalState.prototype.publish = function (eventTopic, eventData) {
|
|
42
|
+
if (this._observers.hasOwnProperty(eventTopic)) {
|
|
43
|
+
for (var _i = 0, _a = this._observers[eventTopic]; _i < _a.length; _i++) {
|
|
44
|
+
var observer = _a[_i];
|
|
45
|
+
observer.notify(eventTopic, eventData);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
return DraggableModalState;
|
|
50
|
+
}());
|
|
51
|
+
var draggableModalState = new DraggableModalState();
|
|
52
|
+
export default draggableModalState;
|
|
@@ -77,7 +77,7 @@ var ConnectorFactory = /** @class */ (function () {
|
|
|
77
77
|
};
|
|
78
78
|
ConnectorFactory.createConnector = function (raftType, connManager) {
|
|
79
79
|
var systemInfo = connManager.getConnector().getRaftSystemUtils().getCachedSystemInfo();
|
|
80
|
-
var serialNo = systemInfo === null || systemInfo === void 0 ? void 0 : systemInfo.SerialNo;
|
|
80
|
+
var serialNo = (systemInfo === null || systemInfo === void 0 ? void 0 : systemInfo.MAC) || (systemInfo === null || systemInfo === void 0 ? void 0 : systemInfo.SerialNo);
|
|
81
81
|
var connector;
|
|
82
82
|
var randomId = serialNo || randomHashGenerator();
|
|
83
83
|
switch (raftType) {
|
package/package.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { DeviceManager } from "@robotical/raftjs/dist/web/RaftDeviceManager";
|
|
2
|
-
export default class PublishedDataGetter {
|
|
3
|
-
static getPowerData(deviceManager: DeviceManager): {
|
|
4
|
-
battV: number;
|
|
5
|
-
usb: "yes" | "no";
|
|
6
|
-
} | undefined;
|
|
7
|
-
static getAccelerometerData(deviceManager: DeviceManager): {
|
|
8
|
-
ax: number;
|
|
9
|
-
ay: number;
|
|
10
|
-
az: number;
|
|
11
|
-
} | undefined;
|
|
12
|
-
static getGyroscopeData(deviceManager: DeviceManager): {
|
|
13
|
-
gx: number;
|
|
14
|
-
gy: number;
|
|
15
|
-
gz: number;
|
|
16
|
-
} | undefined;
|
|
17
|
-
static getLightData(deviceManager: DeviceManager): {
|
|
18
|
-
amb0: number;
|
|
19
|
-
ir0: number;
|
|
20
|
-
ir1: number;
|
|
21
|
-
ir2: number;
|
|
22
|
-
} | undefined;
|
|
23
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { deviceAttrGetLatestFormatted } from "@robotical/raftjs";
|
|
2
|
-
/* LIGHT ATTRIBUTES */
|
|
3
|
-
var COG_LIGHT_ATTR_KEY = 'RoboCogLightV1_0';
|
|
4
|
-
var AMB0_KEY = 'amb0';
|
|
5
|
-
var IR0_KEY = 'ir0';
|
|
6
|
-
var IR1_KEY = 'ir1';
|
|
7
|
-
var IR2_KEY = 'ir2';
|
|
8
|
-
/* POWER ATTRIBUTES */
|
|
9
|
-
var COG_POWER_ATTR_KEY = 'RoboCogPowerV1_00';
|
|
10
|
-
var BATTV_KEY = 'battV';
|
|
11
|
-
var USB_KEY = 'UST';
|
|
12
|
-
/* I2CA ATTRIBUTES */
|
|
13
|
-
var COG_I2CA_ATTR_KEY = 'I2CA_6a';
|
|
14
|
-
var AX_KEY = 'ax';
|
|
15
|
-
var AY_KEY = 'ay';
|
|
16
|
-
var AZ_KEY = 'az';
|
|
17
|
-
var GX_KEY = 'gx';
|
|
18
|
-
var GY_KEY = 'gy';
|
|
19
|
-
var GZ_KEY = 'gz';
|
|
20
|
-
var PublishedDataGetter = /** @class */ (function () {
|
|
21
|
-
function PublishedDataGetter() {
|
|
22
|
-
}
|
|
23
|
-
PublishedDataGetter.getPowerData = function (deviceManager) {
|
|
24
|
-
var powerAttr = deviceManager.getDeviceState(COG_POWER_ATTR_KEY);
|
|
25
|
-
var battV = deviceAttrGetLatestFormatted(powerAttr === null || powerAttr === void 0 ? void 0 : powerAttr.deviceAttributes[BATTV_KEY]);
|
|
26
|
-
var usb = deviceAttrGetLatestFormatted(powerAttr === null || powerAttr === void 0 ? void 0 : powerAttr.deviceAttributes[USB_KEY]);
|
|
27
|
-
return { battV: convertStringToNumber(battV), usb: usb };
|
|
28
|
-
};
|
|
29
|
-
PublishedDataGetter.getAccelerometerData = function (deviceManager) {
|
|
30
|
-
var i2caAttr = deviceManager.getDeviceState(COG_I2CA_ATTR_KEY);
|
|
31
|
-
if (!i2caAttr)
|
|
32
|
-
return;
|
|
33
|
-
var i2ca = i2caAttr.deviceAttributes;
|
|
34
|
-
var ax = deviceAttrGetLatestFormatted(i2ca[AX_KEY]);
|
|
35
|
-
var ay = deviceAttrGetLatestFormatted(i2ca[AY_KEY]);
|
|
36
|
-
var az = deviceAttrGetLatestFormatted(i2ca[AZ_KEY]);
|
|
37
|
-
return { ax: convertStringToNumber(ax), ay: convertStringToNumber(ay), az: convertStringToNumber(az) };
|
|
38
|
-
};
|
|
39
|
-
PublishedDataGetter.getGyroscopeData = function (deviceManager) {
|
|
40
|
-
var i2caAttr = deviceManager.getDeviceState(COG_I2CA_ATTR_KEY);
|
|
41
|
-
if (!i2caAttr)
|
|
42
|
-
return;
|
|
43
|
-
var i2ca = i2caAttr.deviceAttributes;
|
|
44
|
-
var gx = deviceAttrGetLatestFormatted(i2ca[GX_KEY]);
|
|
45
|
-
var gy = deviceAttrGetLatestFormatted(i2ca[GY_KEY]);
|
|
46
|
-
var gz = deviceAttrGetLatestFormatted(i2ca[GZ_KEY]);
|
|
47
|
-
return { gx: convertStringToNumber(gx), gy: convertStringToNumber(gy), gz: convertStringToNumber(gz) };
|
|
48
|
-
};
|
|
49
|
-
PublishedDataGetter.getLightData = function (deviceManager) {
|
|
50
|
-
var lightAttr = deviceManager.getDeviceState(COG_LIGHT_ATTR_KEY);
|
|
51
|
-
if (!lightAttr)
|
|
52
|
-
return;
|
|
53
|
-
var light = lightAttr.deviceAttributes;
|
|
54
|
-
var amb0 = deviceAttrGetLatestFormatted(light[AMB0_KEY]);
|
|
55
|
-
var ir0 = deviceAttrGetLatestFormatted(light[IR0_KEY]);
|
|
56
|
-
var ir1 = deviceAttrGetLatestFormatted(light[IR1_KEY]);
|
|
57
|
-
var ir2 = deviceAttrGetLatestFormatted(light[IR2_KEY]);
|
|
58
|
-
return { amb0: convertStringToNumber(amb0), ir0: convertStringToNumber(ir0), ir1: convertStringToNumber(ir1), ir2: convertStringToNumber(ir2) };
|
|
59
|
-
};
|
|
60
|
-
return PublishedDataGetter;
|
|
61
|
-
}());
|
|
62
|
-
export default PublishedDataGetter;
|
|
63
|
-
var convertStringToNumber = function (str) {
|
|
64
|
-
return isNaN(+str) ? 0 : +str;
|
|
65
|
-
};
|