fix(editor): update embed iframe block event tracker (#11736)

Close [BS-3151](https://linear.app/affine-design/issue/BS-3151/埋一下-reload-link-成功失败)
This commit is contained in:
donteatfriedrice
2025-04-16 09:53:38 +00:00
parent 16f7be7f0b
commit 022e5f2c93
8 changed files with 31 additions and 16 deletions
@@ -209,9 +209,9 @@ export class EmbedIframeErrorCard extends WithDisposable(LitElement) {
});
};
private readonly _handleRetry = (e: MouseEvent) => {
private readonly _handleRetry = async (e: MouseEvent) => {
e.stopPropagation();
this.onRetry();
const success = await this.onRetry();
// track retry event
this.telemetryService?.track('ReloadLink', {
@@ -220,6 +220,7 @@ export class EmbedIframeErrorCard extends WithDisposable(LitElement) {
segment: 'editor',
module: 'embed block',
control: 'reload button',
result: success ? 'success' : 'failure',
});
};
@@ -301,7 +302,7 @@ export class EmbedIframeErrorCard extends WithDisposable(LitElement) {
accessor error: Error | null = null;
@property({ attribute: false })
accessor onRetry!: () => void;
accessor onRetry!: () => Promise<boolean>;
@property({ attribute: false })
accessor model!: EmbedIframeBlockModel;
@@ -78,7 +78,7 @@ export class EmbedIframeLinkEditPopup extends SignalWatcher(
segment: 'editor',
module: 'embed block',
control: 'edit button',
other: status,
result: status,
});
}
@@ -228,7 +228,7 @@ export class EmbedIframeLinkInputPopup extends EmbedIframeLinkInputBase {
segment: this.options?.telemetrySegment ?? 'editor',
module: 'embed block',
control: 'confirm embed link',
other: status,
result: status,
});
}
@@ -299,12 +299,19 @@ export const builtinToolbarConfig = {
icon: ResetIcon(),
run(ctx) {
const component = ctx.getCurrentBlockByType(EmbedIframeBlockComponent);
component?.refreshData().catch(console.error);
ctx.track('ReloadLink', {
...trackBaseProps,
control: 'reload link',
});
component
?.refreshData()
.then(success => {
ctx.track('ReloadLink', {
type: 'embed iframe block',
page: 'doc editor',
segment: 'doc',
module: 'toolbar',
control: 'reload link',
result: success ? 'success' : 'failure',
});
})
.catch(console.error);
},
},
{
@@ -143,7 +143,7 @@ export class EmbedIframeBlockComponent extends CaptionedBlockComponent<EmbedIfra
const { url } = this.model.props;
if (!url) {
this.status$.value = 'idle';
return;
return false;
}
// set loading status
@@ -188,11 +188,13 @@ export class EmbedIframeBlockComponent extends CaptionedBlockComponent<EmbedIfra
// set success status
this.status$.value = 'success';
return true;
} catch (err) {
// set error status
this.status$.value = 'error';
this.error$.value = err instanceof Error ? err : new Error(String(err));
console.error('Failed to refresh iframe data:', err);
return false;
}
};
@@ -284,7 +286,7 @@ export class EmbedIframeBlockComponent extends CaptionedBlockComponent<EmbedIfra
};
private readonly _handleRetry = async () => {
await this.refreshData();
return await this.refreshData();
};
private readonly _renderIframe = () => {
@@ -1,4 +1,4 @@
import type { TelemetryEvent } from './types.js';
import type { LinkEvent } from './types.js';
export type LinkEventType =
| 'CopiedLink'
@@ -16,4 +16,4 @@ export type LinkEventType =
| 'EditLink'
| 'ReloadLink';
export type LinkToolbarEvents = Record<LinkEventType, TelemetryEvent>;
export type LinkToolbarEvents = Record<LinkEventType, LinkEvent>;
@@ -13,6 +13,7 @@ import type {
ElementLockEvent,
ElementUpdatedEvent,
LinkedDocCreatedEvent,
LinkEvent,
MindMapCollapseEvent,
TelemetryEvent,
} from './types.js';
@@ -32,7 +33,7 @@ export type TelemetryEventMap = OutDatabaseAllEvents &
AttachmentUploadedEvent: AttachmentUploadedEvent;
BlockCreated: BlockCreationEvent;
EdgelessToolPicked: EdgelessToolPickedEvent;
CreateEmbedBlock: TelemetryEvent;
CreateEmbedBlock: LinkEvent;
};
export interface TelemetryService {
@@ -86,3 +86,7 @@ export interface ElementUpdatedEvent extends TelemetryEvent {
control: string;
type?: string;
}
export interface LinkEvent extends TelemetryEvent {
result?: 'success' | 'failure';
}