mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-01 15:03:57 +08:00
- Implement Phase 4: Full Documentation Generation with multi-layered strategy and tool fallback. - Introduce Phase 5: Related Documentation Generation for incremental updates based on git changes. - Create new utility components for displaying execution status in the terminal panel. - Add helper functions for rendering execution status icons and formatting relative time. - Establish a recent paths configuration for improved path resolution.
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
// ========================================
|
|
// Execution Display Utilities
|
|
// ========================================
|
|
// Shared helpers for rendering queue execution status across
|
|
// ExecutionPanel and QueueExecutionListView components.
|
|
|
|
import type { ReactElement } from 'react';
|
|
import { createElement } from 'react';
|
|
import {
|
|
Loader2,
|
|
CheckCircle,
|
|
XCircle,
|
|
Clock,
|
|
} from 'lucide-react';
|
|
import type { QueueExecutionStatus } from '@/stores/queueExecutionStore';
|
|
|
|
/**
|
|
* Map execution status to Badge variant.
|
|
*/
|
|
export function statusBadgeVariant(status: QueueExecutionStatus): 'info' | 'success' | 'destructive' | 'secondary' {
|
|
switch (status) {
|
|
case 'running':
|
|
return 'info';
|
|
case 'completed':
|
|
return 'success';
|
|
case 'failed':
|
|
return 'destructive';
|
|
case 'pending':
|
|
default:
|
|
return 'secondary';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Map execution status to a small icon element.
|
|
*/
|
|
export function statusIcon(status: QueueExecutionStatus): ReactElement {
|
|
const base = 'w-3.5 h-3.5';
|
|
switch (status) {
|
|
case 'running':
|
|
return createElement(Loader2, { className: `${base} animate-spin text-info` });
|
|
case 'completed':
|
|
return createElement(CheckCircle, { className: `${base} text-success` });
|
|
case 'failed':
|
|
return createElement(XCircle, { className: `${base} text-destructive` });
|
|
case 'pending':
|
|
default:
|
|
return createElement(Clock, { className: `${base} text-muted-foreground` });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format an ISO date string as a human-readable relative time.
|
|
*/
|
|
export function formatRelativeTime(isoString: string): string {
|
|
const diff = Date.now() - new Date(isoString).getTime();
|
|
const seconds = Math.floor(diff / 1000);
|
|
if (seconds < 60) return `${seconds}s ago`;
|
|
const minutes = Math.floor(seconds / 60);
|
|
if (minutes < 60) return `${minutes}m ago`;
|
|
const hours = Math.floor(minutes / 60);
|
|
if (hours < 24) return `${hours}h ago`;
|
|
const days = Math.floor(hours / 24);
|
|
return `${days}d ago`;
|
|
}
|