feat: support get datasource status (#3645)

This commit is contained in:
Alex Yang
2023-08-10 01:05:34 -04:00
committed by GitHub
parent 05144abd6a
commit dafd5619e6
34 changed files with 836 additions and 46 deletions

View File

@@ -3,6 +3,7 @@ import {
type DatasourceDocAdapter,
writeOperation,
} from '@affine/y-provider';
import { assertExists } from '@blocksuite/global/utils';
import { openDB } from 'idb';
import type { Doc } from 'yjs';
import { diffUpdate, mergeUpdates } from 'yjs';
@@ -77,7 +78,6 @@ const createDatasource = ({
const merged = mergeUpdates(rows.map(({ update }) => update));
rows = [{ timestamp: Date.now(), update: merged }];
}
await writeOperation(
store.put({
id: guid,
@@ -112,6 +112,14 @@ export const createIndexedDBProvider = (
let provider: ReturnType<typeof createLazyProvider> | null = null;
const apis = {
get status() {
assertExists(provider);
return provider.status;
},
subscribeStatusChange(onStatusChange) {
assertExists(provider);
return provider.subscribeStatusChange(onStatusChange);
},
connect: () => {
if (apis.connected) {
apis.disconnect();
@@ -132,7 +140,7 @@ export const createIndexedDBProvider = (
get connected() {
return provider?.connected || false;
},
};
} satisfies IndexedDBProvider;
return apis;
};

View File

@@ -1,3 +1,4 @@
import type { StatusAdapter } from '@affine/y-provider';
import type { DBSchema, IDBPDatabase } from 'idb';
export const dbVersion = 1;
@@ -8,7 +9,7 @@ export function upgradeDB(db: IDBPDatabase<BlockSuiteBinaryDB>) {
db.createObjectStore('milestone', { keyPath: 'id' });
}
export interface IndexedDBProvider {
export interface IndexedDBProvider extends StatusAdapter {
connect: () => void;
disconnect: () => void;
cleanup: () => Promise<void>;