From 1bc3eb30e0f94f0aae27ae84be948b0d5b2865b5 Mon Sep 17 00:00:00 2001 From: vyshnav mv Date: Thu, 22 Jan 2026 02:27:04 -0800 Subject: [PATCH] fix:added generic API error handler and integrate with payment modes API & Customer API --- pos/src/lib/customer-api.ts | 4 +++- pos/src/lib/error-handler.ts | 27 +++++++++++++++++++++++++++ pos/src/lib/payment-api.ts | 10 +++++----- 3 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 pos/src/lib/error-handler.ts diff --git a/pos/src/lib/customer-api.ts b/pos/src/lib/customer-api.ts index a168899e..d578c383 100644 --- a/pos/src/lib/customer-api.ts +++ b/pos/src/lib/customer-api.ts @@ -1,5 +1,6 @@ import { DOCTYPES } from '../data/doctypes'; import { db, call } from './frappe-sdk'; +import { handleApiError } from './error-handler'; export interface Customer { name: string; @@ -103,6 +104,7 @@ export async function searchCustomers(search: string, limit = 5) { return res.message || []; } catch (error) { console.error('Customer search error:', error); - throw error; + const errorMessage = handleApiError(error); + throw new Error(errorMessage); } } \ No newline at end of file diff --git a/pos/src/lib/error-handler.ts b/pos/src/lib/error-handler.ts new file mode 100644 index 00000000..e307a721 --- /dev/null +++ b/pos/src/lib/error-handler.ts @@ -0,0 +1,27 @@ +export interface ApiError { + message?: string; + exc_type?: string; + _server_messages?: string; +} + +export const handleApiError = (error: any): string => { + console.error("API Error:", error); + if (error?.response?.data?._server_messages) { + try { + const serverMessages = JSON.parse(error.response.data._server_messages); + const parsedMessage = JSON.parse(serverMessages[0]); + return parsedMessage.message || "Something went wrong"; + } catch { + return "Server error occurred"; + } + } + + if (error?.response?.data?.message) { + return error.response.data.message; + } + + if (error?.message) { + return error.message; + } + return "Unexpected error occurred. Please try again."; +}; diff --git a/pos/src/lib/payment-api.ts b/pos/src/lib/payment-api.ts index 43171461..365672b0 100644 --- a/pos/src/lib/payment-api.ts +++ b/pos/src/lib/payment-api.ts @@ -1,4 +1,5 @@ import { call } from './frappe-sdk'; +import { handleApiError } from './error-handler'; interface PaymentMode { mode_of_payment: string; @@ -19,14 +20,13 @@ export const getPaymentModes = async (): Promise => { try { const response = await call.get("ury.ury_pos.api.getModeOfPayment"); - const paymentModes = response.message.map((mode:PaymentMode) => mode.mode_of_payment); - - // Cache in session storage + const paymentModes = response.message.map((mode: PaymentMode) => mode.mode_of_payment); sessionStorage.setItem('payment_modes', JSON.stringify(paymentModes)); - + return paymentModes; } catch (error) { console.error('Failed to fetch payment modes:', error); - throw error; + const errorMessage = handleApiError(error); + throw new Error(errorMessage); } }; \ No newline at end of file