RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/root/MainLayout/Preload.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import { useUserId } from '@rocket.chat/ui-contexts';
import type { ReactElement, ReactNode } from 'react';
import React, { useEffect } from 'react';

import { CachedChatSubscription } from '../../../../app/models/client';
import { settings } from '../../../../app/settings/client';
import { CachedCollectionManager } from '../../../../app/ui-cached-collection/client';
import { mainReady } from '../../../../app/ui-utils/client';
import { useReactiveVar } from '../../../hooks/useReactiveVar';
import { isSyncReady } from '../../../lib/userData';
import PageLoading from '../PageLoading';

const Preload = ({ children }: { children: ReactNode }): ReactElement => {
    const uid = useUserId();
    const subscriptionsReady = useReactiveVar(CachedChatSubscription.ready);
    const settingsReady = useReactiveVar(settings.cachedCollection.ready);
    const userDataReady = useReactiveVar(isSyncReady);

    const ready = !uid || (userDataReady && subscriptionsReady && settingsReady);

    useEffect(() => {
        CachedCollectionManager.syncEnabled = ready;
        mainReady.set(ready);
    }, [ready]);

    if (!ready) {
        return <PageLoading />;
    }

    return <>{children}</>;
};

export default Preload;