feat(y-indexeddb): add connected (#2208)
Co-authored-by: Himself65 <himself65@outlook.com>
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
Reference in New Issue
Block a user