feat(y-indexeddb): add connected (#2208)

Co-authored-by: Himself65 <himself65@outlook.com>
This commit is contained in:
三咲智子 Kevin Deng
2023-05-05 11:42:49 +08:00
committed by GitHub
parent de0b300aca
commit 2c49c774af
3 changed files with 12 additions and 0 deletions

View File

@@ -136,10 +136,12 @@ describe('indexeddb provider', () => {
rootDBName rootDBName
); );
provider.connect(); provider.connect();
expect(provider.connected).toBe(true);
const p1 = provider.whenSynced; const p1 = provider.whenSynced;
await p1; await p1;
const snapshot = encodeStateAsUpdate(workspace.doc); const snapshot = encodeStateAsUpdate(workspace.doc);
provider.disconnect(); provider.disconnect();
expect(provider.connected).toBe(false);
{ {
const page = workspace.createPage('page0'); const page = workspace.createPage('page0');
const pageBlockId = page.addBlock('affine:page', { title: '' }); const pageBlockId = page.addBlock('affine:page', { title: '' });
@@ -151,14 +153,18 @@ describe('indexeddb provider', () => {
expect(updates.length).toBe(1); expect(updates.length).toBe(1);
expect(updates[0]).toEqual(snapshot); expect(updates[0]).toEqual(snapshot);
} }
expect(provider.connected).toBe(false);
provider.connect(); provider.connect();
expect(provider.connected).toBe(true);
const p2 = provider.whenSynced; const p2 = provider.whenSynced;
await p2; await p2;
{ {
const updates = await getUpdates(workspace.id); const updates = await getUpdates(workspace.id);
expect(updates).not.toEqual([]); expect(updates).not.toEqual([]);
} }
expect(provider.connected).toBe(true);
provider.disconnect(); provider.disconnect();
expect(provider.connected).toBe(false);
expect(p1).not.toBe(p2); expect(p1).not.toBe(p2);
}); });

View File

@@ -209,6 +209,8 @@ export const createIndexedDBProvider = (
}; };
const apis = { const apis = {
connect: async () => { connect: async () => {
if (connected) return;
apis.whenSynced = new Promise<void>((_resolve, _reject) => { apis.whenSynced = new Promise<void>((_resolve, _reject) => {
early = true; early = true;
resolve = _resolve; resolve = _resolve;
@@ -287,6 +289,9 @@ export const createIndexedDBProvider = (
(await dbPromise).delete('workspace', id); (await dbPromise).delete('workspace', id);
}, },
whenSynced: Promise.resolve(), whenSynced: Promise.resolve(),
get connected() {
return connected;
},
}; };
return apis; return apis;

View File

@@ -13,6 +13,7 @@ export interface IndexedDBProvider {
disconnect: () => void; disconnect: () => void;
cleanup: () => Promise<void>; cleanup: () => Promise<void>;
whenSynced: Promise<void>; whenSynced: Promise<void>;
readonly connected: boolean;
} }
export type UpdateMessage = { export type UpdateMessage = {