80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
/* eslint-disable no-restricted-globals */
|
|
import { closeWindowModal, showWindowModal } from '@utilities/showModal';
|
|
import { request } from '@utilities/http';
|
|
|
|
async function confirmAdminUnpublishPost(id, username, slug) {
|
|
try {
|
|
const response = await request(`/articles/${id}/admin_unpublish`, {
|
|
method: 'PATCH',
|
|
body: JSON.stringify({ id, username, slug }),
|
|
credentials: 'same-origin',
|
|
});
|
|
|
|
const outcome = await response.json();
|
|
|
|
/* eslint-disable no-restricted-globals */
|
|
if (outcome.message == 'success') {
|
|
window.top.location.assign(`${window.location.origin}${outcome.path}`);
|
|
} else {
|
|
top.addSnackbarItem({
|
|
message: `Error: ${outcome.message}`,
|
|
addCloseButton: true,
|
|
});
|
|
}
|
|
} catch (error) {
|
|
top.addSnackbarItem({
|
|
message: `Error: ${error}`,
|
|
addCloseButton: true,
|
|
});
|
|
}
|
|
|
|
closeWindowModal(window.parent.document);
|
|
}
|
|
|
|
let modalContents;
|
|
|
|
/**
|
|
* Helper function to handle finding and caching modal content. Since our Preact modal helper works by duplicating HTML content,
|
|
* and our modals rely on IDs to label form controls, we remove the original hidden content from the DOM to avoid ID conflicts.
|
|
*
|
|
* @param {string} modalContentSelector The CSS selector used to identify the correct modal content
|
|
*/
|
|
function getModalContents(modalContentSelector) {
|
|
if (!modalContents) {
|
|
const modalContentElement =
|
|
window.parent.document.querySelector(modalContentSelector);
|
|
modalContents = modalContentElement.innerHTML;
|
|
modalContentElement.remove();
|
|
}
|
|
|
|
return modalContents;
|
|
}
|
|
|
|
function activateModalUnpublishBtn(id, username, slug) {
|
|
const unpublishBtn = window.parent.document.getElementById(
|
|
'confirm-unpublish-post-action',
|
|
);
|
|
|
|
unpublishBtn?.addEventListener('click', () => {
|
|
confirmAdminUnpublishPost(id, username, slug);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Shows or hides the flag user modal.
|
|
*/
|
|
export function toggleUnpublishPostModal(event) {
|
|
event.preventDefault;
|
|
const { articleId, authorUsername, articleSlug, modalContentSelector } =
|
|
event.target.dataset;
|
|
|
|
showWindowModal({
|
|
document: window.parent.document,
|
|
modalContent: getModalContents(modalContentSelector),
|
|
title: 'Unpublish post',
|
|
size: 'small',
|
|
onOpen: () => {
|
|
activateModalUnpublishBtn(articleId, authorUsername, articleSlug);
|
|
},
|
|
});
|
|
}
|