Files
pulse/lib/api/report-schedules.ts
Usman Baig 27a9836d5a feat: add time-of-day controls to scheduled reports UI
Add send hour, day of week/month selectors to report schedule modal.
Schedule cards now show descriptive delivery times like
"Every Monday at 9:00 AM (UTC)". Timezone picker moved into modal.
2026-03-12 15:17:46 +01:00

81 lines
2.2 KiB
TypeScript

import apiRequest from './client'
export interface ReportSchedule {
id: string
site_id: string
organization_id: string
channel: 'email' | 'slack' | 'discord' | 'webhook'
channel_config: EmailConfig | WebhookConfig
frequency: 'daily' | 'weekly' | 'monthly'
timezone: string
enabled: boolean
report_type: 'summary' | 'pages' | 'sources' | 'goals'
send_hour: number
send_day: number | null
next_send_at: string | null
last_sent_at: string | null
last_error: string | null
created_at: string
updated_at: string
}
export interface EmailConfig {
recipients: string[]
}
export interface WebhookConfig {
url: string
}
export interface CreateReportScheduleRequest {
channel: string
channel_config: EmailConfig | WebhookConfig
frequency: string
timezone?: string
report_type?: string
send_hour?: number
send_day?: number
}
export interface UpdateReportScheduleRequest {
channel?: string
channel_config?: EmailConfig | WebhookConfig
frequency?: string
timezone?: string
report_type?: string
enabled?: boolean
send_hour?: number
send_day?: number
}
export async function listReportSchedules(siteId: string): Promise<ReportSchedule[]> {
const res = await apiRequest<{ report_schedules: ReportSchedule[] }>(`/sites/${siteId}/report-schedules`)
return res?.report_schedules ?? []
}
export async function createReportSchedule(siteId: string, data: CreateReportScheduleRequest): Promise<ReportSchedule> {
return apiRequest<ReportSchedule>(`/sites/${siteId}/report-schedules`, {
method: 'POST',
body: JSON.stringify(data),
})
}
export async function updateReportSchedule(siteId: string, scheduleId: string, data: UpdateReportScheduleRequest): Promise<ReportSchedule> {
return apiRequest<ReportSchedule>(`/sites/${siteId}/report-schedules/${scheduleId}`, {
method: 'PUT',
body: JSON.stringify(data),
})
}
export async function deleteReportSchedule(siteId: string, scheduleId: string): Promise<void> {
await apiRequest(`/sites/${siteId}/report-schedules/${scheduleId}`, {
method: 'DELETE',
})
}
export async function testReportSchedule(siteId: string, scheduleId: string): Promise<void> {
await apiRequest(`/sites/${siteId}/report-schedules/${scheduleId}/test`, {
method: 'POST',
})
}