chore: merge blocksuite source code (#9213)
This commit is contained in:
62
blocksuite/playground/apps/_common/history.ts
Normal file
62
blocksuite/playground/apps/_common/history.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import type { DocModeProvider } from '@blocksuite/blocks';
|
||||
import { assertExists } from '@blocksuite/global/utils';
|
||||
import type { AffineEditorContainer } from '@blocksuite/presets';
|
||||
import type { BlockCollection, Doc, DocCollection } from '@blocksuite/store';
|
||||
import type { LitElement } from 'lit';
|
||||
|
||||
export function getDocFromUrlParams(collection: DocCollection, url: URL) {
|
||||
let doc: Doc | null = null;
|
||||
|
||||
const docId = decodeURIComponent(url.hash.slice(1));
|
||||
|
||||
if (docId) {
|
||||
doc = collection.getDoc(docId);
|
||||
}
|
||||
if (!doc) {
|
||||
const blockCollection = collection.docs.values().next()
|
||||
.value as BlockCollection;
|
||||
assertExists(blockCollection, 'Need to create a doc first');
|
||||
doc = blockCollection.getDoc();
|
||||
}
|
||||
|
||||
doc.load();
|
||||
doc.resetHistory();
|
||||
|
||||
assertExists(doc.ready, 'Doc is not ready');
|
||||
assertExists(doc.root, 'Doc root is not ready');
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
export function setDocModeFromUrlParams(
|
||||
service: DocModeProvider,
|
||||
search: URLSearchParams,
|
||||
docId: string
|
||||
) {
|
||||
const paramMode = search.get('mode');
|
||||
if (paramMode) {
|
||||
const docMode = paramMode === 'page' ? 'page' : 'edgeless';
|
||||
service.setPrimaryMode(docMode, docId);
|
||||
service.setEditorMode(docMode);
|
||||
}
|
||||
}
|
||||
|
||||
export function listenHashChange(
|
||||
collection: DocCollection,
|
||||
editor: AffineEditorContainer,
|
||||
panel?: LitElement
|
||||
) {
|
||||
window.addEventListener('hashchange', () => {
|
||||
const url = new URL(location.toString());
|
||||
const doc = getDocFromUrlParams(collection, url);
|
||||
if (!doc) return;
|
||||
|
||||
if (panel?.checkVisibility()) {
|
||||
panel.requestUpdate();
|
||||
}
|
||||
|
||||
editor.doc = doc;
|
||||
editor.doc.load();
|
||||
editor.doc.resetHistory();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user