DeletePageListModal.jsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import {
  5. Button,
  6. Modal, ModalHeader, ModalBody, ModalFooter,
  7. } from 'reactstrap';
  8. class DeletePageListModal extends React.Component {
  9. /*
  10. * the threshold for omitting body
  11. */
  12. static get OMIT_BODY_THRES() { return 400 }
  13. componentWillMount() {
  14. }
  15. render() {
  16. const { t } = this.props;
  17. if (this.props.pages == null || this.props.pages.length === 0) {
  18. return <div></div>;
  19. }
  20. const listView = this.props.pages.map((page) => {
  21. return (
  22. <li key={page._id}>{page.path}</li>
  23. );
  24. });
  25. return (
  26. <Modal isOpen={this.props.isShown} toggle={this.props.cancel} className="page-list-delete-modal">
  27. <ModalHeader tag="h4" toggle={this.props.cancel} className="bg-danger text-light">
  28. {t('search_result.deletion_modal_header')}
  29. </ModalHeader>
  30. <ModalBody>
  31. <ul>
  32. {listView}
  33. </ul>
  34. </ModalBody>
  35. <ModalFooter>
  36. <div className="d-flex justify-content-between">
  37. <span className="text-danger">{this.props.errorMessage}</span>
  38. <span className="d-flex align-items-center">
  39. <div className="custom-control custom-checkbox custom-checkbox-danger mr-2">
  40. <input
  41. type="checkbox"
  42. className="custom-control-input"
  43. id="customCheck-delete-completely"
  44. checked={this.props.isDeleteCompletely}
  45. onChange={this.props.toggleDeleteCompletely}
  46. />
  47. <label
  48. className="custom-control-label text-danger"
  49. htmlFor="customCheck-delete-completely"
  50. >
  51. {t('search_result.delete_completely')}
  52. </label>
  53. </div>
  54. <Button color={this.props.isDeleteCompletely ? 'danger' : 'light'} onClick={this.props.confirmedToDelete}>
  55. <i className="icon-trash"></i>
  56. {t('search_result.delete')}
  57. </Button>
  58. </span>
  59. </div>
  60. </ModalFooter>
  61. </Modal>
  62. );
  63. }
  64. }
  65. DeletePageListModal.defaultProps = {
  66. isDeleteCompletely: false, // for when undefined is passed
  67. };
  68. DeletePageListModal.propTypes = {
  69. t: PropTypes.func.isRequired, // i18next
  70. isShown: PropTypes.bool.isRequired,
  71. pages: PropTypes.array,
  72. errorMessage: PropTypes.string,
  73. cancel: PropTypes.func.isRequired, // for cancel evnet handling
  74. isDeleteCompletely: PropTypes.bool,
  75. confirmedToDelete: PropTypes.func.isRequired, // for confirmed event handling
  76. toggleDeleteCompletely: PropTypes.func.isRequired, // for delete completely check event handling
  77. };
  78. export default withTranslation()(DeletePageListModal);