Extract some common Yjs code into Vault class
This commit is contained in:
@@ -38,10 +38,7 @@ function Layout(props: any) {
|
||||
if (id === null) {
|
||||
return null;
|
||||
} else {
|
||||
return (defaultVault.doc.getMap() as Y.Map<any>)
|
||||
.get('docs')
|
||||
.get(id)
|
||||
.get('title') as string;
|
||||
return defaultVault.getDocInfo(id)?.title ?? '<invalid>';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -3,14 +3,13 @@ import './Chooser.css';
|
||||
import { useNavbar } from './App';
|
||||
import { useNavigate } from '@solidjs/router';
|
||||
import { defaultVault } from '../sync';
|
||||
import * as Y from 'yjs';
|
||||
|
||||
function Chooser() {
|
||||
const navigate = useNavigate();
|
||||
const { setFileId } = useNavbar();
|
||||
onMount(() => setFileId(null));
|
||||
|
||||
const docsMap = defaultVault.doc.getMap().get('docs') as Y.Map<any>;
|
||||
const docsMap = defaultVault.getDocsMap();
|
||||
const titles: Record<string, string> = {};
|
||||
for (const [id, docInfo] of docsMap.entries()) {
|
||||
titles[id] = docInfo.get('title');
|
||||
|
||||
+3
-2
@@ -2,6 +2,7 @@ import _ from 'lodash';
|
||||
import * as Y from 'yjs';
|
||||
import { openDB } from 'idb';
|
||||
import { generateId } from './util';
|
||||
import { Vault } from './vault';
|
||||
|
||||
const DB_NAME = 'synced-docs';
|
||||
const LOCAL_UPDATE_STORE = 'local-updates';
|
||||
@@ -95,12 +96,12 @@ async function getOrCreateVaultDoc() {
|
||||
if (!vaultMap.has('docs')) {
|
||||
vaultMap.set('docs', new Y.Map());
|
||||
}
|
||||
return vault;
|
||||
return new Vault(vault);
|
||||
}
|
||||
|
||||
export const defaultVault = await getOrCreateVaultDoc();
|
||||
|
||||
const docsMap = defaultVault.doc.getMap().get('docs') as Y.Map<any>;
|
||||
const docsMap = defaultVault.getDocsMap();
|
||||
if (docsMap.size === 0) {
|
||||
console.log('Running vault migration...');
|
||||
for (const oldKey of ['foo', 'bar', 'baz']) {
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { LocalDocument } from './sync';
|
||||
import * as Y from 'yjs';
|
||||
|
||||
export class Vault {
|
||||
doc: LocalDocument;
|
||||
|
||||
constructor(doc: LocalDocument) {
|
||||
this.doc = doc;
|
||||
}
|
||||
|
||||
getDocInfo(id: string): DocInfo | null {
|
||||
const docsEntry = this.getDocsMap().get(id);
|
||||
if (!docsEntry) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
title: docsEntry.get('title'),
|
||||
tags: new Set(),
|
||||
};
|
||||
}
|
||||
|
||||
getDocsMap(): Y.Map<Y.Map<any>> {
|
||||
const vaultMap = this.doc.doc.getMap();
|
||||
return vaultMap.get('docs') as Y.Map<any>;
|
||||
}
|
||||
}
|
||||
|
||||
export interface DocInfo {
|
||||
title: string;
|
||||
tags: Set<string>;
|
||||
}
|
||||
Reference in New Issue
Block a user