mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* feat: Add routing trace presenters Add domain-specific presenters (SalesforceRoutingTracePresenter, RoutingFormTracePresenter) that format trace steps into human-readable strings, and a core RoutingTracePresenter that delegates to them based on step domain. Includes unit tests for all presenters. Co-Authored-By: Claude Opus 4.5 <[email protected]> * feat: Add findByBookingUid to RoutingTraceRepository Add method to look up a routing trace by booking UID, needed by the routing trace presenter tRPC endpoint. Co-Authored-By: Claude Opus 4.5 <[email protected]> * feat: Add getRoutingTrace tRPC endpoint Expose routing trace data for a booking via viewer.bookings.getRoutingTrace. Tries the permanent RoutingTrace first (round robin bookings), then falls back to PendingRoutingTrace via the booking's form response relation. Co-Authored-By: Claude Opus 4.5 <[email protected]> * feat: Add routing trace side sheet to booking list item Add a route icon button on booking list items that came from routing forms. Clicking it opens a side sheet displaying the full routing trace as human-readable steps. Adds RoutingTraceSheet component, store state, and translation key. Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: Move routing trace action to dropdown menu Move the routing trace button from a standalone icon on the booking list item into the actions dropdown menu alongside "Report wrong assignment". The RoutingTraceSheet is now rendered from BookingActionsDropdown. Co-Authored-By: Claude Opus 4.5 <[email protected]> * fix: Improve routing trace UI and handle unnamed routes - Redesign RoutingTraceSheet with vertical timeline layout, domain badges, skeleton loading state, and millisecond timestamps - Use Salesforce app-store icon for Salesforce steps - Fall back to "Unnamed route" when route name is missing or matches route ID - Fix dropdown menu icon to git-merge (valid icon, unique in menu) Co-Authored-By: Claude Opus 4.5 <[email protected]> * test: Add tests for getRoutingTrace handler and findByBookingUid repository method Co-Authored-By: [email protected] <[email protected]> * Abstract functions * Fix build error * Add permission check * fix: Update getRoutingTrace tests to include ctx and mock BookingAccessService Co-Authored-By: [email protected] <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
40 lines
1002 B
TypeScript
40 lines
1002 B
TypeScript
import z from "zod";
|
|
import type { routingStepSchema } from "../schema/zod";
|
|
|
|
export type RoutingStep = z.infer<typeof routingStepSchema>;
|
|
|
|
export type RoutingTrace = RoutingStep[];
|
|
|
|
export interface BaseRoutingTrace {
|
|
id: string;
|
|
createdAt: Date;
|
|
trace: string;
|
|
}
|
|
|
|
export interface RoutingTraceWithFormResponse extends BaseRoutingTrace {
|
|
formResponseId: string;
|
|
}
|
|
|
|
export interface RoutingTraceRecord {
|
|
id: string;
|
|
createdAt: Date;
|
|
trace: RoutingTrace;
|
|
formResponseId: number | null;
|
|
queuedFormResponseId: string | null;
|
|
bookingUid: string | null;
|
|
assignmentReasonId: number | null;
|
|
}
|
|
|
|
export interface IRoutingTraceRepositoryCreateArgs {
|
|
trace: RoutingTrace;
|
|
formResponseId?: number;
|
|
queuedFormResponseId?: string;
|
|
bookingUid: string;
|
|
assignmentReasonId?: number;
|
|
}
|
|
|
|
export interface IRoutingTraceRepository {
|
|
create(args: IRoutingTraceRepositoryCreateArgs): Promise<RoutingTraceRecord>;
|
|
findByBookingUid(bookingUid: string): Promise<RoutingTraceRecord | null>;
|
|
}
|