MCPcopy Index your code
hub / github.com/ChatLab/ChatLab / useSessionAnalysisPageBase

Function useSessionAnalysisPageBase

src/composables/useSessionAnalysisPageBase.ts:28–159  ·  view source on GitHub ↗
(options: UseSessionAnalysisPageBaseOptions)

Source from the content-addressed store, hash-verified

26}
27
28export function useSessionAnalysisPageBase(options: UseSessionAnalysisPageBaseOptions) {
29 const { route, router, currentSessionId, selectSession, defaultTab, validTabIds } = options
30
31 const isLoading = ref(true)
32 const isInitialLoad = ref(true)
33 const session = ref<AnalysisSession | null>(null)
34 const memberActivity = ref<MemberActivity[]>([])
35 const hourlyActivity = ref<HourlyActivity[]>([])
36 const dailyActivity = ref<DailyActivity[]>([])
37 const messageTypes = ref<Array<{ type: MessageType; count: number }>>([])
38
39 function resolveActiveTabFromRoute(): string {
40 const routeTab = route.query.tab as string | undefined
41 if (routeTab && validTabIds.includes(routeTab)) return routeTab
42 return defaultTab
43 }
44
45 const activeTab = ref(resolveActiveTabFromRoute())
46
47 const { timeRangeValue, fullTimeRange, availableYears, timeFilter, selectedYearForOverview, initialTimeState } =
48 useTimeSelect(route, router, {
49 activeTab,
50 isInitialLoad,
51 currentSessionId,
52 onTimeRangeChange: () => loadAnalysisData(),
53 })
54
55 function syncSession() {
56 const id = route.params.id as string
57 if (id) {
58 selectSession(id)
59 if (currentSessionId.value !== id) {
60 router.replace('/')
61 }
62 }
63 }
64
65 async function loadBaseData() {
66 if (!currentSessionId.value) return
67
68 try {
69 const sessionData = await useDataService().getSession(currentSessionId.value)
70 session.value = sessionData
71 } catch (error) {
72 console.error('加载基础数据失败:', error)
73 }
74 }
75
76 async function loadAnalysisData() {
77 if (!currentSessionId.value) return
78
79 isLoading.value = true
80
81 try {
82 const filter = timeFilter.value
83
84 const adapter = useDataService()
85 const [members, hourly, daily, types] = await Promise.all([

Callers

nothing calls this directly

Calls 6

useTimeSelectFunction · 0.90
abortAnalyticsRequestsFunction · 0.90
loadAnalysisDataFunction · 0.85
syncSessionFunction · 0.85
loadDataFunction · 0.85

Tested by

no test coverage detected