@ledgerhq/live-common 34.48.0-nightly.4 → 34.48.0-nightly.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAccountShape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.d.ts","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
7
+ const getAccountShape_1 = require("../getAccountShape");
8
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
9
+ encodeAccountId: jest.fn(() => "accId"),
10
+ }));
11
+ const mergeOpsMock = jest.fn();
12
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
13
+ mergeOps: (...args) => mergeOpsMock(...args),
14
+ }));
15
+ const listOperationsMock = jest.fn();
16
+ const getBalanceMock = jest.fn();
17
+ const lastBlockMock = jest.fn();
18
+ const getTokenFromAssetMock = jest.fn();
19
+ const chainSpecificGetAccountShapeMock = jest.fn();
20
+ jest.mock("../alpaca", () => ({
21
+ getAlpacaApi: () => ({
22
+ lastBlock: (...a) => lastBlockMock(...a),
23
+ getBalance: (...a) => getBalanceMock(...a),
24
+ listOperations: (...a) => listOperationsMock(...a),
25
+ getTokenFromAsset: (...a) => getTokenFromAssetMock(...a),
26
+ getChainSpecificRules: () => ({
27
+ getAccountShape: (...a) => chainSpecificGetAccountShapeMock(...a),
28
+ }),
29
+ }),
30
+ }));
31
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
32
+ const extractBalanceMock = jest.fn();
33
+ jest.mock("../utils", () => ({
34
+ adaptCoreOperationToLiveOperation: (...a) => adaptCoreOperationToLiveOperationMock(...a),
35
+ extractBalance: (...a) => extractBalanceMock(...a),
36
+ }));
37
+ const inferSubOperationsMock = jest.fn();
38
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
39
+ inferSubOperations: (...a) => inferSubOperationsMock(...a),
40
+ }));
41
+ const buildSubAccountsMock = jest.fn();
42
+ jest.mock("../buildSubAccounts", () => ({
43
+ buildSubAccounts: (...a) => buildSubAccountsMock(...a),
44
+ }));
45
+ // Test matrix for Stellar & XRP
46
+ const chains = [
47
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
48
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
49
+ ];
50
+ describe("genericGetAccountShape (stellar & xrp)", () => {
51
+ beforeEach(() => {
52
+ jest.clearAllMocks();
53
+ });
54
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
55
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
56
+ const oldOp = {
57
+ hash: "h1",
58
+ blockHeight: 10,
59
+ type: "OPT_IN",
60
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
61
+ };
62
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
63
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
64
+ getBalanceMock.mockResolvedValue([
65
+ { asset: { type: "native" }, value: "1000", locked: "300" },
66
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
67
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
68
+ ]);
69
+ getTokenFromAssetMock.mockImplementation(asset => asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null);
70
+ const coreOp = { hash: "h2", height: 12 };
71
+ listOperationsMock.mockResolvedValue([[coreOp]]);
72
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
73
+ hash: op.hash,
74
+ type: "IN",
75
+ blockHeight: 12,
76
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
77
+ }));
78
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
79
+ buildSubAccountsMock.mockReturnValue([
80
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
81
+ ]);
82
+ inferSubOperationsMock.mockImplementation(hash => hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : []);
83
+ lastBlockMock.mockResolvedValue({ height: 123 });
84
+ const getShape = (0, getAccountShape_1.genericGetAccountShape)(network, currency.id);
85
+ const result = await getShape({
86
+ address: `${currency.id}_addr1`,
87
+ initialAccount,
88
+ currency,
89
+ derivationMode: "",
90
+ }, { paginationConfig: {} });
91
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
92
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
93
+ minHeight: 11,
94
+ order: "asc",
95
+ lastPagingToken: "pt1",
96
+ });
97
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
98
+ expect(assetsBalancePassed).toHaveLength(1);
99
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
100
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
101
+ expect(assetOpsPassed).toHaveLength(1);
102
+ expect(assetOpsPassed[0].hash).toBe("h2");
103
+ expect(result).toMatchObject({
104
+ balance: new bignumber_js_1.default(1000),
105
+ spendableBalance: new bignumber_js_1.default(700),
106
+ blockHeight: 123,
107
+ operationsCount: 2,
108
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
109
+ operations: [
110
+ {
111
+ hash: "h2",
112
+ type: "IN",
113
+ blockHeight: 12,
114
+ subOperations: [{ id: `${currency.id}_subOp1` }],
115
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
116
+ },
117
+ oldOp,
118
+ ],
119
+ });
120
+ });
121
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
122
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
123
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
124
+ listOperationsMock.mockResolvedValue([[]]);
125
+ buildSubAccountsMock.mockReturnValue([]);
126
+ const getShape = (0, getAccountShape_1.genericGetAccountShape)(network, currency.id);
127
+ const result = await getShape({
128
+ address: `${currency.id}_addr2`,
129
+ initialAccount: undefined,
130
+ currency,
131
+ derivationMode: "",
132
+ }, { paginationConfig: {} });
133
+ expect(result).toMatchObject({
134
+ operations: [],
135
+ blockHeight: 0,
136
+ operationsCount: 0,
137
+ subAccounts: [],
138
+ balance: new bignumber_js_1.default(0),
139
+ spendableBalance: new bignumber_js_1.default(0),
140
+ });
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=getAccountShape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.js","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAyCA"}
1
+ {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAoDA"}
@@ -18,7 +18,7 @@ const emptyData = () => ({
18
18
  pagination: { nextCursor: "" },
19
19
  });
20
20
  function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, product, version, isStaging, }) {
21
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } = (0, api_1.useGetAssetsDataInfiniteQuery)({
21
+ const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError, isFetchingNextPage, } = (0, api_1.useGetAssetsDataInfiniteQuery)({
22
22
  search,
23
23
  useCase,
24
24
  currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
@@ -42,9 +42,10 @@ function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, pr
42
42
  }, emptyData());
43
43
  }, [data]);
44
44
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
45
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
45
46
  return {
46
47
  data: joinedPages,
47
- isLoading: isLoading || isFetching,
48
+ isLoading: isInitialLoading,
48
49
  error,
49
50
  loadNext: hasMore ? fetchNextPage : undefined,
50
51
  isSuccess,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mDAA0E;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GACtF,IAAA,mCAA6B,EAAC;QAC5B,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5D,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS,IAAI,UAAU;QAClC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAzDD,sCAyDC"}
1
+ {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mDAA0E;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,GAAG,IAAA,mCAA6B,EAAC;QAChC,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE1E,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,gBAAgB;QAC3B,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AApED,sCAoEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAccountShape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.d.ts","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { genericGetAccountShape } from "../getAccountShape";
3
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
4
+ encodeAccountId: jest.fn(() => "accId"),
5
+ }));
6
+ const mergeOpsMock = jest.fn();
7
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
8
+ mergeOps: (...args) => mergeOpsMock(...args),
9
+ }));
10
+ const listOperationsMock = jest.fn();
11
+ const getBalanceMock = jest.fn();
12
+ const lastBlockMock = jest.fn();
13
+ const getTokenFromAssetMock = jest.fn();
14
+ const chainSpecificGetAccountShapeMock = jest.fn();
15
+ jest.mock("../alpaca", () => ({
16
+ getAlpacaApi: () => ({
17
+ lastBlock: (...a) => lastBlockMock(...a),
18
+ getBalance: (...a) => getBalanceMock(...a),
19
+ listOperations: (...a) => listOperationsMock(...a),
20
+ getTokenFromAsset: (...a) => getTokenFromAssetMock(...a),
21
+ getChainSpecificRules: () => ({
22
+ getAccountShape: (...a) => chainSpecificGetAccountShapeMock(...a),
23
+ }),
24
+ }),
25
+ }));
26
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
27
+ const extractBalanceMock = jest.fn();
28
+ jest.mock("../utils", () => ({
29
+ adaptCoreOperationToLiveOperation: (...a) => adaptCoreOperationToLiveOperationMock(...a),
30
+ extractBalance: (...a) => extractBalanceMock(...a),
31
+ }));
32
+ const inferSubOperationsMock = jest.fn();
33
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
34
+ inferSubOperations: (...a) => inferSubOperationsMock(...a),
35
+ }));
36
+ const buildSubAccountsMock = jest.fn();
37
+ jest.mock("../buildSubAccounts", () => ({
38
+ buildSubAccounts: (...a) => buildSubAccountsMock(...a),
39
+ }));
40
+ // Test matrix for Stellar & XRP
41
+ const chains = [
42
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
43
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
44
+ ];
45
+ describe("genericGetAccountShape (stellar & xrp)", () => {
46
+ beforeEach(() => {
47
+ jest.clearAllMocks();
48
+ });
49
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
50
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
51
+ const oldOp = {
52
+ hash: "h1",
53
+ blockHeight: 10,
54
+ type: "OPT_IN",
55
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
56
+ };
57
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
58
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
59
+ getBalanceMock.mockResolvedValue([
60
+ { asset: { type: "native" }, value: "1000", locked: "300" },
61
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
62
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
63
+ ]);
64
+ getTokenFromAssetMock.mockImplementation(asset => asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null);
65
+ const coreOp = { hash: "h2", height: 12 };
66
+ listOperationsMock.mockResolvedValue([[coreOp]]);
67
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
68
+ hash: op.hash,
69
+ type: "IN",
70
+ blockHeight: 12,
71
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
72
+ }));
73
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
74
+ buildSubAccountsMock.mockReturnValue([
75
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
76
+ ]);
77
+ inferSubOperationsMock.mockImplementation(hash => hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : []);
78
+ lastBlockMock.mockResolvedValue({ height: 123 });
79
+ const getShape = genericGetAccountShape(network, currency.id);
80
+ const result = await getShape({
81
+ address: `${currency.id}_addr1`,
82
+ initialAccount,
83
+ currency,
84
+ derivationMode: "",
85
+ }, { paginationConfig: {} });
86
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
87
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
88
+ minHeight: 11,
89
+ order: "asc",
90
+ lastPagingToken: "pt1",
91
+ });
92
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
93
+ expect(assetsBalancePassed).toHaveLength(1);
94
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
95
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
96
+ expect(assetOpsPassed).toHaveLength(1);
97
+ expect(assetOpsPassed[0].hash).toBe("h2");
98
+ expect(result).toMatchObject({
99
+ balance: new BigNumber(1000),
100
+ spendableBalance: new BigNumber(700),
101
+ blockHeight: 123,
102
+ operationsCount: 2,
103
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
104
+ operations: [
105
+ {
106
+ hash: "h2",
107
+ type: "IN",
108
+ blockHeight: 12,
109
+ subOperations: [{ id: `${currency.id}_subOp1` }],
110
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
111
+ },
112
+ oldOp,
113
+ ],
114
+ });
115
+ });
116
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
117
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
118
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
119
+ listOperationsMock.mockResolvedValue([[]]);
120
+ buildSubAccountsMock.mockReturnValue([]);
121
+ const getShape = genericGetAccountShape(network, currency.id);
122
+ const result = await getShape({
123
+ address: `${currency.id}_addr2`,
124
+ initialAccount: undefined,
125
+ currency,
126
+ derivationMode: "",
127
+ }, { paginationConfig: {} });
128
+ expect(result).toMatchObject({
129
+ operations: [],
130
+ blockHeight: 0,
131
+ operationsCount: 0,
132
+ subAccounts: [],
133
+ balance: new BigNumber(0),
134
+ spendableBalance: new BigNumber(0),
135
+ });
136
+ });
137
+ });
138
+ });
139
+ //# sourceMappingURL=getAccountShape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAccountShape.test.js","sourceRoot":"","sources":["../../../../src/bridge/generic-alpaca/tests/getAccountShape.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAyCA"}
1
+ {"version":3,"file":"useAssetsData.d.ts","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiBvE,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;EAoDA"}
@@ -15,7 +15,7 @@ const emptyData = () => ({
15
15
  pagination: { nextCursor: "" },
16
16
  });
17
17
  export function useAssetsData({ search, currencyIds, useCase, areCurrenciesFiltered, product, version, isStaging, }) {
18
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } = useGetAssetsDataInfiniteQuery({
18
+ const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError, isFetchingNextPage, } = useGetAssetsDataInfiniteQuery({
19
19
  search,
20
20
  useCase,
21
21
  currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
@@ -39,9 +39,10 @@ export function useAssetsData({ search, currencyIds, useCase, areCurrenciesFilte
39
39
  }, emptyData());
40
40
  }, [data]);
41
41
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
42
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
42
43
  return {
43
44
  data: joinedPages,
44
- isLoading: isLoading || isFetching,
45
+ isLoading: isInitialLoading,
45
46
  error,
46
47
  loadNext: hasMore ? fetchNextPage : undefined,
47
48
  isSuccess,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GACtF,6BAA6B,CAAC;QAC5B,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5D,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS,IAAI,UAAU;QAClC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useAssetsData.js","sourceRoot":"","sources":["../../../src/modularDrawer/hooks/useAssetsData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV;IACD,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,SAAS,GASV;IACC,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,GAAG,6BAA6B,CAAC;QAChC,MAAM;QACN,OAAO;QACP,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,EAAE,KAAK,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC9E,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAElF,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACvD,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAEvD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE1E,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,gBAAgB;QAC3B,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ledgerhq/live-common",
3
3
  "description": "Common ground for the Ledger Live apps",
4
- "version": "34.48.0-nightly.4",
4
+ "version": "34.48.0-nightly.6",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/LedgerHQ/ledger-live.git"
@@ -193,7 +193,7 @@
193
193
  "@ledgerhq/coin-ton": "^0.14.1-nightly.4",
194
194
  "@ledgerhq/coin-tron": "^5.4.0-nightly.4",
195
195
  "@ledgerhq/coin-vechain": "^2.10.0-nightly.4",
196
- "@ledgerhq/coin-xrp": "^7.4.0-nightly.4",
196
+ "@ledgerhq/coin-xrp": "^7.4.0-nightly.5",
197
197
  "@ledgerhq/crypto-icons-ui": "^1.19.0-nightly.1",
198
198
  "@ledgerhq/cryptoassets": "^13.28.0-nightly.2",
199
199
  "@ledgerhq/device-core": "^0.6.3-nightly.2",
@@ -227,17 +227,17 @@
227
227
  "@ledgerhq/live-dmk-shared": "^0.12.3",
228
228
  "@ledgerhq/live-env": "^2.16.0-nightly.1",
229
229
  "@ledgerhq/live-hooks": "0.1.0",
230
- "@ledgerhq/live-network": "^2.0.17-nightly.1",
231
230
  "@ledgerhq/live-nft": "^0.8.20-nightly.4",
232
231
  "@ledgerhq/live-promise": "^0.1.1",
233
232
  "@ledgerhq/live-signer-canton": "^0.2.4-nightly.4",
234
233
  "@ledgerhq/live-signer-evm": "^0.7.5-nightly.4",
235
234
  "@ledgerhq/live-signer-solana": "^0.5.5-nightly.4",
236
- "@ledgerhq/live-wallet": "^0.13.1-nightly.4",
235
+ "@ledgerhq/live-network": "^2.0.17-nightly.1",
236
+ "@ledgerhq/live-wallet": "^0.13.1-nightly.5",
237
237
  "@ledgerhq/logs": "^6.13.0",
238
238
  "@ledgerhq/speculos-transport": "^0.2.10-nightly.1",
239
- "@ledgerhq/wallet-api-acre-module": "^0.7.0-nightly.0",
240
- "@ledgerhq/wallet-api-exchange-module": "^0.16.0"
239
+ "@ledgerhq/wallet-api-exchange-module": "^0.16.0",
240
+ "@ledgerhq/wallet-api-acre-module": "^0.7.0-nightly.0"
241
241
  },
242
242
  "devDependencies": {
243
243
  "@solana/web3.js": "1.95.4",
@@ -0,0 +1,173 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { genericGetAccountShape } from "../getAccountShape";
3
+
4
+ jest.mock("@ledgerhq/coin-framework/account/index", () => ({
5
+ encodeAccountId: jest.fn(() => "accId"),
6
+ }));
7
+
8
+ const mergeOpsMock = jest.fn();
9
+ jest.mock("@ledgerhq/coin-framework/bridge/jsHelpers", () => ({
10
+ mergeOps: (...args: any[]) => mergeOpsMock(...args),
11
+ }));
12
+
13
+ const listOperationsMock = jest.fn();
14
+ const getBalanceMock = jest.fn();
15
+ const lastBlockMock = jest.fn();
16
+ const getTokenFromAssetMock = jest.fn();
17
+ const chainSpecificGetAccountShapeMock = jest.fn();
18
+ jest.mock("../alpaca", () => ({
19
+ getAlpacaApi: () => ({
20
+ lastBlock: (...a: any[]) => lastBlockMock(...a),
21
+ getBalance: (...a: any[]) => getBalanceMock(...a),
22
+ listOperations: (...a: any[]) => listOperationsMock(...a),
23
+ getTokenFromAsset: (...a: any[]) => getTokenFromAssetMock(...a),
24
+ getChainSpecificRules: () => ({
25
+ getAccountShape: (...a: any[]) => chainSpecificGetAccountShapeMock(...a),
26
+ }),
27
+ }),
28
+ }));
29
+
30
+ const adaptCoreOperationToLiveOperationMock = jest.fn();
31
+ const extractBalanceMock = jest.fn();
32
+ jest.mock("../utils", () => ({
33
+ adaptCoreOperationToLiveOperation: (...a: any[]) => adaptCoreOperationToLiveOperationMock(...a),
34
+ extractBalance: (...a: any[]) => extractBalanceMock(...a),
35
+ }));
36
+
37
+ const inferSubOperationsMock = jest.fn();
38
+ jest.mock("@ledgerhq/coin-framework/serialization", () => ({
39
+ inferSubOperations: (...a: any[]) => inferSubOperationsMock(...a),
40
+ }));
41
+
42
+ const buildSubAccountsMock = jest.fn();
43
+ jest.mock("../buildSubAccounts", () => ({
44
+ buildSubAccounts: (...a: any[]) => buildSubAccountsMock(...a),
45
+ }));
46
+
47
+ // Test matrix for Stellar & XRP
48
+ const chains = [
49
+ { currency: { id: "stellar", name: "Stellar" }, network: "testnet" },
50
+ { currency: { id: "ripple", name: "XRP" }, network: "mainnet" },
51
+ ];
52
+
53
+ describe("genericGetAccountShape (stellar & xrp)", () => {
54
+ beforeEach(() => {
55
+ jest.clearAllMocks();
56
+ });
57
+
58
+ describe.each(chains)("$currency.id", ({ currency, network }) => {
59
+ test("builds account shape with existing operations, pagination and sub accounts", async () => {
60
+ const oldOp = {
61
+ hash: "h1",
62
+ blockHeight: 10,
63
+ type: "OPT_IN",
64
+ extra: { pagingToken: "pt1", assetReference: "ar1", assetOwner: "ow1" },
65
+ };
66
+ const initialAccount = { operations: [oldOp], blockHeight: 10 };
67
+
68
+ extractBalanceMock.mockReturnValue({ value: "1000", locked: "300" });
69
+ getBalanceMock.mockResolvedValue([
70
+ { asset: { type: "native" }, value: "1000", locked: "300" },
71
+ { asset: { type: "token", symbol: "TOK1" }, value: "42" },
72
+ { asset: { type: "token", symbol: "TOK_IGNORE" }, value: "5" },
73
+ ]);
74
+
75
+ getTokenFromAssetMock.mockImplementation(asset =>
76
+ asset.symbol === "TOK1" ? { id: `${currency.id}_token1` } : null,
77
+ );
78
+
79
+ const coreOp = { hash: "h2", height: 12 };
80
+ listOperationsMock.mockResolvedValue([[coreOp]]);
81
+
82
+ adaptCoreOperationToLiveOperationMock.mockImplementation((_accId, op) => ({
83
+ hash: op.hash,
84
+ type: "IN",
85
+ blockHeight: 12,
86
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
87
+ }));
88
+
89
+ mergeOpsMock.mockImplementation((oldOps, newOps) => [...newOps, ...oldOps]);
90
+
91
+ buildSubAccountsMock.mockReturnValue([
92
+ { id: `${currency.id}_subAcc1`, type: "TokenAccount" },
93
+ ]);
94
+
95
+ inferSubOperationsMock.mockImplementation(hash =>
96
+ hash === "h2" ? [{ id: `${currency.id}_subOp1` }] : [],
97
+ );
98
+
99
+ lastBlockMock.mockResolvedValue({ height: 123 });
100
+
101
+ const getShape = genericGetAccountShape(network, currency.id);
102
+ const result = await getShape(
103
+ {
104
+ address: `${currency.id}_addr1`,
105
+ initialAccount,
106
+ currency,
107
+ derivationMode: "",
108
+ } as any,
109
+ { paginationConfig: {} as any },
110
+ );
111
+
112
+ expect(chainSpecificGetAccountShapeMock).toHaveBeenCalledWith(`${currency.id}_addr1`);
113
+
114
+ expect(listOperationsMock).toHaveBeenCalledWith(`${currency.id}_addr1`, {
115
+ minHeight: 11,
116
+ order: "asc",
117
+ lastPagingToken: "pt1",
118
+ });
119
+
120
+ const assetsBalancePassed = buildSubAccountsMock.mock.calls[0][0].assetsBalance;
121
+ expect(assetsBalancePassed).toHaveLength(1);
122
+ expect(assetsBalancePassed[0].asset.symbol).toBe("TOK1");
123
+
124
+ const assetOpsPassed = buildSubAccountsMock.mock.calls[0][0].operations;
125
+ expect(assetOpsPassed).toHaveLength(1);
126
+ expect(assetOpsPassed[0].hash).toBe("h2");
127
+
128
+ expect(result).toMatchObject({
129
+ balance: new BigNumber(1000),
130
+ spendableBalance: new BigNumber(700),
131
+ blockHeight: 123,
132
+ operationsCount: 2,
133
+ subAccounts: [{ id: `${currency.id}_subAcc1`, type: "TokenAccount" }],
134
+ operations: [
135
+ {
136
+ hash: "h2",
137
+ type: "IN",
138
+ blockHeight: 12,
139
+ subOperations: [{ id: `${currency.id}_subOp1` }],
140
+ extra: { assetReference: "ar2", assetOwner: "ow2" },
141
+ },
142
+ oldOp,
143
+ ],
144
+ });
145
+ });
146
+
147
+ test("handles empty operations (no old ops, no new ops) and blockHeight=0", async () => {
148
+ getBalanceMock.mockResolvedValue([{ asset: { type: "native" }, value: "0", locked: "0" }]);
149
+ extractBalanceMock.mockReturnValue({ value: "0", locked: "0" });
150
+ listOperationsMock.mockResolvedValue([[]]);
151
+ buildSubAccountsMock.mockReturnValue([]);
152
+
153
+ const getShape = genericGetAccountShape(network, currency.id);
154
+ const result = await getShape(
155
+ {
156
+ address: `${currency.id}_addr2`,
157
+ initialAccount: undefined,
158
+ currency,
159
+ derivationMode: "",
160
+ } as any,
161
+ { paginationConfig: {} as any },
162
+ );
163
+ expect(result).toMatchObject({
164
+ operations: [], // Empty array check for `operations`
165
+ blockHeight: 0,
166
+ operationsCount: 0,
167
+ subAccounts: [], // Empty array check for `subAccounts`
168
+ balance: new BigNumber(0),
169
+ spendableBalance: new BigNumber(0),
170
+ });
171
+ });
172
+ });
173
+ });
@@ -34,15 +34,24 @@ export function useAssetsData({
34
34
  version: string;
35
35
  isStaging?: boolean;
36
36
  }) {
37
- const { data, isLoading, error, fetchNextPage, isSuccess, refetch, isFetching, isError } =
38
- useGetAssetsDataInfiniteQuery({
39
- search,
40
- useCase,
41
- currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
42
- product,
43
- version,
44
- isStaging,
45
- });
37
+ const {
38
+ data,
39
+ isLoading,
40
+ error,
41
+ fetchNextPage,
42
+ isSuccess,
43
+ refetch,
44
+ isFetching,
45
+ isError,
46
+ isFetchingNextPage,
47
+ } = useGetAssetsDataInfiniteQuery({
48
+ search,
49
+ useCase,
50
+ currencyIds: areCurrenciesFiltered ? currencyIds : undefined,
51
+ product,
52
+ version,
53
+ isStaging,
54
+ });
46
55
 
47
56
  const joinedPages = useMemo(() => {
48
57
  return data?.pages.reduce<AssetsDataWithPagination>((acc, page) => {
@@ -65,9 +74,11 @@ export function useAssetsData({
65
74
 
66
75
  const hasMore = Boolean(joinedPages?.pagination.nextCursor);
67
76
 
77
+ const isInitialLoading = isLoading || (isFetching && !isFetchingNextPage);
78
+
68
79
  return {
69
80
  data: joinedPages,
70
- isLoading: isLoading || isFetching,
81
+ isLoading: isInitialLoading,
71
82
  error,
72
83
  loadNext: hasMore ? fetchNextPage : undefined,
73
84
  isSuccess,