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

View File

@@ -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();

View File

@@ -5,7 +5,7 @@ import {
} from '@affine/component/page-list';
import { WorkspaceSubPath } from '@affine/env/workspace';
import { globalBlockSuiteSchema } from '@affine/workspace/manager';
import { SyncEngineStatus } from '@affine/workspace/providers';
import { SyncEngineStep } from '@affine/workspace/providers';
import type { EditorContainer } from '@blocksuite/editor';
import { assertExists } from '@blocksuite/global/utils';
import type { Page } from '@blocksuite/store';
@@ -144,7 +144,7 @@ export const DetailPage = (): ReactElement => {
// if sync engine has been synced and the page is null, wait 1s and jump to 404 page.
useEffect(() => {
if (currentSyncEngineStatus === SyncEngineStatus.Synced && !page) {
if (currentSyncEngineStatus?.step === SyncEngineStep.Synced && !page) {
const timeout = setTimeout(() => {
navigate.jumpTo404();
}, 1000);