UserGroupUserModal.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React from 'react';
  2. import type { IUserGroupHasId } from '@growi/core';
  3. import { useTranslation } from 'next-i18next';
  4. import {
  5. Modal, ModalHeader, ModalBody,
  6. } from 'reactstrap';
  7. import { SearchTypes, SearchType } from '~/interfaces/user-group';
  8. import CheckBoxForSerchUserOption from './CheckBoxForSerchUserOption';
  9. import RadioButtonForSerchUserOption from './RadioButtonForSerchUserOption';
  10. import UserGroupUserFormByInput from './UserGroupUserFormByInput';
  11. type Props = {
  12. isOpen: boolean,
  13. userGroup: IUserGroupHasId,
  14. searchType: SearchType,
  15. isAlsoMailSearched: boolean,
  16. isAlsoNameSearched: boolean,
  17. onClickAddUserBtn: (username: string) => Promise<void>,
  18. onSearchApplicableUsers: (searchWord: string) => Promise<void>,
  19. onSwitchSearchType: (searchType: SearchType) => void
  20. onClose: () => void,
  21. onToggleIsAlsoMailSearched: () => void,
  22. onToggleIsAlsoNameSearched: () => void,
  23. }
  24. const UserGroupUserModal = (props: Props): JSX.Element => {
  25. const { t } = useTranslation();
  26. const {
  27. isOpen,
  28. userGroup,
  29. searchType,
  30. onClickAddUserBtn,
  31. onSearchApplicableUsers,
  32. onSwitchSearchType,
  33. onClose,
  34. isAlsoMailSearched,
  35. isAlsoNameSearched,
  36. onToggleIsAlsoMailSearched,
  37. onToggleIsAlsoNameSearched,
  38. } = props;
  39. return (
  40. <Modal isOpen={isOpen} toggle={onClose}>
  41. <ModalHeader tag="h4" toggle={onClose} className="bg-info text-light">
  42. {t('admin:user_group_management.add_modal.add_user') }
  43. </ModalHeader>
  44. <ModalBody>
  45. <p className="card well">{t('admin:user_group_management.add_modal.description')}</p>
  46. <div className="p-3">
  47. <UserGroupUserFormByInput
  48. userGroup={userGroup}
  49. onClickAddUserBtn={onClickAddUserBtn}
  50. onSearchApplicableUsers={onSearchApplicableUsers}
  51. onClose={onClose}
  52. isAlsoNameSearched={isAlsoNameSearched}
  53. isAlsoMailSearched={isAlsoMailSearched}
  54. />
  55. </div>
  56. <h2 className="border-bottom">{t('admin:user_group_management.add_modal.search_option')}</h2>
  57. <div className="row mt-4">
  58. <div className="col-6">
  59. <div className="mb-5">
  60. <CheckBoxForSerchUserOption
  61. option="mail"
  62. checked={isAlsoMailSearched}
  63. onChange={onToggleIsAlsoMailSearched}
  64. />
  65. </div>
  66. <div className="mb-5">
  67. <CheckBoxForSerchUserOption
  68. option="name"
  69. checked={isAlsoNameSearched}
  70. onChange={onToggleIsAlsoNameSearched}
  71. />
  72. </div>
  73. </div>
  74. <div className="col-6">
  75. <div className="mb-5">
  76. <RadioButtonForSerchUserOption
  77. searchType="forward"
  78. checked={searchType === SearchTypes.FORWARD}
  79. onChange={() => onSwitchSearchType(SearchTypes.FORWARD)}
  80. />
  81. </div>
  82. <div className="mb-5">
  83. <RadioButtonForSerchUserOption
  84. searchType="partial"
  85. checked={searchType === SearchTypes.PARTIAL}
  86. onChange={() => onSwitchSearchType(SearchTypes.PARTIAL)}
  87. />
  88. </div>
  89. <div className="mb-5">
  90. <RadioButtonForSerchUserOption
  91. searchType="backward"
  92. checked={searchType === SearchTypes.BACKWORD}
  93. onChange={() => onSwitchSearchType(SearchTypes.BACKWORD)}
  94. />
  95. </div>
  96. </div>
  97. </div>
  98. </ModalBody>
  99. </Modal>
  100. );
  101. };
  102. export default UserGroupUserModal;