Files
upstream-affine/blocksuite/playground/apps/starter/data/synced.ts
upstream-mirror 702cc698a7
Some checks failed
Build & Test / Analyze (javascript, affine) (push) Failing after 4s
Build & Test / Analyze (typescript, affine) (push) Failing after 3s
Build & Test / Rust test filter (push) Failing after 4s
Build & Test / Check yarn binary (push) Failing after 3s
Build & Test / E2E BlockSuite Test (3) (push) Failing after 3s
Build & Test / Analyze (javascript, blocksuite) (push) Failing after 3s
Build & Test / Analyze (typescript, blocksuite) (push) Failing after 3s
Build & Test / Mobile native build filter (push) Failing after 3s
Build & Test / E2E BlockSuite Test (1) (push) Failing after 4s
Build & Test / E2E BlockSuite Test (2) (push) Failing after 4s
Build & Test / E2E Mobile Test (1) (push) Failing after 3s
Build & Test / Unit Test (1) (push) Has been skipped
Build & Test / Unit Test (2) (push) Has been skipped
Build & Test / Unit Test (3) (push) Has been skipped
Build & Test / Unit Test (4) (push) Has been skipped
Build & Test / Unit Test (5) (push) Has been skipped
Build & Test / Native Unit Test (push) Has been skipped
Build & Test / E2E BlockSuite Test (4) (push) Failing after 3s
Build & Test / E2E BlockSuite Test (5) (push) Failing after 3s
Build & Test / E2E BlockSuite Cross Browser Test (push) Failing after 3s
Build & Test / E2E Mobile Test (2) (push) Failing after 3s
Build & Test / Build AFFiNE native (x86_64-unknown-linux-gnu) (push) Failing after 3s
Build & Test / Build Server native (push) Failing after 3s
Build & Test / Check Git Status (push) Has been skipped
Build & Test / Server Test (0, 4) (push) Has been skipped
Build & Test / Server Test (1, 4) (push) Has been skipped
Build & Test / Server Test (2, 4) (push) Has been skipped
Build & Test / Server Test (3, 4) (push) Has been skipped
Build & Test / Server Test with Elasticsearch (push) Has been skipped
Build & Test / Build @affine/electron renderer (push) Failing after 3s
Build & Test / Copilot test filter (push) Failing after 4s
Build & Test / Lint Rust (push) Has been skipped
Build & Test / Server Test with Embedded Search (push) Has been skipped
Build & Test / Server Test with Manticore Search (push) Has been skipped
Build & Test / Server E2E Test (push) Has been skipped
Build & Test / Cloud Desktop E2E Test (push) Has been skipped
Build & Test / Cloud E2E Test 1/2 (push) Has been skipped
Build & Test / Cloud E2E Test 2/2 (push) Has been skipped
Build & Test / Build Android app (push) Has been skipped
Build & Test / Test Android app (push) Has been skipped
Build & Test / Run native tests (push) Has been skipped
Build & Test / Server Copilot Api Test (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (1, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (2, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (3, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (4, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (5, 5) (push) Has been skipped
Release / Canary Gate (push) Has been skipped
Build & Test / Build AFFiNE native (aarch64-apple-darwin) (push) Has been cancelled
Build & Test / Lint (push) Has been cancelled
Build & Test / Typecheck (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-apple-darwin) (push) Has been cancelled
Build & Test / Desktop Test (ubuntu-latest, linux, x64, x86_64-unknown-linux-gnu, true) (push) Has been cancelled
Build & Test / Desktop Test (windows-latest, windows, x64, x86_64-pc-windows-msvc, true) (push) Has been cancelled
Build & Test / E2E Test (1) (push) Has been cancelled
Build & Test / E2E Test (2) (push) Has been cancelled
Build & Test / E2E Test (3) (push) Has been cancelled
Build & Test / E2E Test (4) (push) Has been cancelled
Build & Test / E2E Test (5) (push) Has been cancelled
Build & Test / Build AFFiNE native (aarch64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, arm64, aarch64-apple-darwin, true) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, x64, x86_64-apple-darwin, false) (push) Has been cancelled
Build & Test / 3, 2, 1 Launch (push) Has been cancelled
Build & Test / Build iOS app (push) Has been cancelled
Copilot Test Automatically / Setup Test (push) Failing after 1s
Release / Prepare (push) Failing after 2s
Release / Release Cloud (push) Has been skipped
Release / Release Desktop (push) Has been skipped
Release / Release Docker Image (push) Has been skipped
Release / Release Mobile (push) Has been skipped
snapshot of https://github.com/toeverything/AFFiNE.git (canary, 2026-09-16; blobs > 131072B omitted)
2026-09-16 04:01:20 +05:00

176 lines
5.7 KiB
TypeScript

import { Text, type Workspace } from '@blocksuite/affine/store';
import { MarkdownTransformer } from '@blocksuite/affine/widgets/linked-doc';
import { getTestStoreManager } from '@blocksuite/integration-test/store';
import type { InitFn } from './utils';
const syncedDocMarkdown = `We share some of our findings from developing local-first software prototypes at [Ink & Switch](https://www.inkandswitch.com/) over the course of several years. These experiments test the viability of CRDTs in practice, and explore the user interface challenges for this new data model. Lastly, we suggest some next steps for moving towards local-first software: for researchers, for app developers, and a startup opportunity for entrepreneurs.
This article has also been published [in PDF format](https://www.inkandswitch.com/local-first/static/local-first.pdf) in the proceedings of the [Onward! 2019 conference](https://2019.splashcon.org/track/splash-2019-Onward-Essays). Please cite it as:
> Martin Kleppmann, Adam Wiggins, Peter van Hardenberg, and Mark McGranaghan. Local-first software: you own your data, in spite of the cloud. 2019 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software (Onward!), October 2019, pages 154-178. [doi:10.1145/3359591.3359737](https://doi.org/10.1145/3359591.3359737)
We welcome your feedback: [@inkandswitch](https://twitter.com/inkandswitch) or hello@inkandswitch.com.`;
export const synced: InitFn = (collection: Workspace, id: string) => {
const docMain =
collection.getDoc(id)?.getStore({ id }) ??
collection.createDoc(id).getStore({ id });
const docSyncedPageId = 'doc:synced-page';
const docSyncedPage = collection.createDoc(docSyncedPageId).getStore();
const docSyncedEdgelessId = 'doc:synced-edgeless';
const docSyncedEdgeless = collection
.createDoc(docSyncedEdgelessId)
.getStore();
docMain.doc.clear();
docSyncedPage.doc.clear();
docSyncedEdgeless.doc.clear();
docSyncedPage.load(() => {
// Add root block and surface block at root level
const rootId = docSyncedPage.addBlock('affine:page', {
title: new Text('Synced - Page View'),
});
docSyncedPage.addBlock('affine:surface', {}, rootId);
// Add note block inside root block
const noteId = docSyncedPage.addBlock('affine:note', {}, rootId);
// Add markdown to note block
MarkdownTransformer.importMarkdownToBlock({
doc: docSyncedPage,
blockId: noteId,
markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
}).catch(console.error);
});
docSyncedEdgeless.load(() => {
// Add root block and surface block at root level
const rootId = docSyncedEdgeless.addBlock('affine:page', {
title: new Text('Synced - Edgeless View'),
});
docSyncedEdgeless.addBlock('affine:surface', {}, rootId);
// Add note block inside root block
const noteId = docSyncedEdgeless.addBlock('affine:note', {}, rootId);
// Add markdown to note block
MarkdownTransformer.importMarkdownToBlock({
doc: docSyncedEdgeless,
blockId: noteId,
markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
}).catch(console.error);
});
docMain.load(() => {
// Add root block and surface block at root level
const rootId = docMain.addBlock('affine:page', {
title: new Text('Home doc, having synced blocks'),
});
const surfaceId = docMain.addBlock('affine:surface', {}, rootId);
const noteId = docMain.addBlock('affine:note', {}, rootId);
// Add markdown to note block
MarkdownTransformer.importMarkdownToBlock({
doc: docMain,
blockId: noteId,
markdown: syncedDocMarkdown,
extensions: getTestStoreManager().get('store'),
})
.then(() => {
// Add synced block - self
docMain.addBlock(
'affine:paragraph',
{
text: new Text('Cyclic / Matryoshka synced block 👇'),
type: 'h4',
},
noteId
);
// Add synced block - self
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: id,
},
noteId
);
// Add synced block - page view
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: docSyncedPageId,
},
noteId
);
// Add synced block - edgeless view
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: docSyncedEdgelessId,
},
noteId
);
// Add synced block - page view
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: docSyncedPageId,
xywh: '[-1000, 0, 752, 455]',
},
surfaceId
);
// Add synced block - edgeless view
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: docSyncedEdgelessId,
xywh: '[-1000, 500, 752, 455]',
},
surfaceId
);
// Add synced block - self
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: id,
xywh: '[-1000, 1000, 752, 455]',
},
surfaceId
);
// Add synced block - self
docMain.addBlock(
'affine:embed-synced-doc',
{
pageId: 'doc:deleted-page',
},
noteId
);
})
.catch(console.error);
});
docSyncedEdgeless.resetHistory();
docSyncedPage.resetHistory();
docMain.resetHistory();
};
synced.id = 'synced';
synced.displayName = 'Synced block demo';
synced.description = 'A simple demo for synced block';