UserGroupCreateModal.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import React, { FC, useState, useCallback } from 'react';
  2. import {
  3. Modal, ModalHeader, ModalBody, ModalFooter,
  4. } from 'reactstrap';
  5. import { useTranslation } from 'react-i18next';
  6. import { IUserGroup, IUserGroupHasId } from '~/interfaces/user';
  7. import { CustomWindow } from '~/interfaces/global';
  8. import Xss from '~/services/xss';
  9. type Props = {
  10. userGroup?: IUserGroupHasId,
  11. onClickCreateButton?: (userGroupData: Partial<IUserGroup>) => Promise<IUserGroupHasId | void>
  12. isShow?: boolean
  13. onHide?: () => Promise<void> | void
  14. };
  15. const UserGroupCreateModal: FC<Props> = (props: Props) => {
  16. const xss: Xss = (window as CustomWindow).xss;
  17. const { t } = useTranslation();
  18. const {
  19. userGroup, onClickCreateButton, isShow, onHide,
  20. } = props;
  21. /*
  22. * State
  23. */
  24. const [currentName, setName] = useState(userGroup != null ? userGroup.name : '');
  25. const [currentDescription, setDescription] = useState(userGroup != null ? userGroup.description : '');
  26. /*
  27. * Function
  28. */
  29. const onChangeNameHandler = useCallback((e) => {
  30. setName(e.target.value);
  31. }, []);
  32. const onChangeDescriptionHandler = useCallback((e) => {
  33. setDescription(e.target.value);
  34. }, []);
  35. const onClickCreateButtonHandler = useCallback(async(e) => {
  36. e.preventDefault(); // no reload
  37. if (onClickCreateButton == null) {
  38. return;
  39. }
  40. await onClickCreateButton({ name: currentName, description: currentDescription });
  41. }, [currentName, currentDescription, onClickCreateButton]);
  42. return (
  43. <Modal className="modal-md" isOpen={isShow} toggle={onHide}>
  44. <ModalHeader tag="h4" toggle={onHide} className="bg-primary text-light">
  45. {t('admin:user_group_management.basic_info')}
  46. </ModalHeader>
  47. <ModalBody>
  48. <div className="form-group">
  49. <label htmlFor="name">
  50. {t('admin:user_group_management.group_name')}
  51. </label>
  52. <input
  53. className="form-control"
  54. type="text"
  55. name="name"
  56. placeholder={t('admin:user_group_management.group_example')}
  57. value={currentName}
  58. onChange={onChangeNameHandler}
  59. required
  60. />
  61. </div>
  62. <div className="form-group">
  63. <label htmlFor="description">
  64. {t('Description')}
  65. </label>
  66. <textarea className="form-control" name="description" value={currentDescription} onChange={onChangeDescriptionHandler} />
  67. </div>
  68. </ModalBody>
  69. <ModalFooter>
  70. <div className="form-group">
  71. <button type="button" className="btn btn-primary" onClick={onClickCreateButtonHandler}>
  72. {t('Create')}
  73. </button>
  74. </div>
  75. </ModalFooter>
  76. </Modal>
  77. );
  78. };
  79. export default UserGroupCreateModal;