feat(funnels): update frontend types and API client for funnels v2
This commit is contained in:
@@ -1,10 +1,18 @@
|
|||||||
import apiRequest from './client'
|
import apiRequest from './client'
|
||||||
|
|
||||||
|
export interface StepPropertyFilter {
|
||||||
|
key: string
|
||||||
|
operator: 'is' | 'is_not' | 'contains' | 'not_contains'
|
||||||
|
value: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface FunnelStep {
|
export interface FunnelStep {
|
||||||
order: number
|
order: number
|
||||||
name: string
|
name: string
|
||||||
value: string
|
value: string
|
||||||
type: string // "exact", "contains", "regex"
|
type: string // "exact", "contains", "regex"
|
||||||
|
category?: 'page' | 'event'
|
||||||
|
property_filters?: StepPropertyFilter[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Funnel {
|
export interface Funnel {
|
||||||
@@ -13,15 +21,23 @@ export interface Funnel {
|
|||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
steps: FunnelStep[]
|
steps: FunnelStep[]
|
||||||
|
conversion_window_value: number
|
||||||
|
conversion_window_unit: 'hours' | 'days'
|
||||||
created_at: string
|
created_at: string
|
||||||
updated_at: string
|
updated_at: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ExitPage {
|
||||||
|
path: string
|
||||||
|
visitors: number
|
||||||
|
}
|
||||||
|
|
||||||
export interface FunnelStepStats {
|
export interface FunnelStepStats {
|
||||||
step: FunnelStep
|
step: FunnelStep
|
||||||
visitors: number
|
visitors: number
|
||||||
dropoff: number
|
dropoff: number
|
||||||
conversion: number
|
conversion: number
|
||||||
|
exit_pages: ExitPage[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FunnelStats {
|
export interface FunnelStats {
|
||||||
@@ -32,7 +48,27 @@ export interface FunnelStats {
|
|||||||
export interface CreateFunnelRequest {
|
export interface CreateFunnelRequest {
|
||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
steps: FunnelStep[]
|
steps: Omit<FunnelStep, 'order'>[]
|
||||||
|
conversion_window_value?: number
|
||||||
|
conversion_window_unit?: 'hours' | 'days'
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FunnelTrends {
|
||||||
|
dates: string[]
|
||||||
|
overall: number[]
|
||||||
|
steps: Record<string, number[]>
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FunnelBreakdownEntry {
|
||||||
|
value: string
|
||||||
|
visitors: number
|
||||||
|
conversion: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FunnelBreakdown {
|
||||||
|
step: number
|
||||||
|
dimension: string
|
||||||
|
entries: FunnelBreakdownEntry[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function listFunnels(siteId: string): Promise<Funnel[]> {
|
export async function listFunnels(siteId: string): Promise<Funnel[]> {
|
||||||
@@ -64,10 +100,41 @@ export async function deleteFunnel(siteId: string, funnelId: string): Promise<vo
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getFunnelStats(siteId: string, funnelId: string, startDate?: string, endDate?: string): Promise<FunnelStats> {
|
export async function getFunnelStats(siteId: string, funnelId: string, startDate?: string, endDate?: string, filters?: string): Promise<FunnelStats> {
|
||||||
const params = new URLSearchParams()
|
const params = new URLSearchParams()
|
||||||
if (startDate) params.append('start_date', startDate)
|
if (startDate) params.append('start_date', startDate)
|
||||||
if (endDate) params.append('end_date', endDate)
|
if (endDate) params.append('end_date', endDate)
|
||||||
|
if (filters) params.append('filters', filters)
|
||||||
const queryString = params.toString() ? `?${params.toString()}` : ''
|
const queryString = params.toString() ? `?${params.toString()}` : ''
|
||||||
return apiRequest<FunnelStats>(`/sites/${siteId}/funnels/${funnelId}/stats${queryString}`)
|
return apiRequest<FunnelStats>(`/sites/${siteId}/funnels/${funnelId}/stats${queryString}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getFunnelTrends(
|
||||||
|
siteId: string, funnelId: string,
|
||||||
|
startDate?: string, endDate?: string,
|
||||||
|
interval: string = 'day', filters?: string
|
||||||
|
): Promise<FunnelTrends> {
|
||||||
|
const params = new URLSearchParams()
|
||||||
|
if (startDate) params.append('start_date', startDate)
|
||||||
|
if (endDate) params.append('end_date', endDate)
|
||||||
|
params.append('interval', interval)
|
||||||
|
if (filters) params.append('filters', filters)
|
||||||
|
const queryString = params.toString() ? `?${params.toString()}` : ''
|
||||||
|
return apiRequest<FunnelTrends>(`/sites/${siteId}/funnels/${funnelId}/trends${queryString}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getFunnelBreakdown(
|
||||||
|
siteId: string, funnelId: string,
|
||||||
|
step: number, dimension: string,
|
||||||
|
startDate?: string, endDate?: string,
|
||||||
|
filters?: string
|
||||||
|
): Promise<FunnelBreakdown> {
|
||||||
|
const params = new URLSearchParams()
|
||||||
|
params.append('step', step.toString())
|
||||||
|
params.append('dimension', dimension)
|
||||||
|
if (startDate) params.append('start_date', startDate)
|
||||||
|
if (endDate) params.append('end_date', endDate)
|
||||||
|
if (filters) params.append('filters', filters)
|
||||||
|
const queryString = params.toString() ? `?${params.toString()}` : ''
|
||||||
|
return apiRequest<FunnelBreakdown>(`/sites/${siteId}/funnels/${funnelId}/breakdown${queryString}`)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user