From 721ef09dad316cb199166fea73f3127e19972209 Mon Sep 17 00:00:00 2001 From: DhavalGala999 Date: Thu, 11 Dec 2025 12:41:59 +0530 Subject: [PATCH 1/2] fix: safely handle null/NaN/empty in shorten_number Prevents 'Cannot read properties of null (reading "length")' in number cards when aggregate functions (AVG) return null or empty results. - Return empty string for null, undefined, empty string, NaN - Use digit count to decide if shortening is needed - Preserve behavior for valid numeric inputs --- frappe/public/js/frappe/utils/utils.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/utils/utils.js b/frappe/public/js/frappe/utils/utils.js index 49f9f77054..a50e8fa98a 100644 --- a/frappe/public/js/frappe/utils/utils.js +++ b/frappe/public/js/frappe/utils/utils.js @@ -1449,8 +1449,19 @@ Object.assign(frappe.utils, { * max_no_of_decimals - max number of decimals of the shortened number */ - // return number if total digits is lesser than min_length - const len = String(number).match(/\d/g).length; + // return empty for null, undefined, or empty string + if (number == null || number === "") { + return ""; + } + + // extract digits from the number + const digits = String(number).match(/\d/g); + if (!digits) { + return ""; + } + + // return number if total digits are less than min_length + const len = digits.length; if (len < min_length) { return number.toString(); } From 8bca10bcc0cf415d744d74daae548243ee4744d1 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Thu, 22 Jan 2026 16:29:20 +0530 Subject: [PATCH 2/2] refactor: simplyfy conditions --- frappe/public/js/frappe/utils/utils.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/frappe/public/js/frappe/utils/utils.js b/frappe/public/js/frappe/utils/utils.js index a50e8fa98a..49b3917f14 100644 --- a/frappe/public/js/frappe/utils/utils.js +++ b/frappe/public/js/frappe/utils/utils.js @@ -1450,18 +1450,12 @@ Object.assign(frappe.utils, { */ // return empty for null, undefined, or empty string - if (number == null || number === "") { + if (!number || isNaN(number)) { return ""; } - // extract digits from the number - const digits = String(number).match(/\d/g); - if (!digits) { - return ""; - } - - // return number if total digits are less than min_length - const len = digits.length; + // return number if total digits is lesser than min_length + const len = String(number).match(/\d/g)?.length || 0; if (len < min_length) { return number.toString(); }