diff --git a/admin-spa/src/routes/Orders/Detail.tsx b/admin-spa/src/routes/Orders/Detail.tsx index 14cd6fc..0fffeae 100644 --- a/admin-spa/src/routes/Orders/Detail.tsx +++ b/admin-spa/src/routes/Orders/Detail.tsx @@ -21,6 +21,7 @@ import { showErrorToast, showSuccessToast, getPageLoadErrorMessage } from '@/lib import { ErrorCard } from '@/components/ErrorCard'; import { InlineLoadingState } from '@/components/LoadingState'; import { __ } from '@/lib/i18n'; +import { usePageHeader } from '@/contexts/PageHeaderContext'; function Money({ value, currency, symbol }: { value?: number; currency?: string; symbol?: string }) { return <>{formatMoney(value, { currency, symbol })}; @@ -44,6 +45,7 @@ export default function OrderShow() { const { id } = useParams<{ id: string }>(); const qc = useQueryClient(); const siteTitle = (window as any).wnw?.siteTitle || 'WooNooW'; + const { setPageHeader, clearPageHeader } = usePageHeader(); const [params, setParams] = useSearchParams(); const mode = params.get('mode'); // undefined | 'label' | 'invoice' @@ -140,6 +142,36 @@ export default function OrderShow() { retryPaymentMutation.mutate(); } + // Set page header with actions + useEffect(() => { + if (!order || isPrintMode) { + clearPageHeader(); + return; + } + + const actions = ( +
+ + + + +
+ ); + + setPageHeader( + order.number ? `${__('Order')} #${order.number}` : __('Order'), + actions + ); + + return () => clearPageHeader(); + }, [order, isPrintMode, id, setPageHeader, clearPageHeader]); + useEffect(() => { if (!isPrintMode || !qrRef.current || !order) return; (async () => { diff --git a/admin-spa/src/routes/Orders/Edit.tsx b/admin-spa/src/routes/Orders/Edit.tsx index a6971ac..329e20e 100644 --- a/admin-spa/src/routes/Orders/Edit.tsx +++ b/admin-spa/src/routes/Orders/Edit.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import OrderForm from '@/routes/Orders/partials/OrderForm'; @@ -8,12 +8,14 @@ import { ErrorCard } from '@/components/ErrorCard'; import { LoadingState } from '@/components/LoadingState'; import { ArrowLeft } from 'lucide-react'; import { __, sprintf } from '@/lib/i18n'; +import { usePageHeader } from '@/contexts/PageHeaderContext'; export default function OrdersEdit() { const { id } = useParams(); const orderId = Number(id); const nav = useNavigate(); const qc = useQueryClient(); + const { setPageHeader, clearPageHeader } = usePageHeader(); const countriesQ = useQuery({ queryKey: ['countries'], queryFn: OrdersApi.countries }); const paymentsQ = useQuery({ queryKey: ['payments'], queryFn: OrdersApi.payments }); @@ -56,6 +58,16 @@ export default function OrdersEdit() { const order = orderQ.data || {}; + // Set page header + useEffect(() => { + if (order.number) { + setPageHeader(sprintf(__('Edit Order #%s'), order.number)); + } else { + setPageHeader(__('Edit Order')); + } + return () => clearPageHeader(); + }, [order.number, setPageHeader, clearPageHeader]); + return (
diff --git a/admin-spa/src/routes/Orders/New.tsx b/admin-spa/src/routes/Orders/New.tsx index b55e7fb..894d8ce 100644 --- a/admin-spa/src/routes/Orders/New.tsx +++ b/admin-spa/src/routes/Orders/New.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { OrdersApi } from '@/lib/api'; import { useNavigate } from 'react-router-dom'; @@ -6,10 +6,13 @@ import OrderForm from '@/routes/Orders/partials/OrderForm'; import { getStoreCurrency } from '@/lib/currency'; import { showErrorToast, showSuccessToast } from '@/lib/errorHandling'; import { __, sprintf } from '@/lib/i18n'; +import { usePageHeader } from '@/contexts/PageHeaderContext'; +import { Button } from '@/components/ui/button'; export default function OrdersNew() { const nav = useNavigate(); const qc = useQueryClient(); + const { setPageHeader, clearPageHeader } = usePageHeader(); // Countries from Woo (allowed + default + states) const countriesQ = useQuery({ queryKey: ['countries'], queryFn: OrdersApi.countries }); @@ -37,6 +40,12 @@ export default function OrdersNew() { // Prefer global store currency injected by PHP const { currency: storeCurrency, symbol: storeSymbol } = getStoreCurrency(); + // Set page header + useEffect(() => { + setPageHeader(__('New Order')); + return () => clearPageHeader(); + }, [setPageHeader, clearPageHeader]); + return (
diff --git a/admin-spa/src/routes/Orders/components/FilterBottomSheet.tsx b/admin-spa/src/routes/Orders/components/FilterBottomSheet.tsx index 711431d..7cdffe9 100644 --- a/admin-spa/src/routes/Orders/components/FilterBottomSheet.tsx +++ b/admin-spa/src/routes/Orders/components/FilterBottomSheet.tsx @@ -44,12 +44,12 @@ export function FilterBottomSheet({ <> {/* Backdrop */}
{/* Bottom Sheet */} -
+
{/* Drag Handle */}
@@ -67,7 +67,7 @@ export function FilterBottomSheet({
{/* Content */} -
+
{/* Status Filter */}
diff --git a/admin-spa/src/routes/Orders/components/OrderCard.tsx b/admin-spa/src/routes/Orders/components/OrderCard.tsx index 7dce108..76d4e03 100644 --- a/admin-spa/src/routes/Orders/components/OrderCard.tsx +++ b/admin-spa/src/routes/Orders/components/OrderCard.tsx @@ -29,9 +29,9 @@ export function OrderCard({ order, selected, onSelect, currencyConfig }: OrderCa return ( -
+
{/* Checkbox */} {onSelect && (
)} {/* Icon */} -
- +
+
{/* Content */} -
+
{/* Order Number & Status */} -
-

#{order.number}

- +
+

#{order.number}

+ {order.status || 'unknown'}
{/* Customer */} -
+
{order.customer || __('Guest')}
{/* Items Brief */} {order.items_brief && ( -
+
{order.items_count} {order.items_count === 1 ? __('item') : __('items')} ยท {order.items_brief}
)} {/* Date & Total */} -
+
{formatRelativeOrDate(order.date_ts)} - + {formatMoney(order.total, { currency: order.currency || currencyConfig.currency, symbol: order.currency_symbol || currencyConfig.symbol, @@ -95,7 +96,7 @@ export function OrderCard({ order, selected, onSelect, currencyConfig }: OrderCa
{/* Chevron */} - +
); diff --git a/admin-spa/src/routes/Orders/components/SearchBar.tsx b/admin-spa/src/routes/Orders/components/SearchBar.tsx index 201bbda..1368070 100644 --- a/admin-spa/src/routes/Orders/components/SearchBar.tsx +++ b/admin-spa/src/routes/Orders/components/SearchBar.tsx @@ -16,7 +16,6 @@ export function SearchBar({ value, onChange, onFilterClick, filterCount = 0 }: S
onChange(e.target.value)} placeholder={__('Search orders...')}