fix(editor): ref on click slots should not be global (#9830)

fix AF-2129
This commit is contained in:
pengx17
2025-01-22 05:20:55 +00:00
parent 720a596559
commit 4c665594d6
15 changed files with 47 additions and 20 deletions
@@ -84,14 +84,15 @@ export class FootNotePopup extends WithDisposable(LitElement) {
const referenceType = this.footnote.reference.type;
const { docId, url } = this.footnote.reference;
switch (referenceType) {
case 'doc':
case 'doc': {
if (!docId) {
break;
}
this.std
.getOptional(RefNodeSlotsProvider)
?.docLinkClicked.emit({ pageId: docId });
?.docLinkClicked.emit({ pageId: docId, host: this.std.host });
break;
}
case 'url':
if (!url) {
break;
@@ -56,11 +56,14 @@ export class AffineLink extends ShadowlessElement {
if (!referenceInfo) return;
const refNodeSlotsProvider = this.std?.getOptional(RefNodeSlotsProvider);
if (!refNodeSlotsProvider) return;
if (!refNodeSlotsProvider || !this.std) return;
e?.preventDefault();
refNodeSlotsProvider.docLinkClicked.emit(referenceInfo);
refNodeSlotsProvider.docLinkClicked.emit({
...referenceInfo,
host: this.std.host,
});
};
private readonly _whenHover = new HoverController(
@@ -200,9 +200,10 @@ export class AffineReference extends WithDisposable(ShadowlessElement) {
private _onClick() {
if (!this.config.interactable) return;
this.std
.getOptional(RefNodeSlotsProvider)
?.docLinkClicked.emit(this.referenceInfo);
this.std.getOptional(RefNodeSlotsProvider)?.docLinkClicked.emit({
...this.referenceInfo,
host: this.std.host,
});
}
override connectedCallback() {
@@ -71,6 +71,7 @@ export class ReferencePopup extends WithDisposable(LitElement) {
this.std.getOptional(RefNodeSlotsProvider)?.docLinkClicked.emit({
...this.referenceInfo,
...event,
host: this.std.host,
});
};
@@ -1,11 +1,13 @@
import type { ReferenceInfo } from '@blocksuite/affine-model';
import type { OpenDocMode } from '@blocksuite/affine-shared/services';
import type { EditorHost } from '@blocksuite/block-std';
import type { Slot } from '@blocksuite/global/utils';
export type DocLinkClickedEvent = ReferenceInfo & {
// default is active view
openMode?: OpenDocMode;
event?: MouseEvent;
host: EditorHost;
};
export type RefNodeSlots = {