2025-07-16 14:50:08 -05:00

89 lines
2.2 KiB
JavaScript

import { createContext, useContext, useReducer } from 'react'
import walletsReducer from './reducer'
import { useServerWallets, useKeyCheck, useAutomatedRetries, useKeyInit, useWalletMigration } from './hooks'
import { WebLnProvider } from '@/wallets/lib/protocols/webln'
// https://react.dev/learn/scaling-up-with-reducer-and-context
const WalletsContext = createContext(null)
const WalletsDispatchContext = createContext(null)
export function useWallets () {
const { wallets } = useContext(WalletsContext)
return wallets
}
export function useTemplates () {
const { templates } = useContext(WalletsContext)
return templates
}
export function useWalletsLoading () {
const { walletsLoading } = useContext(WalletsContext)
return walletsLoading
}
export function useWalletsError () {
const { walletsError } = useContext(WalletsContext)
return walletsError
}
export function useWalletsDispatch () {
return useContext(WalletsDispatchContext)
}
export function useKey () {
const { key } = useContext(WalletsContext)
return key
}
export function useKeyHash () {
const { keyHash } = useContext(WalletsContext)
return keyHash
}
export function useKeyError () {
const { keyError } = useContext(WalletsContext)
return keyError
}
export default function WalletsProvider ({ children }) {
const [state, dispatch] = useReducer(walletsReducer, {
wallets: [],
walletsLoading: true,
walletsError: null,
templates: [],
key: null,
keyHash: null,
keyError: null
})
return (
<WalletsContext.Provider value={state}>
<WalletsDispatchContext.Provider value={dispatch}>
<WalletHooks>
<WebLnProvider>
{children}
</WebLnProvider>
</WalletHooks>
</WalletsDispatchContext.Provider>
</WalletsContext.Provider>
)
}
function WalletHooks ({ children }) {
useServerWallets()
useKeyCheck()
useAutomatedRetries()
useKeyInit()
// TODO(wallet-v2): remove migration code
// =============================================================
// ****** Below is the migration code for WALLET v1 -> v2 ******
// remove when we can assume migration is complete (if ever)
// =============================================================
useWalletMigration()
return children
}