bigbluebutton-html-plugin-sdk
Version:
This repository contains the SDK for developing BigBlueButton plugins. Plugins are React components that can be loaded from external sources by the BigBlueButton HTML5 client to extend its functionalities.
80 lines • 3.85 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useUserCameraDomElements = void 0;
var react_1 = require("react");
var enums_1 = require("../enums");
var enum_1 = require("../../core/enum");
var utils_1 = require("../../data-consumption/utils");
var useUserCameraDomElements = function (streamIds, pluginUuid) {
var _a = (0, react_1.useState)(), domElement = _a[0], setDomElement = _a[1];
var _b = (0, react_1.useState)((streamIds) || []), streamIdsState = _b[0], setStreamIdsState = _b[1];
var previousNeededIds = (0, react_1.useRef)([]);
var handleDomElementUpdateEvent = (function (event) {
var _a;
var detail = event.detail;
if (detail.hook === enums_1.DomElementManipulationHooks.USER_CAMERA) {
var filteredDataFromBbbCore = ((_a = detail.data) === null || _a === void 0 ? void 0 : _a.filter(function (item) { return streamIdsState.includes(item.streamId); })) || [];
var filteredStreamIdsFromBbbCore = filteredDataFromBbbCore.map(function (item) { return item.streamId; });
if ((0, utils_1.sortedStringify)(filteredStreamIdsFromBbbCore)
!== (0, utils_1.sortedStringify)(previousNeededIds.current)) {
previousNeededIds.current = __spreadArray([], filteredStreamIdsFromBbbCore, true);
setDomElement(filteredDataFromBbbCore.map(function (userCamera) { return userCamera.userCameraDomElement; }));
}
}
});
(0, react_1.useEffect)(function () {
window.dispatchEvent(new CustomEvent(enum_1.HookEvents.PLUGIN_SUBSCRIBED_TO_BBB_CORE, {
detail: {
hook: enums_1.DomElementManipulationHooks.USER_CAMERA,
hookArguments: {
streamIds: streamIdsState,
pluginUuid: pluginUuid,
},
},
}));
return function () {
window.dispatchEvent(new CustomEvent(enum_1.HookEvents.PLUGIN_UNSUBSCRIBED_FROM_BBB_CORE, {
detail: {
hook: enums_1.DomElementManipulationHooks.USER_CAMERA,
hookArguments: {
streamIds: streamIds,
pluginUuid: pluginUuid,
},
},
}));
};
}, []);
(0, react_1.useEffect)(function () {
window.addEventListener(enum_1.HookEvents.BBB_CORE_SENT_NEW_DATA, handleDomElementUpdateEvent);
window.dispatchEvent(new CustomEvent(enum_1.HookEvents.PLUGIN_SENT_CHANGES_TO_BBB_CORE, {
detail: {
hook: enums_1.DomElementManipulationHooks.USER_CAMERA,
hookArguments: {
streamIds: (streamIdsState) || [],
pluginUuid: pluginUuid,
},
data: undefined,
},
}));
// Runs on code cleanup
return function () {
// Everytime the state update, we remove the eventListener and then we re-add it.
window.removeEventListener(enum_1.HookEvents.BBB_CORE_SENT_NEW_DATA, handleDomElementUpdateEvent);
};
}, [streamIdsState]);
if ((0, utils_1.sortedStringify)((streamIds) || []) !== (0, utils_1.sortedStringify)(streamIdsState)) {
setStreamIdsState((streamIds) || []);
}
return domElement;
};
exports.useUserCameraDomElements = useUserCameraDomElements;
//# sourceMappingURL=hooks.js.map