Create user

This commit is contained in:
hamid zarghami
2026-06-23 11:25:19 +03:30
parent 45494d7ae5
commit f83d0743c6
4 changed files with 58 additions and 5 deletions
+32 -5
View File
@@ -4,6 +4,7 @@ import * as Yup from 'yup'
import { toast } from 'react-toastify'
import { useNavigate } from 'react-router-dom'
import { useCreateOrder } from './useOrderData'
import { useCreateUser } from '@/pages/customers/hooks/useUsersData'
import { useGetFoods } from '@/pages/food/hooks/useFoodData'
import { useGetRestaurantShipmentMethods } from '@/pages/shipmentMethod/hooks/useShipmentMethodData'
import { useGetRestaurantPaymentMethods } from '@/pages/paymentMethods/hooks/usePaymentMethodData'
@@ -64,8 +65,10 @@ export const getFoodUnitPrice = (food: Food) => {
export const useCreateOrderForm = () => {
const navigate = useNavigate()
const { mutate: createOrder, isPending: isCreating } = useCreateOrder()
const { mutateAsync: createUser, isPending: isCreatingUser } = useCreateUser()
const [customerAddresses, setCustomerAddresses] = useState<UserSavedAddress[]>([])
const [selectedAddressId, setSelectedAddressId] = useState<string | null>(null)
const [isNewCustomer, setIsNewCustomer] = useState(false)
const { data: foodsData } = useGetFoods({ limit: 500 })
const { data: deliveryMethodsData } = useGetRestaurantShipmentMethods({ limit: 100 })
@@ -113,7 +116,7 @@ export const useCreateOrderForm = () => {
)
.min(1, 'حداقل یک آیتم الزامی است'),
}),
onSubmit: (values) => {
onSubmit: async (values) => {
const selectedDelivery = deliveryMethods.find(
(method) => method.id === values.deliveryMethodId
)
@@ -189,12 +192,31 @@ export const useCreateOrderForm = () => {
})
}
const registerNewCustomer = async () => {
if (!isNewCustomer) {
submitOrder()
return
}
try {
await createUser({
phone: values.userPhone.trim(),
firstName: values.firstName.trim(),
lastName: values.lastName.trim(),
})
setIsNewCustomer(false)
submitOrder()
} catch (error) {
toast.error(extractErrorMessage(error as ErrorType, 'خطا در ثبت مشتری'))
}
}
if (!selectedPayment) {
toast.error('روش پرداخت نقدی یافت نشد')
return
}
submitOrder()
await registerNewCustomer()
},
})
@@ -229,6 +251,7 @@ export const useCreateOrderForm = () => {
const handleUserFound = useCallback(
(user: UserWithAddresses) => {
setIsNewCustomer(false)
const addresses = user.addresses ?? []
setCustomerAddresses(addresses)
@@ -253,16 +276,20 @@ export const useCreateOrderForm = () => {
)
const clearCustomerData = useCallback(() => {
setIsNewCustomer(false)
setCustomerAddresses([])
setSelectedAddressId(null)
formik.setFieldValue('userAddress', emptyUserAddress())
}, [formik])
const handleUserNotFound = useCallback(() => {
clearCustomerData()
setCustomerAddresses([])
setSelectedAddressId(null)
formik.setFieldValue('userAddress', emptyUserAddress())
formik.setFieldValue('firstName', '')
formik.setFieldValue('lastName', '')
}, [clearCustomerData, formik])
setIsNewCustomer(true)
}, [formik])
const cashPaymentMethod = paymentMethods[0]
@@ -391,7 +418,7 @@ export const useCreateOrderForm = () => {
addFoodToOrder,
updateItemQuantity,
removeItem,
isSubmitting: isCreating,
isSubmitting: isCreating || isCreatingUser,
customerAddresses,
selectedAddressId,
handleUserFound,