GrantReadOnlyButton.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. const GrantReadOnlyButton: React.FC<{
  8. adminUsersContainer: AdminUsersContainer,
  9. user: IUserHasId,
  10. }> = ({ adminUsersContainer, user }): JSX.Element => {
  11. const { t } = useTranslation('admin');
  12. const onClickGrantReadOnlyBtnHandler = useCallback(async() => {
  13. try {
  14. const username = await adminUsersContainer.grantUserReadOnly(user._id);
  15. toastSuccess(t('toaster.grant_user_read_only', { username }));
  16. }
  17. catch (err) {
  18. toastError(err);
  19. }
  20. }, [adminUsersContainer, t, user._id]);
  21. return (
  22. <button className="dropdown-item" type="button" onClick={onClickGrantReadOnlyBtnHandler}>
  23. <span className="material-symbols-outlined me-1">person_add</span>{t('user_management.user_table.grant_read_only_access')}
  24. </button>
  25. );
  26. };
  27. /**
  28. * Wrapper component for using unstated
  29. */
  30. // eslint-disable-next-line max-len
  31. const GrantReadOnlyButtonWrapper: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<any>> = withUnstatedContainers(GrantReadOnlyButton, [AdminUsersContainer]);
  32. export default GrantReadOnlyButtonWrapper;