UserGroupDropdown.tsx 2.2 KB

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