@sundaeswap/wallet-lite 0.0.41 → 0.0.43
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/dist/cjs/@types/events.js.map +1 -1
- package/dist/cjs/@types/global.d.js.map +1 -1
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +1 -1
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserverEvent.js +3 -2
- package/dist/cjs/classes/WalletObserverEvent.js.map +1 -1
- package/dist/cjs/classes/WalletObserverUtils.class.js +3 -0
- package/dist/cjs/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/cjs/react-components/RenderWallet.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/context.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletHandles.js +41 -40
- package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/cjs/utils/comparisons.js.map +1 -1
- package/dist/cjs/utils/hashing.js.map +1 -1
- package/dist/esm/@types/events.js.map +1 -1
- package/dist/esm/@types/global.d.js.map +1 -1
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +3 -3
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/classes/WalletObserverEvent.js +3 -2
- package/dist/esm/classes/WalletObserverEvent.js.map +1 -1
- package/dist/esm/classes/WalletObserverUtils.class.js +5 -0
- package/dist/esm/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/esm/react-components/RenderWallet.js.map +1 -1
- package/dist/esm/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/esm/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/esm/react-components/RenderWalletState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/context.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletHandles.js +20 -19
- package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/esm/utils/comparisons.js.map +1 -1
- package/dist/esm/utils/hashing.js.map +1 -1
- package/dist/types/@types/events.d.ts +2 -2
- package/dist/types/classes/WalletBalanceMap.class.d.ts +1 -1
- package/dist/types/classes/WalletBalanceMap.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts +2 -2
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverEvent.d.ts +7 -7
- package/dist/types/classes/WalletObserverEvent.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverUtils.class.d.ts.map +1 -1
- package/dist/types/react-components/RenderWallet.d.ts +1 -1
- package/dist/types/react-components/RenderWallet.d.ts.map +1 -1
- package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/utils/comparisons.d.ts.map +1 -1
- package/dist/types/utils/hashing.d.ts +3 -3
- package/package.json +1 -1
- package/src/@types/events.ts +4 -4
- package/src/@types/global.d.ts +1 -0
- package/src/@types/observer.ts +6 -6
- package/src/__data__/assets.ts +1 -1
- package/src/classes/WalletAssetMap.class.ts +1 -1
- package/src/classes/WalletBalanceMap.class.ts +6 -6
- package/src/classes/WalletObserver.class.ts +27 -25
- package/src/classes/WalletObserverEvent.ts +14 -13
- package/src/classes/WalletObserverUtils.class.ts +11 -5
- package/src/classes/__tests__/WalletObserver.test.ts +23 -30
- package/src/classes/__tests__/WalletObserverEvent.test.ts +8 -8
- package/src/classes/__tests__/WalletObserverUtils.test.ts +6 -6
- package/src/react-components/RenderWallet.tsx +4 -4
- package/src/react-components/RenderWalletHandles.tsx +2 -2
- package/src/react-components/RenderWalletPeerConnect.tsx +2 -2
- package/src/react-components/RenderWalletState.tsx +2 -2
- package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +3 -3
- package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +2 -2
- package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts +1 -1
- package/src/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.ts +12 -12
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +14 -14
- package/src/react-components/__tests__/RenderWallet.test.tsx +1 -1
- package/src/react-components/__tests__/RenderWalletHandles.test.tsx +8 -8
- package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +1 -0
- package/src/react-components/__tests__/hooks/useWalletObserverRef.test.tsx +1 -1
- package/src/react-components/contexts/observer/context.ts +3 -3
- package/src/react-components/contexts/observer/types.ts +5 -5
- package/src/react-components/hooks/useWalletHandles.ts +29 -28
- package/src/react-components/hooks/useWalletLoadingState.ts +2 -2
- package/src/react-components/hooks/useWalletObserver.ts +2 -2
- package/src/react-components/hooks/useWalletPeerConnect.tsx +1 -1
- package/src/utils/__tests__/comparisons.test.ts +3 -3
- package/src/utils/__tests__/hashing.test.ts +6 -8
- package/src/utils/comparisons.ts +3 -1
- package/src/utils/hashing.ts +5 -5
|
@@ -23,7 +23,7 @@ describe("WalletObserverEvent", () => {
|
|
|
23
23
|
|
|
24
24
|
instance.addEventListener(
|
|
25
25
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
26
|
-
handler
|
|
26
|
+
handler,
|
|
27
27
|
);
|
|
28
28
|
|
|
29
29
|
instance.dispatch(EWalletObserverEvents.CONNECT_WALLET_END);
|
|
@@ -43,14 +43,14 @@ describe("WalletObserverEvent", () => {
|
|
|
43
43
|
|
|
44
44
|
instance.addEventListener(
|
|
45
45
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
46
|
-
handler
|
|
46
|
+
handler,
|
|
47
47
|
);
|
|
48
48
|
|
|
49
49
|
expect(instance.eventList().size).toEqual(1);
|
|
50
50
|
|
|
51
51
|
instance.addEventListener(
|
|
52
52
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
53
|
-
handler
|
|
53
|
+
handler,
|
|
54
54
|
);
|
|
55
55
|
|
|
56
56
|
expect(instance.eventList().size).toEqual(1);
|
|
@@ -67,29 +67,29 @@ describe("WalletObserverEvent", () => {
|
|
|
67
67
|
|
|
68
68
|
instance.addEventListener(
|
|
69
69
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
70
|
-
handler1
|
|
70
|
+
handler1,
|
|
71
71
|
);
|
|
72
72
|
instance.addEventListener(
|
|
73
73
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
74
|
-
handler1
|
|
74
|
+
handler1,
|
|
75
75
|
);
|
|
76
76
|
instance.addEventListener(
|
|
77
77
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
78
|
-
handler2
|
|
78
|
+
handler2,
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
expect(instance.eventList().size).toEqual(3);
|
|
82
82
|
|
|
83
83
|
instance.removeEventListener(
|
|
84
84
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
85
|
-
handler1
|
|
85
|
+
handler1,
|
|
86
86
|
);
|
|
87
87
|
|
|
88
88
|
expect(instance.eventList().size).toEqual(2);
|
|
89
89
|
|
|
90
90
|
instance.removeEventListener(
|
|
91
91
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
92
|
-
handler1
|
|
92
|
+
handler1,
|
|
93
93
|
);
|
|
94
94
|
|
|
95
95
|
expect(instance.eventList().size).toEqual(1);
|
|
@@ -53,12 +53,12 @@ beforeAll(() => {
|
|
|
53
53
|
})),
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
|
-
})
|
|
56
|
+
}),
|
|
57
57
|
);
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
afterAll(() => {
|
|
61
|
-
mock.
|
|
61
|
+
mock.restore();
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
describe("WalletObserverUtils", async () => {
|
|
@@ -91,7 +91,7 @@ describe("WalletObserverUtils", async () => {
|
|
|
91
91
|
it("should throw an error if the address is malformed", () => {
|
|
92
92
|
isValidMock.mockImplementation(() => false);
|
|
93
93
|
expect(() => instance.getAddressDetails("invalid")).toThrowError(
|
|
94
|
-
"Expected a Bech32 encoded address."
|
|
94
|
+
"Expected a Bech32 encoded address.",
|
|
95
95
|
);
|
|
96
96
|
});
|
|
97
97
|
});
|
|
@@ -100,19 +100,19 @@ describe("WalletObserverUtils", async () => {
|
|
|
100
100
|
it("should call correct dependency functions", () => {
|
|
101
101
|
expect(() => instance.getBech32StakingAddress(testAddress)).not.toThrow();
|
|
102
102
|
expect(instance.getBech32StakingAddress(testAddress)).toEqual(
|
|
103
|
-
stakeAddress
|
|
103
|
+
stakeAddress,
|
|
104
104
|
);
|
|
105
105
|
|
|
106
106
|
isValidMock.mockImplementation(() => false);
|
|
107
107
|
expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
|
|
108
|
-
"Expected a Bech32 encoded address."
|
|
108
|
+
"Expected a Bech32 encoded address.",
|
|
109
109
|
);
|
|
110
110
|
expect(isValidMock).toHaveBeenCalled();
|
|
111
111
|
|
|
112
112
|
// @ts-expect-error It can be undefined.
|
|
113
113
|
getStakeCredentialMock.mockImplementation(() => undefined);
|
|
114
114
|
expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
|
|
115
|
-
"Expected a Bech32 encoded address."
|
|
115
|
+
"Expected a Bech32 encoded address.",
|
|
116
116
|
);
|
|
117
117
|
});
|
|
118
118
|
});
|
|
@@ -5,12 +5,12 @@ import { ErrorBoundary } from "react-error-boundary";
|
|
|
5
5
|
import { useWalletObserver } from "./hooks/useWalletObserver.js";
|
|
6
6
|
|
|
7
7
|
export type TRenderWalletFunctionState<
|
|
8
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
8
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
9
9
|
> = ReturnType<typeof useWalletObserver<T>>;
|
|
10
10
|
|
|
11
|
-
export type TRenderWalletFunction
|
|
12
|
-
|
|
13
|
-
) => JSX.Element | ReactNode;
|
|
11
|
+
export type TRenderWalletFunction<
|
|
12
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
13
|
+
> = (state: TRenderWalletFunctionState<T>) => JSX.Element | ReactNode;
|
|
14
14
|
|
|
15
15
|
export interface IRenderWalletProps {
|
|
16
16
|
render: TRenderWalletFunction;
|
|
@@ -6,12 +6,12 @@ import { useWalletHandles } from "./hooks/useWalletHandles.js";
|
|
|
6
6
|
import { useWalletObserver } from "./hooks/useWalletObserver.js";
|
|
7
7
|
|
|
8
8
|
export type TRenderWalletHandlesFunctionState<
|
|
9
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
9
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
10
10
|
> = ReturnType<typeof useWalletObserver<T>> &
|
|
11
11
|
ReturnType<typeof useWalletHandles<T>>;
|
|
12
12
|
|
|
13
13
|
export type TRenderWalletHandlesFunction = (
|
|
14
|
-
state: TRenderWalletHandlesFunctionState
|
|
14
|
+
state: TRenderWalletHandlesFunctionState,
|
|
15
15
|
) => JSX.Element | ReactNode;
|
|
16
16
|
|
|
17
17
|
export interface IRenderWalletHandlesProps {
|
|
@@ -6,12 +6,12 @@ import { useWalletObserver } from "./hooks/useWalletObserver.js";
|
|
|
6
6
|
import { useWalletPeerConnect } from "./hooks/useWalletPeerConnect.js";
|
|
7
7
|
|
|
8
8
|
export type TRenderWalletPeerConnectFunctionState<
|
|
9
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
9
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
10
10
|
> = ReturnType<typeof useWalletObserver<T>> &
|
|
11
11
|
ReturnType<typeof useWalletPeerConnect<T>>;
|
|
12
12
|
|
|
13
13
|
export type TRenderWalletPeerConnectFunction = (
|
|
14
|
-
state: TRenderWalletPeerConnectFunctionState
|
|
14
|
+
state: TRenderWalletPeerConnectFunctionState,
|
|
15
15
|
) => ReactNode;
|
|
16
16
|
|
|
17
17
|
export interface IRenderWalletPeerConnectProps {
|
|
@@ -6,12 +6,12 @@ import { useWalletLoadingState } from "./hooks/useWalletLoadingState.js";
|
|
|
6
6
|
import { useWalletObserver } from "./hooks/useWalletObserver.js";
|
|
7
7
|
|
|
8
8
|
export type TRenderWalletStateFunctionState<
|
|
9
|
-
T extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
9
|
+
T extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
10
10
|
> = ReturnType<typeof useWalletObserver<T>> &
|
|
11
11
|
ReturnType<typeof useWalletLoadingState<T>>;
|
|
12
12
|
|
|
13
13
|
export type TRenderWalletStateFunction = (
|
|
14
|
-
state: TRenderWalletStateFunctionState
|
|
14
|
+
state: TRenderWalletStateFunctionState,
|
|
15
15
|
) => JSX.Element | ReactNode;
|
|
16
16
|
|
|
17
17
|
export interface IRenderWalletStateProps {
|
|
@@ -34,7 +34,7 @@ const WalletObserverProvider: FC<
|
|
|
34
34
|
useProviderRefreshInterval(
|
|
35
35
|
observerRef.current,
|
|
36
36
|
state.syncWallet,
|
|
37
|
-
options?.refreshInterval
|
|
37
|
+
options?.refreshInterval,
|
|
38
38
|
);
|
|
39
39
|
|
|
40
40
|
const derivedState = useDerivedState(observerRef.current, {
|
|
@@ -63,7 +63,7 @@ const WalletObserverProvider: FC<
|
|
|
63
63
|
syncingWallet,
|
|
64
64
|
ready,
|
|
65
65
|
observerRef.current,
|
|
66
|
-
]
|
|
66
|
+
],
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
useEffect(() => {
|
|
@@ -73,7 +73,7 @@ const WalletObserverProvider: FC<
|
|
|
73
73
|
|
|
74
74
|
const wallet: TSupportedWalletExtensions | null =
|
|
75
75
|
window.localStorage.getItem(
|
|
76
|
-
WalletObserver.PERSISTENCE_CACHE_KEY
|
|
76
|
+
WalletObserver.PERSISTENCE_CACHE_KEY,
|
|
77
77
|
) as TSupportedWalletExtensions;
|
|
78
78
|
|
|
79
79
|
if (wallet && observerRef.current?.getOptions()?.persistence) {
|
|
@@ -4,7 +4,7 @@ import { useWalletObserverState } from "../useWalletObserverState.js";
|
|
|
4
4
|
|
|
5
5
|
export const useDerivedState = (
|
|
6
6
|
observer: WalletObserver,
|
|
7
|
-
state: Pick<ReturnType<typeof useWalletObserverState>, "usedAddresses"
|
|
7
|
+
state: Pick<ReturnType<typeof useWalletObserverState>, "usedAddresses">,
|
|
8
8
|
) => {
|
|
9
9
|
const [stakeAddress, setStakeAddress] = useState<string>();
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ export const useDerivedState = (
|
|
|
23
23
|
stakeAddress,
|
|
24
24
|
mainAddress: state.usedAddresses[0],
|
|
25
25
|
}),
|
|
26
|
-
[state.usedAddresses[0], stakeAddress]
|
|
26
|
+
[state.usedAddresses[0], stakeAddress],
|
|
27
27
|
);
|
|
28
28
|
|
|
29
29
|
return memoizedDerivedState;
|
package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts
CHANGED
|
@@ -14,7 +14,7 @@ import { WalletObserver } from "../../../../classes/WalletObserver.class.js";
|
|
|
14
14
|
export const useProviderRefreshInterval = (
|
|
15
15
|
observer: WalletObserver,
|
|
16
16
|
syncWallet: () => Promise<void>,
|
|
17
|
-
refreshInterval?: number
|
|
17
|
+
refreshInterval?: number,
|
|
18
18
|
) => {
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
if (!refreshInterval) {
|
|
@@ -14,7 +14,7 @@ import { TWalletProviderHooks } from "../../contexts/observer/index.js";
|
|
|
14
14
|
*/
|
|
15
15
|
export const useProviderWalletObserverRef = (
|
|
16
16
|
options?: TWalletObserverOptions,
|
|
17
|
-
hooks?: TWalletProviderHooks
|
|
17
|
+
hooks?: TWalletProviderHooks,
|
|
18
18
|
) => {
|
|
19
19
|
// Use ref to store the observer instance, ensuring it's created only once
|
|
20
20
|
const observerRef = useRef<WalletObserver | null>(null);
|
|
@@ -33,7 +33,7 @@ export const useProviderWalletObserverRef = (
|
|
|
33
33
|
return Boolean(
|
|
34
34
|
observerRef.current &&
|
|
35
35
|
observerRef.current.api &&
|
|
36
|
-
observerRef.current.activeWallet
|
|
36
|
+
observerRef.current.activeWallet,
|
|
37
37
|
);
|
|
38
38
|
}, [observerRef, observerRef.current.api, observerRef.current.activeWallet]);
|
|
39
39
|
|
|
@@ -67,23 +67,23 @@ export const useProviderWalletObserverRef = (
|
|
|
67
67
|
|
|
68
68
|
observerRef.current.addEventListener(
|
|
69
69
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
70
|
-
setConnectingStart
|
|
70
|
+
setConnectingStart,
|
|
71
71
|
);
|
|
72
72
|
observerRef.current.addEventListener(
|
|
73
73
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
74
|
-
setConnectingEnd
|
|
74
|
+
setConnectingEnd,
|
|
75
75
|
);
|
|
76
76
|
observerRef.current.addEventListener(
|
|
77
77
|
EWalletObserverEvents.SYNCING_WALLET_START,
|
|
78
|
-
setSyncingStart
|
|
78
|
+
setSyncingStart,
|
|
79
79
|
);
|
|
80
80
|
observerRef.current.addEventListener(
|
|
81
81
|
EWalletObserverEvents.SYNCING_WALLET_END,
|
|
82
|
-
setSyncingEnd
|
|
82
|
+
setSyncingEnd,
|
|
83
83
|
);
|
|
84
84
|
observerRef.current.addEventListener(
|
|
85
85
|
EWalletObserverEvents.DISCONNECT,
|
|
86
|
-
onDisconnect
|
|
86
|
+
onDisconnect,
|
|
87
87
|
);
|
|
88
88
|
|
|
89
89
|
setEventListenersAttached(() => true);
|
|
@@ -95,23 +95,23 @@ export const useProviderWalletObserverRef = (
|
|
|
95
95
|
|
|
96
96
|
observerRef.current.removeEventListener(
|
|
97
97
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
98
|
-
setConnectingStart
|
|
98
|
+
setConnectingStart,
|
|
99
99
|
);
|
|
100
100
|
observerRef.current.removeEventListener(
|
|
101
101
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
102
|
-
setConnectingEnd
|
|
102
|
+
setConnectingEnd,
|
|
103
103
|
);
|
|
104
104
|
observerRef.current.removeEventListener(
|
|
105
105
|
EWalletObserverEvents.SYNCING_WALLET_START,
|
|
106
|
-
setSyncingStart
|
|
106
|
+
setSyncingStart,
|
|
107
107
|
);
|
|
108
108
|
observerRef.current.removeEventListener(
|
|
109
109
|
EWalletObserverEvents.SYNCING_WALLET_END,
|
|
110
|
-
setSyncingEnd
|
|
110
|
+
setSyncingEnd,
|
|
111
111
|
);
|
|
112
112
|
observerRef.current.removeEventListener(
|
|
113
113
|
EWalletObserverEvents.DISCONNECT,
|
|
114
|
-
onDisconnect
|
|
114
|
+
onDisconnect,
|
|
115
115
|
);
|
|
116
116
|
};
|
|
117
117
|
}, [observerRef, hooks]);
|
|
@@ -19,20 +19,20 @@ import { THandleMetadata } from "../../contexts/observer/index.js";
|
|
|
19
19
|
* @param {WalletObserver} observer
|
|
20
20
|
*/
|
|
21
21
|
export const useWalletObserverState = <
|
|
22
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
22
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
23
23
|
>(
|
|
24
|
-
observer: WalletObserver<AssetMetadata
|
|
24
|
+
observer: WalletObserver<AssetMetadata>,
|
|
25
25
|
) => {
|
|
26
26
|
const [activeWallet, setActiveWallet] =
|
|
27
27
|
useState<TSupportedWalletExtensions>();
|
|
28
28
|
const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(
|
|
29
|
-
new AssetAmount<AssetMetadata>(0n)
|
|
29
|
+
new AssetAmount<AssetMetadata>(0n),
|
|
30
30
|
);
|
|
31
31
|
const [handleMetadata, setHandleMetadata] = useState<
|
|
32
32
|
TAssetAmountMap<THandleMetadata<AssetMetadata>>
|
|
33
33
|
>(new WalletAssetMap<THandleMetadata<AssetMetadata>>());
|
|
34
34
|
const [balance, setBalance] = useState<WalletBalanceMap<AssetMetadata>>(
|
|
35
|
-
new WalletBalanceMap<AssetMetadata>(observer)
|
|
35
|
+
new WalletBalanceMap<AssetMetadata>(observer),
|
|
36
36
|
);
|
|
37
37
|
const [network, setNetwork] = useState<number | undefined>();
|
|
38
38
|
const [usedAddresses, setUsedAddresses] = useState<string[]>([]);
|
|
@@ -45,8 +45,8 @@ export const useWalletObserverState = <
|
|
|
45
45
|
const [willAutoConnect, setWillAutoConnect] = useState(
|
|
46
46
|
Boolean(
|
|
47
47
|
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY) &&
|
|
48
|
-
observer.getOptions().persistence
|
|
49
|
-
)
|
|
48
|
+
observer.getOptions().persistence,
|
|
49
|
+
),
|
|
50
50
|
);
|
|
51
51
|
|
|
52
52
|
const disconnect = useCallback(() => {
|
|
@@ -82,40 +82,40 @@ export const useWalletObserverState = <
|
|
|
82
82
|
|
|
83
83
|
startTransition(() => {
|
|
84
84
|
setActiveWallet((prevWallet) =>
|
|
85
|
-
newWallet === prevWallet ? prevWallet : newWallet
|
|
85
|
+
newWallet === prevWallet ? prevWallet : newWallet,
|
|
86
86
|
);
|
|
87
87
|
|
|
88
88
|
const newAdaBalance = freshData.balanceMap.get(
|
|
89
|
-
WalletObserver.ADA_ASSET_ID
|
|
89
|
+
WalletObserver.ADA_ASSET_ID,
|
|
90
90
|
);
|
|
91
91
|
if (newAdaBalance) {
|
|
92
92
|
setAdaBalance((prevBalance) =>
|
|
93
93
|
prevBalance.amount === newAdaBalance.amount
|
|
94
94
|
? prevBalance
|
|
95
|
-
: newAdaBalance
|
|
95
|
+
: newAdaBalance,
|
|
96
96
|
);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
setBalance((prevBalance) =>
|
|
100
100
|
areAssetMapsEqual(prevBalance, freshData.balanceMap)
|
|
101
101
|
? prevBalance
|
|
102
|
-
: freshData.balanceMap
|
|
102
|
+
: freshData.balanceMap,
|
|
103
103
|
);
|
|
104
104
|
|
|
105
105
|
setUsedAddresses((prevValue) =>
|
|
106
106
|
JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
|
|
107
107
|
? prevValue
|
|
108
|
-
: freshData.usedAddresses
|
|
108
|
+
: freshData.usedAddresses,
|
|
109
109
|
);
|
|
110
110
|
|
|
111
111
|
setUnusedAddresses((prevValue) =>
|
|
112
112
|
JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
|
|
113
113
|
? prevValue
|
|
114
|
-
: freshData.unusedAddresses
|
|
114
|
+
: freshData.unusedAddresses,
|
|
115
115
|
);
|
|
116
116
|
|
|
117
117
|
setNetwork((prevValue) =>
|
|
118
|
-
prevValue === freshData.network ? prevValue : freshData.network
|
|
118
|
+
prevValue === freshData.network ? prevValue : freshData.network,
|
|
119
119
|
);
|
|
120
120
|
|
|
121
121
|
setUtxos((prevValue) => {
|
|
@@ -153,7 +153,7 @@ export const useWalletObserverState = <
|
|
|
153
153
|
setSwitching(() => false);
|
|
154
154
|
return observer.api;
|
|
155
155
|
},
|
|
156
|
-
[observer, setSwitching]
|
|
156
|
+
[observer, setSwitching],
|
|
157
157
|
);
|
|
158
158
|
|
|
159
159
|
/**
|
|
@@ -38,15 +38,15 @@ describe("RenderWalletHandles", () => {
|
|
|
38
38
|
const user = userEvent.setup();
|
|
39
39
|
const spiedOnGetAllDataBatch = spyOn(
|
|
40
40
|
KoraLabsProvider.prototype,
|
|
41
|
-
"getAllDataBatch"
|
|
41
|
+
"getAllDataBatch",
|
|
42
42
|
);
|
|
43
43
|
spiedOnGetAllDataBatch.mockImplementationOnce(
|
|
44
|
-
// @ts-
|
|
45
|
-
() => async () => mockHandleMetadata
|
|
44
|
+
// @ts-expect-error Bug in Bun.sh that mocks the function result rather than the reference.
|
|
45
|
+
() => async () => mockHandleMetadata,
|
|
46
46
|
);
|
|
47
47
|
spiedOnGetAllDataBatch.mockImplementationOnce(
|
|
48
|
-
// @ts-
|
|
49
|
-
() => async () => mockHandleMetadata
|
|
48
|
+
// @ts-expect-error Bug in Bun.sh that mocks the function result rather than the reference.
|
|
49
|
+
() => async () => mockHandleMetadata,
|
|
50
50
|
);
|
|
51
51
|
|
|
52
52
|
const { container, getByTestId, queryByTestId, rerender } = render(
|
|
@@ -55,7 +55,7 @@ describe("RenderWalletHandles", () => {
|
|
|
55
55
|
wrapper(props) {
|
|
56
56
|
return <WalletObserverProvider {...props} />;
|
|
57
57
|
},
|
|
58
|
-
}
|
|
58
|
+
},
|
|
59
59
|
);
|
|
60
60
|
|
|
61
61
|
expect(spiedOnGetAllDataBatch).not.toHaveBeenCalled();
|
|
@@ -74,8 +74,8 @@ describe("RenderWalletHandles", () => {
|
|
|
74
74
|
expect(container.innerHTML).toMatchSnapshot();
|
|
75
75
|
|
|
76
76
|
spiedOnGetAllDataBatch.mockImplementationOnce(
|
|
77
|
-
// @ts-
|
|
78
|
-
() => async () => mockHandleMetadata.map(({ name }) => `${name}-updated`)
|
|
77
|
+
// @ts-expect-error See first mock comment.
|
|
78
|
+
() => async () => mockHandleMetadata.map(({ name }) => `${name}-updated`),
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
rerender(<RenderWalletHandles render={TestComponent} />);
|
|
@@ -15,15 +15,15 @@ export const WalletObserverContext = createContext<
|
|
|
15
15
|
* @returns {IWalletObserverState<AssetMetadata>}
|
|
16
16
|
*/
|
|
17
17
|
export function useWalletObserverContext<
|
|
18
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
18
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
19
19
|
>(): IWalletObserverState<AssetMetadata> {
|
|
20
20
|
const context = useContext(
|
|
21
|
-
WalletObserverContext
|
|
21
|
+
WalletObserverContext,
|
|
22
22
|
) as unknown as IWalletObserverState<AssetMetadata>;
|
|
23
23
|
|
|
24
24
|
if (!context) {
|
|
25
25
|
throw new Error(
|
|
26
|
-
"useWalletObserverContext must be used within a WalletObserverProvider"
|
|
26
|
+
"useWalletObserverContext must be used within a WalletObserverProvider",
|
|
27
27
|
);
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -22,7 +22,7 @@ export type TWalletProviderHooks = {
|
|
|
22
22
|
* The resolved internal props of the WalletObserverProvider.
|
|
23
23
|
*/
|
|
24
24
|
export interface IWalletObserverProviderState<
|
|
25
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
25
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
26
26
|
> {
|
|
27
27
|
observerOptions: TWalletObserverOptions<AssetMetadata>;
|
|
28
28
|
hooks: TWalletProviderHooks;
|
|
@@ -33,7 +33,7 @@ export interface IWalletObserverProviderState<
|
|
|
33
33
|
* The main WalletObserverProvider props.
|
|
34
34
|
*/
|
|
35
35
|
export interface IWalletObserverProviderProps<
|
|
36
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
36
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
37
37
|
> {
|
|
38
38
|
options?: Partial<IWalletObserverProviderState<AssetMetadata>>;
|
|
39
39
|
}
|
|
@@ -42,7 +42,7 @@ export interface IWalletObserverProviderProps<
|
|
|
42
42
|
* The WalletObserverProvider's internal state.
|
|
43
43
|
*/
|
|
44
44
|
export interface IWalletObserverState<
|
|
45
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
45
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
46
46
|
> {
|
|
47
47
|
observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;
|
|
48
48
|
refreshInterval: number | false;
|
|
@@ -62,14 +62,14 @@ export interface IWalletObserverState<
|
|
|
62
62
|
* returned from the metadataResolver.
|
|
63
63
|
*/
|
|
64
64
|
export type THandleMetadata<
|
|
65
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
65
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
66
66
|
> = AssetMetadata & IHandle;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* The exposed state of the WalletObserverProvider.
|
|
70
70
|
*/
|
|
71
71
|
export type TUseWalletObserverState<
|
|
72
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
72
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
73
73
|
> = Omit<
|
|
74
74
|
IWalletObserverState<AssetMetadata>["state"],
|
|
75
75
|
| "setActiveWallet"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useCallback,
|
|
3
|
+
useDeferredValue,
|
|
3
4
|
useEffect,
|
|
4
5
|
useMemo,
|
|
5
6
|
useState,
|
|
6
|
-
useTransition,
|
|
7
7
|
} from "react";
|
|
8
8
|
|
|
9
9
|
import { IHandle } from "@koralabs/adahandle-sdk";
|
|
@@ -15,17 +15,18 @@ import { THandleMetadata } from "../contexts/observer/types.js";
|
|
|
15
15
|
import { useWalletObserver } from "./useWalletObserver.js";
|
|
16
16
|
|
|
17
17
|
export const useWalletHandles = <
|
|
18
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
18
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
19
19
|
>() => {
|
|
20
20
|
const state = useWalletObserver<THandleMetadata<AssetMetadata>>();
|
|
21
|
-
const [isPending, startTransition] = useTransition();
|
|
22
21
|
const [handles, setHandles] = useState<
|
|
23
22
|
TAssetAmountMap<THandleMetadata<AssetMetadata>>
|
|
24
23
|
>(new WalletAssetMap());
|
|
24
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
25
|
+
const deferredHandles = useDeferredValue(handles);
|
|
25
26
|
|
|
26
27
|
const memoizedHandleDep = useMemo(
|
|
27
28
|
() => [...state.balance.getHandles().keys()],
|
|
28
|
-
[state.balance]
|
|
29
|
+
[state.balance],
|
|
29
30
|
);
|
|
30
31
|
|
|
31
32
|
const syncHandles = useCallback<
|
|
@@ -41,6 +42,7 @@ export const useWalletHandles = <
|
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
try {
|
|
45
|
+
setIsLoading(true);
|
|
44
46
|
const {
|
|
45
47
|
default: HandleClient,
|
|
46
48
|
HandleClientContext,
|
|
@@ -63,12 +65,12 @@ export const useWalletHandles = <
|
|
|
63
65
|
.getAllDataBatch(
|
|
64
66
|
walletHandlesWithDataArray.map(([key]) => ({
|
|
65
67
|
value: key.split(".")[1],
|
|
66
|
-
}))
|
|
68
|
+
})),
|
|
67
69
|
);
|
|
68
70
|
|
|
69
71
|
walletHandlesWithDataArray.forEach(([key, asset]) => {
|
|
70
72
|
const matchingData = walletHandleDataArray.find(
|
|
71
|
-
({ hex }) => hex === key.split(".")[1]
|
|
73
|
+
({ hex }) => hex === key.split(".")[1],
|
|
72
74
|
) as IHandle;
|
|
73
75
|
|
|
74
76
|
walletHandles.set(
|
|
@@ -80,10 +82,11 @@ export const useWalletHandles = <
|
|
|
80
82
|
assetId: normalizeAssetIdWithDot(asset.metadata.assetId),
|
|
81
83
|
decimals: 0,
|
|
82
84
|
})
|
|
83
|
-
.withAmount(1n)
|
|
85
|
+
.withAmount(1n),
|
|
84
86
|
);
|
|
85
87
|
});
|
|
86
88
|
|
|
89
|
+
setIsLoading(false);
|
|
87
90
|
return walletHandles;
|
|
88
91
|
} catch (e) {
|
|
89
92
|
console.error(e);
|
|
@@ -94,29 +97,27 @@ export const useWalletHandles = <
|
|
|
94
97
|
useEffect(() => {
|
|
95
98
|
const fetchHandles = async () => {
|
|
96
99
|
const newHandles = await syncHandles();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
handleMetadataChanged = true;
|
|
110
|
-
}
|
|
100
|
+
setHandles((prevHandles) => {
|
|
101
|
+
let handleMetadataChanged = false;
|
|
102
|
+
|
|
103
|
+
if (newHandles.size !== prevHandles?.size) {
|
|
104
|
+
handleMetadataChanged = true;
|
|
105
|
+
} else {
|
|
106
|
+
for (const [key, val] of newHandles) {
|
|
107
|
+
if (
|
|
108
|
+
!prevHandles.has(key) ||
|
|
109
|
+
prevHandles.get(key)?.amount !== val?.amount
|
|
110
|
+
) {
|
|
111
|
+
handleMetadataChanged = true;
|
|
111
112
|
}
|
|
112
113
|
}
|
|
114
|
+
}
|
|
113
115
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
if (!handleMetadataChanged) {
|
|
117
|
+
return prevHandles;
|
|
118
|
+
}
|
|
117
119
|
|
|
118
|
-
|
|
119
|
-
});
|
|
120
|
+
return newHandles;
|
|
120
121
|
});
|
|
121
122
|
};
|
|
122
123
|
|
|
@@ -124,7 +125,7 @@ export const useWalletHandles = <
|
|
|
124
125
|
}, [memoizedHandleDep, syncHandles]);
|
|
125
126
|
|
|
126
127
|
return {
|
|
127
|
-
handles,
|
|
128
|
-
loadingHandles:
|
|
128
|
+
handles: deferredHandles,
|
|
129
|
+
loadingHandles: isLoading,
|
|
129
130
|
};
|
|
130
131
|
};
|