This commit is contained in:
David Arranz 2024-08-13 14:03:55 +02:00
parent 74ec77e45c
commit 8545b430e3
2 changed files with 72 additions and 15 deletions

View File

@ -1,6 +1,5 @@
import { import {
BackHistoryButton, BackHistoryButton,
ErrorOverlay,
FormDatePickerField, FormDatePickerField,
FormTextAreaField, FormTextAreaField,
FormTextField, FormTextField,
@ -11,7 +10,10 @@ import { t } from "i18next";
import { SubmitButton } from "@/components"; import { SubmitButton } from "@/components";
import { useUnsavedChangesNotifier } from "@/lib/hooks"; import { useUnsavedChangesNotifier } from "@/lib/hooks";
import { Button, Form } from "@/ui"; import { Button, Form } from "@/ui";
import { joiResolver } from "@hookform/resolvers/joi";
import { ICreateQuote_Request_DTO } from "@shared/contexts"; import { ICreateQuote_Request_DTO } from "@shared/contexts";
import Joi from "joi";
import { useMemo } from "react";
import { SubmitHandler, useForm } from "react-hook-form"; import { SubmitHandler, useForm } from "react-hook-form";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
@ -22,14 +24,30 @@ interface QuoteDataForm extends ICreateQuote_Request_DTO {}
export const QuoteCreate = () => { export const QuoteCreate = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { useCreate } = useQuotes(); const { useCreate } = useQuotes();
const { mutate, error: mutateError, isError, isPending } = useCreate(); const { mutate, isPending } = useCreate();
const form = useForm<QuoteDataForm>({ const defaultValues = useMemo(
defaultValues: { () => ({
date: new Date(Date.now()).toUTCString(), date: new Date(Date.now()).toUTCString(),
customer_information: "", customer_information: "",
reference: "", reference: "",
}, }),
[]
);
const form = useForm<QuoteDataForm>({
mode: "onBlur",
defaultValues,
resolver: joiResolver(
Joi.object({
reference: Joi.string().required(),
date: Joi.string().required(),
customer_information: Joi.string().required(),
}),
{
//messages: SpanishJoiMessages,
}
),
}); });
const { formState, reset, getValues, handleSubmit } = form; const { formState, reset, getValues, handleSubmit } = form;
@ -61,9 +79,9 @@ export const QuoteCreate = () => {
return <LoadingOverlay title='Guardando ajustes' />; return <LoadingOverlay title='Guardando ajustes' />;
} }
if (isError) { /*if (isError) {
return <ErrorOverlay errorMessage={mutateError?.message} />; return <ErrorOverlay errorMessage={mutateError?.message} />;
} }*/
if (isPending) { if (isPending) {
return <LoadingOverlay />; return <LoadingOverlay />;

View File

@ -43,23 +43,62 @@ const onResponse = (response: AxiosResponse): AxiosResponse => {
}; };
const onResponseError = (error: AxiosError): Promise<AxiosError> => { const onResponseError = (error: AxiosError): Promise<AxiosError> => {
console.group("[response error]"); console.log("[response error]");
console.log(error); console.log(error);
if (error.response) { if (error.response) {
// La respuesta fue hecha y el servidor respondió con un código de estado // La respuesta fue hecha y el servidor respondió con un código de estado
// que esta fuera del rango de 2xx // que esta fuera del rango de 2xx
console.log("1 => El servidor respondió con un código de estado > 200"); console.log("1 => El servidor respondió con un código de estado > 200");
console.log(error.response.data);
console.log(error.response.status);
switch (error.response.status) { const data = error.response.data;
const status = error.response.status;
console.log(data);
console.log(status);
/*
{
detail: "Quote data not valid",
instance: "/api/v1/quotes",
status: 422,
title: "Unprocessable Entity",
type: "about:blank",
context: {
params: {
},
query: {
},
body: {
date: "2024-08-13",
customer_information: "",
reference: "",
status: "draft",
id: "9c1c6073-127a-4bde-a73c-6229efb51ad0",
},
},
extra: {
errors: [
{
reference: "{reference} is not allowed to be empty",
},
{
customer_information: "{customer_information} is not allowed to be empty",
},
],
},
}
*/
switch (status) {
case 400: case 400:
console.error("Bad Request"); console.error("Bad Request");
break; break;
case 401: case 401:
console.error("UnAuthorized"); console.error("UnAuthorized");
return (window.location.href = "/logout"); window.location.href = "/logout";
break; break;
case 403: case 403:
console.error("Forbidden"); console.error("Forbidden");
@ -74,9 +113,9 @@ const onResponseError = (error: AxiosError): Promise<AxiosError> => {
case 422: case 422:
console.error("Unprocessable Content"); console.error("Unprocessable Content");
throw error.response.data; break;
} }
console.error(error.response.status); return Promise.reject(data);
} else if (error.request) { } else if (error.request) {
// La petición fue hecha pero no se recibió respuesta // La petición fue hecha pero no se recibió respuesta
console.log("2 => El servidor no respondió"); console.log("2 => El servidor no respondió");
@ -87,7 +126,7 @@ const onResponseError = (error: AxiosError): Promise<AxiosError> => {
console.error(error); console.error(error);
} }
console.groupEnd(); console.groupEnd();
throw error; return Promise.reject(error);
}; };
export function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance { export function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance {