import React, { useEffect, useRef } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { OrdersApi } from '@/lib/api/orders'; import { useNavigate } from 'react-router-dom'; 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'; import { useFABConfig } from '@/hooks/useFABConfig'; export default function OrdersNew() { const nav = useNavigate(); const qc = useQueryClient(); const { setPageHeader, clearPageHeader } = usePageHeader(); const formRef = useRef(null); // Hide FAB on new order page useFABConfig('none'); // Countries from Woo (allowed + default + states) const countriesQ = useQuery({ queryKey: ['countries'], queryFn: OrdersApi.countries }); const countriesData = React.useMemo(() => { const list = countriesQ.data?.countries ?? []; return list.map((c: any) => ({ code: String(c.code), name: String(c.name) })); }, [countriesQ.data]); // Live payment & shipping methods const payments = useQuery({ queryKey: ['payments'], queryFn: OrdersApi.payments }); const shippings = useQuery({ queryKey: ['shippings'], queryFn: OrdersApi.shippings }); const mutate = useMutation({ mutationFn: OrdersApi.create, onSuccess: (data) => { qc.invalidateQueries({ queryKey: ['orders'] }); showSuccessToast(__('Order created successfully'), sprintf(__('Order #%s has been created'), data.number || data.id)); nav('/orders'); }, onError: (error: any) => { showErrorToast(error); }, }); // Prefer global store currency injected by PHP const { currency: storeCurrency, symbol: storeSymbol } = getStoreCurrency(); // Set page header with back button and create button useEffect(() => { const actions = (
); setPageHeader(__('New Order'), actions); return () => clearPageHeader(); }, [mutate.isPending, setPageHeader, clearPageHeader, nav]); return (
{ mutate.mutate(form as any); }} />
); }