import React, { type JSX, useCallback } from 'react';
import type { IUserHasId } from '@growi/core';
import { useTranslation } from 'next-i18next';
import AdminUsersContainer from '~/client/services/AdminUsersContainer';
import { toastError, toastSuccess } from '~/client/util/toastr';
import { useCurrentUser } from '~/states/global';
import { withUnstatedContainers } from '../../UnstatedUtils';
const RevokeAdminAlert = React.memo((): JSX.Element => {
const { t } = useTranslation();
return (
person_remove
{t('admin:user_management.user_table.revoke_admin_access')}
{t('admin:user_management.user_table.cannot_revoke')}
);
});
RevokeAdminAlert.displayName = 'RevokeAdminAlert';
type Props = {
adminUsersContainer: AdminUsersContainer;
user: IUserHasId;
};
const RevokeAdminMenuItem = (props: Props): JSX.Element => {
const { t } = useTranslation('admin');
const { adminUsersContainer, user } = props;
const currentUser = useCurrentUser();
const clickRevokeAdminBtnHandler = useCallback(async () => {
try {
const username = await adminUsersContainer.revokeUserAdmin(user._id);
toastSuccess(t('toaster.revoke_user_admin', { username }));
} catch (err) {
toastError(err);
}
}, [adminUsersContainer, t, user._id]);
return user.username !== currentUser?.username ? (
) : (
);
};
/**
* Wrapper component for using unstated
*/
const RevokeAdminMenuItemWrapper: React.ForwardRefExoticComponent<
Pick & React.RefAttributes
> = withUnstatedContainers(RevokeAdminMenuItem, [AdminUsersContainer]);
export default RevokeAdminMenuItemWrapper;