This commit is contained in:
Kirill
2026-05-24 13:43:23 +05:00
parent 75841342c6
commit 2fe426b70a
17 changed files with 425 additions and 82 deletions
@@ -4,3 +4,6 @@ export const PICKUP_COORDINATES = { lat: 58.09898000206914, lng: 57.813169680997
/** Полная строка адреса для текстовых блоков. */
export const PICKUP_ADDRESS_FULL =
'618909, Россия, Пермский край, Лысьвенский муниципальный округ, Лысьва, улица Мира, 34'
/** Короткий адрес для компактных блоков. */
export const PICKUP_ADDRESS_SHORT = 'Лысьва, ул. Мира, 34'
@@ -0,0 +1,67 @@
export type StatusColor = 'warning' | 'success' | 'info' | 'error'
export type StatusIconName = 'banknote' | 'check-circle' | 'package-search' | 'package' | 'package-check' | 'store' | 'x-circle'
export interface OrderStatusData {
code: string
label: string
iconName: StatusIconName
color: StatusColor
description: string
}
export const ORDER_STATUS_DATA: ReadonlyArray<OrderStatusData> = [
{
code: 'PENDING_PAYMENT',
label: 'Ожидает оплаты',
iconName: 'banknote',
color: 'warning',
description:
'Заказ оформлен и подтверждён администратором. Оплатите онлайн через ЮKassa или дождитесь получения (для самовывоза с оплатой при получении).',
},
{
code: 'PAID',
label: 'Оплачен',
iconName: 'check-circle',
color: 'success',
description: 'Оплата получена. Админ скоро возьмёт заказ в работу.',
},
{
code: 'IN_PROGRESS',
label: 'Подготовка к отправке',
iconName: 'package-search',
color: 'info',
description: 'Админ готовит заказ к отправке или выдаче. Скоро статус обновится.',
},
{
code: 'SHIPPED',
label: 'Отправлен',
iconName: 'package',
color: 'info',
description: 'Заказ передан в службу доставки. Трек-номер для отслеживания(при наличии) будет указан в сообщении админа.',
},
{
code: 'READY_FOR_PICKUP',
label: 'Готов к получению',
iconName: 'store',
color: 'success',
description: 'Заказ готов к самовывозу. Приезжайте в согласованное время.',
},
{
code: 'DONE',
label: 'Завершён',
iconName: 'package-check',
color: 'success',
description: 'Заказ получен. Вы можете оставить отзыв в личном кабинете.',
},
{
code: 'CANCELLED',
label: 'Отменён',
iconName: 'x-circle',
color: 'error',
description: 'Заказ отменён. Если оплата была произведена, средства вернутся на карту.',
},
]
export function getOrderStatusData(code: string): OrderStatusData | undefined {
return ORDER_STATUS_DATA.find((s) => s.code === code)
}
+1 -1
View File
@@ -4,7 +4,7 @@ export function orderStatusLabelRu(code: string): string {
DRAFT: 'Черновик',
PENDING_PAYMENT: 'Ожидает оплаты',
PAID: 'Оплачен',
IN_PROGRESS: 'В работе',
IN_PROGRESS: 'Подготовка к отправке',
SHIPPED: 'Отправлен',
READY_FOR_PICKUP: 'Готово к получению',
DONE: 'Завершён',
+34
View File
@@ -0,0 +1,34 @@
import type { ReactElement } from 'react'
import Chip from '@mui/material/Chip'
import Tooltip from '@mui/material/Tooltip'
import { Banknote, CheckCircle, Package, PackageCheck, PackageSearch, Store, XCircle } from 'lucide-react'
import { getOrderStatusData, type StatusIconName } from '@/shared/lib/order-status-data'
const iconMap: Record<StatusIconName, ReactElement> = {
banknote: <Banknote size={18} />,
'check-circle': <CheckCircle size={18} />,
'package-search': <PackageSearch size={18} />,
package: <Package size={18} />,
'package-check': <PackageCheck size={18} />,
store: <Store size={18} />,
'x-circle': <XCircle size={18} />,
}
interface OrderStatusChipProps {
status: string
tooltipOverride?: string
}
export function OrderStatusChip({ status, tooltipOverride }: OrderStatusChipProps) {
const data = getOrderStatusData(status)
const label = data?.label ?? status
const color = data?.color ?? 'default'
const icon = data ? iconMap[data.iconName] : undefined
const tooltip = tooltipOverride ?? data?.description ?? ''
return (
<Tooltip title={tooltip} arrow placement="top">
<Chip icon={icon} label={label} color={color as 'default'} size="small" variant="outlined" />
</Tooltip>
)
}