export type CampaignJobSortColumn = | "number" | "recipient" | "subject" | "validation" | "queue" | "send" | "imap" | "attempts" | "updated"; export type CampaignJobsQueryParameters = { versionId?: string; page?: number; pageSize?: number; cursor?: string | null; sendStatus?: string[]; validationStatus?: string[]; imapStatus?: string[]; query?: string; sortBy?: CampaignJobSortColumn; sortDirection?: "asc" | "desc"; filters?: Record; since?: string | null; limit?: number; }; const FILTER_PARAMETERS: Record = { recipient: "filter_recipient", subject: "filter_subject", validation: "filter_validation", queue: "filter_queue", send: "filter_send", imap: "filter_imap", attempts: "filter_attempts", evidence: "filter_evidence" }; export function campaignJobsQueryParams(options: CampaignJobsQueryParameters = {}): URLSearchParams { const params = new URLSearchParams(); if (options.versionId) params.set("version_id", options.versionId); if (options.page) params.set("page", String(options.page)); if (options.pageSize) params.set("page_size", String(options.pageSize)); if (options.cursor) params.set("cursor", options.cursor); for (const value of options.sendStatus ?? []) params.append("send_status", value); for (const value of options.validationStatus ?? []) params.append("validation_status", value); for (const value of options.imapStatus ?? []) params.append("imap_status", value); if (options.query?.trim()) params.set("q", options.query.trim()); if (options.sortBy) params.set("sort_by", options.sortBy); if (options.sortDirection) params.set("sort_direction", options.sortDirection); for (const [columnId, value] of Object.entries(options.filters ?? {})) { const parameter = FILTER_PARAMETERS[columnId]; if (parameter && value.trim()) params.set(parameter, value); } if (options.since) params.set("since", options.since); if (options.limit) params.set("limit", String(options.limit)); return params; }