Skip to content

Commit

Permalink
feat: 事件动作支持上报埋点
Browse files Browse the repository at this point in the history
  • Loading branch information
qkiroc committed Dec 21, 2023
1 parent 55009c0 commit f4d67f3
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 3 deletions.
3 changes: 2 additions & 1 deletion packages/amis-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,8 @@ export interface EventTrack {
| 'tabChange'
| 'pageLoaded'
| 'pageHidden'
| 'pageVisible';
| 'pageVisible'
| string;

/**
* 事件数据
Expand Down
21 changes: 21 additions & 0 deletions packages/amis-core/src/utils/renderer-event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ export interface debounceConfig {
leading?: boolean;
trailing?: boolean;
}

export interface trackConfig {
id: string;
name: string;
}
// 事件监听器
export interface EventListeners {
[propName: string]: {
debounce?: debounceConfig;
track?: trackConfig;
weight?: number; // 权重
actions: ListenerAction[]; // 执行的动作集
};
Expand All @@ -26,6 +32,7 @@ export interface OnEventProps {
weight?: number; // 权重
actions: ListenerAction[]; // 执行的动作集,
debounce?: debounceConfig;
track?: trackConfig;
};
};
}
Expand All @@ -36,6 +43,7 @@ export interface RendererEventListener {
type: string;
weight: number;
debounce: debounceConfig | null;
track: trackConfig | null;
actions: ListenerAction[];
executing?: boolean;
debounceInstance?: any;
Expand Down Expand Up @@ -118,6 +126,7 @@ export const bindEvent = (renderer: any) => {
renderer,
type: key,
debounce: listener.debounce || null,
track: listeners[key].track || null,
weight: listener.weight || 0,
actions: listener.actions
});
Expand All @@ -127,6 +136,7 @@ export const bindEvent = (renderer: any) => {
renderer,
type: key,
debounce: listeners[key].debounce || null,
track: listeners[key].track || null,
weight: listeners[key].weight || 0,
actions: listeners[key].actions
});
Expand Down Expand Up @@ -245,6 +255,17 @@ export async function dispatchEvent(
checkExecuted();
}

if (listener?.track) {
const {id: trackId, name: trackName} = listener.track;
renderer?.props?.env?.tracker({
eventType: listener.type,
eventData: {
trackId,
trackName
}
});
}

// 停止后续监听器执行
if (rendererEvent.stoped) {
break;
Expand Down
54 changes: 52 additions & 2 deletions packages/amis-editor/src/renderer/event-control/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ interface EventDialogData {
open: boolean;
wait?: number;
};
trackConfig?: {
open: boolean;
id: string;
name: string;
};
[propName: string]: any;
}

Expand Down Expand Up @@ -219,6 +224,18 @@ export class EventControl extends React.Component<
...eventInfo.debounce
};
}
if (!eventInfo.track) {
// 防抖配置的默认值
eventInfo.track = {
open: false,
wait: 100
};
} else {
eventInfo.track = {
open: true,
...eventInfo.track
};
}
this.setState({
eventDialogData: eventInfo,
showEventDialog: true
Expand All @@ -227,11 +244,11 @@ export class EventControl extends React.Component<

eventDialogSubmit(formData: any) {
const {onChange} = this.props;
const {eventName, debounce = {}} = formData;
const {eventName, debounce = {}, track = {}} = formData;
let onEvent = {
...this.state.onEvent
};
let eventConfig = onEvent[`${eventName}`];
let eventConfig = {...onEvent[`${eventName}`]};
if (!debounce.open) {
delete eventConfig.debounce;
} else {
Expand All @@ -242,6 +259,18 @@ export class EventControl extends React.Component<
}
};
}
if (!track.open) {
delete eventConfig.track;
} else {
eventConfig = {
...eventConfig,
track: {
id: track.id,
name: track.name
}
};
}

onEvent[`${eventName}`] = {
...eventConfig
};
Expand Down Expand Up @@ -1141,6 +1170,27 @@ export class EventControl extends React.Component<
max: 10000,
min: 0,
type: 'input-number'
},
{
label: '事件埋点',
type: 'switch',
name: 'track.open',
description:
'开启事件埋点后,每次事件触发都会发送埋点数据到后台'
},
{
label: 'track-id',
required: true,
hiddenOn: '!track.open',
name: 'track.id',
type: 'input-text'
},
{
label: 'track-name',
required: true,
hiddenOn: '!track.open',
name: 'track.name',
type: 'input-text'
}
],
onSubmit: this.eventDialogSubmit.bind(this)
Expand Down
4 changes: 4 additions & 0 deletions packages/amis-editor/src/renderer/event-control/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ export interface ActionEventConfig {
debounce?: {
wait: number;
};
track?: {
id: string;
name: string;
};
};
}

Expand Down

0 comments on commit f4d67f3

Please sign in to comment.