пва
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -4,7 +4,7 @@ export function orderStatusLabelRu(code: string): string {
|
||||
DRAFT: 'Черновик',
|
||||
PENDING_PAYMENT: 'Ожидает оплаты',
|
||||
PAID: 'Оплачен',
|
||||
IN_PROGRESS: 'В работе',
|
||||
IN_PROGRESS: 'Подготовка к отправке',
|
||||
SHIPPED: 'Отправлен',
|
||||
READY_FOR_PICKUP: 'Готово к получению',
|
||||
DONE: 'Завершён',
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user