UpdateParentConfirmModal.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import type { FC } from 'react';
  2. import React, { useState } from 'react';
  3. import { useTranslation } from 'next-i18next';
  4. import {
  5. Modal, ModalHeader, ModalBody, ModalFooter,
  6. } from 'reactstrap';
  7. import { useUpdateUserGroupConfirmModalStatus, useUpdateUserGroupConfirmModalActions } from '~/states/ui/modal/update-user-group-confirm';
  8. export const UpdateParentConfirmModal: FC = () => {
  9. const { t } = useTranslation();
  10. const [isForceUpdate, setForceUpdate] = useState(false);
  11. const modalStatus = useUpdateUserGroupConfirmModalStatus();
  12. const { close: closeModal } = useUpdateUserGroupConfirmModalActions();
  13. if (modalStatus == null) {
  14. closeModal();
  15. return <></>;
  16. }
  17. const {
  18. isOpened, targetGroup, updateData, onConfirm,
  19. } = modalStatus;
  20. return (
  21. <Modal className="modal-md" isOpen={isOpened} toggle={closeModal}>
  22. <ModalHeader tag="h4" toggle={closeModal} className="text-warning">
  23. <span className="material-symbols-outlined">warning</span> {t('admin:user_group_management.update_parent_confirm_modal.header')}
  24. </ModalHeader>
  25. {
  26. targetGroup != null && updateData != null ? (
  27. <>
  28. <ModalBody>
  29. <div className="mb-2">
  30. <span className="fw-bold">{t('admin:user_group_management.group_name')}</span> : &quot;{targetGroup.name}&quot;
  31. <hr />
  32. {t('admin:user_group_management.update_parent_confirm_modal.caution_change_parent', { groupName: targetGroup.name })}
  33. </div>
  34. <div className="text-danger mb-3">
  35. <span className="material-symbols-outlined">error</span>
  36. {t('admin:user_group_management.update_parent_confirm_modal.danger_message')}
  37. </div>
  38. <div className="form-check form-check-succsess ps-5">
  39. <input
  40. className="form-check-input"
  41. name="forceUpdateParents"
  42. id="forceUpdateParents"
  43. type="checkbox"
  44. checked={isForceUpdate}
  45. onChange={() => setForceUpdate(!isForceUpdate)}
  46. />
  47. <label className="form-label form-check-label" htmlFor="forceUpdateParents">
  48. {t('admin:user_group_management.update_parent_confirm_modal.force_update_parents_label')}
  49. <p className="form-text text-muted mt-0">{t('admin:user_group_management.update_parent_confirm_modal.force_update_parents_description')}</p>
  50. </label>
  51. </div>
  52. </ModalBody>
  53. <ModalFooter>
  54. <button
  55. type="button"
  56. className="btn btn-warning"
  57. onClick={() => {
  58. onConfirm?.(targetGroup, updateData, isForceUpdate);
  59. closeModal();
  60. }}
  61. >
  62. {t('Confirm')}
  63. </button>
  64. </ModalFooter>
  65. </>
  66. ) : (
  67. <>
  68. <ModalBody>
  69. <div>
  70. <span className="text-error">Something went wrong. Please try again.</span>
  71. </div>
  72. </ModalBody>
  73. <ModalFooter>
  74. <button type="button" onClick={() => closeModal()} className="btn btn-sm btn-secondary">
  75. {t('Cancel')}
  76. </button>
  77. </ModalFooter>
  78. </>
  79. )
  80. }
  81. </Modal>
  82. );
  83. };