This is an automated email from the ASF dual-hosted git repository.

jli pushed a commit to branch 4.1
in repository https://gitbox.apache.org/repos/asf/superset.git

commit a271c39b62e6386dfd495ae81e74182e25cc4543
Author: JUST.in DO IT <[email protected]>
AuthorDate: Wed May 14 10:19:21 2025 -0700

    fix(table-chart): time shift is not working (#33425)
    
    (cherry picked from commit dc4474889d84c258b94228d31017bef71117cd32)
---
 .../src/connection/callApi/parseResponse.ts          | 20 +++++++++++++++-----
 .../test/connection/callApi/parseResponse.test.ts    |  3 ++-
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git 
a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
 
b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
index 52dc348084..4ee81b80b3 100644
--- 
a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
+++ 
b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
@@ -57,11 +57,21 @@ export default async function parseResponse<T extends 
ParseMethod = 'json'>(
     const json = JSONbig.parse(rawData);
     const result: JsonResponse = {
       response,
-      // `json-bigint` could not handle floats well, see 
sidorares/json-bigint#62
-      // TODO: clean up after json-bigint>1.0.1 is released
-      json: cloneDeepWith(json, (value: any) =>
-        value?.isInteger?.() === false ? Number(value) : undefined,
-      ),
+      json: cloneDeepWith(json, (value: any) => {
+        if (
+          value?.isInteger?.() === true &&
+          (value?.isGreaterThan?.(Number.MAX_SAFE_INTEGER) ||
+            value?.isLessThan?.(Number.MIN_SAFE_INTEGER))
+        ) {
+          return BigInt(value);
+        }
+        // // `json-bigint` could not handle floats well, see 
sidorares/json-bigint#62
+        // // TODO: clean up after json-bigint>1.0.1 is released
+        if (value?.isNaN?.() === false) {
+          return value?.toNumber?.();
+        }
+        return undefined;
+      }),
     };
     return result as ReturnType;
   }
diff --git 
a/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
 
b/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
index b08b5b8cb8..29f3ab4fe5 100644
--- 
a/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
+++ 
b/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
@@ -141,7 +141,7 @@ describe('parseResponse()', () => {
     const mockBigIntUrl = '/mock/get/bigInt';
     const mockGetBigIntPayload = `{
       "value": 9223372036854775807, "minus": { "value": 
-483729382918228373892, "str": "something" },
-      "number": 1234, "floatValue": { "plus": 0.3452211361231223, "minus": 
-0.3452211361231223 },
+      "number": 1234, "floatValue": { "plus": 0.3452211361231223, "minus": 
-0.3452211361231223, "even": 1234567890123456.0000000 },
       "string.constructor": "data.constructor",
       "constructor": "constructor"
     }`;
@@ -159,6 +159,7 @@ describe('parseResponse()', () => {
     expect(responseBigNumber.json.floatValue.minus).toEqual(
       -0.3452211361231223,
     );
+    expect(responseBigNumber.json.floatValue.even).toEqual(1234567890123456);
     expect(
       responseBigNumber.json.floatValue.plus +
         responseBigNumber.json.floatValue.minus,

Reply via email to