import { MatrixClient, SyncState } from 'matrix-js-sdk'; import React, { useCallback, useState } from 'react'; import { Box, config, Line, Text } from 'folds'; import { useSyncState } from '../../hooks/useSyncState'; import { ContainerColor } from '../../styles/ContainerColor.css'; type StateData = { current: SyncState | null; previous: SyncState | null | undefined; }; type SyncStatusProps = { mx: MatrixClient; }; export function SyncStatus({ mx }: SyncStatusProps) { const [stateData, setStateData] = useState({ current: null, previous: undefined, }); useSyncState( mx, useCallback((current, previous) => { setStateData((s) => { if (s.current === current && s.previous === previous) { return s; } return { current, previous }; }); }, []) ); if ( (stateData.current === SyncState.Prepared || stateData.current === SyncState.Syncing || stateData.current === SyncState.Catchup) && stateData.previous !== SyncState.Syncing ) { return ( Connecting... ); } if (stateData.current === SyncState.Reconnecting) { return ( Connection Lost! Reconnecting... ); } if (stateData.current === SyncState.Error) { return ( Connection Lost! ); } return null; }