Extract some common Yjs code into Vault class

This commit is contained in:
2025-09-07 00:02:24 -07:00
parent 77d04c99a0
commit d65d1307e2
4 changed files with 36 additions and 8 deletions
+1 -4
View File
@@ -38,10 +38,7 @@ function Layout(props: any) {
if (id === null) { if (id === null) {
return null; return null;
} else { } else {
return (defaultVault.doc.getMap() as Y.Map<any>) return defaultVault.getDocInfo(id)?.title ?? '<invalid>';
.get('docs')
.get(id)
.get('title') as string;
} }
}; };
+1 -2
View File
@@ -3,14 +3,13 @@ import './Chooser.css';
import { useNavbar } from './App'; import { useNavbar } from './App';
import { useNavigate } from '@solidjs/router'; import { useNavigate } from '@solidjs/router';
import { defaultVault } from '../sync'; import { defaultVault } from '../sync';
import * as Y from 'yjs';
function Chooser() { function Chooser() {
const navigate = useNavigate(); const navigate = useNavigate();
const { setFileId } = useNavbar(); const { setFileId } = useNavbar();
onMount(() => setFileId(null)); onMount(() => setFileId(null));
const docsMap = defaultVault.doc.getMap().get('docs') as Y.Map<any>; const docsMap = defaultVault.getDocsMap();
const titles: Record<string, string> = {}; const titles: Record<string, string> = {};
for (const [id, docInfo] of docsMap.entries()) { for (const [id, docInfo] of docsMap.entries()) {
titles[id] = docInfo.get('title'); titles[id] = docInfo.get('title');
+3 -2
View File
@@ -2,6 +2,7 @@ import _ from 'lodash';
import * as Y from 'yjs'; import * as Y from 'yjs';
import { openDB } from 'idb'; import { openDB } from 'idb';
import { generateId } from './util'; import { generateId } from './util';
import { Vault } from './vault';
const DB_NAME = 'synced-docs'; const DB_NAME = 'synced-docs';
const LOCAL_UPDATE_STORE = 'local-updates'; const LOCAL_UPDATE_STORE = 'local-updates';
@@ -95,12 +96,12 @@ async function getOrCreateVaultDoc() {
if (!vaultMap.has('docs')) { if (!vaultMap.has('docs')) {
vaultMap.set('docs', new Y.Map()); vaultMap.set('docs', new Y.Map());
} }
return vault; return new Vault(vault);
} }
export const defaultVault = await getOrCreateVaultDoc(); export const defaultVault = await getOrCreateVaultDoc();
const docsMap = defaultVault.doc.getMap().get('docs') as Y.Map<any>; const docsMap = defaultVault.getDocsMap();
if (docsMap.size === 0) { if (docsMap.size === 0) {
console.log('Running vault migration...'); console.log('Running vault migration...');
for (const oldKey of ['foo', 'bar', 'baz']) { for (const oldKey of ['foo', 'bar', 'baz']) {
+31
View File
@@ -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>;
}