Merge pull request #678 from toeverything/0106/surface

feat: compat with surface block structure
This commit is contained in:
DarkSky
2023-01-06 17:34:18 +08:00
committed by GitHub
9 changed files with 62 additions and 44 deletions
+3 -3
View File
@@ -11,10 +11,10 @@
},
"dependencies": {
"@affine/datacenter": "workspace:*",
"@blocksuite/blocks": "0.3.1",
"@blocksuite/editor": "0.3.1",
"@blocksuite/blocks": "=0.3.1-20230106060050-1aad55d",
"@blocksuite/editor": "=0.3.1-20230106060050-1aad55d",
"@blocksuite/icons": "^2.0.2",
"@blocksuite/store": "0.3.1",
"@blocksuite/store": "=0.3.1-20230106060050-1aad55d",
"@emotion/css": "^11.10.0",
"@emotion/react": "^11.10.4",
"@emotion/server": "^11.10.0",
@@ -22,14 +22,14 @@ export const EditorHeader = () => {
useEffect(() => {
onPropsUpdated(editor => {
setTitle(editor.model?.title || 'Untitled');
setTitle(editor.pageBlockModel?.title || 'Untitled');
});
}, [onPropsUpdated]);
useEffect(() => {
setTimeout(() => {
// If first time in, need to wait for editor to be inserted into DOM
setTitle(editor?.model?.title || 'Untitled');
setTitle(editor?.pageBlockModel?.title || 'Untitled');
}, 300);
}, [editor]);
+3 -2
View File
@@ -31,9 +31,10 @@ export const ImportModal = ({ open, onClose }: ImportModalProps) => {
setTimeout(() => {
const editor = document.querySelector('editor-container');
if (editor) {
const groupId = page.addBlock({ flavour: 'affine:group' }, pageId);
page.addBlock({ flavour: 'affine:surface' }, null);
const frameId = page.addBlock({ flavour: 'affine:frame' }, pageId);
// TODO blocksuite should offer a method to import markdown from store
editor.clipboard.importMarkdown(template.source, `${groupId}`);
editor.clipboard.importMarkdown(template.source, `${frameId}`);
page.resetHistory();
editor.requestUpdate();
}
+2 -2
View File
@@ -17,7 +17,7 @@ export const usePropsUpdated: UsePropsUpdated = () => {
return;
}
setTimeout(() => {
editor.model?.propsUpdated.on(() => {
editor.pageBlockModel?.propsUpdated.on(() => {
callbackQueue.current.forEach(callback => {
callback(editor);
});
@@ -26,7 +26,7 @@ export const usePropsUpdated: UsePropsUpdated = () => {
return () => {
callbackQueue.current = [];
editor?.model?.propsUpdated.dispose();
editor?.pageBlockModel?.propsUpdated?.dispose();
};
}, [editor]);
@@ -43,12 +43,16 @@ const All = () => {
if (page) {
currentWorkspace?.setPageMeta(page.id, { title });
if (page && page.root === null) {
setTimeout(() => {
setTimeout(async () => {
const editor = document.querySelector('editor-container');
if (editor) {
const groupId = page.addBlock({ flavour: 'affine:group' }, pageId);
page.addBlock({ flavour: 'affine:surface' }, null);
const frameId = page.addBlock({ flavour: 'affine:frame' }, pageId);
// TODO blocksuite should offer a method to import markdown from store
editor.clipboard.importMarkdown(template.source, `${groupId}`);
await editor.clipboard.importMarkdown(
template.source,
`${frameId}`
);
page.resetHistory();
editor.requestUpdate();
}
@@ -55,14 +55,15 @@ const Page: NextPageWithLayout = () => {
flavour: 'affine:page',
title,
});
const groupId = currentPage!.addBlock(
{ flavour: 'affine:group' },
currentPage!.addBlock({ flavour: 'affine:surface' }, null);
const frameId = currentPage!.addBlock(
{ flavour: 'affine:frame' },
pageId
);
currentPage!.addBlock({ flavour: 'affine:group' }, pageId);
currentPage!.addBlock({ flavour: 'affine:frame' }, pageId);
// If this is a first page in workspace, init an introduction markdown
if (isFirstPage) {
editor.clipboard.importMarkdown(exampleMarkdown, `${groupId}`);
editor.clipboard.importMarkdown(exampleMarkdown, `${frameId}`);
currentWorkspace!.setPageMeta(currentPage!.id, { title });
}
currentPage!.resetHistory();
+2 -2
View File
@@ -26,8 +26,8 @@
"typescript": "^4.8.4"
},
"dependencies": {
"@blocksuite/blocks": "^0.3.1",
"@blocksuite/store": "^0.3.1",
"@blocksuite/blocks": "=0.3.1-20230106060050-1aad55d",
"@blocksuite/store": "=0.3.1-20230106060050-1aad55d",
"debug": "^4.3.4",
"encoding": "^0.1.13",
"firebase": "^9.15.0",
+28 -19
View File
@@ -45,10 +45,10 @@ importers:
packages/app:
specifiers:
'@affine/datacenter': workspace:*
'@blocksuite/blocks': 0.3.1
'@blocksuite/editor': 0.3.1
'@blocksuite/blocks': '=0.3.1-20230106060050-1aad55d'
'@blocksuite/editor': '=0.3.1-20230106060050-1aad55d'
'@blocksuite/icons': ^2.0.2
'@blocksuite/store': 0.3.1
'@blocksuite/store': '=0.3.1-20230106060050-1aad55d'
'@emotion/css': ^11.10.0
'@emotion/react': ^11.10.4
'@emotion/server': ^11.10.0
@@ -87,10 +87,10 @@ importers:
yjs: ^13.5.44
dependencies:
'@affine/datacenter': link:../data-center
'@blocksuite/blocks': 0.3.1_yjs@13.5.44
'@blocksuite/editor': 0.3.1_yjs@13.5.44
'@blocksuite/blocks': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@blocksuite/editor': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@blocksuite/icons': 2.0.4_w5j4k42lgipnm43s3brx6h3c34
'@blocksuite/store': 0.3.1_yjs@13.5.44
'@blocksuite/store': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@emotion/css': 11.10.0
'@emotion/react': 11.10.4_w5j4k42lgipnm43s3brx6h3c34
'@emotion/server': 11.10.0_@emotion+css@11.10.0
@@ -131,8 +131,8 @@ importers:
packages/data-center:
specifiers:
'@blocksuite/blocks': ^0.3.1
'@blocksuite/store': ^0.3.1
'@blocksuite/blocks': '=0.3.1-20230106060050-1aad55d'
'@blocksuite/store': '=0.3.1-20230106060050-1aad55d'
'@playwright/test': ^1.29.1
'@types/debug': ^4.1.7
debug: ^4.3.4
@@ -148,8 +148,8 @@ importers:
y-protocols: ^1.0.5
yjs: ^13.5.44
dependencies:
'@blocksuite/blocks': 0.3.1_yjs@13.5.44
'@blocksuite/store': 0.3.1_yjs@13.5.44
'@blocksuite/blocks': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@blocksuite/store': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
debug: 4.3.4
encoding: 0.1.13
firebase: 9.15.0_encoding@0.1.13
@@ -1496,10 +1496,11 @@ packages:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true
/@blocksuite/blocks/0.3.1_yjs@13.5.44:
resolution: {integrity: sha512-b0dGz2MG4yIgngJPRumaMY58wAsd2FEVSZl3tpCXlagK9I0HD165Bq70PxcaRHVjBSV1Gf29ZVHUF6BVTYogPw==}
/@blocksuite/blocks/0.3.1-20230106060050-1aad55d_yjs@13.5.44:
resolution: {integrity: sha512-qRNXmhjw+GAGsV1mI2XXPxYTlHfsFHv9ttTCNQ6IIcxvc5Hh6lWmdwVibxvlpYUkgEc1zv3/GxOEsR/ngpZXzQ==}
dependencies:
'@blocksuite/store': 0.3.1_yjs@13.5.44
'@blocksuite/phasor': 0.3.1_yjs@13.5.44
'@blocksuite/store': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@tldraw/intersect': 1.8.0
autosize: 5.0.2
highlight.js: 11.7.0
@@ -1515,11 +1516,11 @@ packages:
- yjs
dev: false
/@blocksuite/editor/0.3.1_yjs@13.5.44:
resolution: {integrity: sha512-ycKcyvPW6R8R2GZOFneGH1xNi5gJBx5WtWjW9YwcQslFzXVWMCCBips1Bud2uL4kkbWQoodyua6k2vsXxGAKLw==}
/@blocksuite/editor/0.3.1-20230106060050-1aad55d_yjs@13.5.44:
resolution: {integrity: sha512-wSlAF9XVxIkHFJ1qCzn7oQ/gwXybFYMrzRl35UTJV509D+DuWZefRZWvpdIDCOUJ24uQscr1HxwsON11ltfWgA==}
dependencies:
'@blocksuite/blocks': 0.3.1_yjs@13.5.44
'@blocksuite/store': 0.3.1_yjs@13.5.44
'@blocksuite/blocks': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
'@blocksuite/store': 0.3.1-20230106060050-1aad55d_yjs@13.5.44
lit: 2.5.0
marked: 4.2.5
turndown: 7.1.1
@@ -1540,8 +1541,16 @@ packages:
react: 18.2.0
dev: false
/@blocksuite/store/0.3.1_yjs@13.5.44:
resolution: {integrity: sha512-kynVTDfNCSChz2JI2rtGHxRIV2YrLzvAgVajcbfDVCuXKG0siBoEjLasG1a0kvevbvW/FabrNAj+xaIplklioA==}
/@blocksuite/phasor/0.3.1_yjs@13.5.44:
resolution: {integrity: sha512-aJmAQn2qoF6HxFZWgq7xa/pWVyzg3MmD6dynIHAKdfN7rBdKk3PNA+lRX919QkD2e270N/zgHEGFFQI1Nj5xrA==}
peerDependencies:
yjs: ^13
dependencies:
yjs: 13.5.44
dev: false
/@blocksuite/store/0.3.1-20230106060050-1aad55d_yjs@13.5.44:
resolution: {integrity: sha512-dRy+YzlWMwiYq0Im9NogK/NTkV+NKK+lgejYq56m6nH2m16/G9AMODqP0oQy/XeYFevUpL9i9RdV0rHsJ2gc0Q==}
peerDependencies:
yjs: ^13
dependencies:
+10 -7
View File
@@ -7,10 +7,13 @@ loadPage();
const openQuickSearchByShortcut = async (page: Page) =>
await withCtrlOrMeta(page, () => page.keyboard.press('k', { delay: 50 }));
async function assertTitleTexts(page: Page, texts: string[]) {
const actual = await page
.locator('.affine-default-page-block-title')
.allTextContents();
async function assertTitleTexts(page: Page, texts: string) {
const actual = await page.evaluate(() => {
const titleElement = <HTMLTextAreaElement>(
document.querySelector('.affine-default-page-block-title')
);
return titleElement.value;
});
expect(actual).toEqual(texts);
}
async function assertResultList(page: Page, texts: string[]) {
@@ -55,7 +58,7 @@ test.describe('Add new page in quick search', () => {
const addNewPage = page.locator('[data-testid=quickSearch-addNewPage]');
await addNewPage.click();
await page.waitForTimeout(200);
await assertTitleTexts(page, ['']);
await assertTitleTexts(page, '');
});
test('Create a new page with keyword', async ({ page }) => {
@@ -65,7 +68,7 @@ test.describe('Add new page in quick search', () => {
const addNewPage = page.locator('[data-testid=quickSearch-addNewPage]');
await addNewPage.click();
await page.waitForTimeout(200);
await assertTitleTexts(page, ['test123456']);
await assertTitleTexts(page, 'test123456');
});
});
@@ -81,6 +84,6 @@ test.describe('Search and select', () => {
await page.keyboard.insertText('test123456');
await assertResultList(page, ['test123456']);
await page.keyboard.press('Enter', { delay: 50 });
await assertTitleTexts(page, ['test123456']);
await assertTitleTexts(page, 'test123456');
});
});