feat(workspace): more status for SyncEngine (#4984)

This commit is contained in:
EYHN
2023-11-20 22:51:20 +08:00
committed by GitHub
parent c9f1fd9649
commit 9370110cdc
6 changed files with 320 additions and 89 deletions
@@ -1,5 +1,8 @@
import { WorkspaceFlavour } from '@affine/env/workspace';
import { SyncEngineStatus } from '@affine/workspace/providers';
import {
type SyncEngineStatus,
SyncEngineStep,
} from '@affine/workspace/providers';
import {
CloudWorkspaceIcon,
LocalWorkspaceIcon,
@@ -86,14 +89,13 @@ const WorkspaceStatus = ({
}) => {
const isOnline = useSystemOnline();
const [syncEngineStatus, setSyncEngineStatus] = useState<SyncEngineStatus>(
SyncEngineStatus.Synced
);
const [syncEngineStatus, setSyncEngineStatus] =
useState<SyncEngineStatus | null>(null);
const syncEngine = useCurrentSyncEngine();
useEffect(() => {
setSyncEngineStatus(syncEngine?.status ?? SyncEngineStatus.Synced);
setSyncEngineStatus(syncEngine?.status ?? null);
const disposable = syncEngine?.onStatusChange.on(
debounce(status => {
setSyncEngineStatus(status);
@@ -112,26 +114,19 @@ const WorkspaceStatus = ({
if (!isOnline) {
return 'Disconnected, please check your network connection';
}
switch (syncEngineStatus) {
case SyncEngineStatus.Syncing:
case SyncEngineStatus.LoadingSubDoc:
case SyncEngineStatus.LoadingRootDoc:
return 'Syncing with AFFiNE Cloud';
case SyncEngineStatus.Retrying:
return 'Sync disconnected due to unexpected issues, reconnecting.';
default:
return 'Synced with AFFiNE Cloud';
if (!syncEngineStatus || syncEngineStatus.step === SyncEngineStep.Syncing) {
return 'Syncing with AFFiNE Cloud';
}
}, [currentWorkspace.flavour, syncEngineStatus, isOnline]);
if (syncEngineStatus.retrying) {
return 'Sync disconnected due to unexpected issues, reconnecting.';
}
return 'Synced with AFFiNE Cloud';
}, [currentWorkspace.flavour, isOnline, syncEngineStatus]);
const CloudWorkspaceSyncStatus = useCallback(() => {
if (
syncEngineStatus === SyncEngineStatus.Syncing ||
syncEngineStatus === SyncEngineStatus.LoadingSubDoc ||
syncEngineStatus === SyncEngineStatus.LoadingRootDoc
) {
if (!syncEngineStatus || syncEngineStatus.step === SyncEngineStep.Syncing) {
return SyncingWorkspaceStatus();
} else if (syncEngineStatus === SyncEngineStatus.Retrying) {
} else if (syncEngineStatus.retrying) {
return UnSyncWorkspaceStatus();
} else {
return CloudWorkspaceStatus();