feat(core): add resetSync button (#10404)
This commit is contained in:
@@ -534,4 +534,8 @@ export class DocFrontend {
|
|||||||
sub?.unsubscribe();
|
sub?.unsubscribe();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async resetSync() {
|
||||||
|
await this.sync.resetSync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export interface DocSync {
|
|||||||
readonly state$: Observable<DocSyncState>;
|
readonly state$: Observable<DocSyncState>;
|
||||||
docState$(docId: string): Observable<DocSyncDocState>;
|
docState$(docId: string): Observable<DocSyncDocState>;
|
||||||
addPriority(id: string, priority: number): () => void;
|
addPriority(id: string, priority: number): () => void;
|
||||||
|
resetSync(): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DocSyncImpl implements DocSync {
|
export class DocSyncImpl implements DocSync {
|
||||||
@@ -127,4 +128,13 @@ export class DocSyncImpl implements DocSync {
|
|||||||
const undo = this.peers.map(peer => peer.addPriority(id, priority));
|
const undo = this.peers.map(peer => peer.addPriority(id, priority));
|
||||||
return () => undo.forEach(fn => fn());
|
return () => undo.forEach(fn => fn());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async resetSync() {
|
||||||
|
const running = this.abort !== null;
|
||||||
|
this.stop();
|
||||||
|
await this.sync.clearClocks();
|
||||||
|
if (running) {
|
||||||
|
this.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,6 +222,10 @@ class WorkerDocSync implements DocSync {
|
|||||||
subscription.unsubscribe();
|
subscription.unsubscribe();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetSync(): Promise<void> {
|
||||||
|
return this.client.call('docSync.resetSync');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class WorkerBlobSync implements BlobSync {
|
class WorkerBlobSync implements BlobSync {
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ class StoreConsumer {
|
|||||||
const undo = this.docSync.addPriority(docId, priority);
|
const undo = this.docSync.addPriority(docId, priority);
|
||||||
return () => undo();
|
return () => undo();
|
||||||
}),
|
}),
|
||||||
|
'docSync.resetSync': () => this.docSync.resetSync(),
|
||||||
'blobSync.downloadBlob': key => this.blobSync.downloadBlob(key),
|
'blobSync.downloadBlob': key => this.blobSync.downloadBlob(key),
|
||||||
'blobSync.uploadBlob': blob => this.blobSync.uploadBlob(blob),
|
'blobSync.uploadBlob': blob => this.blobSync.uploadBlob(blob),
|
||||||
'blobSync.fullSync': () =>
|
'blobSync.fullSync': () =>
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ interface GroupedWorkerOps {
|
|||||||
state: [void, DocSyncState];
|
state: [void, DocSyncState];
|
||||||
docState: [string, DocSyncDocState];
|
docState: [string, DocSyncDocState];
|
||||||
addPriority: [{ docId: string; priority: number }, boolean];
|
addPriority: [{ docId: string; priority: number }, boolean];
|
||||||
|
resetSync: [void, void];
|
||||||
};
|
};
|
||||||
|
|
||||||
blobSync: {
|
blobSync: {
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import { WorkspaceServerService } from '@affine/core/modules/cloud';
|
|||||||
import { WorkspaceService } from '@affine/core/modules/workspace';
|
import { WorkspaceService } from '@affine/core/modules/workspace';
|
||||||
import { UNTITLED_WORKSPACE_NAME } from '@affine/env/constant';
|
import { UNTITLED_WORKSPACE_NAME } from '@affine/env/constant';
|
||||||
import { useI18n } from '@affine/i18n';
|
import { useI18n } from '@affine/i18n';
|
||||||
|
import { ArrowRightSmallIcon } from '@blocksuite/icons/rc';
|
||||||
import { FrameworkScope, useService } from '@toeverything/infra';
|
import { FrameworkScope, useService } from '@toeverything/infra';
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
|
||||||
import { DeleteLeaveWorkspace } from './delete-leave-workspace';
|
import { DeleteLeaveWorkspace } from './delete-leave-workspace';
|
||||||
import { EnableCloudPanel } from './enable-cloud';
|
import { EnableCloudPanel } from './enable-cloud';
|
||||||
@@ -28,6 +30,17 @@ export const WorkspaceSettingDetail = ({
|
|||||||
|
|
||||||
const workspaceInfo = useWorkspaceInfo(workspace);
|
const workspaceInfo = useWorkspaceInfo(workspace);
|
||||||
|
|
||||||
|
const handleResetSyncStatus = useCallback(() => {
|
||||||
|
workspace?.engine.doc
|
||||||
|
.resetSync()
|
||||||
|
.then(() => {
|
||||||
|
onCloseSetting();
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
|
}, [onCloseSetting, workspace]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FrameworkScope scope={server?.scope}>
|
<FrameworkScope scope={server?.scope}>
|
||||||
<SettingHeader
|
<SettingHeader
|
||||||
@@ -53,6 +66,19 @@ export const WorkspaceSettingDetail = ({
|
|||||||
<SharingPanel />
|
<SharingPanel />
|
||||||
<SettingWrapper>
|
<SettingWrapper>
|
||||||
<DeleteLeaveWorkspace onCloseSetting={onCloseSetting} />
|
<DeleteLeaveWorkspace onCloseSetting={onCloseSetting} />
|
||||||
|
<SettingRow
|
||||||
|
name={
|
||||||
|
<span style={{ color: 'var(--affine-text-secondary-color)' }}>
|
||||||
|
{t['com.affine.resetSyncStatus.button']()}
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
desc={t['com.affine.resetSyncStatus.description']()}
|
||||||
|
style={{ cursor: 'pointer' }}
|
||||||
|
onClick={handleResetSyncStatus}
|
||||||
|
data-testid="reset-sync-status"
|
||||||
|
>
|
||||||
|
<ArrowRightSmallIcon />
|
||||||
|
</SettingRow>
|
||||||
</SettingWrapper>
|
</SettingWrapper>
|
||||||
</FrameworkScope>
|
</FrameworkScope>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user