| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import React, { useState } from 'react';
- import PropTypes from 'prop-types';
- import {
- Modal, ModalHeader, ModalBody, ModalFooter,
- } from 'reactstrap';
- import { withTranslation } from 'react-i18next';
- import { withUnstatedContainers } from './UnstatedUtils';
- import PageContainer from '../services/PageContainer';
- 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, pageContainer, isOpen, onClose, isDeleteCompletelyModal, 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 {
- const response = await pageContainer.deletePage(isDeleteRecursively, isDeleteCompletely);
- const trashPagePath = response.page.path;
- window.location.href = encodeURI(trashPagePath);
- }
- catch (err) {
- setErrs(err);
- }
- }
- async function deleteButtonHandler() {
- deletePage();
- }
- function renderDeleteRecursivelyForm() {
- return (
- <div className="custom-control custom-checkbox custom-checkbox-warning">
- <input
- className="custom-control-input"
- id="deleteRecursively"
- type="checkbox"
- checked={isDeleteRecursively}
- onChange={changeIsDeleteRecursivelyHandler}
- />
- <label className="custom-control-label" htmlFor="deleteRecursively">
- { t('modal_delete.delete_recursively') }
- <p className="form-text text-muted mt-0"><code>{path}</code> { t('modal_delete.recursively') }</p>
- </label>
- </div>
- );
- }
- function renderDeleteCompletelyForm() {
- return (
- <div className="custom-control custom-checkbox custom-checkbox-danger">
- <input
- className="custom-control-input"
- name="completely"
- id="deleteCompletely"
- type="checkbox"
- disabled={!isAbleToDeleteCompletely}
- checked={isDeleteCompletely}
- onChange={changeIsDeleteCompletelyHandler}
- />
- <label className="custom-control-label text-danger" htmlFor="deleteCompletely">
- { t('modal_delete.delete_completely') }
- <p className="form-text text-muted mt-0"> { t('modal_delete.completely') }</p>
- </label>
- {!isAbleToDeleteCompletely
- && (
- <p className="alert alert-warning p-2 my-0">
- <i className="icon-ban icon-fw"></i>{ t('modal_delete.delete_completely_restriction') }
- </p>
- )}
- </div>
- );
- }
- return (
- <Modal size="lg" isOpen={isOpen} toggle={onClose} className="grw-create-page">
- <ModalHeader tag="h4" toggle={onClose} className={`bg-${deleteIconAndKey[deleteMode].color} text-light`}>
- <i className={`icon-fw icon-${deleteIconAndKey[deleteMode].icon}`}></i>
- { t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
- </ModalHeader>
- <ModalBody>
- <div className="form-group">
- <label>{ t('modal_delete.deleting_page') }:</label><br />
- <code>{ path }</code>
- </div>
- {renderDeleteRecursivelyForm()}
- {!isDeleteCompletelyModal && renderDeleteCompletelyForm()}
- </ModalBody>
- <ModalFooter>
- <ApiErrorMessageList errs={errs} />
- <button type="button" className={`btn btn-${deleteIconAndKey[deleteMode].color}`} onClick={deleteButtonHandler}>
- <i className={`icon-${deleteIconAndKey[deleteMode].icon}`} aria-hidden="true"></i>
- { t(`modal_delete.delete_${deleteIconAndKey[deleteMode].translationKey}`) }
- </button>
- </ModalFooter>
- </Modal>
- );
- };
- /**
- * Wrapper component for using unstated
- */
- const PageDeleteModalWrapper = withUnstatedContainers(PageDeleteModal, [PageContainer]);
- PageDeleteModal.propTypes = {
- t: PropTypes.func.isRequired, // i18next
- pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
- isOpen: PropTypes.bool.isRequired,
- onClose: PropTypes.func.isRequired,
- path: PropTypes.string.isRequired,
- isDeleteCompletelyModal: PropTypes.bool,
- isAbleToDeleteCompletely: PropTypes.bool,
- };
- PageDeleteModal.defaultProps = {
- isDeleteCompletelyModal: false,
- };
- export default withTranslation()(PageDeleteModalWrapper);
|