Skip to content

Commit

Permalink
fix: jumping to edgeless-editor by "View in Edgeless" in the default …
Browse files Browse the repository at this point in the history
…demo (#6486)
  • Loading branch information
congzhou09 committed Mar 19, 2024
1 parent 477a6e9 commit 5545f41
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 56 deletions.
45 changes: 43 additions & 2 deletions packages/playground/apps/default/utils/editor.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { PageRootService } from '@blocksuite/blocks';
import { assertExists } from '@blocksuite/global/utils';
import type { EditorHost } from '@blocksuite/lit';
import { AffineEditorContainer } from '@blocksuite/presets';
Expand All @@ -24,8 +25,44 @@ export async function mountDefaultDocEditor(collection: DocCollection) {
const specs = getExampleSpecs();

const editor = new AffineEditorContainer();
editor.pageSpecs = specs.pageModeSpecs;
editor.edgelessSpecs = specs.edgelessModeSpecs;
editor.pageSpecs = [...specs.pageModeSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
const setup = spec.setup;
spec = {
...spec,
setup: (slots, disposable) => {
setup?.(slots, disposable);
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(
switchQuickEdgelessMenu
)
);
});
},
};
}
return spec;
});
editor.edgelessSpecs = [...specs.edgelessModeSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
const setup = spec.setup;
spec = {
...spec,
setup: (slots, disposable) => {
setup?.(slots, disposable);
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(
switchQuickEdgelessMenu
)
);
});
},
};
}
return spec;
});
editor.doc = doc;
editor.slots.docLinkClicked.on(({ docId }) => {
const target = collection.getDoc(docId);
Expand All @@ -51,6 +88,10 @@ export async function mountDefaultDocEditor(collection: DocCollection) {
quickEdgelessMenu.leftSidePanel = leftSidePanel;
quickEdgelessMenu.docsPanel = docsPanel;

function switchQuickEdgelessMenu(mode: typeof defaultMode) {
quickEdgelessMenu.mode = mode;
}

document.body.append(leftSidePanel);
document.body.append(quickEdgelessMenu);

Expand Down
16 changes: 1 addition & 15 deletions packages/playground/apps/starter/utils/editor.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { PageRootService } from '@blocksuite/blocks';
import {
AffineFormatBarWidget,
EdgelessEditorBlockSpecs,
Expand Down Expand Up @@ -60,14 +59,6 @@ export async function mountDefaultDocEditor(collection: DocCollection) {
});

disposable.add(onFormatBarConnected);

slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(mode => {
editor.mode = mode;
})
);
});
},
};
}
Expand All @@ -78,19 +69,14 @@ export async function mountDefaultDocEditor(collection: DocCollection) {
spec = {
...spec,
setup: (slots, disposable) => {
slots.mounted.once(({ service }) => {
slots.mounted.once(() => {
const onFormatBarConnected = slots.widgetConnected.on(view => {
if (view.component instanceof AffineFormatBarWidget) {
configureFormatBar(view.component);
}
});

disposable.add(onFormatBarConnected);
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(mode => {
editor.mode = mode;
})
);
});
},
};
Expand Down
94 changes: 55 additions & 39 deletions packages/presets/src/editors/editor-container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { assertExists, Slot } from '@blocksuite/global/utils';
import { ShadowlessElement, WithDisposable } from '@blocksuite/lit';
import type { Doc } from '@blocksuite/store';
import { css, html } from 'lit';
import { customElement, property, query } from 'lit/decorators.js';
import { customElement, property, query, state } from 'lit/decorators.js';
import { keyed } from 'lit/directives/keyed.js';

import type { EdgelessEditor } from './edgeless-editor.js';
Expand Down Expand Up @@ -80,44 +80,56 @@ export class AffineEditorContainer
mode: 'page' | 'edgeless' = 'page';

@property({ attribute: false })
pageSpecs = [...PageEditorBlockSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
const setup = spec.setup;
spec = {
...spec,
setup: (slots, disposable) => {
setup?.(slots, disposable);
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(mode => {
this.mode = mode;
})
);
});
},
};
}
return spec;
});
pageSpecs = PageEditorBlockSpecs;

@state()
private get _pageSpecs() {
return [...this.pageSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
const setup = spec.setup;
spec = {
...spec,
setup: (slots, disposable) => {
setup?.(slots, disposable);
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(
this.switchEditor.bind(this)
)
);
});
},
};
}
return spec;
});
}

@property({ attribute: false })
edgelessSpecs = [...EdgelessEditorBlockSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
spec = {
...spec,
setup: (slots, disposable) => {
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(mode => {
this.mode = mode;
})
);
});
},
};
}
return spec;
});
edgelessSpecs = EdgelessEditorBlockSpecs;

@state()
private get _edgelessSpecs() {
return [...this.edgelessSpecs].map(spec => {
if (spec.schema.model.flavour === 'affine:page') {
const setup = spec.setup;
spec = {
...spec,
setup: (slots, disposable) => {
setup?.(slots, disposable);
slots.mounted.once(({ service }) => {
disposable.add(
(<PageRootService>service).slots.editorModeSwitch.on(
this.switchEditor.bind(this)
)
);
});
},
};
}
return spec;
});
}

@property({ attribute: false })
override autofocus = false;
Expand All @@ -144,6 +156,10 @@ export class AffineEditorContainer
return this.doc.root;
}

switchEditor(mode: typeof this.mode) {
this.mode = mode;
}

override async getUpdateComplete(): Promise<boolean> {
const result = await super.getUpdateComplete();
const editor = this.editor;
Expand Down Expand Up @@ -235,15 +251,15 @@ export class AffineEditorContainer
<page-editor
.doc=${this.doc}
.specs=${this.pageSpecs}
.specs=${this._pageSpecs}
.hasViewport=${false}
></page-editor>
</div>
`
: html`
<edgeless-editor
.doc=${this.doc}
.specs=${this.edgelessSpecs}
.specs=${this._edgelessSpecs}
></edgeless-editor>
`
)}`;
Expand Down

0 comments on commit 5545f41

Please sign in to comment.