chore: 导入清理前的完整工程状态(含 Capacitor 原生壳,作为回滚备份点)
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import type { ComputedRef } from 'vue'
|
||||
import { watch } from 'vue'
|
||||
import { trackCookEvent } from '~/utils/analytics'
|
||||
|
||||
export interface CookFunnelState {
|
||||
active: boolean
|
||||
hasIngredients: boolean
|
||||
results: 'hidden' | 'loading' | 'ready' | 'empty'
|
||||
}
|
||||
|
||||
/** Observe rendered states, so every ingredient entry path shares the same funnel. */
|
||||
export function useCookFunnel(state: ComputedRef<CookFunnelState>) {
|
||||
watch(state, (next, previous) => {
|
||||
if (!next.active)
|
||||
return
|
||||
const entering = !previous?.active
|
||||
if (entering)
|
||||
trackCookEvent('view_cook')
|
||||
if (next.hasIngredients && (entering || !previous?.hasIngredients))
|
||||
trackCookEvent('select_ingredients')
|
||||
if (entering || next.results !== previous?.results) {
|
||||
if (next.results === 'ready')
|
||||
trackCookEvent('view_results')
|
||||
else if (next.results === 'empty')
|
||||
trackCookEvent('results_empty')
|
||||
}
|
||||
}, { immediate: true, flush: 'post' })
|
||||
}
|
||||
Reference in New Issue
Block a user