mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex-taker-v2.git
synced 2026-09-21 16:52:01 -07:00
forked from bch-wallet-web3-spa
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
import { useState } from 'react'
|
||||
import { useQueryParam, StringParam } from 'use-query-params'
|
||||
import useLocalStorageState from 'use-local-storage-state'
|
||||
import AppUtil from '../util'
|
||||
|
||||
import { useLocation } from 'react-router-dom'
|
||||
function useAppState () {
|
||||
const location = useLocation()
|
||||
|
||||
// Get the CashStack URL from query parameter or use default
|
||||
let [restURL] = useQueryParam('restURL', StringParam)
|
||||
if (!restURL) restURL = 'https://free-bch.fullstack.cash'
|
||||
|
||||
const [serverUrl, setServerUrl] = useState(restURL)
|
||||
const [menuState, setMenuState] = useState(0)
|
||||
const [wallet, setWallet] = useState(false)
|
||||
const [servers, setServers] = useState([])
|
||||
|
||||
// Startup state management
|
||||
const [asyncInitStarted, setAsyncInitStarted] = useState(false)
|
||||
const [asyncInitFinished, setAsyncInitFinished] = useState(false)
|
||||
const [asyncInitSucceeded, setAsyncInitSucceeded] = useState(null)
|
||||
|
||||
// Modal state management
|
||||
const [showStartModal, setShowStartModal] = useState(true)
|
||||
const [modalBody, setModalBody] = useState([])
|
||||
const [hideSpinner, setHideSpinner] = useState(false)
|
||||
const [denyClose, setDenyClose] = useState(false)
|
||||
|
||||
// The wallet state makes this a true progressive web app (PWA). As
|
||||
// balances, UTXOs, and tokens are retrieved, this state is updated.
|
||||
// properties are enumerated here for the purpose of documentation.
|
||||
|
||||
// Local storage
|
||||
const [lsState, setLSState, { removeItem }] = useLocalStorageState('bchWalletState', {
|
||||
ssr: true,
|
||||
defaultValue: {}
|
||||
})
|
||||
console.log('lsState: ', lsState)
|
||||
const removeLocalStorageItem = removeItem
|
||||
const updateLocalStorage = (lsObj) => {
|
||||
// console.log(`updateLocalStorage() input: ${JSON.stringify(lsObj, null, 2)}`)
|
||||
|
||||
// Progressively overwrite the LocalStorage state.
|
||||
const newObj = Object.assign({}, lsState, lsObj)
|
||||
// console.log(`updateLocalStorage() output: ${JSON.stringify(newObj, null, 2)}`)
|
||||
|
||||
setLSState(newObj)
|
||||
}
|
||||
|
||||
const [bchWalletState, setBchWalletState] = useState({
|
||||
mnemonic: undefined,
|
||||
address: undefined,
|
||||
cashAddress: undefined,
|
||||
slpAddress: undefined,
|
||||
privateKey: undefined,
|
||||
publicKey: undefined,
|
||||
legacyAddress: undefined,
|
||||
hdPath: undefined,
|
||||
bchBalance: 0,
|
||||
slpTokens: [],
|
||||
bchUsdPrice: 150
|
||||
})
|
||||
|
||||
// This function is passed to child components in order to update the wallet
|
||||
// state. This function is important to make this wallet a PWA.
|
||||
function updateBchWalletState (inObj = {}) {
|
||||
try {
|
||||
const { walletObj, appData } = inObj
|
||||
|
||||
// Debuging
|
||||
// console.log('updateBchWalletState() walletObj: ', walletObj)
|
||||
// console.log('updateBchWalletState() appData: ', appData)
|
||||
|
||||
appData.setBchWalletState(oldState => {
|
||||
const newBchWalletState = Object.assign({}, oldState, walletObj)
|
||||
// console.log('newBchWalletState: ', newBchWalletState)
|
||||
|
||||
return newBchWalletState
|
||||
})
|
||||
|
||||
// console.log(`New wallet state: ${JSON.stringify(bchWalletState, null, 2)}`)
|
||||
} catch (err) {
|
||||
console.error('Error in App.js updateBchWalletState()')
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
serverUrl,
|
||||
setServerUrl,
|
||||
menuState,
|
||||
setMenuState,
|
||||
wallet,
|
||||
setWallet,
|
||||
servers,
|
||||
setServers,
|
||||
asyncInitStarted,
|
||||
setAsyncInitStarted,
|
||||
asyncInitFinished,
|
||||
setAsyncInitFinished,
|
||||
asyncInitSucceeded,
|
||||
setAsyncInitSucceeded,
|
||||
showStartModal,
|
||||
setShowStartModal,
|
||||
modalBody,
|
||||
setModalBody,
|
||||
hideSpinner,
|
||||
setHideSpinner,
|
||||
denyClose,
|
||||
setDenyClose,
|
||||
bchWalletState,
|
||||
setBchWalletState,
|
||||
lsState,
|
||||
setLSState,
|
||||
removeLocalStorageItem,
|
||||
updateLocalStorage,
|
||||
updateBchWalletState,
|
||||
appUtil: new AppUtil(),
|
||||
currentPath: location.pathname
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export default useAppState
|
||||
Reference in New Issue
Block a user