feat: status selectors update

This commit is contained in:
ivannoskov
2026-02-04 12:16:34 +03:00
parent e27a171c63
commit f7597270e5
4 changed files with 354 additions and 94 deletions

View File

@@ -147,3 +147,86 @@ export const canEditPostStatus = (currentStatus: PlacementPostStatus): boolean =
export const isAutomaticPostStatus = (status: PlacementPostStatus): boolean => {
return AUTOMATIC_POST_STATUSES.has(status);
};
// Status icon and color helpers
import {
CircleHelp,
FileText,
Clock,
DollarSign,
CheckCircle2,
XCircle,
AlertTriangle,
Send,
Calendar,
} from "lucide-react";
const StatusIconMap: Record<PlacementStatus, any> = {
"Без статуса": CircleHelp,
"Написать": FileText,
"Ждём ответа": Clock,
"Согласование условий": FileText,
"Оплатить": DollarSign,
"Оплачено": CheckCircle2,
"Отмена": XCircle,
"Не подходит цена": AlertTriangle,
"Неактуально": XCircle,
"Не отвечает": AlertTriangle,
};
const PostStatusIconMap: Record<PlacementPostStatus, any> = {
"Без статуса": CircleHelp,
"Отправить пост": Send,
"Согласование поста": FileText,
"Ожидание отложки": Clock,
"Запланирован": Calendar,
"Пост вышел": CheckCircle2,
"Размещение отработало - пост удалён": CheckCircle2,
"Размещение отработало - пост не удалён": CheckCircle2,
"Проверить - пост удалён раньше срока": AlertTriangle,
"Проверить - пост не вышел": Clock,
"Размещение отработало": CheckCircle2,
};
const StatusColorMap: Record<PlacementStatus, string> = {
"Без статуса": "bg-gray-100 text-gray-700 border-gray-200 dark:bg-gray-900/30 dark:text-gray-400 dark:border-gray-800",
"Написать": "bg-blue-100 text-blue-700 border-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:border-blue-800",
"Ждём ответа": "bg-amber-100 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:border-amber-800",
"Согласование условий": "bg-purple-100 text-purple-700 border-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:border-purple-800",
"Оплатить": "bg-green-100 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-400 dark:border-green-800",
"Оплачено": "bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800",
"Отмена": "bg-red-100 text-red-700 border-red-200 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800",
"Не подходит цена": "bg-orange-100 text-orange-700 border-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:border-orange-800",
"Неактуально": "bg-gray-100 text-gray-700 border-gray-200 dark:bg-gray-900/30 dark:text-gray-400 dark:border-gray-800",
"Не отвечает": "bg-red-100 text-red-700 border-red-200 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800",
};
const PostStatusColorMap: Record<PlacementPostStatus, string> = {
"Без статуса": "bg-gray-100 text-gray-700 border-gray-200 dark:bg-gray-900/30 dark:text-gray-400 dark:border-gray-800",
"Отправить пост": "bg-blue-100 text-blue-700 border-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:border-blue-800",
"Согласование поста": "bg-purple-100 text-purple-700 border-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:border-purple-800",
"Ожидание отложки": "bg-amber-100 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:border-amber-800",
"Запланирован": "bg-cyan-100 text-cyan-700 border-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:border-cyan-800",
"Пост вышел": "bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800",
"Размещение отработало - пост удалён": "bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800",
"Размещение отработало - пост не удалён": "bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800",
"Проверить - пост удалён раньше срока": "bg-orange-100 text-orange-700 border-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:border-orange-800",
"Проверить - пост не вышел": "bg-red-100 text-red-700 border-red-200 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800",
"Размещение отработало": "bg-emerald-100 text-emerald-700 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800",
};
export const getPlacementStatusIcon = (status: PlacementStatus): any => {
return StatusIconMap[status] || CircleHelp;
};
export const getPlacementStatusColor = (status: PlacementStatus): string => {
return StatusColorMap[status] || StatusColorMap["Без статуса"];
};
export const getPlacementPostStatusIcon = (status: PlacementPostStatus): any => {
return PostStatusIconMap[status] || CircleHelp;
};
export const getPlacementPostStatusColor = (status: PlacementPostStatus): string => {
return PostStatusColorMap[status] || PostStatusColorMap["Без статуса"];
};