@ledgerhq/live-common 34.47.0-nightly.0 → 34.47.0-nightly.2
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.
- package/lib/__tests__/test-helpers/environment.js +2 -0
- package/lib/__tests__/test-helpers/environment.js.map +1 -1
- package/lib/bridge/crypto-assets/cal-integration.d.ts +4 -0
- package/lib/bridge/crypto-assets/cal-integration.d.ts.map +1 -0
- package/lib/bridge/crypto-assets/cal-integration.js +26 -0
- package/lib/bridge/crypto-assets/cal-integration.js.map +1 -0
- package/lib/bridge/crypto-assets/cal-integration.test.d.ts +2 -0
- package/lib/bridge/crypto-assets/cal-integration.test.d.ts.map +1 -0
- package/lib/bridge/crypto-assets/cal-integration.test.js +45 -0
- package/lib/bridge/crypto-assets/cal-integration.test.js.map +1 -0
- package/lib/bridge/crypto-assets/cal-store.d.ts +14 -0
- package/lib/bridge/crypto-assets/cal-store.d.ts.map +1 -0
- package/lib/bridge/crypto-assets/cal-store.js +42 -0
- package/lib/bridge/crypto-assets/cal-store.js.map +1 -0
- package/lib/bridge/crypto-assets/cal-store.test.d.ts +2 -0
- package/lib/bridge/crypto-assets/cal-store.test.d.ts.map +1 -0
- package/lib/bridge/crypto-assets/cal-store.test.js +70 -0
- package/lib/bridge/crypto-assets/cal-store.test.js.map +1 -0
- package/lib/bridge/crypto-assets/index.d.ts.map +1 -1
- package/lib/bridge/crypto-assets/index.js +4 -0
- package/lib/bridge/crypto-assets/index.js.map +1 -1
- package/lib/bridge/crypto-assets/index.test.js +36 -0
- package/lib/bridge/crypto-assets/index.test.js.map +1 -1
- package/lib/bridge/generic-alpaca/alpaca/network/network-alpaca.js +1 -1
- package/lib/bridge/generic-alpaca/alpaca/network/network-alpaca.js.map +1 -1
- package/lib/bridge/generic-alpaca/buildSubAccounts.d.ts +2 -3
- package/lib/bridge/generic-alpaca/buildSubAccounts.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/buildSubAccounts.js +3 -12
- package/lib/bridge/generic-alpaca/buildSubAccounts.js.map +1 -1
- package/lib/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
- package/lib/bridge/generic-alpaca/getAccountShape.js +4 -4
- package/lib/bridge/generic-alpaca/getAccountShape.js.map +1 -1
- package/lib/e2e/enum/DeviceLabels.d.ts +1 -0
- package/lib/e2e/enum/DeviceLabels.d.ts.map +1 -1
- package/lib/e2e/enum/DeviceLabels.js +1 -0
- package/lib/e2e/enum/DeviceLabels.js.map +1 -1
- package/lib/e2e/families/tezos.d.ts.map +1 -1
- package/lib/e2e/families/tezos.js +2 -0
- package/lib/e2e/families/tezos.js.map +1 -1
- package/lib/e2e/index.d.ts +4 -4
- package/lib/exchange/platform/transfer/completeExchange.d.ts.map +1 -1
- package/lib/exchange/platform/transfer/completeExchange.js +3 -5
- package/lib/exchange/platform/transfer/completeExchange.js.map +1 -1
- package/lib/exchange/swap/completeExchange.d.ts.map +1 -1
- package/lib/exchange/swap/completeExchange.js +5 -2
- package/lib/exchange/swap/completeExchange.js.map +1 -1
- package/lib/exchange/swap/initSwap.d.ts.map +1 -1
- package/lib/exchange/swap/initSwap.js +5 -2
- package/lib/exchange/swap/initSwap.js.map +1 -1
- package/lib/families/canton/config.d.ts.map +1 -1
- package/lib/families/canton/config.js +35 -1
- package/lib/families/canton/config.js.map +1 -1
- package/lib/featureFlags/defaultFeatures.js +1 -1
- package/lib/featureFlags/defaultFeatures.js.map +1 -1
- package/lib/featureFlags/useFeature.d.ts +1 -1
- package/lib/featureFlags/useFeature.d.ts.map +1 -1
- package/lib/modularDrawer/__mocks__/dada.mock.d.ts +3336 -0
- package/lib/modularDrawer/__mocks__/dada.mock.d.ts.map +1 -0
- package/lib/modularDrawer/__mocks__/dada.mock.js +3879 -0
- package/lib/modularDrawer/__mocks__/dada.mock.js.map +1 -0
- package/lib/modularDrawer/data/state-manager/api.d.ts +729 -24
- package/lib/modularDrawer/data/state-manager/api.d.ts.map +1 -1
- package/lib/modularDrawer/data/state-manager/api.js +29 -11
- package/lib/modularDrawer/data/state-manager/api.js.map +1 -1
- package/lib/modularDrawer/hooks/__test__/useAssetsData.test.js +129 -73
- package/lib/modularDrawer/hooks/__test__/useAssetsData.test.js.map +1 -1
- package/lib/modularDrawer/hooks/useAssetsData.d.ts +4 -5
- package/lib/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
- package/lib/modularDrawer/hooks/useAssetsData.js +34 -15
- package/lib/modularDrawer/hooks/useAssetsData.js.map +1 -1
- package/lib/modularDrawer/utils/getLoadingStatus.d.ts +9 -0
- package/lib/modularDrawer/utils/getLoadingStatus.d.ts.map +1 -0
- package/lib/modularDrawer/utils/getLoadingStatus.js +18 -0
- package/lib/modularDrawer/utils/getLoadingStatus.js.map +1 -0
- package/lib-es/__tests__/test-helpers/environment.js +2 -0
- package/lib-es/__tests__/test-helpers/environment.js.map +1 -1
- package/lib-es/bridge/crypto-assets/cal-integration.d.ts +4 -0
- package/lib-es/bridge/crypto-assets/cal-integration.d.ts.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-integration.js +21 -0
- package/lib-es/bridge/crypto-assets/cal-integration.js.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-integration.test.d.ts +2 -0
- package/lib-es/bridge/crypto-assets/cal-integration.test.d.ts.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-integration.test.js +43 -0
- package/lib-es/bridge/crypto-assets/cal-integration.test.js.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-store.d.ts +14 -0
- package/lib-es/bridge/crypto-assets/cal-store.d.ts.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-store.js +38 -0
- package/lib-es/bridge/crypto-assets/cal-store.js.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-store.test.d.ts +2 -0
- package/lib-es/bridge/crypto-assets/cal-store.test.d.ts.map +1 -0
- package/lib-es/bridge/crypto-assets/cal-store.test.js +68 -0
- package/lib-es/bridge/crypto-assets/cal-store.test.js.map +1 -0
- package/lib-es/bridge/crypto-assets/index.d.ts.map +1 -1
- package/lib-es/bridge/crypto-assets/index.js +4 -0
- package/lib-es/bridge/crypto-assets/index.js.map +1 -1
- package/lib-es/bridge/crypto-assets/index.test.js +36 -0
- package/lib-es/bridge/crypto-assets/index.test.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/alpaca/network/network-alpaca.js +1 -1
- package/lib-es/bridge/generic-alpaca/alpaca/network/network-alpaca.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.d.ts +2 -3
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.js +2 -9
- package/lib-es/bridge/generic-alpaca/buildSubAccounts.js.map +1 -1
- package/lib-es/bridge/generic-alpaca/getAccountShape.d.ts.map +1 -1
- package/lib-es/bridge/generic-alpaca/getAccountShape.js +3 -3
- package/lib-es/bridge/generic-alpaca/getAccountShape.js.map +1 -1
- package/lib-es/e2e/enum/DeviceLabels.d.ts +1 -0
- package/lib-es/e2e/enum/DeviceLabels.d.ts.map +1 -1
- package/lib-es/e2e/enum/DeviceLabels.js +1 -0
- package/lib-es/e2e/enum/DeviceLabels.js.map +1 -1
- package/lib-es/e2e/families/tezos.d.ts.map +1 -1
- package/lib-es/e2e/families/tezos.js +2 -0
- package/lib-es/e2e/families/tezos.js.map +1 -1
- package/lib-es/e2e/index.d.ts +4 -4
- package/lib-es/exchange/platform/transfer/completeExchange.d.ts.map +1 -1
- package/lib-es/exchange/platform/transfer/completeExchange.js +3 -2
- package/lib-es/exchange/platform/transfer/completeExchange.js.map +1 -1
- package/lib-es/exchange/swap/completeExchange.d.ts.map +1 -1
- package/lib-es/exchange/swap/completeExchange.js +5 -2
- package/lib-es/exchange/swap/completeExchange.js.map +1 -1
- package/lib-es/exchange/swap/initSwap.d.ts.map +1 -1
- package/lib-es/exchange/swap/initSwap.js +5 -2
- package/lib-es/exchange/swap/initSwap.js.map +1 -1
- package/lib-es/families/canton/config.d.ts.map +1 -1
- package/lib-es/families/canton/config.js +35 -1
- package/lib-es/families/canton/config.js.map +1 -1
- package/lib-es/featureFlags/defaultFeatures.js +1 -1
- package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
- package/lib-es/featureFlags/useFeature.d.ts +1 -1
- package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
- package/lib-es/modularDrawer/__mocks__/dada.mock.d.ts +3336 -0
- package/lib-es/modularDrawer/__mocks__/dada.mock.d.ts.map +1 -0
- package/lib-es/modularDrawer/__mocks__/dada.mock.js +3876 -0
- package/lib-es/modularDrawer/__mocks__/dada.mock.js.map +1 -0
- package/lib-es/modularDrawer/data/state-manager/api.d.ts +729 -24
- package/lib-es/modularDrawer/data/state-manager/api.d.ts.map +1 -1
- package/lib-es/modularDrawer/data/state-manager/api.js +28 -10
- package/lib-es/modularDrawer/data/state-manager/api.js.map +1 -1
- package/lib-es/modularDrawer/hooks/__test__/useAssetsData.test.js +130 -74
- package/lib-es/modularDrawer/hooks/__test__/useAssetsData.test.js.map +1 -1
- package/lib-es/modularDrawer/hooks/useAssetsData.d.ts +4 -5
- package/lib-es/modularDrawer/hooks/useAssetsData.d.ts.map +1 -1
- package/lib-es/modularDrawer/hooks/useAssetsData.js +36 -17
- package/lib-es/modularDrawer/hooks/useAssetsData.js.map +1 -1
- package/lib-es/modularDrawer/utils/getLoadingStatus.d.ts +9 -0
- package/lib-es/modularDrawer/utils/getLoadingStatus.d.ts.map +1 -0
- package/lib-es/modularDrawer/utils/getLoadingStatus.js +14 -0
- package/lib-es/modularDrawer/utils/getLoadingStatus.js.map +1 -0
- package/package.json +48 -48
- package/src/__tests__/test-helpers/environment.ts +2 -0
- package/src/bridge/crypto-assets/cal-integration.test.ts +53 -0
- package/src/bridge/crypto-assets/cal-integration.ts +23 -0
- package/src/bridge/crypto-assets/cal-store.test.ts +93 -0
- package/src/bridge/crypto-assets/cal-store.ts +46 -0
- package/src/bridge/crypto-assets/index.test.ts +47 -0
- package/src/bridge/crypto-assets/index.ts +5 -0
- package/src/bridge/generic-alpaca/alpaca/network/network-alpaca.ts +1 -1
- package/src/bridge/generic-alpaca/buildSubAccounts.ts +3 -11
- package/src/bridge/generic-alpaca/getAccountShape.ts +3 -4
- package/src/e2e/enum/DeviceLabels.ts +1 -0
- package/src/e2e/families/tezos.ts +2 -0
- package/src/exchange/platform/transfer/completeExchange.ts +3 -2
- package/src/exchange/swap/completeExchange.ts +5 -2
- package/src/exchange/swap/initSwap.ts +5 -4
- package/src/families/canton/config.ts +36 -1
- package/src/featureFlags/defaultFeatures.ts +1 -1
- package/src/modularDrawer/__mocks__/dada.mock.ts +3890 -0
- package/src/modularDrawer/data/state-manager/api.ts +32 -11
- package/src/modularDrawer/hooks/__test__/useAssetsData.test.ts +136 -75
- package/src/modularDrawer/hooks/useAssetsData.ts +40 -17
- package/src/modularDrawer/utils/getLoadingStatus.ts +24 -0
@@ -8,11 +8,14 @@ export enum AssetsDataTags {
|
|
8
8
|
}
|
9
9
|
|
10
10
|
export interface GetAssetsDataParams {
|
11
|
-
cursor?: string;
|
12
11
|
search?: string;
|
13
12
|
currencyIds?: string[];
|
14
13
|
}
|
15
14
|
|
15
|
+
export interface PageParam {
|
16
|
+
cursor?: string;
|
17
|
+
}
|
18
|
+
|
16
19
|
export interface AssetsDataWithPagination extends AssetsData {
|
17
20
|
pagination: {
|
18
21
|
nextCursor?: string;
|
@@ -43,20 +46,38 @@ export const assetsDataApi = createApi({
|
|
43
46
|
}),
|
44
47
|
tagTypes: [AssetsDataTags.Assets],
|
45
48
|
endpoints: build => ({
|
46
|
-
getAssetsData: build.
|
47
|
-
query: ({
|
48
|
-
|
49
|
-
params: {
|
50
|
-
...(cursor && { cursor }),
|
51
|
-
...(search && { search }),
|
52
|
-
// ...(currencyIds && currencyIds.length > 0 && { currencyIds }),
|
49
|
+
getAssetsData: build.infiniteQuery<AssetsDataWithPagination, GetAssetsDataParams, PageParam>({
|
50
|
+
query: ({ pageParam, queryArg }) => {
|
51
|
+
const params = {
|
53
52
|
pageSize: 100,
|
54
|
-
|
55
|
-
|
53
|
+
...(pageParam?.cursor && { cursor: pageParam.cursor }),
|
54
|
+
// ...(queryArg?.currencyIds && queryArg?.currencyIds.length > 0 && { currencyIds: queryArg.currencyIds }),
|
55
|
+
...(queryArg?.search && { search: queryArg.search }),
|
56
|
+
};
|
57
|
+
|
58
|
+
return {
|
59
|
+
url: "assets",
|
60
|
+
params,
|
61
|
+
};
|
62
|
+
},
|
56
63
|
providesTags: [AssetsDataTags.Assets],
|
57
64
|
transformResponse: transformAssetsResponse,
|
65
|
+
infiniteQueryOptions: {
|
66
|
+
initialPageParam: {
|
67
|
+
cursor: "",
|
68
|
+
},
|
69
|
+
getNextPageParam: lastPage => {
|
70
|
+
if (lastPage.pagination.nextCursor) {
|
71
|
+
return {
|
72
|
+
cursor: lastPage.pagination.nextCursor,
|
73
|
+
};
|
74
|
+
} else {
|
75
|
+
return undefined;
|
76
|
+
}
|
77
|
+
},
|
78
|
+
},
|
58
79
|
}),
|
59
80
|
}),
|
60
81
|
});
|
61
82
|
|
62
|
-
export const {
|
83
|
+
export const { useGetAssetsDataInfiniteQuery } = assetsDataApi;
|
@@ -4,21 +4,27 @@
|
|
4
4
|
|
5
5
|
import { renderHook } from "@testing-library/react";
|
6
6
|
import { useAssetsData } from "../useAssetsData";
|
7
|
-
import {
|
7
|
+
import { useGetAssetsDataInfiniteQuery } from "../../data/state-manager/api";
|
8
8
|
|
9
9
|
jest.mock("../../data/state-manager/api", () => ({
|
10
|
-
|
10
|
+
useGetAssetsDataInfiniteQuery: jest.fn(),
|
11
11
|
}));
|
12
12
|
|
13
|
-
const
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
const mockuseGetAssetsDataInfiniteQuery = jest.mocked(useGetAssetsDataInfiniteQuery);
|
14
|
+
|
15
|
+
const defaultMockValues = {
|
16
|
+
data: undefined,
|
17
|
+
isLoading: false,
|
18
|
+
error: undefined,
|
19
|
+
fetchNextPage: jest.fn(),
|
20
|
+
isSuccess: true,
|
21
|
+
isFetching: false,
|
22
|
+
isError: false,
|
23
|
+
fetchPreviousPage: jest.fn(),
|
24
|
+
isFetchingPreviousPage: false,
|
25
|
+
refetch: jest.fn(),
|
26
|
+
status: "success",
|
27
|
+
};
|
22
28
|
|
23
29
|
describe("useAssetsData", () => {
|
24
30
|
beforeEach(() => {
|
@@ -26,58 +32,92 @@ describe("useAssetsData", () => {
|
|
26
32
|
});
|
27
33
|
|
28
34
|
it("should return loading state when API is loading", () => {
|
29
|
-
|
30
|
-
|
35
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
36
|
+
...defaultMockValues,
|
31
37
|
isLoading: true,
|
32
|
-
|
33
|
-
refetch: jest.fn(),
|
34
|
-
isFetching: false,
|
35
|
-
isSuccess: false,
|
36
|
-
isError: false,
|
37
|
-
currentData: undefined,
|
38
|
+
status: "pending",
|
38
39
|
});
|
39
40
|
|
40
41
|
const { result } = renderHook(() => useAssetsData({}));
|
41
42
|
|
42
43
|
expect(result.current.isLoading).toBe(true);
|
43
44
|
expect(result.current.data).toBe(undefined);
|
44
|
-
expect(result.current.hasMore).toBe(false);
|
45
45
|
});
|
46
46
|
|
47
|
-
it("should return data
|
48
|
-
const
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
47
|
+
it("should return combined data from multiple pages", () => {
|
48
|
+
const mockPages = [
|
49
|
+
{
|
50
|
+
cryptoAssets: { bitcoin: { id: "bitcoin", name: "Bitcoin" } },
|
51
|
+
networks: { bitcoin: { id: "bitcoin", name: "Bitcoin" } },
|
52
|
+
cryptoOrTokenCurrencies: { bitcoin: { id: "bitcoin" } },
|
53
|
+
interestRates: {},
|
54
|
+
markets: {},
|
55
|
+
currenciesOrder: {
|
56
|
+
currenciesIds: ["bitcoin"],
|
57
|
+
metaCurrencyIds: ["bitcoin"],
|
58
|
+
key: "marketCap",
|
59
|
+
order: "desc",
|
60
|
+
},
|
61
|
+
pagination: { nextCursor: "cursor-2" },
|
62
|
+
},
|
63
|
+
{
|
64
|
+
cryptoAssets: { ethereum: { id: "ethereum", name: "Ethereum" } },
|
65
|
+
networks: { ethereum: { id: "ethereum", name: "Ethereum" } },
|
66
|
+
cryptoOrTokenCurrencies: { ethereum: { id: "ethereum" } },
|
67
|
+
interestRates: {},
|
68
|
+
markets: {},
|
69
|
+
currenciesOrder: {
|
70
|
+
currenciesIds: ["ethereum"],
|
71
|
+
metaCurrencyIds: ["ethereum"],
|
72
|
+
key: "marketCap",
|
73
|
+
order: "desc",
|
74
|
+
},
|
75
|
+
pagination: { nextCursor: undefined },
|
76
|
+
},
|
77
|
+
];
|
78
|
+
|
79
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
80
|
+
...defaultMockValues,
|
81
|
+
data: { pages: mockPages, pageParams: [{ cursor: "" }, { cursor: "cursor-2" }] },
|
61
82
|
});
|
62
83
|
|
63
84
|
const { result } = renderHook(() => useAssetsData({}));
|
64
85
|
|
65
|
-
expect(result.current.data).
|
86
|
+
expect(result.current.data).toEqual({
|
87
|
+
cryptoAssets: {
|
88
|
+
bitcoin: { id: "bitcoin", name: "Bitcoin" },
|
89
|
+
ethereum: { id: "ethereum", name: "Ethereum" },
|
90
|
+
},
|
91
|
+
networks: {
|
92
|
+
bitcoin: { id: "bitcoin", name: "Bitcoin" },
|
93
|
+
ethereum: { id: "ethereum", name: "Ethereum" },
|
94
|
+
},
|
95
|
+
cryptoOrTokenCurrencies: {
|
96
|
+
bitcoin: { id: "bitcoin" },
|
97
|
+
ethereum: { id: "ethereum" },
|
98
|
+
},
|
99
|
+
interestRates: {},
|
100
|
+
markets: {},
|
101
|
+
currenciesOrder: {
|
102
|
+
currenciesIds: ["bitcoin", "ethereum"],
|
103
|
+
metaCurrencyIds: ["bitcoin", "ethereum"],
|
104
|
+
key: "marketCap",
|
105
|
+
order: "desc",
|
106
|
+
},
|
107
|
+
pagination: { nextCursor: undefined },
|
108
|
+
});
|
66
109
|
expect(result.current.isLoading).toBe(false);
|
67
|
-
expect(result.current.hasMore).toBe(true);
|
68
110
|
});
|
69
111
|
|
70
112
|
it("should return error when API has error", () => {
|
71
113
|
const mockError = new Error("API Error");
|
72
|
-
|
114
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
115
|
+
...defaultMockValues,
|
73
116
|
data: undefined,
|
74
|
-
isLoading: false,
|
75
117
|
error: mockError,
|
76
|
-
refetch: jest.fn(),
|
77
|
-
isFetching: false,
|
78
118
|
isSuccess: false,
|
79
119
|
isError: true,
|
80
|
-
|
120
|
+
status: "error",
|
81
121
|
});
|
82
122
|
|
83
123
|
const { result } = renderHook(() => useAssetsData({}));
|
@@ -86,54 +126,75 @@ describe("useAssetsData", () => {
|
|
86
126
|
expect(result.current.isLoading).toBe(false);
|
87
127
|
});
|
88
128
|
|
89
|
-
it("should
|
90
|
-
const
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
pagination: { nextCursor },
|
129
|
+
it("should provide loadNext function when there's a nextCursor", () => {
|
130
|
+
const mockFetchNextPage = jest.fn();
|
131
|
+
const mockPages = [
|
132
|
+
{
|
133
|
+
cryptoAssets: {},
|
134
|
+
networks: {},
|
135
|
+
cryptoOrTokenCurrencies: {},
|
136
|
+
interestRates: {},
|
137
|
+
markets: {},
|
138
|
+
currenciesOrder: {
|
139
|
+
currenciesIds: [],
|
140
|
+
metaCurrencyIds: [],
|
141
|
+
key: "marketCap",
|
142
|
+
order: "desc",
|
143
|
+
},
|
144
|
+
pagination: { nextCursor: "next-cursor-456" },
|
105
145
|
},
|
146
|
+
];
|
147
|
+
|
148
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
149
|
+
...defaultMockValues,
|
150
|
+
data: { pages: mockPages, pageParams: [{ cursor: "" }] },
|
151
|
+
fetchNextPage: mockFetchNextPage,
|
106
152
|
});
|
107
153
|
|
108
154
|
const { result } = renderHook(() => useAssetsData({}));
|
109
155
|
|
110
|
-
result.current.loadNext();
|
156
|
+
expect(result.current.loadNext).toBeDefined();
|
157
|
+
result.current.loadNext?.();
|
111
158
|
|
112
|
-
expect(
|
159
|
+
expect(mockFetchNextPage).toHaveBeenCalled();
|
113
160
|
});
|
114
161
|
|
115
|
-
it("should not
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
162
|
+
it("should not provide loadNext function when there's no nextCursor", () => {
|
163
|
+
const mockPages = [
|
164
|
+
{
|
165
|
+
cryptoAssets: {},
|
166
|
+
networks: {},
|
167
|
+
cryptoOrTokenCurrencies: {},
|
168
|
+
interestRates: {},
|
169
|
+
markets: {},
|
170
|
+
currenciesOrder: {
|
171
|
+
currenciesIds: [],
|
172
|
+
metaCurrencyIds: [],
|
173
|
+
key: "marketCap",
|
174
|
+
order: "desc",
|
175
|
+
},
|
129
176
|
pagination: { nextCursor: undefined },
|
130
177
|
},
|
178
|
+
];
|
179
|
+
|
180
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
181
|
+
...defaultMockValues,
|
182
|
+
data: { pages: mockPages, pageParams: [{ cursor: "" }] },
|
131
183
|
});
|
132
184
|
|
133
185
|
const { result } = renderHook(() => useAssetsData({}));
|
134
186
|
|
135
|
-
result.current.loadNext();
|
187
|
+
expect(result.current.loadNext).toBeUndefined();
|
188
|
+
});
|
189
|
+
|
190
|
+
it("should return undefined data when no pages exist", () => {
|
191
|
+
mockuseGetAssetsDataInfiniteQuery.mockReturnValue({
|
192
|
+
...defaultMockValues,
|
193
|
+
});
|
194
|
+
|
195
|
+
const { result } = renderHook(() => useAssetsData({}));
|
136
196
|
|
137
|
-
expect(
|
197
|
+
expect(result.current.data).toBeUndefined();
|
198
|
+
expect(result.current.loadNext).toBeUndefined();
|
138
199
|
});
|
139
200
|
});
|
@@ -1,5 +1,20 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { useMemo } from "react";
|
2
|
+
import { AssetsDataWithPagination, useGetAssetsDataInfiniteQuery } from "../data/state-manager/api";
|
3
|
+
|
4
|
+
const emptyData = () => ({
|
5
|
+
cryptoAssets: {},
|
6
|
+
networks: {},
|
7
|
+
cryptoOrTokenCurrencies: {},
|
8
|
+
interestRates: {},
|
9
|
+
markets: {},
|
10
|
+
currenciesOrder: {
|
11
|
+
currenciesIds: [],
|
12
|
+
metaCurrencyIds: [],
|
13
|
+
key: "",
|
14
|
+
order: "",
|
15
|
+
},
|
16
|
+
pagination: { nextCursor: "" },
|
17
|
+
});
|
3
18
|
|
4
19
|
export function useAssetsData({
|
5
20
|
search,
|
@@ -8,29 +23,37 @@ export function useAssetsData({
|
|
8
23
|
search?: string;
|
9
24
|
currencyIds?: string[];
|
10
25
|
}) {
|
11
|
-
const
|
12
|
-
const { data, error, isLoading, isSuccess } = useGetAssetsDataQuery({
|
13
|
-
cursor,
|
26
|
+
const { data, isLoading, error, fetchNextPage, isSuccess } = useGetAssetsDataInfiniteQuery({
|
14
27
|
search,
|
15
28
|
currencyIds,
|
16
29
|
});
|
17
30
|
|
18
|
-
const
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
31
|
+
const joinedPages = useMemo(() => {
|
32
|
+
return data?.pages.reduce<AssetsDataWithPagination>((acc, page) => {
|
33
|
+
Object.assign(acc.cryptoAssets, page.cryptoAssets);
|
34
|
+
Object.assign(acc.networks, page.networks);
|
35
|
+
Object.assign(acc.cryptoOrTokenCurrencies, page.cryptoOrTokenCurrencies);
|
36
|
+
Object.assign(acc.interestRates, page.interestRates);
|
37
|
+
Object.assign(acc.markets, page.markets);
|
38
|
+
|
39
|
+
acc.currenciesOrder.currenciesIds.push(...page.currenciesOrder.currenciesIds);
|
40
|
+
acc.currenciesOrder.metaCurrencyIds.push(...page.currenciesOrder.metaCurrencyIds);
|
41
|
+
|
42
|
+
acc.currenciesOrder.key = page.currenciesOrder.key;
|
43
|
+
acc.currenciesOrder.order = page.currenciesOrder.order;
|
44
|
+
acc.pagination.nextCursor = page.pagination.nextCursor;
|
24
45
|
|
25
|
-
|
46
|
+
return acc;
|
47
|
+
}, emptyData());
|
48
|
+
}, [data]);
|
49
|
+
|
50
|
+
const hasMore = Boolean(joinedPages?.pagination.nextCursor);
|
26
51
|
|
27
52
|
return {
|
28
|
-
data,
|
29
|
-
error,
|
53
|
+
data: joinedPages,
|
30
54
|
isLoading,
|
55
|
+
error,
|
56
|
+
loadNext: hasMore ? fetchNextPage : undefined,
|
31
57
|
isSuccess,
|
32
|
-
hasMore,
|
33
|
-
cursor,
|
34
|
-
loadNext,
|
35
58
|
};
|
36
59
|
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { LoadingStatus } from "../../deposit/type";
|
2
|
+
import { SerializedError } from "@reduxjs/toolkit";
|
3
|
+
import { FetchBaseQueryError } from "@reduxjs/toolkit/query";
|
4
|
+
|
5
|
+
export const getLoadingStatus = ({
|
6
|
+
isLoading,
|
7
|
+
isSuccess,
|
8
|
+
error,
|
9
|
+
}: {
|
10
|
+
isLoading: boolean;
|
11
|
+
isSuccess: boolean;
|
12
|
+
error?: FetchBaseQueryError | SerializedError;
|
13
|
+
}): LoadingStatus => {
|
14
|
+
if (isLoading) {
|
15
|
+
return LoadingStatus.Pending;
|
16
|
+
}
|
17
|
+
if (error) {
|
18
|
+
return LoadingStatus.Error;
|
19
|
+
}
|
20
|
+
if (isSuccess) {
|
21
|
+
return LoadingStatus.Success;
|
22
|
+
}
|
23
|
+
return LoadingStatus.Idle;
|
24
|
+
};
|