UNPKG

agora-edu-core

Version:

Core APIs for building an online classroom

251 lines (242 loc) 12.1 kB
"use strict"; 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() { super(...arguments); 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) { var _this$widgetControlle; let widgetProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return (_this$widgetControlle = this.widgetController) === null || _this$widgetControlle === void 0 ? void 0 : _this$widgetControlle.updateWidgetProperties(widgetId, widgetProps); } /** * 更新组件用户属性,属性更新将同步至当前用户私有属性中 * @param widgetId * @param widgetProps * @returns */ updateWidgetUserProperties(widgetId) { var _this$widgetControlle2; let widgetProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 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)(_ref => { let { newValue } = _ref; 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);