@growae/reactive-react 0.0.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/LICENSE +21 -0
- package/package.json +47 -0
- package/src/context.test.ts +52 -0
- package/src/context.ts +25 -0
- package/src/errors/base.ts +8 -0
- package/src/errors/context.ts +12 -0
- package/src/errors/index.ts +5 -0
- package/src/exports/index.ts +230 -0
- package/src/exports/query.ts +12 -0
- package/src/hooks/index.ts +69 -0
- package/src/hooks/useAccount.test.ts +12 -0
- package/src/hooks/useAccount.ts +43 -0
- package/src/hooks/useBalance.test.ts +72 -0
- package/src/hooks/useBalance.ts +42 -0
- package/src/hooks/useBlock.test.ts +12 -0
- package/src/hooks/useBlock.ts +42 -0
- package/src/hooks/useCallContract.test.ts +12 -0
- package/src/hooks/useCallContract.ts +54 -0
- package/src/hooks/useChannelDeposit.test.ts +12 -0
- package/src/hooks/useChannelDeposit.ts +53 -0
- package/src/hooks/useClaimName.test.ts +12 -0
- package/src/hooks/useClaimName.ts +53 -0
- package/src/hooks/useCloseChannel.test.ts +12 -0
- package/src/hooks/useCloseChannel.ts +53 -0
- package/src/hooks/useConfig.test.ts +53 -0
- package/src/hooks/useConfig.ts +20 -0
- package/src/hooks/useConnect.test.ts +67 -0
- package/src/hooks/useConnect.ts +69 -0
- package/src/hooks/useConnection.test.ts +12 -0
- package/src/hooks/useConnection.ts +26 -0
- package/src/hooks/useConnections.test.ts +12 -0
- package/src/hooks/useConnections.ts +26 -0
- package/src/hooks/useConnectorClient.test.ts +12 -0
- package/src/hooks/useConnectorClient.ts +44 -0
- package/src/hooks/useConnectors.test.ts +12 -0
- package/src/hooks/useConnectors.ts +26 -0
- package/src/hooks/useContractBytecode.test.ts +12 -0
- package/src/hooks/useContractBytecode.ts +41 -0
- package/src/hooks/useContractEvents.test.ts +12 -0
- package/src/hooks/useContractEvents.ts +42 -0
- package/src/hooks/useDeployContract.test.ts +12 -0
- package/src/hooks/useDeployContract.ts +54 -0
- package/src/hooks/useDisconnect.test.ts +12 -0
- package/src/hooks/useDisconnect.ts +54 -0
- package/src/hooks/useEstimateGas.test.ts +12 -0
- package/src/hooks/useEstimateGas.ts +42 -0
- package/src/hooks/useHeight.test.ts +12 -0
- package/src/hooks/useHeight.ts +39 -0
- package/src/hooks/useNetworkId.test.ts +54 -0
- package/src/hooks/useNetworkId.ts +26 -0
- package/src/hooks/useNetworks.test.ts +12 -0
- package/src/hooks/useNetworks.ts +19 -0
- package/src/hooks/useNodeClient.test.ts +12 -0
- package/src/hooks/useNodeClient.ts +30 -0
- package/src/hooks/useOpenChannel.test.ts +12 -0
- package/src/hooks/useOpenChannel.ts +53 -0
- package/src/hooks/useOracleQueries.test.ts +12 -0
- package/src/hooks/useOracleQueries.ts +40 -0
- package/src/hooks/useOracleState.test.ts +12 -0
- package/src/hooks/useOracleState.ts +40 -0
- package/src/hooks/usePayForTransaction.test.ts +12 -0
- package/src/hooks/usePayForTransaction.ts +54 -0
- package/src/hooks/usePreclaimName.test.ts +12 -0
- package/src/hooks/usePreclaimName.ts +53 -0
- package/src/hooks/useQueryOracle.test.ts +12 -0
- package/src/hooks/useQueryOracle.ts +53 -0
- package/src/hooks/useReadContract.test.ts +12 -0
- package/src/hooks/useReadContract.ts +43 -0
- package/src/hooks/useReadContracts.test.ts +12 -0
- package/src/hooks/useReadContracts.ts +38 -0
- package/src/hooks/useReconnect.test.ts +12 -0
- package/src/hooks/useReconnect.ts +54 -0
- package/src/hooks/useRegisterOracle.test.ts +12 -0
- package/src/hooks/useRegisterOracle.ts +53 -0
- package/src/hooks/useResolveName.test.ts +12 -0
- package/src/hooks/useResolveName.ts +41 -0
- package/src/hooks/useRespondToQuery.test.ts +12 -0
- package/src/hooks/useRespondToQuery.ts +53 -0
- package/src/hooks/useRevokeName.test.ts +12 -0
- package/src/hooks/useRevokeName.ts +53 -0
- package/src/hooks/useSendTransaction.test.ts +12 -0
- package/src/hooks/useSendTransaction.ts +54 -0
- package/src/hooks/useSignMessage.test.ts +12 -0
- package/src/hooks/useSignMessage.ts +54 -0
- package/src/hooks/useSignTransaction.test.ts +12 -0
- package/src/hooks/useSignTransaction.ts +54 -0
- package/src/hooks/useSignTypedData.test.ts +12 -0
- package/src/hooks/useSignTypedData.ts +54 -0
- package/src/hooks/useSimulateContract.test.ts +12 -0
- package/src/hooks/useSimulateContract.ts +43 -0
- package/src/hooks/useSpend.test.ts +12 -0
- package/src/hooks/useSpend.ts +53 -0
- package/src/hooks/useSwitchNetwork.test.ts +12 -0
- package/src/hooks/useSwitchNetwork.ts +57 -0
- package/src/hooks/useTransaction.test.ts +12 -0
- package/src/hooks/useTransaction.ts +41 -0
- package/src/hooks/useTransactionCount.test.ts +12 -0
- package/src/hooks/useTransactionCount.ts +41 -0
- package/src/hooks/useTransferName.test.ts +12 -0
- package/src/hooks/useTransferName.ts +53 -0
- package/src/hooks/useUpdateName.test.ts +12 -0
- package/src/hooks/useUpdateName.ts +53 -0
- package/src/hooks/useVerifyMessage.test.ts +12 -0
- package/src/hooks/useVerifyMessage.ts +39 -0
- package/src/hooks/useVerifyTypedData.test.ts +12 -0
- package/src/hooks/useVerifyTypedData.ts +39 -0
- package/src/hooks/useWaitForTransaction.test.ts +12 -0
- package/src/hooks/useWaitForTransaction.ts +41 -0
- package/src/hooks/useWatchConnection.test.ts +12 -0
- package/src/hooks/useWatchConnection.ts +34 -0
- package/src/hooks/useWatchConnectors.test.ts +12 -0
- package/src/hooks/useWatchConnectors.ts +34 -0
- package/src/hooks/useWatchHeight.test.ts +12 -0
- package/src/hooks/useWatchHeight.ts +45 -0
- package/src/hydrate.ts +34 -0
- package/src/types/properties.ts +9 -0
- package/src/utils/query.ts +80 -0
- package/tsconfig.build.json +13 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useBlock } from './useBlock.js'
|
|
3
|
+
|
|
4
|
+
describe('useBlock', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useBlock).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useBlock).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type GetBlockParameters,
|
|
5
|
+
type GetBlockReturnType,
|
|
6
|
+
type GetBlockErrorType,
|
|
7
|
+
getBlock,
|
|
8
|
+
} from '@growae/reactive'
|
|
9
|
+
import type { Compute } from '@growae/reactive'
|
|
10
|
+
import { type UseQueryReturnType, useQuery } from '../utils/query.js'
|
|
11
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
12
|
+
import { useConfig } from './useConfig.js'
|
|
13
|
+
import { useNetworkId } from './useNetworkId.js'
|
|
14
|
+
|
|
15
|
+
export type UseBlockParameters = Compute<
|
|
16
|
+
GetBlockParameters & ConfigParameter & { enabled?: boolean }
|
|
17
|
+
>
|
|
18
|
+
|
|
19
|
+
export type UseBlockReturnType = UseQueryReturnType<
|
|
20
|
+
GetBlockReturnType,
|
|
21
|
+
GetBlockErrorType
|
|
22
|
+
>
|
|
23
|
+
|
|
24
|
+
export function useBlock(
|
|
25
|
+
parameters: UseBlockParameters = {},
|
|
26
|
+
): UseBlockReturnType {
|
|
27
|
+
const config = useConfig(parameters)
|
|
28
|
+
const networkId = useNetworkId({ config })
|
|
29
|
+
|
|
30
|
+
return useQuery({
|
|
31
|
+
queryKey: ['block', {
|
|
32
|
+
height: parameters.height,
|
|
33
|
+
hash: parameters.hash,
|
|
34
|
+
networkId: parameters.networkId ?? networkId,
|
|
35
|
+
}],
|
|
36
|
+
queryFn: () => getBlock(config, {
|
|
37
|
+
...parameters,
|
|
38
|
+
networkId: parameters.networkId ?? networkId,
|
|
39
|
+
}),
|
|
40
|
+
enabled: parameters.enabled ?? true,
|
|
41
|
+
}) as UseBlockReturnType
|
|
42
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useCallContract } from './useCallContract.js'
|
|
3
|
+
|
|
4
|
+
describe('useCallContract', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useCallContract).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useCallContract).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMutation } from '@tanstack/react-query'
|
|
4
|
+
import {
|
|
5
|
+
type CallContractParameters,
|
|
6
|
+
type CallContractReturnType,
|
|
7
|
+
type CallContractErrorType,
|
|
8
|
+
callContract,
|
|
9
|
+
} from '@growae/reactive'
|
|
10
|
+
import type { Compute } from '@growae/reactive'
|
|
11
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
12
|
+
import type { UseMutationReturnType } from '../utils/query.js'
|
|
13
|
+
import { useConfig } from './useConfig.js'
|
|
14
|
+
|
|
15
|
+
export type UseCallContractParameters<context = unknown> = Compute<
|
|
16
|
+
ConfigParameter & {
|
|
17
|
+
mutation?: {
|
|
18
|
+
onSuccess?: (data: CallContractReturnType, variables: CallContractParameters, context: context) => void
|
|
19
|
+
onError?: (error: CallContractErrorType, variables: CallContractParameters, context: context) => void
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
>
|
|
23
|
+
|
|
24
|
+
export type UseCallContractReturnType<context = unknown> = Compute<
|
|
25
|
+
UseMutationReturnType<
|
|
26
|
+
CallContractReturnType,
|
|
27
|
+
CallContractErrorType,
|
|
28
|
+
CallContractParameters,
|
|
29
|
+
context
|
|
30
|
+
> & {
|
|
31
|
+
callContract: (variables: CallContractParameters) => void
|
|
32
|
+
callContractAsync: (variables: CallContractParameters) => Promise<CallContractReturnType>
|
|
33
|
+
}
|
|
34
|
+
>
|
|
35
|
+
|
|
36
|
+
export function useCallContract<context = unknown>(
|
|
37
|
+
parameters: UseCallContractParameters<context> = {},
|
|
38
|
+
): UseCallContractReturnType<context> {
|
|
39
|
+
const config = useConfig(parameters)
|
|
40
|
+
|
|
41
|
+
const mutation = useMutation({
|
|
42
|
+
mutationKey: ['callContract'],
|
|
43
|
+
mutationFn: (variables: CallContractParameters) =>
|
|
44
|
+
callContract(config, variables),
|
|
45
|
+
...parameters.mutation,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
type Return = UseCallContractReturnType<context>
|
|
49
|
+
return {
|
|
50
|
+
...(mutation as unknown as Return),
|
|
51
|
+
callContract: mutation.mutate as Return['callContract'],
|
|
52
|
+
callContractAsync: mutation.mutateAsync as Return['callContractAsync'],
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useChannelDeposit } from './useChannelDeposit.js'
|
|
3
|
+
|
|
4
|
+
describe('useChannelDeposit', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useChannelDeposit).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useChannelDeposit).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMutation } from '@tanstack/react-query'
|
|
4
|
+
import {
|
|
5
|
+
type ChannelDepositParameters,
|
|
6
|
+
type ChannelDepositReturnType,
|
|
7
|
+
channelDeposit,
|
|
8
|
+
} from '@growae/reactive'
|
|
9
|
+
import type { Compute } from '@growae/reactive'
|
|
10
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
11
|
+
import type { UseMutationReturnType } from '../utils/query.js'
|
|
12
|
+
import { useConfig } from './useConfig.js'
|
|
13
|
+
|
|
14
|
+
export type UseChannelDepositParameters<context = unknown> = Compute<
|
|
15
|
+
ConfigParameter & {
|
|
16
|
+
mutation?: {
|
|
17
|
+
onSuccess?: (data: ChannelDepositReturnType, variables: ChannelDepositParameters, context: context) => void
|
|
18
|
+
onError?: (error: Error, variables: ChannelDepositParameters, context: context) => void
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
>
|
|
22
|
+
|
|
23
|
+
export type UseChannelDepositReturnType<context = unknown> = Compute<
|
|
24
|
+
UseMutationReturnType<
|
|
25
|
+
ChannelDepositReturnType,
|
|
26
|
+
Error,
|
|
27
|
+
ChannelDepositParameters,
|
|
28
|
+
context
|
|
29
|
+
> & {
|
|
30
|
+
channelDeposit: (variables: ChannelDepositParameters) => void
|
|
31
|
+
channelDepositAsync: (variables: ChannelDepositParameters) => Promise<ChannelDepositReturnType>
|
|
32
|
+
}
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
export function useChannelDeposit<context = unknown>(
|
|
36
|
+
parameters: UseChannelDepositParameters<context> = {},
|
|
37
|
+
): UseChannelDepositReturnType<context> {
|
|
38
|
+
const config = useConfig(parameters)
|
|
39
|
+
|
|
40
|
+
const mutation = useMutation({
|
|
41
|
+
mutationKey: ['channelDeposit'],
|
|
42
|
+
mutationFn: (variables: ChannelDepositParameters) =>
|
|
43
|
+
channelDeposit(config, variables),
|
|
44
|
+
...parameters.mutation,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
type Return = UseChannelDepositReturnType<context>
|
|
48
|
+
return {
|
|
49
|
+
...(mutation as unknown as Return),
|
|
50
|
+
channelDeposit: mutation.mutate as Return['channelDeposit'],
|
|
51
|
+
channelDepositAsync: mutation.mutateAsync as Return['channelDepositAsync'],
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useClaimName } from './useClaimName.js'
|
|
3
|
+
|
|
4
|
+
describe('useClaimName', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useClaimName).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useClaimName).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMutation } from '@tanstack/react-query'
|
|
4
|
+
import {
|
|
5
|
+
type ClaimNameParameters,
|
|
6
|
+
type ClaimNameReturnType,
|
|
7
|
+
claimName,
|
|
8
|
+
} from '@growae/reactive'
|
|
9
|
+
import type { Compute } from '@growae/reactive'
|
|
10
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
11
|
+
import type { UseMutationReturnType } from '../utils/query.js'
|
|
12
|
+
import { useConfig } from './useConfig.js'
|
|
13
|
+
|
|
14
|
+
export type UseClaimNameParameters<context = unknown> = Compute<
|
|
15
|
+
ConfigParameter & {
|
|
16
|
+
mutation?: {
|
|
17
|
+
onSuccess?: (data: ClaimNameReturnType, variables: ClaimNameParameters, context: context) => void
|
|
18
|
+
onError?: (error: Error, variables: ClaimNameParameters, context: context) => void
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
>
|
|
22
|
+
|
|
23
|
+
export type UseClaimNameReturnType<context = unknown> = Compute<
|
|
24
|
+
UseMutationReturnType<
|
|
25
|
+
ClaimNameReturnType,
|
|
26
|
+
Error,
|
|
27
|
+
ClaimNameParameters,
|
|
28
|
+
context
|
|
29
|
+
> & {
|
|
30
|
+
claimName: (variables: ClaimNameParameters) => void
|
|
31
|
+
claimNameAsync: (variables: ClaimNameParameters) => Promise<ClaimNameReturnType>
|
|
32
|
+
}
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
export function useClaimName<context = unknown>(
|
|
36
|
+
parameters: UseClaimNameParameters<context> = {},
|
|
37
|
+
): UseClaimNameReturnType<context> {
|
|
38
|
+
const config = useConfig(parameters)
|
|
39
|
+
|
|
40
|
+
const mutation = useMutation({
|
|
41
|
+
mutationKey: ['claimName'],
|
|
42
|
+
mutationFn: (variables: ClaimNameParameters) =>
|
|
43
|
+
claimName(config, variables),
|
|
44
|
+
...parameters.mutation,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
type Return = UseClaimNameReturnType<context>
|
|
48
|
+
return {
|
|
49
|
+
...(mutation as unknown as Return),
|
|
50
|
+
claimName: mutation.mutate as Return['claimName'],
|
|
51
|
+
claimNameAsync: mutation.mutateAsync as Return['claimNameAsync'],
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useCloseChannel } from './useCloseChannel.js'
|
|
3
|
+
|
|
4
|
+
describe('useCloseChannel', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useCloseChannel).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useCloseChannel).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMutation } from '@tanstack/react-query'
|
|
4
|
+
import {
|
|
5
|
+
type CloseChannelParameters,
|
|
6
|
+
type CloseChannelReturnType,
|
|
7
|
+
closeChannel,
|
|
8
|
+
} from '@growae/reactive'
|
|
9
|
+
import type { Compute } from '@growae/reactive'
|
|
10
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
11
|
+
import type { UseMutationReturnType } from '../utils/query.js'
|
|
12
|
+
import { useConfig } from './useConfig.js'
|
|
13
|
+
|
|
14
|
+
export type UseCloseChannelParameters<context = unknown> = Compute<
|
|
15
|
+
ConfigParameter & {
|
|
16
|
+
mutation?: {
|
|
17
|
+
onSuccess?: (data: CloseChannelReturnType, variables: CloseChannelParameters, context: context) => void
|
|
18
|
+
onError?: (error: Error, variables: CloseChannelParameters, context: context) => void
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
>
|
|
22
|
+
|
|
23
|
+
export type UseCloseChannelReturnType<context = unknown> = Compute<
|
|
24
|
+
UseMutationReturnType<
|
|
25
|
+
CloseChannelReturnType,
|
|
26
|
+
Error,
|
|
27
|
+
CloseChannelParameters,
|
|
28
|
+
context
|
|
29
|
+
> & {
|
|
30
|
+
closeChannel: (variables: CloseChannelParameters) => void
|
|
31
|
+
closeChannelAsync: (variables: CloseChannelParameters) => Promise<CloseChannelReturnType>
|
|
32
|
+
}
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
export function useCloseChannel<context = unknown>(
|
|
36
|
+
parameters: UseCloseChannelParameters<context> = {},
|
|
37
|
+
): UseCloseChannelReturnType<context> {
|
|
38
|
+
const config = useConfig(parameters)
|
|
39
|
+
|
|
40
|
+
const mutation = useMutation({
|
|
41
|
+
mutationKey: ['closeChannel'],
|
|
42
|
+
mutationFn: (variables: CloseChannelParameters) =>
|
|
43
|
+
closeChannel(config, variables),
|
|
44
|
+
...parameters.mutation,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
type Return = UseCloseChannelReturnType<context>
|
|
48
|
+
return {
|
|
49
|
+
...(mutation as unknown as Return),
|
|
50
|
+
closeChannel: mutation.mutate as Return['closeChannel'],
|
|
51
|
+
closeChannelAsync: mutation.mutateAsync as Return['closeChannelAsync'],
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
|
+
|
|
4
|
+
vi.mock('@aeternity/aepp-sdk', () => ({
|
|
5
|
+
Node: vi.fn().mockImplementation(() => ({})),
|
|
6
|
+
}))
|
|
7
|
+
|
|
8
|
+
import { createElement } from 'react'
|
|
9
|
+
import { renderHook } from '@testing-library/react'
|
|
10
|
+
import { useConfig } from './useConfig.js'
|
|
11
|
+
import { ReactiveProvider } from '../context.js'
|
|
12
|
+
import { createConfig } from '@growae/reactive'
|
|
13
|
+
import { testnet } from '@growae/reactive'
|
|
14
|
+
import { mock } from '@growae/reactive'
|
|
15
|
+
|
|
16
|
+
const TEST_ACCOUNTS = [
|
|
17
|
+
'ak_2swhLkgBPeeADxVTABy7tt6d2HgBQFnGJELkBUMY4FUa8RVLM',
|
|
18
|
+
] as const
|
|
19
|
+
|
|
20
|
+
function createTestConfig() {
|
|
21
|
+
return createConfig({
|
|
22
|
+
networks: [testnet],
|
|
23
|
+
connectors: [mock({ accounts: [...TEST_ACCOUNTS] })],
|
|
24
|
+
storage: null,
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
describe('useConfig', () => {
|
|
29
|
+
it('should return config when wrapped in ReactiveProvider', () => {
|
|
30
|
+
const config = createTestConfig()
|
|
31
|
+
const { result } = renderHook(() => useConfig(), {
|
|
32
|
+
wrapper: ({ children }) =>
|
|
33
|
+
createElement(
|
|
34
|
+
ReactiveProvider,
|
|
35
|
+
{ config, reconnectOnMount: false },
|
|
36
|
+
children,
|
|
37
|
+
),
|
|
38
|
+
})
|
|
39
|
+
expect(result.current).toBe(config)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should throw without ReactiveProvider', () => {
|
|
43
|
+
const spy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
44
|
+
expect(() => renderHook(() => useConfig())).toThrow()
|
|
45
|
+
spy.mockRestore()
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('should accept config via parameter', () => {
|
|
49
|
+
const config = createTestConfig()
|
|
50
|
+
const { result } = renderHook(() => useConfig({ config }))
|
|
51
|
+
expect(result.current).toBe(config)
|
|
52
|
+
})
|
|
53
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import type { Config } from '@growae/reactive'
|
|
4
|
+
import { useContext } from 'react'
|
|
5
|
+
import { ReactiveContext } from '../context.js'
|
|
6
|
+
import { ReactiveProviderNotFoundError } from '../errors/context.js'
|
|
7
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
8
|
+
|
|
9
|
+
export type UseConfigParameters<config extends Config = Config> =
|
|
10
|
+
ConfigParameter<config>
|
|
11
|
+
|
|
12
|
+
export type UseConfigReturnType<config extends Config = Config> = config
|
|
13
|
+
|
|
14
|
+
export function useConfig<config extends Config = Config>(
|
|
15
|
+
parameters: UseConfigParameters<config> = {},
|
|
16
|
+
): UseConfigReturnType<config> {
|
|
17
|
+
const config = parameters.config ?? useContext(ReactiveContext)
|
|
18
|
+
if (!config) throw new ReactiveProviderNotFoundError()
|
|
19
|
+
return config as UseConfigReturnType<config>
|
|
20
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
|
+
|
|
4
|
+
vi.mock('@aeternity/aepp-sdk', () => ({
|
|
5
|
+
Node: vi.fn().mockImplementation(() => ({})),
|
|
6
|
+
}))
|
|
7
|
+
|
|
8
|
+
import { createElement } from 'react'
|
|
9
|
+
import { renderHook } from '@testing-library/react'
|
|
10
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
11
|
+
import { useConnect } from './useConnect.js'
|
|
12
|
+
import { ReactiveProvider } from '../context.js'
|
|
13
|
+
import { createConfig } from '@growae/reactive'
|
|
14
|
+
import { testnet } from '@growae/reactive'
|
|
15
|
+
import { mock } from '@growae/reactive'
|
|
16
|
+
|
|
17
|
+
const TEST_ACCOUNTS = [
|
|
18
|
+
'ak_2swhLkgBPeeADxVTABy7tt6d2HgBQFnGJELkBUMY4FUa8RVLM',
|
|
19
|
+
] as const
|
|
20
|
+
|
|
21
|
+
function createWrapper() {
|
|
22
|
+
const config = createConfig({
|
|
23
|
+
networks: [testnet],
|
|
24
|
+
connectors: [mock({ accounts: [...TEST_ACCOUNTS] })],
|
|
25
|
+
storage: null,
|
|
26
|
+
})
|
|
27
|
+
const queryClient = new QueryClient({
|
|
28
|
+
defaultOptions: { queries: { retry: false } },
|
|
29
|
+
})
|
|
30
|
+
return {
|
|
31
|
+
config,
|
|
32
|
+
wrapper: ({ children }: { children: React.ReactNode }) =>
|
|
33
|
+
createElement(
|
|
34
|
+
QueryClientProvider,
|
|
35
|
+
{ client: queryClient },
|
|
36
|
+
createElement(
|
|
37
|
+
ReactiveProvider,
|
|
38
|
+
{ config, reconnectOnMount: false },
|
|
39
|
+
children,
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
describe('useConnect', () => {
|
|
46
|
+
it('should return connect function', () => {
|
|
47
|
+
const { wrapper } = createWrapper()
|
|
48
|
+
const { result } = renderHook(() => useConnect(), { wrapper })
|
|
49
|
+
expect(typeof result.current.connect).toBe('function')
|
|
50
|
+
expect(typeof result.current.connectAsync).toBe('function')
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('should return connectors', () => {
|
|
54
|
+
const { wrapper } = createWrapper()
|
|
55
|
+
const { result } = renderHook(() => useConnect(), { wrapper })
|
|
56
|
+
expect(result.current.connectors).toBeDefined()
|
|
57
|
+
expect(result.current.connectors).toHaveLength(1)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('should have idle status initially', () => {
|
|
61
|
+
const { wrapper } = createWrapper()
|
|
62
|
+
const { result } = renderHook(() => useConnect(), { wrapper })
|
|
63
|
+
expect(result.current.isPending).toBe(false)
|
|
64
|
+
expect(result.current.isSuccess).toBe(false)
|
|
65
|
+
expect(result.current.isError).toBe(false)
|
|
66
|
+
})
|
|
67
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useMutation } from '@tanstack/react-query'
|
|
4
|
+
import {
|
|
5
|
+
type Config,
|
|
6
|
+
type ConnectParameters,
|
|
7
|
+
type ConnectReturnType,
|
|
8
|
+
type ConnectErrorType,
|
|
9
|
+
connect,
|
|
10
|
+
} from '@growae/reactive'
|
|
11
|
+
import type { Compute } from '@growae/reactive'
|
|
12
|
+
import { useEffect } from 'react'
|
|
13
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
14
|
+
import type { UseMutationReturnType } from '../utils/query.js'
|
|
15
|
+
import { useConfig } from './useConfig.js'
|
|
16
|
+
import { useConnectors } from './useConnectors.js'
|
|
17
|
+
|
|
18
|
+
export type UseConnectParameters<context = unknown> = Compute<
|
|
19
|
+
ConfigParameter & {
|
|
20
|
+
mutation?: {
|
|
21
|
+
onSuccess?: (data: ConnectReturnType, variables: ConnectParameters, context: context) => void
|
|
22
|
+
onError?: (error: ConnectErrorType, variables: ConnectParameters, context: context) => void
|
|
23
|
+
onSettled?: (data: ConnectReturnType | undefined, error: ConnectErrorType | null, variables: ConnectParameters, context: context) => void
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
>
|
|
27
|
+
|
|
28
|
+
export type UseConnectReturnType<context = unknown> = Compute<
|
|
29
|
+
UseMutationReturnType<
|
|
30
|
+
ConnectReturnType,
|
|
31
|
+
ConnectErrorType,
|
|
32
|
+
ConnectParameters,
|
|
33
|
+
context
|
|
34
|
+
> & {
|
|
35
|
+
connect: (variables: ConnectParameters) => void
|
|
36
|
+
connectAsync: (variables: ConnectParameters) => Promise<ConnectReturnType>
|
|
37
|
+
connectors: ReturnType<typeof useConnectors>
|
|
38
|
+
}
|
|
39
|
+
>
|
|
40
|
+
|
|
41
|
+
export function useConnect<context = unknown>(
|
|
42
|
+
parameters: UseConnectParameters<context> = {},
|
|
43
|
+
): UseConnectReturnType<context> {
|
|
44
|
+
const config = useConfig(parameters)
|
|
45
|
+
|
|
46
|
+
const mutation = useMutation({
|
|
47
|
+
mutationKey: ['connect'],
|
|
48
|
+
mutationFn: (variables: ConnectParameters) => connect(config, variables),
|
|
49
|
+
...parameters.mutation,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
return config.subscribe(
|
|
54
|
+
({ status }) => status,
|
|
55
|
+
(status, previousStatus) => {
|
|
56
|
+
if (previousStatus === 'connected' && status === 'disconnected')
|
|
57
|
+
mutation.reset()
|
|
58
|
+
},
|
|
59
|
+
)
|
|
60
|
+
}, [config, mutation.reset])
|
|
61
|
+
|
|
62
|
+
type Return = UseConnectReturnType<context>
|
|
63
|
+
return {
|
|
64
|
+
...(mutation as unknown as Return),
|
|
65
|
+
connect: mutation.mutate as Return['connect'],
|
|
66
|
+
connectAsync: mutation.mutateAsync as Return['connectAsync'],
|
|
67
|
+
connectors: useConnectors({ config }),
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useConnection } from './useConnection.js'
|
|
3
|
+
|
|
4
|
+
describe('useConnection', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useConnection).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useConnection).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type GetConnectionReturnType,
|
|
5
|
+
getConnection,
|
|
6
|
+
watchConnection,
|
|
7
|
+
} from '@growae/reactive'
|
|
8
|
+
import { useSyncExternalStore } from 'react'
|
|
9
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
10
|
+
import { useConfig } from './useConfig.js'
|
|
11
|
+
|
|
12
|
+
export type UseConnectionParameters = ConfigParameter
|
|
13
|
+
|
|
14
|
+
export type UseConnectionReturnType = GetConnectionReturnType
|
|
15
|
+
|
|
16
|
+
export function useConnection(
|
|
17
|
+
parameters: UseConnectionParameters = {},
|
|
18
|
+
): UseConnectionReturnType {
|
|
19
|
+
const config = useConfig(parameters)
|
|
20
|
+
|
|
21
|
+
return useSyncExternalStore(
|
|
22
|
+
(onChange) => watchConnection(config, { onChange }),
|
|
23
|
+
() => getConnection(config),
|
|
24
|
+
() => getConnection(config),
|
|
25
|
+
)
|
|
26
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useConnections } from './useConnections.js'
|
|
3
|
+
|
|
4
|
+
describe('useConnections', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useConnections).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useConnections).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type GetConnectionsReturnType,
|
|
5
|
+
getConnections,
|
|
6
|
+
watchConnections,
|
|
7
|
+
} from '@growae/reactive'
|
|
8
|
+
import { useSyncExternalStore } from 'react'
|
|
9
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
10
|
+
import { useConfig } from './useConfig.js'
|
|
11
|
+
|
|
12
|
+
export type UseConnectionsParameters = ConfigParameter
|
|
13
|
+
|
|
14
|
+
export type UseConnectionsReturnType = GetConnectionsReturnType
|
|
15
|
+
|
|
16
|
+
export function useConnections(
|
|
17
|
+
parameters: UseConnectionsParameters = {},
|
|
18
|
+
): UseConnectionsReturnType {
|
|
19
|
+
const config = useConfig(parameters)
|
|
20
|
+
|
|
21
|
+
return useSyncExternalStore(
|
|
22
|
+
(onChange) => watchConnections(config, { onChange }),
|
|
23
|
+
() => getConnections(config),
|
|
24
|
+
() => getConnections(config),
|
|
25
|
+
)
|
|
26
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { useConnectorClient } from './useConnectorClient.js'
|
|
3
|
+
|
|
4
|
+
describe('useConnectorClient', () => {
|
|
5
|
+
it('should be a function', () => {
|
|
6
|
+
expect(typeof useConnectorClient).toBe('function')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('should be exported', () => {
|
|
10
|
+
expect(useConnectorClient).toBeDefined()
|
|
11
|
+
})
|
|
12
|
+
})
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type GetConnectorClientParameters,
|
|
5
|
+
type GetConnectorClientReturnType,
|
|
6
|
+
getConnectorClient,
|
|
7
|
+
} from '@growae/reactive'
|
|
8
|
+
import type { Compute } from '@growae/reactive'
|
|
9
|
+
import { useQuery } from '../utils/query.js'
|
|
10
|
+
import type { UseQueryReturnType } from '../utils/query.js'
|
|
11
|
+
import type { ConfigParameter } from '../types/properties.js'
|
|
12
|
+
import { useConfig } from './useConfig.js'
|
|
13
|
+
import { useConnection } from './useConnection.js'
|
|
14
|
+
import { useNetworkId } from './useNetworkId.js'
|
|
15
|
+
|
|
16
|
+
export type UseConnectorClientParameters = Compute<
|
|
17
|
+
GetConnectorClientParameters & ConfigParameter
|
|
18
|
+
>
|
|
19
|
+
|
|
20
|
+
export type UseConnectorClientReturnType = UseQueryReturnType<
|
|
21
|
+
GetConnectorClientReturnType,
|
|
22
|
+
Error
|
|
23
|
+
>
|
|
24
|
+
|
|
25
|
+
export function useConnectorClient(
|
|
26
|
+
parameters: UseConnectorClientParameters = {},
|
|
27
|
+
): UseConnectorClientReturnType {
|
|
28
|
+
const config = useConfig(parameters)
|
|
29
|
+
const networkId = useNetworkId({ config })
|
|
30
|
+
const connection = useConnection({ config })
|
|
31
|
+
|
|
32
|
+
return useQuery({
|
|
33
|
+
queryKey: ['connectorClient', {
|
|
34
|
+
networkId: parameters.networkId ?? networkId,
|
|
35
|
+
connector: connection?.connector?.uid,
|
|
36
|
+
}],
|
|
37
|
+
queryFn: () => getConnectorClient(config, {
|
|
38
|
+
...parameters,
|
|
39
|
+
networkId: parameters.networkId ?? networkId,
|
|
40
|
+
connector: parameters.connector ?? connection?.connector,
|
|
41
|
+
}),
|
|
42
|
+
enabled: !!connection?.connector,
|
|
43
|
+
}) as UseConnectorClientReturnType
|
|
44
|
+
}
|