mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-02 22:43:23 +00:00
87 lines
3.5 KiB
TypeScript
87 lines
3.5 KiB
TypeScript
import type { UpliftQueueItem, UpliftRequest } from "@/domain/uplifts/types/uplift";
|
|
|
|
function asRecord(raw: unknown): Record<string, unknown> {
|
|
return typeof raw === "object" && raw !== null ? (raw as Record<string, unknown>) : {};
|
|
}
|
|
|
|
function readString(record: Record<string, unknown>, ...keys: string[]): string {
|
|
for (const key of keys) {
|
|
const value = record[key];
|
|
if (typeof value === "string") return value;
|
|
if (typeof value === "number") return String(value);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
function readNumber(record: Record<string, unknown>, ...keys: string[]): number | null {
|
|
for (const key of keys) {
|
|
const value = record[key];
|
|
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) {
|
|
return Number(value);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function readBool(record: Record<string, unknown>, ...keys: string[]): boolean {
|
|
return keys.some((key) => record[key] === true);
|
|
}
|
|
|
|
function readOptionalId(
|
|
record: Record<string, unknown>,
|
|
...keys: string[]
|
|
): string | number | null {
|
|
for (const key of keys) {
|
|
const value = record[key];
|
|
if (typeof value === "string" || typeof value === "number") return value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export function mapUpliftRequest(raw: unknown): UpliftRequest {
|
|
const item = asRecord(raw);
|
|
return {
|
|
id: readOptionalId(item, "id", "Id") ?? "",
|
|
status: readString(item, "status", "Status"),
|
|
currentNTE: readNumber(item, "currentNTE", "CurrentNTE"),
|
|
requestedNTE: readNumber(item, "requestedNTE", "RequestedNTE") ?? 0,
|
|
delta: readNumber(item, "delta", "Delta") ?? 0,
|
|
vendorReason: readString(item, "vendorReason", "VendorReason"),
|
|
requestedAt: readString(item, "requestedAt", "RequestedAt"),
|
|
requestedByVendorName: readString(item, "requestedByVendorName", "RequestedByVendorName"),
|
|
decidedAt: readString(item, "decidedAt", "DecidedAt"),
|
|
decidedByName: readString(item, "decidedByName", "DecidedByName"),
|
|
decisionNote: readString(item, "decisionNote", "DecisionNote"),
|
|
requiredTier: readNumber(item, "requiredTier", "RequiredTier") ?? 1,
|
|
canDecide: readBool(item, "canDecide", "CanDecide"),
|
|
expiresAt: readString(item, "expiresAt", "ExpiresAt"),
|
|
notificationStatus: readString(item, "notificationStatus", "NotificationStatus"),
|
|
notificationError: readString(item, "notificationError", "NotificationError"),
|
|
evidenceDocumentId: readOptionalId(item, "evidenceDocumentId", "EvidenceDocumentId"),
|
|
evidenceFileName: readString(item, "evidenceFileName", "EvidenceFileName"),
|
|
evidenceContentType: readString(item, "evidenceContentType", "EvidenceContentType"),
|
|
evidenceSizeBytes: readNumber(item, "evidenceSizeBytes", "EvidenceSizeBytes"),
|
|
};
|
|
}
|
|
|
|
export function mapUpliftRequests(rawItems: unknown[]): UpliftRequest[] {
|
|
return rawItems.map(mapUpliftRequest);
|
|
}
|
|
|
|
export function mapUpliftQueueItem(raw: unknown): UpliftQueueItem {
|
|
const base = mapUpliftRequest(raw);
|
|
const item = asRecord(raw);
|
|
return {
|
|
...base,
|
|
dispatchNumber: readString(item, "dispatchNumber", "DispatchNumber"),
|
|
poNumber: readString(item, "poNumber", "PONumber"),
|
|
vendorCompanyName: readString(item, "vendorCompanyName", "VendorCompanyName"),
|
|
workOrderId: readOptionalId(item, "workOrderId", "WorkOrderId"),
|
|
dispatchId: readOptionalId(item, "dispatchId", "DispatchId"),
|
|
};
|
|
}
|
|
|
|
export function mapUpliftQueueItems(rawItems: unknown[]): UpliftQueueItem[] {
|
|
return rawItems.map(mapUpliftQueueItem);
|
|
}
|