Files
bitvid/js/ui/components/video-modal/moderationController.js
T

119 lines
3.3 KiB
JavaScript

export class ModerationController {
constructor({ modal } = {}) {
this.modal = modal;
}
initialize({ playerModal } = {}) {
if (!this.modal) {
return;
}
this.modal.videoStage =
playerModal?.querySelector(".video-modal__video") || null;
this.modal.moderationOverlay =
playerModal?.querySelector("[data-moderation-bar]") || null;
this.modal.moderationBadge =
this.modal.moderationOverlay?.querySelector(
"[data-moderation-badge='true']",
) || null;
this.modal.moderationBadgeText =
this.modal.moderationOverlay?.querySelector("[data-moderation-text]") ||
null;
this.teardownPrimaryButton();
this.modal.moderationActionsContainer =
this.modal.moderationOverlay?.querySelector("[data-moderation-actions]") ||
this.modal.moderationBadge?.querySelector(".moderation-badge__actions") ||
null;
const overrideButton =
this.modal.moderationActionsContainer?.querySelector(
"[data-moderation-action='override']",
) || null;
if (overrideButton) {
overrideButton.addEventListener(
"click",
this.modal.handleModerationOverrideClick,
);
this.modal.moderationPrimaryButton = overrideButton;
this.modal.moderationPrimaryMode = "override";
} else {
this.modal.moderationPrimaryButton = null;
this.modal.moderationPrimaryMode = "";
}
this.teardownBlockButton();
const blockButton =
this.modal.moderationActionsContainer?.querySelector(
"[data-moderation-action='block']",
) || null;
if (blockButton) {
blockButton.addEventListener(
"click",
this.modal.handleModerationBlockClick,
);
this.modal.moderationBlockButton = blockButton;
} else {
this.modal.moderationBlockButton = null;
}
}
update(action = {}) {
if (!this.modal) {
return;
}
const { type } = action;
switch (type) {
case "set-context":
this.modal.refreshActiveVideoModeration?.(action.context);
break;
case "set-overlay":
this.modal.applyModerationOverlay?.(action.overlay);
break;
default:
break;
}
}
destroy() {
if (!this.modal) {
return;
}
this.teardownPrimaryButton();
this.teardownBlockButton();
this.modal.moderationOverlay = null;
this.modal.moderationBadge = null;
this.modal.moderationBadgeText = null;
this.modal.moderationActionsContainer = null;
this.modal.moderationPrimaryButton = null;
this.modal.moderationPrimaryMode = "";
this.modal.moderationBlockButton = null;
}
teardownPrimaryButton() {
if (!this.modal?.moderationPrimaryButton) {
return;
}
const button = this.modal.moderationPrimaryButton;
if (this.modal.moderationPrimaryMode === "override") {
button.removeEventListener(
"click",
this.modal.handleModerationOverrideClick,
);
} else if (this.modal.moderationPrimaryMode === "hide") {
button.removeEventListener("click", this.modal.handleModerationHideClick);
}
}
teardownBlockButton() {
if (!this.modal?.moderationBlockButton) {
return;
}
this.modal.moderationBlockButton.removeEventListener(
"click",
this.modal.handleModerationBlockClick,
);
}
}