@robotical/sensors-dashboard
Version:
A dashboard tool for depicting Marty data by Robotical
146 lines (145 loc) • 5.78 kB
JavaScript
;
require("core-js/modules/es.symbol.description.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setupMockEnvironment = exports.isMockRaft = exports.default = void 0;
require("core-js/modules/es.regexp.to-string.js");
require("core-js/modules/web.dom-collections.iterator.js");
require("core-js/modules/esnext.iterator.constructor.js");
require("core-js/modules/esnext.iterator.for-each.js");
require("core-js/modules/es.promise.js");
require("core-js/modules/esnext.iterator.map.js");
var _SelectedRaftContext = require("@robotical/webapp-types/dist-types/src/store/SelectedRaftContext");
var _raft = require("@robotical/webapp-types/dist-types/src/types/raft");
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const createMockRaftId = prefix => "".concat(prefix, "-").concat(Math.random().toString(36).slice(2, 8));
const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
const mutateNumber = (value, min, max, maxDelta) => {
const delta = (Math.random() * 2 - 1) * maxDelta;
const next = value + delta;
return Math.round(clamp(next, min, max));
};
const createMockRaft = (type, name) => {
const observers = new Map();
const robotType = type === _raft.RaftTypeE.MARTY ? "marty" : "cog";
let batteryLevel = type === _raft.RaftTypeE.MARTY ? 82 : 88;
let rssiLevel = -60;
const raft = {
id: createMockRaftId(robotType),
type,
name,
isMock: true,
mockRobotType: robotType,
subscribe(observer, topics) {
topics.forEach(topic => {
if (!observers.has(topic)) {
observers.set(topic, new Set());
}
observers.get(topic).add(observer);
});
},
unsubscribe(observer) {
observers.forEach(set => {
set.delete(observer);
});
},
emit(eventType, eventEnum, eventName, eventData) {
const observersForTopic = observers.get(eventType);
if (!observersForTopic) return;
observersForTopic.forEach(observer => {
try {
observer.notify(eventType, eventEnum, eventName, eventData);
} catch (error) {
console.error("[MockRaft] Observer notify failed", error);
}
});
},
getBatteryStrength() {
batteryLevel = mutateNumber(batteryLevel, 40, 100, 3);
return batteryLevel;
},
getRSSI() {
rssiLevel = mutateNumber(rssiLevel, -90, -45, 4);
return rssiLevel;
},
async getRaftName() {
return name;
},
// The following are stubs to satisfy consumers that might call them.
getRaftVersion() {
return "mock-1.0.0";
},
getSerialNumber() {
return "MOCK-RA0B0T";
},
getFriendlyName() {
return name;
}
};
return raft;
};
const isMockRaft = raft => Boolean(raft.isMock);
exports.isMockRaft = isMockRaft;
class MockApplicationManager {
constructor() {
_defineProperty(this, "connectedRafts", {});
_defineProperty(this, "connectedRaftsContext", [{
id: _SelectedRaftContext.NewRobotIdE.NEW,
name: "Connect a robot",
type: _raft.RaftTypeE.MARTY,
isSelected: false
}]);
_defineProperty(this, "mockCounters", {
marty: 1,
cog: 1
});
_defineProperty(this, "mockTypeOrder", [_raft.RaftTypeE.MARTY, _raft.RaftTypeE.COG]);
_defineProperty(this, "nextTypeIndex", 0);
}
async connectGeneric(afterRaftConnectedCb) {
const type = this.mockTypeOrder[this.nextTypeIndex % this.mockTypeOrder.length];
this.nextTypeIndex += 1;
const name = type === _raft.RaftTypeE.MARTY ? "Mock Marty ".concat(this.mockCounters.marty++) : "Mock Cog ".concat(this.mockCounters.cog++);
const raft = createMockRaft(type, name);
this.connectedRafts[raft.id] = raft;
this.refreshConnectedContext(raft.id);
afterRaftConnectedCb === null || afterRaftConnectedCb === void 0 ? void 0 : afterRaftConnectedCb(raft);
}
async disconnectGeneric(raft, afterRaftDisconnectedCb) {
const mockRaft = raft;
delete this.connectedRafts[mockRaft.id];
mockRaft.emit("conn", 3, "BLE_DISCONNECTED", null);
this.refreshConnectedContext();
afterRaftDisconnectedCb === null || afterRaftDisconnectedCb === void 0 ? void 0 : afterRaftDisconnectedCb();
}
refreshConnectedContext(selectedId) {
const baseEntry = {
id: _SelectedRaftContext.NewRobotIdE.NEW,
name: "Connect a robot",
type: _raft.RaftTypeE.MARTY,
isSelected: false
};
const connectedEntries = Object.values(this.connectedRafts).map((raft, index) => {
const typedRaft = raft;
return {
id: typedRaft.id,
name: typedRaft.name,
type: typedRaft.type,
isSelected: selectedId ? typedRaft.id === selectedId : index === 0
};
});
this.connectedRaftsContext = [baseEntry, ...connectedEntries];
}
}
exports.default = MockApplicationManager;
const setupMockEnvironment = () => {
if (typeof window === "undefined") return;
if (window.applicationManager) return;
const mockManager = new MockApplicationManager();
window.applicationManager = mockManager;
console.info("[MockApplicationManager] No application manager detected, using mock robots.");
};
exports.setupMockEnvironment = setupMockEnvironment;