GiveAdminButton.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import React, { useCallback } from 'react';
  2. import type { IUserHasId } from '@growi/core';
  3. import { useTranslation } from 'next-i18next';
  4. import AdminUsersContainer from '~/client/services/AdminUsersContainer';
  5. import { toastSuccess, toastError } from '~/client/util/toastr';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. type GiveAdminButtonProps = {
  8. adminUsersContainer: AdminUsersContainer,
  9. user: IUserHasId,
  10. }
  11. const GiveAdminButton = (props: GiveAdminButtonProps): JSX.Element => {
  12. const { t } = useTranslation('admin');
  13. const { adminUsersContainer, user } = props;
  14. const onClickGiveAdminBtnHandler = useCallback(async() => {
  15. try {
  16. const username = await adminUsersContainer.giveUserAdmin(user._id);
  17. toastSuccess(t('toaster.give_user_admin', { username }));
  18. }
  19. catch (err) {
  20. toastError(err);
  21. }
  22. }, [adminUsersContainer, t, user._id]);
  23. return (
  24. <button className="dropdown-item" type="button" onClick={() => onClickGiveAdminBtnHandler()}>
  25. <i className="icon-fw icon-user-following"></i> {t('user_management.user_table.give_admin_access')}
  26. </button>
  27. );
  28. };
  29. /**
  30. * Wrapper component for using unstated
  31. */
  32. // eslint-disable-next-line max-len
  33. const GiveAdminButtonWrapper: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<any>> = withUnstatedContainers(GiveAdminButton, [AdminUsersContainer]);
  34. export default GiveAdminButtonWrapper;