feat: Company - 5个事件(页面浏览、股票搜索、Tab 切换、自选股管理)
This commit is contained in:
103
src/views/Company/hooks/useCompanyEvents.js
Normal file
103
src/views/Company/hooks/useCompanyEvents.js
Normal file
@@ -0,0 +1,103 @@
|
||||
// src/views/Company/hooks/useCompanyEvents.js
|
||||
// 公司详情页面事件追踪 Hook
|
||||
|
||||
import { useCallback, useEffect } from 'react';
|
||||
import { usePostHogTrack } from '../../../hooks/usePostHogRedux';
|
||||
import { RETENTION_EVENTS } from '../../../lib/constants';
|
||||
import { logger } from '../../../utils/logger';
|
||||
|
||||
/**
|
||||
* 公司详情页面事件追踪 Hook
|
||||
* @param {Object} options - 配置选项
|
||||
* @param {string} options.stockCode - 当前股票代码
|
||||
* @returns {Object} 事件追踪处理函数集合
|
||||
*/
|
||||
export const useCompanyEvents = ({ stockCode } = {}) => {
|
||||
const { track } = usePostHogTrack();
|
||||
|
||||
// 🎯 页面浏览事件 - 页面加载时触发
|
||||
useEffect(() => {
|
||||
track(RETENTION_EVENTS.COMPANY_PAGE_VIEWED, {
|
||||
timestamp: new Date().toISOString(),
|
||||
stock_code: stockCode || null,
|
||||
});
|
||||
logger.debug('useCompanyEvents', '📊 Company Page Viewed', { stockCode });
|
||||
}, [track, stockCode]);
|
||||
|
||||
/**
|
||||
* 追踪股票搜索/切换
|
||||
* @param {string} newStockCode - 新的股票代码
|
||||
* @param {string} previousStockCode - 之前的股票代码
|
||||
*/
|
||||
const trackStockSearched = useCallback((newStockCode, previousStockCode = null) => {
|
||||
if (!newStockCode) return;
|
||||
|
||||
track(RETENTION_EVENTS.STOCK_SEARCHED, {
|
||||
query: newStockCode,
|
||||
stock_code: newStockCode,
|
||||
previous_stock_code: previousStockCode,
|
||||
context: 'company_page',
|
||||
});
|
||||
|
||||
logger.debug('useCompanyEvents', '🔍 Stock Searched', {
|
||||
newStockCode,
|
||||
previousStockCode,
|
||||
});
|
||||
}, [track]);
|
||||
|
||||
/**
|
||||
* 追踪 Tab 切换
|
||||
* @param {number} tabIndex - Tab 索引 (0: 公司概览, 1: 股票行情, 2: 财务全景, 3: 盈利预测)
|
||||
* @param {string} tabName - Tab 名称
|
||||
* @param {number} previousTabIndex - 之前的 Tab 索引
|
||||
*/
|
||||
const trackTabChanged = useCallback((tabIndex, tabName, previousTabIndex = null) => {
|
||||
track(RETENTION_EVENTS.TAB_CHANGED, {
|
||||
tab_index: tabIndex,
|
||||
tab_name: tabName,
|
||||
previous_tab_index: previousTabIndex,
|
||||
stock_code: stockCode,
|
||||
context: 'company_page',
|
||||
});
|
||||
|
||||
logger.debug('useCompanyEvents', '🔄 Tab Changed', {
|
||||
tabIndex,
|
||||
tabName,
|
||||
previousTabIndex,
|
||||
stockCode,
|
||||
});
|
||||
}, [track, stockCode]);
|
||||
|
||||
/**
|
||||
* 追踪加入自选股
|
||||
* @param {string} stock_code - 股票代码
|
||||
*/
|
||||
const trackWatchlistAdded = useCallback((stock_code) => {
|
||||
track(RETENTION_EVENTS.WATCHLIST_ADDED, {
|
||||
stock_code,
|
||||
source: 'company_page',
|
||||
});
|
||||
|
||||
logger.debug('useCompanyEvents', '⭐ Watchlist Added', { stock_code });
|
||||
}, [track]);
|
||||
|
||||
/**
|
||||
* 追踪移除自选股
|
||||
* @param {string} stock_code - 股票代码
|
||||
*/
|
||||
const trackWatchlistRemoved = useCallback((stock_code) => {
|
||||
track(RETENTION_EVENTS.WATCHLIST_REMOVED, {
|
||||
stock_code,
|
||||
source: 'company_page',
|
||||
});
|
||||
|
||||
logger.debug('useCompanyEvents', '❌ Watchlist Removed', { stock_code });
|
||||
}, [track]);
|
||||
|
||||
return {
|
||||
trackStockSearched,
|
||||
trackTabChanged,
|
||||
trackWatchlistAdded,
|
||||
trackWatchlistRemoved,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user