UserGroupUserModal.tsx 3.7 KB

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