Skip to content

Commit bd0158b

Browse files
committed
feat: add handleErrorReq function for improved error handling in useErrorHandling composable
1 parent 1dd9ca2 commit bd0158b

File tree

2 files changed

+89
-42
lines changed

2 files changed

+89
-42
lines changed

apps/web/src/components/identityForm/index.vue

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const emits = defineEmits(['refreshTarget'])
6767
const $q = useQuasar()
6868
const router = useRouter()
6969
const { getStateColor, getStateName } = useIdentityStates()
70-
const { handleError } = useErrorHandling()
70+
const { handleError, handleErrorReq } = useErrorHandling()
7171
7272
const identity = ref<Identity>(props.identity)
7373
const tabs = ref(props.identity?.additionalFields?.objectClasses ?? [])
@@ -106,37 +106,60 @@ async function addSchema(schema) {
106106
}
107107
108108
async function submit() {
109-
const sanitizedIdentity = { ...props.identity }
109+
const sanitizedIdentity = { ...identity.value }
110110
delete sanitizedIdentity.metadata
111111
if (sanitizedIdentity?.additionalFields?.validations) delete sanitizedIdentity.additionalFields.validations
112112
113-
const { data: result, pending, error, refresh } = await useHttp<any>(`/management/identities/${props.identity._id}`, { method: 'PATCH', body: sanitizedIdentity })
114-
if (error.value) {
115-
console.log('error', error.value.data.validations)
116-
validations.value = { ...error.value.data.validations }
117-
// error.value = error.value.cause.response._data
118-
handleError({ error: error.value, message: 'Erreur lors de la sauvegarde' })
119-
} else {
120-
validations.value = null
113+
const requestOptions = { method: 'PATCH', body: JSON.stringify(sanitizedIdentity) }
114+
try {
115+
const result = await $http.patch(`/management/identities/${identity.value._id}`, requestOptions)
121116
$q.notify({ message: 'Sauvegarde effectuée', color: 'positive', position: 'top-right', icon: 'mdi-check-circle-outline' })
122-
emits('refreshTarget', { ...result.value.data })
117+
validations.value = null
118+
} catch (error) {
119+
handleErrorReq({ error: error, message: 'Erreur lors de la sauvegarde' })
120+
console.log('error', error.data.validations)
121+
validations.value = { ...error.data.validations }
123122
}
123+
124+
// const { data: result, pending, error, refresh } = await useHttp<any>(`/management/identities/${identity.value._id}`, { method: 'PATCH', body: sanitizedIdentity })
125+
// if (error.value) {
126+
// console.log('error', error.value.data.validations)
127+
// validations.value = { ...error.value.data.validations }
128+
// // error.value = error.value.cause.response._data
129+
// handleError({ error: error.value, message: 'Erreur lors de la sauvegarde' })
130+
// } else {
131+
// validations.value = null
132+
// $q.notify({ message: 'Sauvegarde effectuée', color: 'positive', position: 'top-right', icon: 'mdi-check-circle-outline' })
133+
// emits('refreshTarget', { ...result.value.data })
134+
// }
124135
}
125136
126137
async function create() {
127-
console.log('create from form')
128-
const sanitizedIdentity = { ...props.identity }
138+
const sanitizedIdentity = { ...identity.value }
129139
delete sanitizedIdentity.metadata
140+
console.log('create from form', sanitizedIdentity)
130141
131-
const { data: result, pending, error, refresh } = await useHttp(`/management/identities`, { method: 'POST', body: { ...sanitizedIdentity } })
132-
if (error.value) {
133-
handleError({ error: error.value, message: 'Erreur lors de la création' })
134-
console.log('error', error.value.data.validations)
135-
validations.value = { ...error.value.data.validations }
136-
} else {
142+
const requestOptions = { method: 'POST', body: JSON.stringify(sanitizedIdentity) }
143+
try {
144+
const data = await $http.post(`/management/identities`, requestOptions)
137145
$q.notify({ message: 'Création effectuée', color: 'positive', position: 'top-right', icon: 'mdi-check-circle-outline' })
138146
emits('refreshTarget', {})
147+
validations.value = null
148+
} catch (error) {
149+
handleErrorReq({ error: error, message: 'Erreur lors de la création' })
150+
console.log('error', error.data.validations)
151+
validations.value = { ...error.data.validations }
139152
}
153+
154+
// const { data: result, pending, error, refresh } = await useHttp(`/management/identities`, { method: 'POST', body: { ...sanitizedIdentity } })
155+
// if (error.value) {
156+
// handleError({ error: error.value, message: 'Erreur lors de la création' })
157+
// console.log('error', error.value.data.validations)
158+
// validations.value = { ...error.value.data.validations }
159+
// } else {
160+
// $q.notify({ message: 'Création effectuée', color: 'positive', position: 'top-right', icon: 'mdi-check-circle-outline' })
161+
// emits('refreshTarget', {})
162+
// }
140163
}
141164
142165
const stateName = computed(() => {

apps/web/src/composables/useErrorHandling.ts

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,62 @@ import type { IFetchError } from "ofetch";
33
import { Notify } from "quasar";
44

55
type useErrorHandlingReturnType = {
6-
handleError: (payload: handleErrorPayload) => void;
6+
handleError: (payload: handleErrorPayload) => void;
7+
handleErrorReq: (payload: handleErrorPayload) => void;
78
};
89

910
type handleErrorPayload = {
10-
error: any;
11-
redirect?: boolean;
12-
notify?: boolean;
13-
message?: string;
11+
error: any;
12+
redirect?: boolean;
13+
notify?: boolean;
14+
message?: string;
1415
};
1516

1617
//const $q = useQuasar();
1718

1819
export function useErrorHandling(): useErrorHandlingReturnType {
1920
function handleError(payload: handleErrorPayload) {
20-
const { error, redirect = false, notify = true, message = 'Une erreur est survenue' } = payload;
21-
const msg = error.cause.response._data.message || error.cause.response._data.message || message;
22-
console.error('handleError', error);
23-
if (notify) {
24-
Notify.create({
25-
message: msg,
26-
color: 'negative',
27-
position: 'top-right',
28-
icon: 'mdi-alert-circle-outline',
29-
});
21+
const { error, redirect = false, notify = true, message = 'Une erreur est survenue' } = payload;
22+
const msg = error.cause.response._data.message || error.cause.response._data.message || message;
23+
console.error('handleError', error);
24+
if (notify) {
25+
Notify.create({
26+
message: msg,
27+
color: 'negative',
28+
position: 'top-right',
29+
icon: 'mdi-alert-circle-outline',
30+
});
31+
}
32+
if (redirect) {
33+
throw createError({
34+
fatal: true,
35+
message: msg,
36+
statusCode: error.cause.response._data.statusCode || error.cause.response._data.statusCode || 500,
37+
});
38+
}
3039
}
31-
if (redirect) {
32-
throw createError({
33-
fatal: true,
34-
message: msg,
35-
statusCode: error.cause.response._data.statusCode || error.cause.response._data.statusCode || 500,
36-
});
40+
41+
function handleErrorReq(payload: handleErrorPayload) {
42+
const { error, redirect = false, notify = true, message = 'Une erreur est survenue' } = payload;
43+
console.log('handleErrorReq error', error);
44+
const msg = error.response?._data?.message || error.data?.message || message;
45+
console.error('handleErrorReq', error);
46+
if (notify) {
47+
Notify.create({
48+
message: msg,
49+
color: 'negative',
50+
position: 'top-right',
51+
icon: 'mdi-alert-circle-outline',
52+
});
53+
}
54+
if (redirect) {
55+
throw createError({
56+
fatal: true,
57+
message: msg,
58+
statusCode: error.response?._data?.statusCode || error.data?.statusCode || 500,
59+
});
60+
}
3761
}
38-
}
39-
return { handleError };
62+
63+
return { handleError, handleErrorReq };
4064
}

0 commit comments

Comments
 (0)