fix(campaign): query reports before pagination
This commit is contained in:
58
webui/src/features/campaigns/utils/jobListQuery.ts
Normal file
58
webui/src/features/campaigns/utils/jobListQuery.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
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<string, string>;
|
||||
since?: string | null;
|
||||
limit?: number;
|
||||
};
|
||||
|
||||
const FILTER_PARAMETERS: Record<string, string> = {
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user