feat(country-province-city): add, edit functionality

This commit is contained in:
ghazall-ag
2025-11-17 00:40:53 +03:30
parent 77cc7534a0
commit 7cc442b600
20 changed files with 2008 additions and 280 deletions

86
src/utils/errorHandler.js Normal file
View File

@@ -0,0 +1,86 @@
/**
* استخراج پیام خطا از response سرور
* این تابع سعی می‌کند پیام خطا را از مکان‌های مختلف در response پیدا کند
*
* @param {Object} error - شیء خطا از axios یا catch
* @returns {string} - پیام خطا
*/
export function getErrorMessage(error) {
// اگر error خودش یک string باشد
if (typeof error === 'string') {
return error;
}
// بررسی response.data برای پیام‌های مختلف
const responseData = error?.response?.data || error?.data;
if (responseData) {
// بررسی فیلدهای مختلف که ممکن است پیام خطا در آن‌ها باشد
if (responseData.message) return responseData.message;
if (responseData.Message) return responseData.Message;
if (responseData.error) return responseData.error;
if (responseData.Error) return responseData.Error;
if (responseData.errorMessage) return responseData.errorMessage;
if (responseData.error_message) return responseData.error_message;
// اگر errors یک آرایه باشد
if (Array.isArray(responseData.errors) && responseData.errors.length > 0) {
return responseData.errors[0]?.message || responseData.errors[0] || String(responseData.errors[0]);
}
// اگر errors یک object باشد
if (responseData.errors && typeof responseData.errors === 'object') {
const firstError = Object.values(responseData.errors)[0];
if (Array.isArray(firstError) && firstError.length > 0) {
return firstError[0];
}
if (typeof firstError === 'string') {
return firstError;
}
}
}
// بررسی error.message
if (error?.message) {
return error.message;
}
// پیام پیش‌فرض بر اساس status code
const status = error?.response?.status || error?.status;
if (status) {
const statusMessages = {
400: 'Bad Request',
401: 'Unauthorized',
403: 'Forbidden',
404: 'Not Found',
409: 'Conflict',
422: 'Validation Error',
500: 'Internal Server Error',
502: 'Bad Gateway',
503: 'Service Unavailable',
};
if (statusMessages[status]) {
return statusMessages[status];
}
}
// پیام پیش‌فرض
return 'An error occurred. Please try again.';
}
/**
* استخراج پیام موفقیت از response سرور
*
* @param {Object} response - response از axios
* @returns {string} - پیام موفقیت
*/
export function getSuccessMessage(response) {
const data = response?.data || response;
if (data?.message) return data.message;
if (data?.Message) return data.Message;
if (data?.successMessage) return data.successMessage;
return null;
}