feat: agenda polish, SLA sync, filters
This commit is contained in:
parent
7fb6c65d9a
commit
6ab8a6ce89
40 changed files with 2771 additions and 154 deletions
|
|
@ -89,6 +89,27 @@ const serverTicketSchema = z.object({
|
|||
.nullable(),
|
||||
machine: serverMachineSummarySchema.optional().nullable(),
|
||||
slaPolicy: z.any().nullable().optional(),
|
||||
slaSnapshot: z
|
||||
.object({
|
||||
categoryId: z.any().optional(),
|
||||
categoryName: z.string().optional(),
|
||||
priority: z.string().optional(),
|
||||
responseTargetMinutes: z.number().optional().nullable(),
|
||||
responseMode: z.string().optional(),
|
||||
solutionTargetMinutes: z.number().optional().nullable(),
|
||||
solutionMode: z.string().optional(),
|
||||
alertThreshold: z.number().optional(),
|
||||
pauseStatuses: z.array(z.string()).optional(),
|
||||
})
|
||||
.nullable()
|
||||
.optional(),
|
||||
slaResponseDueAt: z.number().nullable().optional(),
|
||||
slaSolutionDueAt: z.number().nullable().optional(),
|
||||
slaResponseStatus: z.string().nullable().optional(),
|
||||
slaSolutionStatus: z.string().nullable().optional(),
|
||||
slaPausedAt: z.number().nullable().optional(),
|
||||
slaPausedBy: z.string().nullable().optional(),
|
||||
slaPausedMs: z.number().nullable().optional(),
|
||||
dueAt: z.number().nullable().optional(),
|
||||
firstResponseAt: z.number().nullable().optional(),
|
||||
resolvedAt: z.number().nullable().optional(),
|
||||
|
|
@ -200,6 +221,19 @@ export function mapTicketFromServer(input: unknown) {
|
|||
...base
|
||||
} = serverTicketSchema.parse(input);
|
||||
const s = { csatScore, csatMaxScore, csatComment, csatRatedAt, csatRatedBy, ...base };
|
||||
const slaSnapshot = s.slaSnapshot
|
||||
? {
|
||||
categoryId: s.slaSnapshot.categoryId ? String(s.slaSnapshot.categoryId) : undefined,
|
||||
categoryName: s.slaSnapshot.categoryName ?? undefined,
|
||||
priority: s.slaSnapshot.priority ?? "",
|
||||
responseTargetMinutes: s.slaSnapshot.responseTargetMinutes ?? null,
|
||||
responseMode: (s.slaSnapshot.responseMode ?? "calendar") as "business" | "calendar",
|
||||
solutionTargetMinutes: s.slaSnapshot.solutionTargetMinutes ?? null,
|
||||
solutionMode: (s.slaSnapshot.solutionMode ?? "calendar") as "business" | "calendar",
|
||||
alertThreshold: typeof s.slaSnapshot.alertThreshold === "number" ? s.slaSnapshot.alertThreshold : null,
|
||||
pauseStatuses: s.slaSnapshot.pauseStatuses ?? [],
|
||||
}
|
||||
: null;
|
||||
const ui = {
|
||||
...base,
|
||||
status: normalizeTicketStatus(s.status),
|
||||
|
|
@ -230,6 +264,14 @@ export function mapTicketFromServer(input: unknown) {
|
|||
csatRatedAt: csatRatedAt ? new Date(csatRatedAt) : null,
|
||||
csatRatedBy: csatRatedBy ?? null,
|
||||
formTemplateLabel: base.formTemplateLabel ?? null,
|
||||
slaSnapshot,
|
||||
slaResponseDueAt: s.slaResponseDueAt ? new Date(s.slaResponseDueAt) : null,
|
||||
slaSolutionDueAt: s.slaSolutionDueAt ? new Date(s.slaSolutionDueAt) : null,
|
||||
slaResponseStatus: typeof s.slaResponseStatus === "string" ? (s.slaResponseStatus as string) : null,
|
||||
slaSolutionStatus: typeof s.slaSolutionStatus === "string" ? (s.slaSolutionStatus as string) : null,
|
||||
slaPausedAt: s.slaPausedAt ? new Date(s.slaPausedAt) : null,
|
||||
slaPausedBy: s.slaPausedBy ?? null,
|
||||
slaPausedMs: typeof s.slaPausedMs === "number" ? s.slaPausedMs : null,
|
||||
workSummary: s.workSummary
|
||||
? {
|
||||
totalWorkedMs: s.workSummary.totalWorkedMs,
|
||||
|
|
@ -271,6 +313,19 @@ export function mapTicketWithDetailsFromServer(input: unknown) {
|
|||
...base
|
||||
} = serverTicketWithDetailsSchema.parse(input);
|
||||
const s = { csatScore, csatMaxScore, csatComment, csatRatedAt, csatRatedBy, ...base };
|
||||
const slaSnapshot = s.slaSnapshot
|
||||
? {
|
||||
categoryId: s.slaSnapshot.categoryId ? String(s.slaSnapshot.categoryId) : undefined,
|
||||
categoryName: s.slaSnapshot.categoryName ?? undefined,
|
||||
priority: s.slaSnapshot.priority ?? "",
|
||||
responseTargetMinutes: s.slaSnapshot.responseTargetMinutes ?? null,
|
||||
responseMode: (s.slaSnapshot.responseMode ?? "calendar") as "business" | "calendar",
|
||||
solutionTargetMinutes: s.slaSnapshot.solutionTargetMinutes ?? null,
|
||||
solutionMode: (s.slaSnapshot.solutionMode ?? "calendar") as "business" | "calendar",
|
||||
alertThreshold: typeof s.slaSnapshot.alertThreshold === "number" ? s.slaSnapshot.alertThreshold : null,
|
||||
pauseStatuses: s.slaSnapshot.pauseStatuses ?? [],
|
||||
}
|
||||
: null;
|
||||
const customFields = Object.entries(s.customFields ?? {}).reduce<
|
||||
Record<string, { label: string; type: string; value?: unknown; displayValue?: string }>
|
||||
>(
|
||||
|
|
@ -317,6 +372,14 @@ export function mapTicketWithDetailsFromServer(input: unknown) {
|
|||
status: base.machine.status ?? null,
|
||||
}
|
||||
: null,
|
||||
slaSnapshot,
|
||||
slaResponseDueAt: base.slaResponseDueAt ? new Date(base.slaResponseDueAt) : null,
|
||||
slaSolutionDueAt: base.slaSolutionDueAt ? new Date(base.slaSolutionDueAt) : null,
|
||||
slaResponseStatus: typeof base.slaResponseStatus === "string" ? (base.slaResponseStatus as string) : null,
|
||||
slaSolutionStatus: typeof base.slaSolutionStatus === "string" ? (base.slaSolutionStatus as string) : null,
|
||||
slaPausedAt: base.slaPausedAt ? new Date(base.slaPausedAt) : null,
|
||||
slaPausedBy: base.slaPausedBy ?? null,
|
||||
slaPausedMs: typeof base.slaPausedMs === "number" ? base.slaPausedMs : null,
|
||||
timeline: base.timeline.map((e) => ({ ...e, createdAt: new Date(e.createdAt) })),
|
||||
comments: base.comments.map((c) => ({
|
||||
...c,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue