Map lnAddr to correct wallet on save via prompt (#2456)
This commit is contained in:
parent
2d3d3ac6c9
commit
6f67aaaef9
@ -74,7 +74,7 @@ function LnAddrForm ({ onAttach }) {
|
|||||||
const initial = { address: '' }
|
const initial = { address: '' }
|
||||||
|
|
||||||
const onSubmit = useCallback(async ({ address }) => {
|
const onSubmit = useCallback(async ({ address }) => {
|
||||||
await upsert({ address })
|
await upsert(address)
|
||||||
onAttach()
|
onAttach()
|
||||||
}, [upsert, onAttach])
|
}, [upsert, onAttach])
|
||||||
|
|
||||||
|
@ -31,14 +31,15 @@ import { gql, useApolloClient, useMutation, useQuery } from '@apollo/client'
|
|||||||
import { useDecryption, useEncryption, useSetKey, useWalletLoggerFactory, useWalletsUpdatedAt, WalletStatus } from '@/wallets/client/hooks'
|
import { useDecryption, useEncryption, useSetKey, useWalletLoggerFactory, useWalletsUpdatedAt, WalletStatus } from '@/wallets/client/hooks'
|
||||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
import {
|
import {
|
||||||
isEncryptedField, isTemplate, isWallet, protocolAvailable, protocolClientSchema, protocolLogName, reverseProtocolRelationName
|
isEncryptedField, isTemplate, isWallet, protocolAvailable, protocolClientSchema, protocolLogName, reverseProtocolRelationName,
|
||||||
|
walletLud16Domain
|
||||||
} from '@/wallets/lib/util'
|
} from '@/wallets/lib/util'
|
||||||
import { protocolTestSendPayment } from '@/wallets/client/protocols'
|
import { protocolTestSendPayment } from '@/wallets/client/protocols'
|
||||||
import { timeoutSignal } from '@/lib/time'
|
import { timeoutSignal } from '@/lib/time'
|
||||||
import { WALLET_SEND_PAYMENT_TIMEOUT_MS } from '@/lib/constants'
|
import { WALLET_SEND_PAYMENT_TIMEOUT_MS } from '@/lib/constants'
|
||||||
import { useToast } from '@/components/toast'
|
import { useToast } from '@/components/toast'
|
||||||
import { useMe } from '@/components/me'
|
import { useMe } from '@/components/me'
|
||||||
import { useWallets, useWalletsLoading } from '@/wallets/client/context'
|
import { useTemplates, useWallets, useWalletsLoading } from '@/wallets/client/context'
|
||||||
import { requestPersistentStorage } from '@/components/use-indexeddb'
|
import { requestPersistentStorage } from '@/components/use-indexeddb'
|
||||||
|
|
||||||
export function useWalletsQuery () {
|
export function useWalletsQuery () {
|
||||||
@ -184,16 +185,29 @@ export function useWalletProtocolUpsert () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function useLightningAddressUpsert () {
|
export function useLightningAddressUpsert () {
|
||||||
const wallet = useMemo(() => ({ name: 'LN_ADDR', __typename: 'WalletTemplate' }), [])
|
|
||||||
const protocol = useMemo(() => ({ name: 'LN_ADDR', send: false, __typename: 'WalletProtocolTemplate' }), [])
|
const protocol = useMemo(() => ({ name: 'LN_ADDR', send: false, __typename: 'WalletProtocolTemplate' }), [])
|
||||||
const upsert = useWalletProtocolUpsert()
|
const upsert = useWalletProtocolUpsert()
|
||||||
const testCreateInvoice = useTestCreateInvoice(protocol)
|
const testCreateInvoice = useTestCreateInvoice(protocol)
|
||||||
|
const mapper = useLightningAddressToWalletMapper()
|
||||||
|
|
||||||
return useCallback(async (values) => {
|
return useCallback(async (address) => {
|
||||||
// TODO(wallet-v2): parse domain from address input to use correct wallet template
|
await testCreateInvoice({ address })
|
||||||
await testCreateInvoice(values)
|
const wallet = mapper(address)
|
||||||
return await upsert(wallet, protocol, { ...values, enabled: true })
|
return await upsert(wallet, protocol, { address, enabled: true })
|
||||||
}, [testCreateInvoice, upsert, wallet, protocol])
|
}, [testCreateInvoice, mapper, upsert, protocol])
|
||||||
|
}
|
||||||
|
|
||||||
|
function useLightningAddressToWalletMapper () {
|
||||||
|
const templates = useTemplates()
|
||||||
|
return useCallback((address) => {
|
||||||
|
return templates
|
||||||
|
.filter(t => t.protocols.some(p => p.name === 'LN_ADDR'))
|
||||||
|
.find(t => {
|
||||||
|
const domain = walletLud16Domain(t.name)
|
||||||
|
// the LN_ADDR wallet supports lightning addresses but does not have a domain because it's a generic wallet for any LN address
|
||||||
|
return domain && address.endsWith(domain)
|
||||||
|
}) ?? { name: 'LN_ADDR', __typename: 'WalletTemplate' }
|
||||||
|
}, [templates])
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useWalletEncryptionUpdate () {
|
export function useWalletEncryptionUpdate () {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user