RemoveAdminMenuItem.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React, { useCallback, useMemo } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import AdminUsersContainer from '~/client/services/AdminUsersContainer';
  4. import { toastSuccess, toastError } from '~/client/util/apiNotification';
  5. import { IUserHasId } from '~/interfaces/user';
  6. import { useCurrentUser } from '~/stores/context';
  7. import { withUnstatedContainers } from '../../UnstatedUtils';
  8. const RemoveAdminAlert = React.memo((): JSX.Element => {
  9. const { t } = useTranslation();
  10. return (
  11. <div className="px-4">
  12. <i className="icon-fw icon-user-unfollow mb-2"></i>{t('admin:user_management.user_table.remove_admin_access')}
  13. <p className="alert alert-danger">{t('admin:user_management.user_table.cannot_remove')}</p>
  14. </div>
  15. );
  16. });
  17. type Props = {
  18. adminUsersContainer: AdminUsersContainer,
  19. user: IUserHasId,
  20. }
  21. const RemoveAdminMenuItem = (props: Props): JSX.Element => {
  22. const { t } = useTranslation();
  23. const { adminUsersContainer, user } = props;
  24. const { data: currentUser } = useCurrentUser();
  25. const clickRemoveAdminBtnHandler = useCallback(async() => {
  26. try {
  27. const username = await adminUsersContainer.removeUserAdmin(user._id);
  28. toastSuccess(t('toaster.remove_user_admin', { username }));
  29. }
  30. catch (err) {
  31. toastError(err);
  32. }
  33. }, [adminUsersContainer, t, user._id]);
  34. return user.username !== currentUser?.username
  35. ? (
  36. <button className="dropdown-item" type="button" onClick={clickRemoveAdminBtnHandler}>
  37. <i className="icon-fw icon-user-unfollow"></i> {t('admin:user_management.user_table.remove_admin_access')}
  38. </button>
  39. )
  40. : <RemoveAdminAlert />;
  41. };
  42. /**
  43. * Wrapper component for using unstated
  44. */
  45. const RemoveAdminMenuItemWrapper = withUnstatedContainers(RemoveAdminMenuItem, [AdminUsersContainer]);
  46. export default RemoveAdminMenuItemWrapper;