@ledgerhq/live-countervalues-react 0.3.0 → 0.3.1-nightly.1
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +19 -0
- package/lib/CountervaluesMarketcapProvider.d.ts +23 -0
- package/lib/CountervaluesMarketcapProvider.d.ts.map +1 -0
- package/lib/CountervaluesMarketcapProvider.js +89 -0
- package/lib/CountervaluesMarketcapProvider.js.map +1 -0
- package/lib/index.d.ts +44 -18
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +81 -131
- package/lib/index.js.map +1 -1
- package/lib-es/CountervaluesMarketcapProvider.d.ts +23 -0
- package/lib-es/CountervaluesMarketcapProvider.d.ts.map +1 -0
- package/lib-es/CountervaluesMarketcapProvider.js +58 -0
- package/lib-es/CountervaluesMarketcapProvider.js.map +1 -0
- package/lib-es/index.d.ts +44 -18
- package/lib-es/index.d.ts.map +1 -1
- package/lib-es/index.js +78 -124
- package/lib-es/index.js.map +1 -1
- package/package.json +4 -4
- package/src/CountervaluesMarketcapProvider.tsx +94 -0
- package/src/index.tsx +120 -180
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/live-countervalues-react@0.3.0 build /home/runner/work/ledger-live/ledger-live/libs/live-countervalues-react
|
|
2
|
+
> @ledgerhq/live-countervalues-react@0.3.1-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/live-countervalues-react
|
|
3
3
|
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @ledgerhq/live-countervalues-react
|
|
2
2
|
|
|
3
|
+
## 0.3.1-nightly.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`d41fc9c`](https://github.com/LedgerHQ/ledger-live/commit/d41fc9c458050ef1234c04af9642321c41cecda1)]:
|
|
8
|
+
- @ledgerhq/cryptoassets@13.25.0-nightly.1
|
|
9
|
+
- @ledgerhq/types-live@6.80.0
|
|
10
|
+
- @ledgerhq/coin-framework@6.0.1-nightly.1
|
|
11
|
+
- @ledgerhq/live-countervalues@0.6.1-nightly.1
|
|
12
|
+
|
|
13
|
+
## 0.3.1-nightly.0
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies []:
|
|
18
|
+
- @ledgerhq/coin-framework@6.0.1-nightly.0
|
|
19
|
+
- @ledgerhq/cryptoassets@13.24.1-nightly.0
|
|
20
|
+
- @ledgerhq/live-countervalues@0.6.1-nightly.0
|
|
21
|
+
|
|
3
22
|
## 0.3.0
|
|
4
23
|
|
|
5
24
|
### Minor Changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React, { ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Bridge enabling platform-specific persistence of market-cap ids.
|
|
4
|
+
* NOTE: memoize the object to avoid re-renders.
|
|
5
|
+
*/
|
|
6
|
+
export interface CountervaluesMarketcapBridge {
|
|
7
|
+
setError(message: string): void;
|
|
8
|
+
setIds(ids: string[]): void;
|
|
9
|
+
setLoading(loading: boolean): void;
|
|
10
|
+
useIds(): string[];
|
|
11
|
+
useLastUpdated(): number | undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Provides market-cap ids via the supplied bridge.
|
|
15
|
+
*/
|
|
16
|
+
export declare function CountervaluesMarketcapProvider({ children, bridge, }: {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
/** @param bridge Contains the functions that interact with the apps' state. Reference needs to be stable */
|
|
19
|
+
bridge: CountervaluesMarketcapBridge;
|
|
20
|
+
}): ReactElement;
|
|
21
|
+
/** Returns market-cap ids. */
|
|
22
|
+
export declare function useMarketcapIds(): string[];
|
|
23
|
+
//# sourceMappingURL=CountervaluesMarketcapProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountervaluesMarketcapProvider.d.ts","sourceRoot":"","sources":["../src/CountervaluesMarketcapProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAoD,MAAM,OAAO,CAAC;AAK9F;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,MAAM,IAAI,MAAM,EAAE,CAAC;IACnB,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;CACtC;AAqDD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4GAA4G;IAC5G,MAAM,EAAE,4BAA4B,CAAC;CACtC,GAAG,YAAY,CAOf;AAED,8BAA8B;AAC9B,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAG1C"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.useMarketcapIds = exports.CountervaluesMarketcapProvider = void 0;
|
|
30
|
+
const index_1 = __importDefault(require("@ledgerhq/live-countervalues/api/index"));
|
|
31
|
+
const logs_1 = require("@ledgerhq/logs");
|
|
32
|
+
const react_1 = __importStar(require("react"));
|
|
33
|
+
const MARKETCAP_REFRESH = 30 * 60000;
|
|
34
|
+
const MARKETCAP_REFRESH_ON_ERROR = 60000;
|
|
35
|
+
const CountervaluesMarketcapBridgeContext = (0, react_1.createContext)(null);
|
|
36
|
+
function useCountervaluesMarketcapBridgeContext() {
|
|
37
|
+
const bridge = (0, react_1.useContext)(CountervaluesMarketcapBridgeContext);
|
|
38
|
+
if (!bridge) {
|
|
39
|
+
throw new Error("'useCountervaluesMarketcapBridgeContext' must be used within a 'CountervaluesMarketcapProvider'");
|
|
40
|
+
}
|
|
41
|
+
return bridge;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Call side effects outside of the primary render tree, avoiding costly child re-renders
|
|
45
|
+
* TODO this could be re-written as a side effect only, to avoid dependency on render state.
|
|
46
|
+
*/
|
|
47
|
+
function Effect({ bridge }) {
|
|
48
|
+
const lastUpdated = bridge.useLastUpdated();
|
|
49
|
+
const [, forceUpdate] = (0, react_1.useReducer)((x) => x + 1, 0);
|
|
50
|
+
(0, react_1.useEffect)(() => {
|
|
51
|
+
let timeout = null;
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
if (!lastUpdated || now - lastUpdated > MARKETCAP_REFRESH) {
|
|
54
|
+
bridge.setLoading(true);
|
|
55
|
+
index_1.default.fetchIdsSortedByMarketcap().then(fetchedIds => {
|
|
56
|
+
bridge.setIds(fetchedIds);
|
|
57
|
+
timeout = setTimeout(() => forceUpdate(), MARKETCAP_REFRESH);
|
|
58
|
+
}, error => {
|
|
59
|
+
(0, logs_1.log)("countervalues", "error fetching marketcap ids " + error);
|
|
60
|
+
bridge.setError(error.message);
|
|
61
|
+
timeout = setTimeout(() => forceUpdate(), MARKETCAP_REFRESH_ON_ERROR);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
timeout = setTimeout(() => forceUpdate(), MARKETCAP_REFRESH - (now - lastUpdated));
|
|
66
|
+
}
|
|
67
|
+
return () => {
|
|
68
|
+
if (timeout)
|
|
69
|
+
clearTimeout(timeout);
|
|
70
|
+
};
|
|
71
|
+
}, [lastUpdated, bridge]);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Provides market-cap ids via the supplied bridge.
|
|
76
|
+
*/
|
|
77
|
+
function CountervaluesMarketcapProvider({ children, bridge, }) {
|
|
78
|
+
return (react_1.default.createElement(CountervaluesMarketcapBridgeContext.Provider, { value: bridge },
|
|
79
|
+
react_1.default.createElement(Effect, { bridge: bridge }),
|
|
80
|
+
children));
|
|
81
|
+
}
|
|
82
|
+
exports.CountervaluesMarketcapProvider = CountervaluesMarketcapProvider;
|
|
83
|
+
/** Returns market-cap ids. */
|
|
84
|
+
function useMarketcapIds() {
|
|
85
|
+
const bridge = useCountervaluesMarketcapBridgeContext();
|
|
86
|
+
return bridge.useIds();
|
|
87
|
+
}
|
|
88
|
+
exports.useMarketcapIds = useMarketcapIds;
|
|
89
|
+
//# sourceMappingURL=CountervaluesMarketcapProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountervaluesMarketcapProvider.js","sourceRoot":"","sources":["../src/CountervaluesMarketcapProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAyD;AACzD,yCAAqC;AACrC,+CAA8F;AAE9F,MAAM,iBAAiB,GAAG,EAAE,GAAG,KAAK,CAAC;AACrC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAczC,MAAM,mCAAmC,GAAG,IAAA,qBAAa,EACvD,IAAI,CACL,CAAC;AAEF,SAAS,sCAAsC;IAC7C,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,mCAAmC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,EAAE,MAAM,EAA4C;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,IAAA,kBAAU,EAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAyC,IAAI,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,WAAW,GAAG,iBAAiB,EAAE,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,eAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAClC,UAAU,CAAC,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC/D,CAAC,EACD,KAAK,CAAC,EAAE;gBACN,IAAA,UAAG,EAAC,eAAe,EAAE,+BAA+B,GAAG,KAAK,CAAC,CAAC;gBAC9D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACxE,CAAC,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,iBAAiB,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAAC,EAC7C,QAAQ,EACR,MAAM,GAKP;IACC,OAAO,CACL,8BAAC,mCAAmC,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM;QACzD,8BAAC,MAAM,IAAC,MAAM,EAAE,MAAM,GAAI;QACzB,QAAQ,CACoC,CAChD,CAAC;AACJ,CAAC;AAdD,wEAcC;AAED,8BAA8B;AAC9B,SAAgB,eAAe;IAC7B,MAAM,MAAM,GAAG,sCAAsC,EAAE,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAHD,0CAGC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -3,13 +3,28 @@ import type { Currency, Unit } from "@ledgerhq/types-cryptoassets";
|
|
|
3
3
|
import type { Account, AccountLike } from "@ledgerhq/types-live";
|
|
4
4
|
import { BigNumber } from "bignumber.js";
|
|
5
5
|
import React, { ReactElement } from "react";
|
|
6
|
-
|
|
7
|
-
export interface
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
export { CountervaluesMarketcapProvider, useMarketcapIds } from "./CountervaluesMarketcapProvider";
|
|
7
|
+
export interface PollingState {
|
|
8
|
+
isPolling: boolean;
|
|
9
|
+
triggerRef: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Bridge enabling platform-specific persistence of countervalues state.
|
|
13
|
+
* @note: make sure that the object is memoized to avoid re-renders.
|
|
14
|
+
*/
|
|
15
|
+
export interface CountervaluesBridge {
|
|
16
|
+
setPollingIsPolling(polling: boolean): void;
|
|
17
|
+
setPollingTriggerLoad(triggerLoad: boolean): void;
|
|
18
|
+
setState(state: CounterValuesState): void;
|
|
19
|
+
setStateError(error: Error): void;
|
|
20
|
+
setStatePending(pending: boolean): void;
|
|
21
|
+
usePollingIsPolling(): boolean;
|
|
22
|
+
usePollingTriggerLoad(): boolean;
|
|
23
|
+
useStateError(): Error | null;
|
|
24
|
+
useStatePending(): boolean;
|
|
25
|
+
useState(): CounterValuesState;
|
|
26
|
+
useUserSettings(): CountervaluesSettings;
|
|
27
|
+
wipe(): void;
|
|
13
28
|
}
|
|
14
29
|
export type Polling = {
|
|
15
30
|
wipe: () => void;
|
|
@@ -20,29 +35,35 @@ export type Polling = {
|
|
|
20
35
|
error: Error | null | undefined;
|
|
21
36
|
};
|
|
22
37
|
export type Props = {
|
|
38
|
+
/** Bridge enabling platform-specific persistence of countervalues state. */
|
|
39
|
+
bridge: CountervaluesBridge;
|
|
23
40
|
children: React.ReactNode;
|
|
24
|
-
|
|
41
|
+
/** the time to wait before the first poll when app starts (allow things to render to not do all at boot time) */
|
|
25
42
|
pollInitDelay?: number;
|
|
43
|
+
/** the minimum time to wait before two automatic polls (then one that happen whatever network/appstate events) */
|
|
26
44
|
autopollInterval?: number;
|
|
45
|
+
/** debounce time before actually fetching */
|
|
27
46
|
debounceDelay?: number;
|
|
28
47
|
savedState?: CounterValuesStateRaw;
|
|
29
48
|
};
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}): ReactElement;
|
|
49
|
+
/**
|
|
50
|
+
* Base Countervalues Context to use without polling logic.
|
|
51
|
+
*/
|
|
52
|
+
export declare const CountervaluesContext: React.Context<CountervaluesBridge | null>;
|
|
35
53
|
/**
|
|
36
54
|
* Root countervalues provider (polling + calculation).
|
|
37
55
|
*/
|
|
38
|
-
export declare function CountervaluesProvider({ children,
|
|
39
|
-
/** Returns market-cap ids. */
|
|
40
|
-
export declare function useMarketcapIds(): string[];
|
|
56
|
+
export declare function CountervaluesProvider({ children, bridge, ...rest }: Props): ReactElement;
|
|
41
57
|
/** Returns the full countervalues state. */
|
|
42
58
|
export declare function useCountervaluesState(): CounterValuesState;
|
|
59
|
+
/** Allows consumer to access the countervalues polling control object */
|
|
43
60
|
export declare function useCountervaluesPolling(): Polling;
|
|
44
|
-
|
|
45
|
-
export declare function
|
|
61
|
+
/** Allows consumer to access the user settings that was used to fetch the countervalues */
|
|
62
|
+
export declare function useCountervaluesUserSettings(): CountervaluesSettings;
|
|
63
|
+
/**
|
|
64
|
+
* Provides a way to calculate a countervalue from a value
|
|
65
|
+
* Seems like a major bottleneck, see if it actually needs the full state or we can select only the needed data
|
|
66
|
+
*/
|
|
46
67
|
export declare function useCalculate(query: {
|
|
47
68
|
value: number;
|
|
48
69
|
from: Currency;
|
|
@@ -51,6 +72,7 @@ export declare function useCalculate(query: {
|
|
|
51
72
|
date?: Date | null | undefined;
|
|
52
73
|
reverse?: boolean;
|
|
53
74
|
}): number | null | undefined;
|
|
75
|
+
/** Provides a way to calculate a countervalue from a value using a callback */
|
|
54
76
|
export declare function useCalculateCountervalueCallback({ to, }: {
|
|
55
77
|
to: Currency;
|
|
56
78
|
}): (from: Currency, value: BigNumber) => BigNumber | null | undefined;
|
|
@@ -64,6 +86,10 @@ export declare function useSendAmount({ account, fiatCurrency, cryptoAmount, }:
|
|
|
64
86
|
fiatUnit: Unit;
|
|
65
87
|
calculateCryptoAmount: (fiatAmount: BigNumber) => BigNumber;
|
|
66
88
|
};
|
|
89
|
+
/**
|
|
90
|
+
* Infer the tracking pairs for the top coins that the portfolio needs to display itself
|
|
91
|
+
* if startDate is undefined, the feature is disabled
|
|
92
|
+
*/
|
|
67
93
|
export declare function useTrackingPairsForTopCoins(marketcapIds: string[], countervalue: Currency, size: number, startDate: Date | undefined): {
|
|
68
94
|
from: import("@ledgerhq/types-cryptoassets").CryptoCurrency;
|
|
69
95
|
to: Currency;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -22,83 +22,42 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.useTrackingPairForAccounts = exports.useTrackingPairsForTopCoins = exports.useSendAmount = exports.useCalculateCountervalueCallback = exports.useCalculate = exports.
|
|
26
|
+
exports.useTrackingPairForAccounts = exports.useTrackingPairsForTopCoins = exports.useSendAmount = exports.useCalculateCountervalueCallback = exports.useCalculate = exports.useCountervaluesUserSettings = exports.useCountervaluesPolling = exports.useCountervaluesState = exports.CountervaluesProvider = exports.CountervaluesContext = exports.useMarketcapIds = exports.CountervaluesMarketcapProvider = void 0;
|
|
30
27
|
const helpers_1 = require("@ledgerhq/coin-framework/account/helpers");
|
|
31
|
-
const index_1 = __importDefault(require("@ledgerhq/live-countervalues/api/index"));
|
|
32
28
|
const logic_1 = require("@ledgerhq/live-countervalues/logic");
|
|
33
29
|
const useDebounce_1 = require("@ledgerhq/live-hooks/useDebounce");
|
|
34
|
-
const logs_1 = require("@ledgerhq/logs");
|
|
35
30
|
const bignumber_js_1 = require("bignumber.js");
|
|
36
31
|
const react_1 = __importStar(require("react"));
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
const CountervaluesContext = (0, react_1.createContext)(logic_1.initialState);
|
|
53
|
-
const CountervaluesMarketcapIdsContext = (0, react_1.createContext)([]);
|
|
32
|
+
const CountervaluesMarketcapProvider_1 = require("./CountervaluesMarketcapProvider");
|
|
33
|
+
var CountervaluesMarketcapProvider_2 = require("./CountervaluesMarketcapProvider");
|
|
34
|
+
Object.defineProperty(exports, "CountervaluesMarketcapProvider", { enumerable: true, get: function () { return CountervaluesMarketcapProvider_2.CountervaluesMarketcapProvider; } });
|
|
35
|
+
Object.defineProperty(exports, "useMarketcapIds", { enumerable: true, get: function () { return CountervaluesMarketcapProvider_2.useMarketcapIds; } });
|
|
36
|
+
/**
|
|
37
|
+
* Base Countervalues Context to use without polling logic.
|
|
38
|
+
*/
|
|
39
|
+
exports.CountervaluesContext = (0, react_1.createContext)(null);
|
|
40
|
+
function useCountervaluesBridgeContext() {
|
|
41
|
+
const bridge = (0, react_1.useContext)(exports.CountervaluesContext);
|
|
42
|
+
if (!bridge) {
|
|
43
|
+
throw new Error("'useCountervaluesBridgeContext' must be used within a 'CountervaluesProvider'");
|
|
44
|
+
}
|
|
45
|
+
return bridge;
|
|
46
|
+
}
|
|
54
47
|
function trackingPairsHash(a) {
|
|
55
48
|
return a
|
|
56
49
|
.map(p => `${p.from.ticker}:${p.to.ticker}:${p.startDate.toISOString().slice(0, 10) || ""}`)
|
|
57
50
|
.sort()
|
|
58
51
|
.join("|");
|
|
59
52
|
}
|
|
60
|
-
const marketcapRefresh = 30 * 60000;
|
|
61
|
-
const marketcapRefreshOnError = 60000;
|
|
62
|
-
/** Provides market-cap ids via the supplied bridge. */
|
|
63
|
-
function CountervaluesMarketcapProvider({ children, bridge, }) {
|
|
64
|
-
const ids = bridge.useIds();
|
|
65
|
-
const lastUpdated = bridge.useLastUpdated();
|
|
66
|
-
const [, forceUpdate] = (0, react_1.useReducer)(x => x + 1, 0);
|
|
67
|
-
(0, react_1.useEffect)(() => {
|
|
68
|
-
let timeout = null;
|
|
69
|
-
const now = Date.now();
|
|
70
|
-
if (!lastUpdated || now - lastUpdated > marketcapRefresh) {
|
|
71
|
-
bridge.setLoading(true);
|
|
72
|
-
index_1.default.fetchIdsSortedByMarketcap().then(fetchedIds => {
|
|
73
|
-
bridge.setIds(fetchedIds);
|
|
74
|
-
timeout = setTimeout(() => forceUpdate(), marketcapRefresh);
|
|
75
|
-
}, error => {
|
|
76
|
-
(0, logs_1.log)("countervalues", "error fetching marketcap ids " + error);
|
|
77
|
-
bridge.setError(error.message);
|
|
78
|
-
timeout = setTimeout(() => forceUpdate(), marketcapRefreshOnError);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
timeout = setTimeout(() => forceUpdate(), marketcapRefresh - (now - lastUpdated));
|
|
83
|
-
}
|
|
84
|
-
return () => {
|
|
85
|
-
if (timeout)
|
|
86
|
-
clearTimeout(timeout);
|
|
87
|
-
};
|
|
88
|
-
}, [lastUpdated, bridge]);
|
|
89
|
-
return (react_1.default.createElement(CountervaluesMarketcapIdsContext.Provider, { value: ids }, children));
|
|
90
|
-
}
|
|
91
|
-
exports.CountervaluesMarketcapProvider = CountervaluesMarketcapProvider;
|
|
92
53
|
/**
|
|
93
|
-
*
|
|
54
|
+
* Call side effects outside of the primary render tree, avoiding costly child re-renders
|
|
94
55
|
*/
|
|
95
|
-
function
|
|
96
|
-
const
|
|
56
|
+
function Effect({ bridge, savedState, debounceDelay = 1000, pollInitDelay = 3 * 1000, }) {
|
|
57
|
+
const userSettings = bridge.useUserSettings();
|
|
58
|
+
const { refreshRate, marketCapBatchingAfterRank } = userSettings;
|
|
97
59
|
const debouncedUserSettings = (0, useDebounce_1.useDebounce)(userSettings, debounceDelay);
|
|
98
|
-
const
|
|
99
|
-
// TODO this is always using the initial value, doesn't react to changes.
|
|
100
|
-
const marketcapIds = (0, react_1.useContext)(CountervaluesMarketcapIdsContext);
|
|
101
|
-
const { marketCapBatchingAfterRank } = userSettings;
|
|
60
|
+
const marketcapIds = (0, CountervaluesMarketcapProvider_1.useMarketcapIds)();
|
|
102
61
|
const batchStrategySolver = (0, react_1.useMemo)(() => ({
|
|
103
62
|
shouldBatchCurrencyFrom: (currency) => {
|
|
104
63
|
if (currency.type === "FiatCurrency")
|
|
@@ -108,104 +67,93 @@ function CountervaluesProvider({ children, userSettings, pollInitDelay = 3 * 100
|
|
|
108
67
|
},
|
|
109
68
|
}), [marketCapBatchingAfterRank, marketcapIds]);
|
|
110
69
|
// flag used to trigger a loadCountervalues
|
|
111
|
-
const
|
|
112
|
-
// trigger poll only when userSettings changes
|
|
70
|
+
const triggerLoad = bridge.usePollingTriggerLoad();
|
|
71
|
+
// trigger poll only when userSettings changes in a debounced way
|
|
113
72
|
(0, react_1.useEffect)(() => {
|
|
114
|
-
|
|
115
|
-
}, [debouncedUserSettings]);
|
|
73
|
+
bridge.setPollingTriggerLoad(true);
|
|
74
|
+
}, [bridge, debouncedUserSettings]);
|
|
116
75
|
// loadCountervalues logic
|
|
76
|
+
const currentState = bridge.useState();
|
|
77
|
+
const pending = bridge.useStatePending();
|
|
78
|
+
// loadCountervalues logic using bridge
|
|
117
79
|
(0, react_1.useEffect)(() => {
|
|
118
80
|
if (pending || !triggerLoad)
|
|
119
81
|
return;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
(0, logic_1.loadCountervalues)(
|
|
123
|
-
|
|
82
|
+
bridge.setPollingTriggerLoad(false);
|
|
83
|
+
bridge.setStatePending(true);
|
|
84
|
+
(0, logic_1.loadCountervalues)(currentState, userSettings, batchStrategySolver, userSettings.granularitiesRates).then(s => {
|
|
85
|
+
bridge.setState(s);
|
|
86
|
+
bridge.setStatePending(false);
|
|
87
|
+
}, e => {
|
|
88
|
+
bridge.setStateError(e);
|
|
89
|
+
bridge.setStatePending(false);
|
|
90
|
+
});
|
|
91
|
+
}, [pending, currentState, userSettings, triggerLoad, batchStrategySolver, bridge]);
|
|
124
92
|
// save the state when it changes
|
|
125
93
|
(0, react_1.useEffect)(() => {
|
|
126
94
|
if (!savedState?.status || !Object.keys(savedState.status).length)
|
|
127
95
|
return;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}, [savedState, userSettings]);
|
|
133
|
-
// manage the auto polling loop and the interface for user land to trigger a reload
|
|
134
|
-
const [isPolling, setIsPolling] = (0, react_1.useState)(true);
|
|
96
|
+
bridge.setState((0, logic_1.importCountervalues)(savedState, userSettings));
|
|
97
|
+
}, [bridge, savedState, userSettings]);
|
|
98
|
+
// manage the auto polling loop
|
|
99
|
+
const isPolling = bridge.usePollingIsPolling();
|
|
135
100
|
(0, react_1.useEffect)(() => {
|
|
136
101
|
if (!isPolling)
|
|
137
102
|
return;
|
|
138
103
|
let pollingTimeout;
|
|
139
104
|
function pollingLoop() {
|
|
140
|
-
|
|
141
|
-
pollingTimeout = setTimeout(pollingLoop,
|
|
105
|
+
bridge.setPollingTriggerLoad(true);
|
|
106
|
+
pollingTimeout = setTimeout(pollingLoop, refreshRate);
|
|
142
107
|
}
|
|
143
108
|
pollingTimeout = setTimeout(pollingLoop, pollInitDelay);
|
|
144
109
|
return () => clearTimeout(pollingTimeout);
|
|
145
|
-
}, [
|
|
146
|
-
|
|
147
|
-
wipe: () => dispatch({ type: "wipe" }),
|
|
148
|
-
poll: () => setTriggerLoad(true),
|
|
149
|
-
start: () => setIsPolling(true),
|
|
150
|
-
stop: () => setIsPolling(false),
|
|
151
|
-
pending,
|
|
152
|
-
error,
|
|
153
|
-
}), [pending, error]);
|
|
154
|
-
return (react_1.default.createElement(CountervaluesPollingContext.Provider, { value: polling },
|
|
155
|
-
react_1.default.createElement(CountervaluesUserSettingsContext.Provider, { value: userSettings },
|
|
156
|
-
react_1.default.createElement(CountervaluesContext.Provider, { value: state }, children))));
|
|
110
|
+
}, [refreshRate, pollInitDelay, isPolling, bridge]);
|
|
111
|
+
return null;
|
|
157
112
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return { ...state, pending: false, error: action.payload };
|
|
166
|
-
case "pending":
|
|
167
|
-
return { ...state, pending: true, error: undefined };
|
|
168
|
-
case "wipe":
|
|
169
|
-
return { state: logic_1.initialState, pending: false, error: undefined };
|
|
170
|
-
case "setCounterValueState":
|
|
171
|
-
return { ...state, state: action.payload };
|
|
172
|
-
default:
|
|
173
|
-
return state;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/** Returns market-cap ids. */
|
|
177
|
-
function useMarketcapIds() {
|
|
178
|
-
return (0, react_1.useContext)(CountervaluesMarketcapIdsContext);
|
|
113
|
+
/**
|
|
114
|
+
* Root countervalues provider (polling + calculation).
|
|
115
|
+
*/
|
|
116
|
+
function CountervaluesProvider({ children, bridge, ...rest }) {
|
|
117
|
+
return (react_1.default.createElement(exports.CountervaluesContext.Provider, { value: bridge },
|
|
118
|
+
react_1.default.createElement(Effect, { ...rest, bridge: bridge }),
|
|
119
|
+
children));
|
|
179
120
|
}
|
|
180
|
-
exports.
|
|
121
|
+
exports.CountervaluesProvider = CountervaluesProvider;
|
|
181
122
|
/** Returns the full countervalues state. */
|
|
182
123
|
function useCountervaluesState() {
|
|
183
|
-
return (
|
|
124
|
+
return useCountervaluesBridgeContext().useState();
|
|
184
125
|
}
|
|
185
126
|
exports.useCountervaluesState = useCountervaluesState;
|
|
186
|
-
|
|
127
|
+
/** Allows consumer to access the countervalues polling control object */
|
|
187
128
|
function useCountervaluesPolling() {
|
|
188
|
-
|
|
129
|
+
const bridge = useCountervaluesBridgeContext();
|
|
130
|
+
const pending = bridge.useStatePending();
|
|
131
|
+
const error = bridge.useStateError();
|
|
132
|
+
return (0, react_1.useMemo)(() => ({
|
|
133
|
+
poll: () => bridge.setPollingTriggerLoad(true),
|
|
134
|
+
start: () => bridge.setPollingIsPolling(true),
|
|
135
|
+
stop: () => bridge.setPollingIsPolling(false),
|
|
136
|
+
wipe: () => bridge.wipe(),
|
|
137
|
+
pending,
|
|
138
|
+
error,
|
|
139
|
+
}), [bridge, error, pending]);
|
|
189
140
|
}
|
|
190
141
|
exports.useCountervaluesPolling = useCountervaluesPolling;
|
|
191
|
-
|
|
192
|
-
function
|
|
193
|
-
return (
|
|
194
|
-
}
|
|
195
|
-
exports.useCountervaluesUserSettingsContext = useCountervaluesUserSettingsContext;
|
|
196
|
-
// provides an export of the countervalues state
|
|
197
|
-
function useCountervaluesExport() {
|
|
198
|
-
const state = useCountervaluesState();
|
|
199
|
-
return (0, react_1.useMemo)(() => (0, logic_1.exportCountervalues)(state), [state]);
|
|
142
|
+
/** Allows consumer to access the user settings that was used to fetch the countervalues */
|
|
143
|
+
function useCountervaluesUserSettings() {
|
|
144
|
+
return useCountervaluesBridgeContext().useUserSettings();
|
|
200
145
|
}
|
|
201
|
-
exports.
|
|
202
|
-
|
|
146
|
+
exports.useCountervaluesUserSettings = useCountervaluesUserSettings;
|
|
147
|
+
/**
|
|
148
|
+
* Provides a way to calculate a countervalue from a value
|
|
149
|
+
* Seems like a major bottleneck, see if it actually needs the full state or we can select only the needed data
|
|
150
|
+
*/
|
|
203
151
|
function useCalculate(query) {
|
|
204
152
|
const state = useCountervaluesState();
|
|
205
|
-
return (0, logic_1.calculate)(state, query);
|
|
153
|
+
return (0, react_1.useMemo)(() => (0, logic_1.calculate)(state, query), [state, query]);
|
|
206
154
|
}
|
|
207
155
|
exports.useCalculate = useCalculate;
|
|
208
|
-
|
|
156
|
+
/** Provides a way to calculate a countervalue from a value using a callback */
|
|
209
157
|
function useCalculateCountervalueCallback({ to, }) {
|
|
210
158
|
const state = useCountervaluesState();
|
|
211
159
|
return (0, react_1.useCallback)((from, value) => {
|
|
@@ -240,8 +188,10 @@ function useSendAmount({ account, fiatCurrency, cryptoAmount, }) {
|
|
|
240
188
|
return { fiatAmount, fiatUnit, calculateCryptoAmount };
|
|
241
189
|
}
|
|
242
190
|
exports.useSendAmount = useSendAmount;
|
|
243
|
-
|
|
244
|
-
|
|
191
|
+
/**
|
|
192
|
+
* Infer the tracking pairs for the top coins that the portfolio needs to display itself
|
|
193
|
+
* if startDate is undefined, the feature is disabled
|
|
194
|
+
*/
|
|
245
195
|
function useTrackingPairsForTopCoins(marketcapIds, countervalue, size, startDate) {
|
|
246
196
|
const dateTimestamp = startDate?.getTime();
|
|
247
197
|
return (0, react_1.useMemo)(() => dateTimestamp
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React, { ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Bridge enabling platform-specific persistence of market-cap ids.
|
|
4
|
+
* NOTE: memoize the object to avoid re-renders.
|
|
5
|
+
*/
|
|
6
|
+
export interface CountervaluesMarketcapBridge {
|
|
7
|
+
setError(message: string): void;
|
|
8
|
+
setIds(ids: string[]): void;
|
|
9
|
+
setLoading(loading: boolean): void;
|
|
10
|
+
useIds(): string[];
|
|
11
|
+
useLastUpdated(): number | undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Provides market-cap ids via the supplied bridge.
|
|
15
|
+
*/
|
|
16
|
+
export declare function CountervaluesMarketcapProvider({ children, bridge, }: {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
/** @param bridge Contains the functions that interact with the apps' state. Reference needs to be stable */
|
|
19
|
+
bridge: CountervaluesMarketcapBridge;
|
|
20
|
+
}): ReactElement;
|
|
21
|
+
/** Returns market-cap ids. */
|
|
22
|
+
export declare function useMarketcapIds(): string[];
|
|
23
|
+
//# sourceMappingURL=CountervaluesMarketcapProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountervaluesMarketcapProvider.d.ts","sourceRoot":"","sources":["../src/CountervaluesMarketcapProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAoD,MAAM,OAAO,CAAC;AAK9F;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,MAAM,IAAI,MAAM,EAAE,CAAC;IACnB,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;CACtC;AAqDD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4GAA4G;IAC5G,MAAM,EAAE,4BAA4B,CAAC;CACtC,GAAG,YAAY,CAOf;AAED,8BAA8B;AAC9B,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAG1C"}
|