chore: sync GovOPlaN module split state
This commit is contained in:
53
webui/src/features/campaigns/utils/jobDeltas.ts
Normal file
53
webui/src/features/campaigns/utils/jobDeltas.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { mergeDeltaRows } from "@govoplan/core-webui";
|
||||
import type { CampaignJobsDeltaResponse, CampaignJobsResponse } from "../../../api/campaigns";
|
||||
|
||||
export function emptyCampaignJobsResponse(): CampaignJobsResponse {
|
||||
return {
|
||||
jobs: [],
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
total: 0,
|
||||
total_unfiltered: 0,
|
||||
pages: 0,
|
||||
cursor: null,
|
||||
next_cursor: null,
|
||||
counts: {},
|
||||
filtered_counts: {},
|
||||
review: {}
|
||||
};
|
||||
}
|
||||
|
||||
export function mergeCampaignJobsDelta(current: CampaignJobsResponse, response: CampaignJobsDeltaResponse): CampaignJobsResponse {
|
||||
if (response.full) return campaignJobsResponseFromDelta(response);
|
||||
return {
|
||||
...campaignJobsResponseFromDelta(response),
|
||||
jobs: mergeDeltaRows(current.jobs, response.jobs, response.deleted, (row) => String(row.id ?? ""), {
|
||||
deletedResourceType: "campaign_job",
|
||||
sort: sortJobsByEntry
|
||||
}),
|
||||
cursor: response.cursor ?? current.cursor,
|
||||
next_cursor: response.next_cursor ?? current.next_cursor
|
||||
};
|
||||
}
|
||||
|
||||
export function campaignJobsResponseFromDelta(response: CampaignJobsDeltaResponse): CampaignJobsResponse {
|
||||
return {
|
||||
jobs: response.jobs,
|
||||
page: response.page,
|
||||
page_size: response.page_size,
|
||||
total: response.total,
|
||||
total_unfiltered: response.total_unfiltered,
|
||||
pages: response.pages,
|
||||
cursor: response.cursor,
|
||||
next_cursor: response.next_cursor,
|
||||
counts: response.counts,
|
||||
filtered_counts: response.filtered_counts,
|
||||
review: response.review
|
||||
};
|
||||
}
|
||||
|
||||
function sortJobsByEntry(left: Record<string, unknown>, right: Record<string, unknown>): number {
|
||||
const indexDelta = Number(left.entry_index ?? 0) - Number(right.entry_index ?? 0);
|
||||
if (indexDelta !== 0) return indexDelta;
|
||||
return String(left.id ?? "").localeCompare(String(right.id ?? ""));
|
||||
}
|
||||
Reference in New Issue
Block a user