import { withPluginApi } from "discourse/lib/plugin-api";
import showModal from "discourse/lib/show-modal";
import { iconHTML } from "discourse-common/lib/icon-library";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
function launchBBB($elem) {
const data = $elem.data();
const site = Discourse.__container__.lookup("site:main");
const capabilities = Discourse.__container__.lookup("capabilities:main");
ajax("/bbb/create.json", {
type: "POST",
data: data,
})
.then((res) => {
if (res.url) {
if (
capabilities.isAppWebview ||
(site.mobileView && !data.mobileIframe) ||
(!site.mobileView && !data.desktopIframe)
) {
window.location.href = res.url;
} else {
$elem.children().hide();
$elem.append(
``
);
}
}
})
.catch(function (error) {
popupAjaxError(error);
});
}
function attachButton($elem) {
const buttonLabel = $elem.data("label") || I18n.t("bbb.launch");
$elem.html(
``
);
$elem.find("button").on("click", () => launchBBB($elem));
}
function attachStatus($elem, helper) {
const status = $elem.find(".bbb-status");
const data = $elem.data();
ajax(`/bbb/status/${data.meetingID}.json`).then((res) => {
if (res.avatars) {
status.html(`On the call: `);
res.avatars.forEach(function (avatar) {
status.append(
``
);
});
}
});
}
function attachBBB($elem, helper) {
if (helper) {
$elem.find("[data-wrap=discourse-bbb]").each((idx, val) => {
attachButton($(val));
$(val).append("");
attachStatus($(val), helper);
});
}
}
export default {
name: "insert-bbb",
initialize() {
withPluginApi("1.15.0", (api) => {
const currentUser = api.getCurrentUser();
const siteSettings = api.container.lookup("site-settings:main");
api.decorateCooked(attachBBB, {
id: "discourse-bbb",
});
if (
!siteSettings.bbb_staff_only ||
(siteSettings.bbb_staff_only && currentUser && currentUser.staff)
) {
api.addComposerToolbarPopupMenuOption({
icon: "video",
label: "bbb.composer_title",
action: (toolbarEvent) => {
showModal("insert-bbb").setProperties({
toolbarEvent,
});
},
});
}
});
},
};