93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import { type Enum_Order_State } from '@repo/graphql/types';
|
|
import { AlertCircle, Calendar, CheckCircle, FileText, XCircle } from 'lucide-react';
|
|
|
|
const BADGE_TEXT: Record<Enum_Order_State, string> = {
|
|
approved: 'Подтверждено',
|
|
cancelled: 'Отменено',
|
|
cancelling: 'Отменяется',
|
|
completed: 'Завершено',
|
|
created: 'Создано',
|
|
scheduled: 'Запланировано',
|
|
};
|
|
|
|
const BADGE_STYLES: Record<Enum_Order_State, string> = {
|
|
approved: 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-100',
|
|
cancelled: 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-100',
|
|
cancelling: 'bg-orange-100 text-orange-700 dark:bg-orange-900 dark:text-orange-100',
|
|
completed: 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-100',
|
|
created: '',
|
|
scheduled: 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-100',
|
|
};
|
|
|
|
const ALERT_STYLES: Record<Enum_Order_State, string> = {
|
|
approved:
|
|
'border-blue-200 bg-blue-50 text-blue-800 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-200',
|
|
cancelled:
|
|
'border-red-200 bg-red-50 text-red-800 dark:border-red-800 dark:bg-red-950 dark:text-red-200',
|
|
cancelling:
|
|
'border-orange-200 bg-orange-50 text-orange-800 dark:border-orange-800 dark:bg-orange-950 dark:text-orange-200',
|
|
completed:
|
|
'border-green-200 bg-green-50 text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200',
|
|
created:
|
|
'border-gray-200 bg-gray-50 text-gray-800 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200',
|
|
scheduled:
|
|
'border-purple-200 bg-purple-50 text-purple-800 dark:border-purple-800 dark:bg-purple-950 dark:text-purple-200',
|
|
};
|
|
|
|
const STATUS_ICONS: Record<
|
|
Enum_Order_State,
|
|
{
|
|
icon: React.ComponentType<{ className?: string }>;
|
|
iconStyles: string;
|
|
}
|
|
> = {
|
|
approved: {
|
|
icon: CheckCircle,
|
|
iconStyles: 'text-blue-600 dark:text-blue-400',
|
|
},
|
|
cancelled: {
|
|
icon: XCircle,
|
|
iconStyles: 'text-red-600 dark:text-red-400',
|
|
},
|
|
cancelling: {
|
|
icon: AlertCircle,
|
|
iconStyles: 'text-orange-600 dark:text-orange-400',
|
|
},
|
|
completed: {
|
|
icon: CheckCircle,
|
|
iconStyles: 'text-green-600 dark:text-green-400',
|
|
},
|
|
created: {
|
|
icon: FileText,
|
|
iconStyles: 'text-gray-600 dark:text-gray-400',
|
|
},
|
|
scheduled: {
|
|
icon: Calendar,
|
|
iconStyles: 'text-purple-600 dark:text-purple-400',
|
|
},
|
|
};
|
|
|
|
export function getAlertStyles(state: Enum_Order_State) {
|
|
if (!state) return '';
|
|
|
|
return ALERT_STYLES[state];
|
|
}
|
|
|
|
export function getBadgeStyles(state: Enum_Order_State) {
|
|
if (!state) return '';
|
|
|
|
return BADGE_STYLES[state];
|
|
}
|
|
|
|
export function getBadgeText(state: Enum_Order_State) {
|
|
if (!state) return '';
|
|
|
|
return BADGE_TEXT[state];
|
|
}
|
|
|
|
export function getStatusIcon(state: Enum_Order_State) {
|
|
if (!state) return { icon: () => null, iconStyles: '' };
|
|
|
|
return STATUS_ICONS[state];
|
|
}
|