fix(core): blocksuite editor runtime configs in correct timing (#10344)

This commit is contained in:
Peng Xiao
2025-02-21 17:16:53 +08:00
committed by GitHub
parent 09cc5c392b
commit dff68b9aae
5 changed files with 37 additions and 49 deletions
@@ -42,7 +42,7 @@ export interface AffineEditorContainer extends HTMLElement {
page: Store; page: Store;
doc: Store; doc: Store;
docTitle: DocTitle; docTitle: DocTitle;
host: EditorHost; host?: EditorHost;
model: RootBlockModel | null; model: RootBlockModel | null;
updateComplete: Promise<boolean>; updateComplete: Promise<boolean>;
mode: DocMode; mode: DocMode;
@@ -67,46 +67,38 @@ const BlockSuiteEditorImpl = ({
let canceled = false; let canceled = false;
const disposableGroup = new DisposableGroup(); const disposableGroup = new DisposableGroup();
if (onEditorReady) { // Invoke onLoad once the editor has been mounted to the DOM.
// Invoke onLoad once the editor has been mounted to the DOM. if (canceled) {
editor.updateComplete return;
.then(() => { }
if (canceled) {
return;
}
// host should be ready
// provide image proxy endpoint to blocksuite // provide image proxy endpoint to blocksuite
const imageProxyUrl = new URL( const imageProxyUrl = new URL(
BUILD_CONFIG.imageProxyUrl, BUILD_CONFIG.imageProxyUrl,
server.baseUrl server.baseUrl
).toString(); ).toString();
const linkPreviewUrl = new URL(
BUILD_CONFIG.linkPreviewUrl,
server.baseUrl
).toString();
editor.host?.std.clipboard.use( const linkPreviewUrl = new URL(
customImageProxyMiddleware(imageProxyUrl) BUILD_CONFIG.linkPreviewUrl,
); server.baseUrl
).toString();
page.get(LinkPreviewerService).setEndpoint(linkPreviewUrl); editor.std.clipboard.use(customImageProxyMiddleware(imageProxyUrl));
page.get(LinkPreviewerService).setEndpoint(linkPreviewUrl);
page.get(ImageProxyService).setImageProxyURL(imageProxyUrl);
page.get(ImageProxyService).setImageProxyURL(imageProxyUrl); editor.updateComplete
.then(() => {
return editor.host?.updateComplete; if (onEditorReady) {
})
.then(() => {
if (canceled) {
return;
}
const dispose = onEditorReady(editor); const dispose = onEditorReady(editor);
if (dispose) { if (dispose) {
disposableGroup.add(dispose); disposableGroup.add(dispose);
} }
}) }
.catch(console.error); })
} .catch(error => {
console.error('Error updating editor', error);
});
return () => { return () => {
canceled = true; canceled = true;
@@ -167,10 +167,7 @@ const DetailPageImpl = memo(function DetailPageImpl() {
const onLoad = useCallback( const onLoad = useCallback(
(editorContainer: AffineEditorContainer) => { (editorContainer: AffineEditorContainer) => {
// blocksuite editor host const std = editorContainer.std;
const editorHost = editorContainer.host;
const std = editorHost?.std;
const disposable = new DisposableGroup(); const disposable = new DisposableGroup();
if (std) { if (std) {
const refNodeSlots = std.getOptional(RefNodeSlotsProvider); const refNodeSlots = std.getOptional(RefNodeSlotsProvider);
@@ -179,7 +176,7 @@ const DetailPageImpl = memo(function DetailPageImpl() {
// the event should not be emitted by AffineReference // the event should not be emitted by AffineReference
refNodeSlots.docLinkClicked.on( refNodeSlots.docLinkClicked.on(
({ pageId, params, openMode, event, host }) => { ({ pageId, params, openMode, event, host }) => {
if (host !== editorHost) { if (host !== editorContainer.host) {
return; return;
} }
openMode ??= openMode ??=
@@ -139,9 +139,6 @@ const DetailPageImpl = () => {
const onLoad = useCallback( const onLoad = useCallback(
(editorContainer: AffineEditorContainer) => { (editorContainer: AffineEditorContainer) => {
// blocksuite editor host
const editorHost = editorContainer.host;
// provide image proxy endpoint to blocksuite // provide image proxy endpoint to blocksuite
const imageProxyUrl = new URL( const imageProxyUrl = new URL(
BUILD_CONFIG.imageProxyUrl, BUILD_CONFIG.imageProxyUrl,
@@ -153,14 +150,19 @@ const DetailPageImpl = () => {
server.baseUrl server.baseUrl
).toString(); ).toString();
editorHost?.std.clipboard.use(customImageProxyMiddleware(imageProxyUrl)); editorContainer.std.clipboard.use(
editorHost?.doc.get(ImageProxyService).setImageProxyURL(imageProxyUrl); customImageProxyMiddleware(imageProxyUrl)
);
editorContainer.doc
.get(ImageProxyService)
.setImageProxyURL(imageProxyUrl);
// provide link preview endpoint to blocksuite // provide link preview endpoint to blocksuite
editorHost?.doc.get(LinkPreviewerService).setEndpoint(linkPreviewUrl); editorContainer.doc.get(LinkPreviewerService).setEndpoint(linkPreviewUrl);
// provide page mode and updated date to blocksuite // provide page mode and updated date to blocksuite
const refNodeService = editorHost?.std.getOptional(RefNodeSlotsProvider); const refNodeService =
editorContainer.std.getOptional(RefNodeSlotsProvider);
const disposable = new DisposableGroup(); const disposable = new DisposableGroup();
if (refNodeService) { if (refNodeService) {
disposable.add( disposable.add(
@@ -96,12 +96,9 @@ function DocPeekPreviewEditor({
const handleOnEditorReady = useCallback( const handleOnEditorReady = useCallback(
(editorContainer: AffineEditorContainer) => { (editorContainer: AffineEditorContainer) => {
if (!editorContainer.host) {
return;
}
const disposableGroup = new DisposableGroup(); const disposableGroup = new DisposableGroup();
const refNodeSlots = const refNodeSlots =
editorContainer.host.std.getOptional(RefNodeSlotsProvider); editorContainer.std.getOptional(RefNodeSlotsProvider);
if (!refNodeSlots) return; if (!refNodeSlots) return;
// doc change event inside peek view should be handled by peek view // doc change event inside peek view should be handled by peek view
disposableGroup.add( disposableGroup.add(