import dayjs from "dayjs"; import { useToast } from "@chakra-ui/react"; import { useNavigate } from "react-router-dom"; import { useEffect } from "react"; import { useTranslation } from "react-i18next"; import { Order } from "../../models/landing"; import { OrderFormValues } from "../../components/order-form"; import { isErrorMessage } from "../../models/api"; import { URLs } from '../../__data__/urls'; const removeAllSpaces = (str: string) => str.replace(/\s+/g, ''); const getValidCarBodyStyle = (fieldValue: string) => { const carBodyAsNumber = Number(fieldValue); return Number.isNaN(carBodyAsNumber) ? undefined : carBodyAsNumber; }; export const formatFormValues = ({ phone, carNumber, carBody, carColor, carLocation, availableDatetimeBegin, availableDatetimeEnd }: OrderFormValues): Order.Create => { return { customer: { phone }, car: { number: removeAllSpaces(carNumber), body: getValidCarBodyStyle(carBody), color: carColor }, washing: { location: carLocation, begin: dayjs(availableDatetimeBegin).toISOString(), end: dayjs(availableDatetimeEnd).toISOString(), } }; }; export const useHandleCreateOrderMutationResponse = (query: { isSuccess: boolean; data?: { id: Parameters[0]; }; isError: boolean; error?: unknown; }) => { const toast = useToast(); const navigate = useNavigate(); const { t } = useTranslation('~', { keyPrefix: 'dry-wash.order-create.create-order-query', }); useEffect(() => { if (query.isError) { toast({ status: 'error', title: t('error.title'), description: isErrorMessage(query.error) ? query.error : undefined, }); } }, [query.isError]); useEffect(() => { if (query.isSuccess) { const orderId = query.data.id; navigate({ pathname: URLs.orderView.getUrl(orderId) }); toast({ status: 'success', title: t('success.title'), }); } }, [query.isSuccess]); };