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("0.8.31", (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.modifyClass("controller:composer", {
actions: {
insertBBBModal() {
showModal("insert-bbb").setProperties({
toolbarEvent: this.get("toolbarEvent"),
});
},
},
});
api.addToolbarPopupMenuOptionsCallback((controller) => {
return {
id: "insert-bbb",
icon: "video",
action: "insertBBBModal",
label: "bbb.composer_title",
};
});
}
});
},
};