import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { Modal, ModalHeader, ModalBody, ModalFooter, } from 'reactstrap'; import { withTranslation } from 'react-i18next'; import { apiPost } from '~/client/util/apiv1-client'; import ApiErrorMessageList from './PageManagement/ApiErrorMessageList'; const deleteIconAndKey = { completely: { color: 'danger', icon: 'fire', translationKey: 'completely', }, temporary: { color: 'primary', icon: 'trash', translationKey: 'page', }, }; const PageDeleteModal = (props) => { const { t, isOpen, onClose, isDeleteCompletelyModal, pageId, revisionId, path, isAbleToDeleteCompletely, } = props; const [isDeleteRecursively, setIsDeleteRecursively] = useState(true); const [isDeleteCompletely, setIsDeleteCompletely] = useState(isDeleteCompletelyModal && isAbleToDeleteCompletely); const deleteMode = isDeleteCompletely ? 'completely' : 'temporary'; const [errs, setErrs] = useState(null); function changeIsDeleteRecursivelyHandler() { setIsDeleteRecursively(!isDeleteRecursively); } function changeIsDeleteCompletelyHandler() { if (!isAbleToDeleteCompletely) { return; } setIsDeleteCompletely(!isDeleteCompletely); } async function deletePage() { setErrs(null); try { // control flag // If is it not true, Request value must be `null`. const recursively = isDeleteRecursively ? true : null; const completely = isDeleteCompletely ? true : null; const response = await apiPost('/pages.remove', { page_id: pageId, revision_id: revisionId, recursively, completely, }); const trashPagePath = response.page.path; window.location.href = encodeURI(trashPagePath); } catch (err) { setErrs(err); } } async function deleteButtonHandler() { deletePage(); } function renderDeleteRecursivelyForm() { return (
); } // DeleteCompletely is currently disabled // TODO1 : Retrive isAbleToDeleteCompleltly state everywhere in the system via swr. // Story: https://redmine.weseek.co.jp/issues/82222 // TODO2 : use toaster // TASK : https://redmine.weseek.co.jp/issues/82299 function renderDeleteCompletelyForm() { return (
{!isAbleToDeleteCompletely && (

{ t('modal_delete.delete_completely_restriction') }

)}
); } return ( { t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }

{ path }
{renderDeleteRecursivelyForm()} {!isDeleteCompletelyModal && renderDeleteCompletelyForm()}
); }; PageDeleteModal.propTypes = { t: PropTypes.func.isRequired, // i18next isOpen: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, pageId: PropTypes.string.isRequired, revisionId: PropTypes.string.isRequired, path: PropTypes.string.isRequired, isDeleteCompletelyModal: PropTypes.bool, isAbleToDeleteCompletely: PropTypes.bool, }; PageDeleteModal.defaultProps = { isDeleteCompletelyModal: false, }; export default withTranslation()(PageDeleteModal);