UserGroupDropdown.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import type { FC } from 'react';
  2. import React, { useCallback } from 'react';
  3. import type { IUserGroupHasId } from '@growi/core';
  4. import { useTranslation } from 'next-i18next';
  5. type Props = {
  6. selectableUserGroups?: IUserGroupHasId[];
  7. onClickAddExistingUserGroupButton?(userGroup: IUserGroupHasId | null): void;
  8. onClickCreateUserGroupButton?(): void;
  9. };
  10. export const UserGroupDropdown: FC<Props> = (props: Props) => {
  11. const { t } = useTranslation();
  12. const {
  13. selectableUserGroups,
  14. onClickAddExistingUserGroupButton,
  15. onClickCreateUserGroupButton,
  16. } = props;
  17. const onClickAddExistingUserGroupButtonHandler = useCallback(
  18. (userGroup: IUserGroupHasId) => {
  19. if (onClickAddExistingUserGroupButton != null) {
  20. onClickAddExistingUserGroupButton(userGroup);
  21. }
  22. },
  23. [onClickAddExistingUserGroupButton],
  24. );
  25. const onClickCreateUserGroupButtonHandler = useCallback(() => {
  26. if (onClickCreateUserGroupButton != null) {
  27. onClickCreateUserGroupButton();
  28. }
  29. }, [onClickCreateUserGroupButton]);
  30. return (
  31. <>
  32. <div className="dropdown">
  33. <button
  34. className="btn btn-secondary dropdown-toggle"
  35. type="button"
  36. id="dropdownMenuButton"
  37. data-bs-toggle="dropdown"
  38. >
  39. {t('admin:user_group_management.add_child_group')}
  40. </button>
  41. <div className="dropdown-menu">
  42. {selectableUserGroups != null && selectableUserGroups.length > 0 && (
  43. <>
  44. {selectableUserGroups.map((userGroup) => (
  45. <button
  46. key={userGroup._id}
  47. type="button"
  48. className="dropdown-item"
  49. onClick={() =>
  50. onClickAddExistingUserGroupButtonHandler(userGroup)
  51. }
  52. >
  53. {userGroup.name}
  54. </button>
  55. ))}
  56. <div className="dropdown-divider"></div>
  57. </>
  58. )}
  59. <button
  60. className="dropdown-item"
  61. type="button"
  62. onClick={() => onClickCreateUserGroupButtonHandler()}
  63. >
  64. {t('admin:user_group_management.create_group')}
  65. </button>
  66. </div>
  67. </div>
  68. </>
  69. );
  70. };