RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/admin/deviceManagement/DeviceManagementAdminRoute.tsx

Summary

Maintainability
B
4 hrs
Test Coverage
import { usePermission, useRouter, useSetModal, useCurrentModal, useTranslation } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import React, { useEffect } from 'react';

import { getURL } from '../../../../app/utils/client/getURL';
import GenericUpsellModal from '../../../components/GenericUpsellModal';
import { useUpsellActions } from '../../../components/GenericUpsellModal/hooks';
import PageSkeleton from '../../../components/PageSkeleton';
import { useHasLicenseModule } from '../../../hooks/useHasLicenseModule';
import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage';
import DeviceManagementAdminPage from './DeviceManagementAdminPage';

const DeviceManagementAdminRoute = (): ReactElement => {
    const t = useTranslation();
    const router = useRouter();
    const setModal = useSetModal();
    const isModalOpen = !!useCurrentModal();

    const hasDeviceManagement = useHasLicenseModule('device-management') as boolean;
    const canViewDeviceManagement = usePermission('view-device-management');

    const { shouldShowUpsell, handleManageSubscription } = useUpsellActions(hasDeviceManagement);

    useEffect(() => {
        if (shouldShowUpsell) {
            setModal(
                <GenericUpsellModal
                    aria-label={t('Device_Management')}
                    title={t('Device_Management')}
                    img={getURL('images/device-management.png')}
                    subtitle={t('Ensure_secure_workspace_access')}
                    description={t('Manage_which_devices')}
                    onClose={() => setModal(null)}
                    onConfirm={handleManageSubscription}
                    onCancel={() => setModal(null)}
                />,
            );
        }
    }, [shouldShowUpsell, router, setModal, t, handleManageSubscription]);

    if (isModalOpen) {
        return <PageSkeleton />;
    }

    if (!canViewDeviceManagement || !hasDeviceManagement) {
        return <NotAuthorizedPage />;
    }

    return <DeviceManagementAdminPage />;
};

export default DeviceManagementAdminRoute;