import React, { useRef, useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { __ } from '@/lib/i18n'; import { CouponsApi, type CouponFormData } from '@/lib/api/coupons'; import { showErrorToast, showSuccessToast, getPageLoadErrorMessage } from '@/lib/errorHandling'; import { ErrorCard } from '@/components/ErrorCard'; import { LoadingState } from '@/components/LoadingState'; import { usePageHeader } from '@/contexts/PageHeaderContext'; import { Button } from '@/components/ui/button'; import { useFABConfig } from '@/hooks/useFABConfig'; import CouponForm from './CouponForm'; export default function CouponEdit() { const { id } = useParams<{ id: string }>(); const couponId = Number(id); const navigate = useNavigate(); const queryClient = useQueryClient(); const formRef = useRef(null); const { setPageHeader, clearPageHeader } = usePageHeader(); // Hide FAB on edit page useFABConfig('none'); // Fetch coupon const { data: coupon, isLoading, isError, error } = useQuery({ queryKey: ['coupon', couponId], queryFn: () => CouponsApi.get(couponId), enabled: !!couponId, }); // Update mutation const updateMutation = useMutation({ mutationFn: (data: CouponFormData) => CouponsApi.update(couponId, data), onSuccess: (updatedCoupon) => { queryClient.invalidateQueries({ queryKey: ['coupons'] }); queryClient.invalidateQueries({ queryKey: ['coupon', couponId] }); showSuccessToast(__('Coupon updated successfully'), `${__('Coupon')} ${updatedCoupon.code} ${__('updated')}`); navigate('/coupons'); }, onError: (error) => { showErrorToast(error); }, }); // Smart back handler: go back in history if available, otherwise fallback to /coupons const handleBack = () => { if (window.history.state?.idx > 0) { navigate(-1); // Go back in history } else { navigate('/coupons'); // Fallback to coupons index } }; // Set contextual header useEffect(() => { const actions = (
); const title = coupon ? `${__('Edit Coupon')}: ${coupon.code}` : __('Edit Coupon'); setPageHeader(title, actions); return () => clearPageHeader(); }, [coupon, updateMutation.isPending, isLoading, setPageHeader, clearPageHeader, navigate]); if (isLoading) { return ; } if (isError) { return ( queryClient.invalidateQueries({ queryKey: ['coupon', couponId] })} /> ); } if (!coupon) { return ( ); } return (
{ await updateMutation.mutateAsync(data); }} formRef={formRef} hideSubmitButton={true} />
); }