refactor: remove duplicate order status labels, use ORDER_STATUS_DATA as single source

This commit is contained in:
Kirill
2026-05-27 21:54:53 +05:00
parent ed424a3b0b
commit b0b2872cf8
8 changed files with 17 additions and 27 deletions
@@ -19,7 +19,7 @@ import { getAdminNextOrderStatuses } from '@/shared/constants/order'
import { formatPriceRub } from '@/shared/lib/format-price'
import { invalidateQueryKeys } from '@/shared/lib/invalidate-query-keys'
import { parseOrderAddressSnapshot } from '@/shared/lib/order-address-snapshot'
import { orderStatusLabelRu } from '@/shared/lib/order-status-labels'
import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data'
import { $user } from '@/shared/model/auth'
import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble'
import { OrderMessageBody } from '@/shared/ui/OrderMessageBody'
@@ -66,7 +66,7 @@ export function OrderDetailContent({ detail, orderId }: { detail: AdminOrderDeta
return (
<Stack spacing={2} sx={{ mt: 1 }}>
<Typography sx={{ fontWeight: 700 }}>
#{detail.id.slice(-8)} · {detail.user.email} · {orderStatusLabelRu(detail.status)} ·{' '}
#{detail.id.slice(-8)} · {detail.user.email} · {ORDER_STATUS_MAP[detail.status] ?? detail.status} ·{' '}
{formatPriceRub(detail.totalCents)}
</Typography>
<Typography variant="body2" color="text.secondary">
@@ -184,7 +184,7 @@ export function OrderDetailContent({ detail, orderId }: { detail: AdminOrderDeta
</MenuItem>
{nextStatuses.map((s) => (
<MenuItem key={s} value={s}>
{orderStatusLabelRu(s)}
{ORDER_STATUS_MAP[s] ?? s}
</MenuItem>
))}
</Select>
@@ -1,7 +1,7 @@
import Box from '@mui/material/Box'
import Button from '@mui/material/Button'
import Typography from '@mui/material/Typography'
import { orderStatusLabelRu } from '@/shared/lib/order-status-labels'
import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data'
type Props = {
status: string
@@ -43,7 +43,7 @@ export function OrderPaymentSection({ status, deliveryFeeLocked, paymentMethod,
<>
<Typography color="text.secondary" variant="body2" sx={{ mb: 1 }}>
Вы будете перенаправлены на защищённую платёжную страницу ЮKassa. После оплаты заказ получит статус «
{orderStatusLabelRu('PAID')}».
{ORDER_STATUS_MAP['PAID'] ?? 'PAID'}».
</Typography>
<Button variant="contained" onClick={onPay} disabled={isPayPending}>
{isPayPending ? 'Создание платежа…' : 'Оплатить'}
@@ -20,7 +20,7 @@ import { OrderDetailContent } from '@/features/order-detail/ui/OrderDetailConten
import { ORDER_STATUSES } from '@/shared/constants/order'
import { formatPriceRub } from '@/shared/lib/format-price'
import { groupOrdersByStatus } from '@/shared/lib/group-orders-by-status'
import { orderStatusLabelRu } from '@/shared/lib/order-status-labels'
import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data'
import { AdminDialog } from '@/shared/ui/AdminDialog/AdminDialog'
export function AdminOrdersPage() {
@@ -87,7 +87,7 @@ export function AdminOrdersPage() {
</MenuItem>
{ORDER_STATUSES.map((s) => (
<MenuItem key={s} value={s}>
{orderStatusLabelRu(s)}
{ORDER_STATUS_MAP[s] ?? s}
</MenuItem>
))}
</Select>
@@ -130,7 +130,7 @@ export function AdminOrdersPage() {
<Fragment key={`group:${group.statusCode}`}>
<TableRow>
<TableCell colSpan={6} sx={{ fontWeight: 700, bgcolor: 'action.hover' }}>
{orderStatusLabelRu(group.statusCode)} ({group.items.length})
{ORDER_STATUS_MAP[group.statusCode] ?? group.statusCode} ({group.items.length})
</TableCell>
</TableRow>
{group.items.map((o) => (
@@ -15,7 +15,7 @@ import { Link as RouterLink } from 'react-router-dom'
import { fetchMyOrder, postOrderMessage } from '@/entities/order/api/order-api'
import { fetchMyConversations, markOrderMessagesRead } from '@/entities/user/api/messages-api'
import { fetchAdminAvatar } from '@/entities/user/api/user-api'
import { orderStatusLabelRu } from '@/shared/lib/order-status-labels'
import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data'
import { usePageTitle } from '@/shared/lib/use-page-title'
import { $user } from '@/shared/model/auth'
import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble'
@@ -125,7 +125,7 @@ export function MessagesPage() {
{c.orderId.slice(-6)}
</Typography>
<Typography component="span" variant="caption" color="text.secondary">
· {orderStatusLabelRu(c.status)}
· {ORDER_STATUS_MAP[c.status] ?? c.status}
</Typography>
</Stack>
}
@@ -168,7 +168,7 @@ export function MessagesPage() {
<Typography variant="h6">
Чат заказа {order.id.slice(-6)}{' '}
<Typography component="span" variant="body2" color="text.secondary">
({orderStatusLabelRu(order.status)})
({ORDER_STATUS_MAP[order.status] ?? order.status})
</Typography>
</Typography>
<Button component={RouterLink} to={`/me/orders/${order.id}`} size="small" variant="outlined">
@@ -11,7 +11,7 @@ import { fetchMyOrders } from '@/entities/order/api/order-api'
import { ORDER_STATUSES } from '@/shared/constants/order'
import { formatPriceRub } from '@/shared/lib/format-price'
import { groupOrdersByStatus } from '@/shared/lib/group-orders-by-status'
import { orderStatusLabelRu } from '@/shared/lib/order-status-labels'
import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data'
import { usePageTitle } from '@/shared/lib/use-page-title'
export function OrdersPage() {
@@ -40,7 +40,7 @@ export function OrdersPage() {
{groups.map((group) => (
<Box key={group.status}>
<Typography variant="h6" sx={{ mb: 1 }}>
{orderStatusLabelRu(group.status)} ({group.items.length})
{ORDER_STATUS_MAP[group.status] ?? group.status} ({group.items.length})
</Typography>
<Stack spacing={2}>
{group.items.map((o) => (
@@ -73,3 +73,7 @@ export const ORDER_STATUS_DATA: ReadonlyArray<OrderStatusData> = [
export function getOrderStatusData(code: string): OrderStatusData | undefined {
return ORDER_STATUS_DATA.find((s) => s.code === code)
}
export const ORDER_STATUS_MAP: Record<string, string> = Object.fromEntries(
ORDER_STATUS_DATA.map((s) => [s.code, s.label]),
)
@@ -1,14 +0,0 @@
/** Человекочитаемые подписи к кодам статуса заказа */
export function orderStatusLabelRu(code: string): string {
const map: Record<string, string> = {
DRAFT: 'Черновик',
PENDING_PAYMENT: 'Ожидает оплаты',
PAID: 'Оплачен',
IN_PROGRESS: 'Подготовка к отправке',
SHIPPED: 'Отправлен',
READY_FOR_PICKUP: 'Готово к получению',
DONE: 'Завершён',
CANCELLED: 'Отменён',
}
return map[code] ?? code
}