import React from 'react'; import { View, Alert } from 'react-native'; import { tw, AppContainer } from 'common-ui'; import CouponForm from '@/src/components/CouponForm'; import { trpc } from '@/src/trpc-client'; import { useRouter } from 'expo-router'; export default function CreateCoupon() { const router = useRouter(); const createCoupon = trpc.admin.coupon.create.useMutation(); const createReservedCoupon = trpc.admin.coupon.createReservedCoupon.useMutation(); const { refetch: refetchCoupons } = trpc.admin.coupon.getAll.useInfiniteQuery( { limit: 20, search: '' }, { enabled: false, getNextPageParam: (lastPage) => lastPage.nextCursor, } ) const { refetch: refetchReservedCoupons } = trpc.admin.coupon.getReservedCoupons.useInfiniteQuery( { limit: 20, search: '' }, { enabled: false, getNextPageParam: (lastPage) => lastPage.nextCursor, } ) const handleCreateCoupon = async (values: any) => { console.log('Form values:', values); // Debug log const { isReservedCoupon, couponCodes, ...rest } = values; // Transform targetUsers array to targetUser for backend compatibility const payload = { ...rest, targetUser: rest.targetUsers?.[0] || undefined, }; delete payload.targetUsers; console.log('Payload:', payload); // Debug log if (isReservedCoupon && Array.isArray(couponCodes) && couponCodes.length > 0) { // Create one reserved coupon per code, same config const codes = couponCodes.map((c: string) => c.trim()).filter(Boolean); try { for (const code of codes) { await createReservedCoupon.mutateAsync({ ...payload, couponCode: code }); } await refetchCoupons() await refetchReservedCoupons() Alert.alert('Success', `${codes.length} reserved coupon${codes.length > 1 ? 's' : ''} created successfully`, [ { text: 'OK', onPress: () => router.back() } ]); } catch (error: any) { Alert.alert('Error', error.message || 'Failed to create reserved coupons'); } return; } const mutation = isReservedCoupon ? createReservedCoupon : createCoupon; const isLoading = isReservedCoupon ? createReservedCoupon.isPending : createCoupon.isPending; if (isLoading) return; // Prevent double submission mutation.mutate(payload, { onSuccess: async () => { await refetchCoupons() await refetchReservedCoupons() Alert.alert('Success', `${isReservedCoupon ? 'Reserved coupon' : 'Coupon'} created successfully`, [ { text: 'OK', onPress: () => router.back() } ]); }, onError: (error: any) => { Alert.alert('Error', error.message || 'Failed to create coupon'); }, }); }; return ( ); }