RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/admin/users/AdminUserFormWithData.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import type { IRole, IUser } from '@rocket.chat/core-typings';
import { Box, Callout } from '@rocket.chat/fuselage';
import { useEffectEvent } from '@rocket.chat/fuselage-hooks';
import { useTranslation } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import React from 'react';

import { FormSkeleton } from '../../../components/Skeleton';
import { useUserInfoQuery } from '../../../hooks/useUserInfoQuery';
import AdminUserForm from './AdminUserForm';

type AdminUserFormWithDataProps = {
    uid: IUser['_id'];
    onReload: () => void;
    context: string;
    roleData: { roles: IRole[] } | undefined;
    roleError: unknown;
};

const AdminUserFormWithData = ({ uid, onReload, context, roleData, roleError }: AdminUserFormWithDataProps): ReactElement => {
    const t = useTranslation();
    const { data, isLoading, isError, refetch } = useUserInfoQuery({ userId: uid });

    const handleReload = useEffectEvent(() => {
        onReload();
        refetch();
    });

    if (isLoading) {
        return (
            <Box p={24}>
                <FormSkeleton />
            </Box>
        );
    }

    if (isError) {
        return (
            <Callout m={16} type='danger'>
                {t('User_not_found')}
            </Callout>
        );
    }

    if (data?.user && !!data.user.federated) {
        return (
            <Callout m={16} type='danger'>
                {t('Edit_Federated_User_Not_Allowed')}
            </Callout>
        );
    }

    return (
        <AdminUserForm
            userData={data?.user}
            onReload={onReload}
            context={context}
            refetchUserFormData={handleReload}
            roleData={roleData}
            roleError={roleError}
        />
    );
};

export default AdminUserFormWithData;