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) => { const { isReservedCoupon, couponCodes, ...rest } = values; // Transform targetUsers array to targetUser for backend compatibility const payload = { ...rest, targetUser: rest.targetUsers?.[0] || undefined, }; delete payload.targetUsers; // For flat discounts, send the discount value as maxValue too if (payload.flatDiscount !== undefined) { payload.maxValue = payload.flatDiscount; } const codes = (couponCodes || []).map((c: string) => c.trim()).filter(Boolean); if (codes.length === 0) { Alert.alert('Error', 'At least one coupon code is required'); return; } const mutation = isReservedCoupon ? createReservedCoupon : createCoupon; try { await mutation.mutateAsync({ ...payload, couponCodes: codes }); await refetchCoupons() await refetchReservedCoupons() Alert.alert('Success', `${codes.length} coupon${codes.length > 1 ? 's' : ''} created successfully`, [ { text: 'OK', onPress: () => router.back() } ]); } catch (error: any) { Alert.alert('Error', error.message || 'Failed to create coupons'); } }; return ( ); }