freshyo/apps/admin-ui/app/(drawer)/dashboard/coupons/create.tsx
2026-08-18 23:56:47 +05:30

68 lines
2.3 KiB
TypeScript

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 (
<AppContainer>
<CouponForm
onSubmit={handleCreateCoupon}
isLoading={createCoupon.isPending || createReservedCoupon.isPending}
/>
</AppContainer>
);
}