agora-edu-core
Version:
Core APIs for building an online classroom
248 lines (239 loc) • 11.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WidgetStore = void 0;
var _mobx = require("mobx");
var _agoraRteSdk = require("agora-rte-sdk");
var _controller = require("./controller");
var _base = require("../base");
var _type = require("./type");
var _class, _descriptor, _class2, _descriptor2, _SceneEventHandler;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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); }
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
/**
* `WidgetStore` 提供活跃插件的数据和状态的访问;提供 WidgetController 实例的直接访问;提供插件相关 API,用于激活、停用和更新插件的状态。
*/
/** @en
* The `WidgetStore` class provides access to data and status of active plug-ins; Provides direct access to the WidgetController instance; Provides plugin-related apis for activating, deactivating, and updating the status of plugins.
*/
let WidgetStore = exports.WidgetStore = (_class = class WidgetStore extends _base.EduStoreBase {
constructor(...args) {
super(...args);
this._disposers = [];
this._stateListeners = [];
_initializerDefineProperty(this, "_dataStore", _descriptor, this);
}
get widgetController() {
return this._dataStore.widgetController;
}
/**
*
* 设置组件为可用状态
* @param widgetId widget ID
* @param widgetProps widget 属性
* @param ownerUserUuid
*
**/
/** @en
* Set widget state to active
* @param widgetId widget ID
* @param widgetProps widget props
* @param ownerUserUuid
*
*/
setActive(widgetId, widgetProps, ownerUserUuid) {
this.api.updateWidgetProperties(this.classroomStore.connectionStore.sceneId, widgetId, _objectSpread(_objectSpread({}, widgetProps), {}, {
ownerUserUuid,
state: _type.WidgetState.Active
}));
}
/**
*
* 设置组件为不可用状态
* @param widgetId widget ID
* @param widgetProps widget 属性
**/
/** @en
* Set widget state to inactive
* @param widgetId widget ID
* @param widgetProps widget props
*/
setInactive(widgetId, widgetProps) {
this.api.updateWidgetProperties(this.classroomStore.connectionStore.sceneId, widgetId, _objectSpread(_objectSpread({}, widgetProps), {}, {
state: _type.WidgetState.Inactive
}));
}
/**
* 更新组件全局属性,属性更新将同步至该组件在所有客户端上的实例
* @param widgetId
* @param widgetProps
* @returns
*/
/** @en
*
* @param widgetId
* @param widgetProps
* @returns
*/
updateWidgetProperties(widgetId, widgetProps = {}) {
var _this$widgetControlle;
return (_this$widgetControlle = this.widgetController) === null || _this$widgetControlle === void 0 ? void 0 : _this$widgetControlle.updateWidgetProperties(widgetId, widgetProps);
}
/**
* 更新组件用户属性,属性更新将同步至当前用户私有属性中
* @param widgetId
* @param widgetProps
* @returns
*/
updateWidgetUserProperties(widgetId, widgetProps = {}) {
var _this$widgetControlle2;
return (_this$widgetControlle2 = this.widgetController) === null || _this$widgetControlle2 === void 0 ? void 0 : _this$widgetControlle2.updateWidgetUserProperties(widgetId, widgetProps);
}
/**
*
* 删除当前房间中的此组件实例
* @param widgetId widget ID
*
**/
/** @en
* delete the widget
* @param widgetId widget ID
*/
deleteWidget(widgetId) {
var _this$widgetControlle3;
return (_this$widgetControlle3 = this.widgetController) === null || _this$widgetControlle3 === void 0 ? void 0 : _this$widgetControlle3.deleteWidget(widgetId);
}
/**
* 删除组件用户属性
* @param widgetId
* @param keys
* @returns
*/
/** @en
* delete user private properties of the widget
* @param widgetId widget ID
*/
removeWidgetUserProperties(widgetId, keys) {
var _this$widgetControlle4;
return (_this$widgetControlle4 = this.widgetController) === null || _this$widgetControlle4 === void 0 ? void 0 : _this$widgetControlle4.removeWidgetUserProperties(widgetId, keys);
}
/**
* 删除组件扩展属性
* @param widgetId
* @param propKeys
*/
/** @en
* delete the extra properties of the widget
* @param widgetId widget ID
*/
removeWidgetExtra(widgetId, keys) {
var _this$widgetControlle5;
return (_this$widgetControlle5 = this.widgetController) === null || _this$widgetControlle5 === void 0 ? void 0 : _this$widgetControlle5.removeWidgetExtraProperties(widgetId, keys);
}
/**
* @deprecated since v2.9.0, please use AgoraWidgetController.addWidgetStateListener
* 添加一个组件状态监听器
* @param listener
*/
/** @en
*
* @param listener
*/
addWidgetStateListener(listener) {
this._stateListeners.push(listener);
}
/**
* @deprecated since v2.9.0, please use AgoraWidgetController.removeWidgetStateListener
* 移除一个组件状态监听器
* @param listener
*/
removeWidgetStateListener(listener) {
this._stateListeners = this._stateListeners.filter(ls => listener !== ls);
}
_setEventHandler(scene) {
if (this.classroomStore.connectionStore.mainRoomScene === scene) {
let handler = SceneEventHandler.getEventHandler(scene);
if (!handler) {
handler = SceneEventHandler.createEventHandler(scene, this.api);
}
this._dataStore = handler.dataStore;
} else {
const handler = SceneEventHandler.createEventHandler(scene, this.api);
this._dataStore = handler.dataStore;
}
}
onInstall() {
this._disposers.push((0, _mobx.computed)(() => this.classroomStore.connectionStore.scene).observe((0, _mobx.action)(({
newValue
}) => {
if (newValue) {
this._setEventHandler(newValue);
} else {
SceneEventHandler.cleanup();
}
})));
}
onDestroy() {
SceneEventHandler.cleanup();
this._disposers.forEach(d => d());
this._disposers = [];
}
}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "_dataStore", [_mobx.observable], {
configurable: true,
enumerable: true,
writable: true,
initializer: function () {
return {
widgetController: undefined
};
}
}), _applyDecoratedDescriptor(_class.prototype, "widgetController", [_mobx.computed], Object.getOwnPropertyDescriptor(_class.prototype, "widgetController"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setActive", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "setActive"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setInactive", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "setInactive"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "updateWidgetProperties", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "updateWidgetProperties"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "updateWidgetUserProperties", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "updateWidgetUserProperties"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "deleteWidget", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "deleteWidget"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "removeWidgetUserProperties", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "removeWidgetUserProperties"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "removeWidgetExtra", [_agoraRteSdk.bound], Object.getOwnPropertyDescriptor(_class.prototype, "removeWidgetExtra"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "_setEventHandler", [_mobx.action], Object.getOwnPropertyDescriptor(_class.prototype, "_setEventHandler"), _class.prototype), _class);
let SceneEventHandler = (_class2 = (_SceneEventHandler = class SceneEventHandler {
static createEventHandler(scene, apiService) {
if (SceneEventHandler._handlers[scene.sceneId]) {
SceneEventHandler._handlers[scene.sceneId].destroyWidgetController();
}
const handler = new SceneEventHandler(scene);
handler.initWidgetController(scene, apiService, []);
SceneEventHandler._handlers[scene.sceneId] = handler;
return SceneEventHandler._handlers[scene.sceneId];
}
static getEventHandler(scene) {
return SceneEventHandler._handlers[scene.sceneId];
}
static cleanup() {
Object.keys(SceneEventHandler._handlers).forEach(k => {
SceneEventHandler._handlers[k].destroyWidgetController();
});
SceneEventHandler._handlers = {};
}
constructor(_scene) {
this._scene = _scene;
_initializerDefineProperty(this, "dataStore", _descriptor2, this);
}
initWidgetController(scene, apiService, stateListeners) {
this.dataStore.widgetController = new _controller.AgoraWidgetController(scene, apiService, stateListeners);
}
destroyWidgetController() {
if (this.dataStore.widgetController) {
this.dataStore.widgetController.destroy();
this.dataStore.widgetController = undefined;
}
}
}, _SceneEventHandler._handlers = {}, _SceneEventHandler), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "dataStore", [_mobx.observable], {
configurable: true,
enumerable: true,
writable: true,
initializer: function () {
return {
widgetController: undefined
};
}
}), _applyDecoratedDescriptor(_class2.prototype, "initWidgetController", [_mobx.action], Object.getOwnPropertyDescriptor(_class2.prototype, "initWidgetController"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "destroyWidgetController", [_mobx.action], Object.getOwnPropertyDescriptor(_class2.prototype, "destroyWidgetController"), _class2.prototype), _class2);