73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
export type ImportRunLifecycle = {
|
|
label: string;
|
|
tone: "info" | "success" | "warning" | "inactive";
|
|
canApply: boolean;
|
|
canRollback: boolean;
|
|
guidance: string;
|
|
};
|
|
|
|
export function importRunIdFromSearch(search: URLSearchParams): string {
|
|
return search.get("import_run")?.trim() ?? "";
|
|
}
|
|
|
|
export function withImportRunSearch(search: URLSearchParams, runId?: string | null): URLSearchParams {
|
|
const next = new URLSearchParams(search);
|
|
const normalized = runId?.trim();
|
|
if (normalized) next.set("import_run", normalized);
|
|
else next.delete("import_run");
|
|
return next;
|
|
}
|
|
|
|
export function importRunLifecycle(status: string): ImportRunLifecycle {
|
|
if (status === "previewed") {
|
|
return {
|
|
label: "Ready for review",
|
|
tone: "info",
|
|
canApply: true,
|
|
canRollback: false,
|
|
guidance: "Review the persisted effects and diagnostics before applying this plan."
|
|
};
|
|
}
|
|
if (status === "applied") {
|
|
return {
|
|
label: "Applied",
|
|
tone: "success",
|
|
canApply: false,
|
|
canRollback: true,
|
|
guidance: "The plan has already been applied. Rollback remains guarded by its recorded plan hash and contact evidence."
|
|
};
|
|
}
|
|
if (status === "rolled_back") {
|
|
return {
|
|
label: "Rolled back",
|
|
tone: "inactive",
|
|
canApply: false,
|
|
canRollback: false,
|
|
guidance: "This run was rolled back and cannot be applied again. Create a new preview to import the source again."
|
|
};
|
|
}
|
|
if (status === "expired") {
|
|
return {
|
|
label: "Expired",
|
|
tone: "warning",
|
|
canApply: false,
|
|
canRollback: false,
|
|
guidance: "This preview is no longer actionable. Create a new preview from the original source."
|
|
};
|
|
}
|
|
return {
|
|
label: status || "Unavailable",
|
|
tone: "warning",
|
|
canApply: false,
|
|
canRollback: false,
|
|
guidance: "This run is not actionable in its current lifecycle state."
|
|
};
|
|
}
|
|
|
|
export function unavailableImportRunMessage(status?: number): string {
|
|
if (status === 404 || status === 410) {
|
|
return "This import run is missing, expired, or not available to your tenant. No source data was loaded.";
|
|
}
|
|
return "The persisted import run could not be loaded. Reload it after the service becomes available.";
|
|
}
|