import { ReportItem, ReportItemType } from '@tencent/merlin-core'; import { BehaviorType } from './common'; export interface BehaviorReportItem< D extends { behaviorType: BehaviorType; }, > extends ReportItem { type: ReportItemType.BEHAVIOR; } export interface CustomReportItemData { behaviorType: BehaviorType.CUSTOM; key?: string; customType: string; extInfo?: Record; } export type CustomReportItem = BehaviorReportItem; export interface ElementHoverReportItemData { behaviorType: BehaviorType.ELEMENT_HOVER; key: string; allTime: number; extInfo?: Record; } export type ElementHoverReportItem = BehaviorReportItem; export interface ElementClickReportItemData { behaviorType: BehaviorType.ELEMENT_CLICK; key: string; extInfo?: Record; } export type ElementClickReportItem = BehaviorReportItem; export interface ElementExposeReportItemData { behaviorType: BehaviorType.ELEMENT_EXPOSE; key: string; /** 一次曝光的标记 */ exposeId: string; extInfo?: Record; } /** 曝光上报项 */ export type ElementExposeReportItem = BehaviorReportItem; export interface ElementConcealReportItemData { behaviorType: BehaviorType.ELEMENT_CONCEAL; key: string; /** 一次曝光的标记 */ exposeId: string; /** 曝光时长 */ allTime: number; extInfo?: Record; } /** 结束曝光上报项 */ export type ElementConcealReportItem = BehaviorReportItem; export interface PageEnterReportItemData { behaviorType: BehaviorType.PAGE_ENTER; /** 没用,留在这里减少外部调用时 type guard 的编写 */ key?: string; extInfo?: Record; } export type PageEnterReportItem = BehaviorReportItem; export interface PageLeaveReportItemData { behaviorType: BehaviorType.PAGE_LEAVE; /** 没用,留在这里减少外部调用时 type guard 的编写 */ key?: string; stayTime: number; extInfo?: Record; } export type PageLeaveReportItem = BehaviorReportItem; export interface VideoPlayStartReportItemData { behaviorType: BehaviorType.VIDEO_PLAY_START; key: string; /** 一次播放的标记 */ playId: string; /** 本次播放过程中第几次触发 */ playCount: number; /** 现在的播放进度 */ currentTime: number; extInfo?: Record; } export type VideoPlayStartReportItem = BehaviorReportItem; export interface VideoPlayWaitingReportItemData { behaviorType: BehaviorType.VIDEO_PLAY_WAITING; key: string; playId: string; /** 现在的播放进度 */ currentTime: number; extInfo?: Record; } export type VideoPlayWaitingReportItem = BehaviorReportItem; export interface VideoPlayPauseReportItemData { behaviorType: BehaviorType.VIDEO_PLAY_PAUSE; key: string; playId: string; currentTime: number; extInfo?: Record; } export type VideoPlayPauseReportItem = BehaviorReportItem; export interface VideoPlaySeekReportItemData { behaviorType: BehaviorType.VIDEO_PLAY_SEEK; key: string; /** 一次播放的标记 */ playId: string; /** 现在的播放进度 */ currentTime: number; position: number; extInfo?: Record; } export type VideoPlaySeekReportItem = BehaviorReportItem; export interface VideoPlayFinishReportItemData { behaviorType: BehaviorType.VIDEO_PLAY_FINISH; key: string; playId: string; /** 总时长, 一共播放的时间 */ allTime: number; /** 最大时长 播放的最远进度 */ maxTime: number; currentTime: number; extInfo?: Record; } export type VideoPlayFinishReportItem = BehaviorReportItem; export type BehaviorReportItemData = | CustomReportItemData | ElementHoverReportItemData | ElementClickReportItemData | ElementExposeReportItemData | ElementConcealReportItemData | PageEnterReportItemData | PageLeaveReportItemData | VideoPlayStartReportItemData | VideoPlayWaitingReportItemData | VideoPlayPauseReportItemData | VideoPlaySeekReportItemData | VideoPlayFinishReportItemData;