import { LoaderCircle } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Badge } from '../../components/ui'; import { formatDateTime as formatDateTimeValue } from '../../lib/date-format'; export type BadgeTone = 'neutral' | 'green' | 'amber' | 'red' | 'blue' | 'violet'; export function statusTone(status?: string | null): BadgeTone { if (!status) return 'neutral'; if (['활성', '완료', '게시됨', '게시중', '실행 중', '배포됨', '성공', 'Running', 'ACTIVE'].includes(status)) return 'green'; if (['주의', '예약됨', '예약', '대기', '준비중', '카나리', '만료', 'PENDING'].includes(status)) return 'amber'; if (['잠김', '실패', '오프라인', '비활성', '종료', 'FAILED', 'Error', 'CrashLoopBackOff'].includes(status)) return 'red'; if (['없음'].includes(status)) return 'neutral'; if (['런처'].includes(status)) return 'violet'; return 'neutral'; } export function StatusBadge({ status, tone }: { status: string; tone?: BadgeTone }) { return {status}; } export function formatDateTime(value?: string | null) { return formatDateTimeValue(value); } export function LoadingModal({ open }: { open: boolean }) { if (!open) return null; return (
데이터를 불러오는 중입니다.
); } export function useMinimumLoading(loading: boolean, minimumMs = 500) { const [visible, setVisible] = useState(loading); useEffect(() => { if (loading) { setVisible(true); return; } const timer = window.setTimeout(() => setVisible(false), minimumMs); return () => window.clearTimeout(timer); }, [loading, minimumMs]); return visible; }