docbrown/app/javascript/packs/articleModerationTools.js
Arit Amana 1679fbf47d
Allow Moderator Role to Unpublish Single Post (#17795)
* relocate btn; build functionality for admin only

* remove commented code

* add explanatory comment

* refactor

* build unpublish and feature-post policies

* mod role in policies fails specs 😓

* fix failing specs

* add end-to-end tests

* fix hardcoded name in modal  😓
2022-06-03 12:48:20 -04:00

61 lines
2 KiB
JavaScript

/* global userData */
import { isModerationPage } from '@utilities/moderation';
getCsrfToken().then(() => {
const articleContainer = document.getElementById('article-show-container');
if (articleContainer) {
const user = userData();
const {
articleId,
articleSlug,
authorId: articleAuthorId,
authorName,
authorUsername,
path,
} = articleContainer.dataset;
const initializeModerationsTools = async () => {
const { initializeActionsPanel } = await import(
'../actionsPanel/initializeActionsPanelToggle'
);
const { initializeFlagUserModal } = await import('./flagUserModal');
const { initializeUnpublishPostModal } = await import(
'./unpublishPostModal.jsx'
);
// If the user can moderate an article give them access to this panel.
// Note: this assumes we're within the article context (which is the case
// given the articleContainer)
const canModerateArticles = user?.policies?.find(
(o) =>
o.dom_class === 'js-policy-article-moderate' && o.visible === true,
);
// article show page
if (canModerateArticles) {
// <2022-05-09 Mon> [@jeremyf] the user.id is an integer and
// articleAuthorId is a string so our logic is such that we always
// initializeActionsPanel and initializeFlagUserModal; I'm asking
// product to clarify if we want mods to boost their own posts.
if (user?.id !== articleAuthorId && !isModerationPage()) {
initializeActionsPanel(user, path);
initializeFlagUserModal(articleAuthorId);
initializeUnpublishPostModal(
articleId,
authorName,
authorUsername,
articleSlug,
);
// "/mod" page
} else if (isModerationPage()) {
initializeActionsPanel(user, path);
initializeFlagUserModal(articleAuthorId);
initializeUnpublishPostModal(articleId, authorUsername, articleSlug);
}
}
};
initializeModerationsTools();
}
});