@xyo-network/react-wallet 2.64.0 → 2.64.3
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/browser/components/MaxAccounts/MaxAccountsTableRow.js +41 -11
- package/dist/browser/components/MaxAccounts/MaxAccountsTableRow.js.map +1 -1
- package/dist/browser/components/MaxAccounts/OutOfBoundsSnackBar.js +3 -2
- package/dist/browser/components/MaxAccounts/OutOfBoundsSnackBar.js.map +1 -1
- package/dist/browser/components/MaxAccounts/index.js +88 -1
- package/dist/browser/components/MaxAccounts/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.js +3 -2
- package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.js.map +1 -1
- package/dist/browser/components/SeedPhrase/_shared/SeedPhraseIconButton.js +3 -2
- package/dist/browser/components/SeedPhrase/_shared/SeedPhraseIconButton.js.map +1 -1
- package/dist/browser/components/SeedPhrase/_shared/index.js +45 -1
- package/dist/browser/components/SeedPhrase/_shared/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.js +295 -16
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/DialogActionButtons.js +13 -3
- package/dist/browser/components/SeedPhrase/dialog/components/DialogActionButtons.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/OverwriteWarning.js +13 -3
- package/dist/browser/components/SeedPhrase/dialog/components/OverwriteWarning.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.js +74 -12
- package/dist/browser/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.js +60 -10
- package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/index.js +125 -2
- package/dist/browser/components/SeedPhrase/dialog/components/fields/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.js +3 -2
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.js +3 -2
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.js +2 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/index.js +57 -3
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/index.js +164 -3
- package/dist/browser/components/SeedPhrase/dialog/components/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/index.js +315 -1
- package/dist/browser/components/SeedPhrase/dialog/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/index.js +373 -4
- package/dist/browser/components/SeedPhrase/index.js.map +1 -1
- package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.js +325 -12
- package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.js.map +1 -1
- package/dist/browser/components/SeedPhrase/settings/index.js +339 -1
- package/dist/browser/components/SeedPhrase/settings/index.js.map +1 -1
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.js +62 -3
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.js.map +1 -1
- package/dist/browser/components/WalletAccountDetails/index.js +83 -1
- package/dist/browser/components/WalletAccountDetails/index.js.map +1 -1
- package/dist/browser/components/WalletAccountSelect/Select.js +70 -5
- package/dist/browser/components/WalletAccountSelect/Select.js.map +1 -1
- package/dist/browser/components/WalletAccountSelect/SelectBar.js +150 -4
- package/dist/browser/components/WalletAccountSelect/SelectBar.js.map +1 -1
- package/dist/browser/components/WalletAccountSelect/WalletInfo.js +116 -10
- package/dist/browser/components/WalletAccountSelect/WalletInfo.js.map +1 -1
- package/dist/browser/components/WalletAccountSelect/index.js +175 -2
- package/dist/browser/components/WalletAccountSelect/index.js.map +1 -1
- package/dist/browser/components/index.js +694 -4
- package/dist/browser/components/index.js.map +1 -1
- package/dist/browser/contexts/SeedPhrase/Context.js +2 -1
- package/dist/browser/contexts/SeedPhrase/Context.js.map +1 -1
- package/dist/browser/contexts/SeedPhrase/Provider.js +9 -3
- package/dist/browser/contexts/SeedPhrase/Provider.js.map +1 -1
- package/dist/browser/contexts/SeedPhrase/index.js +91 -4
- package/dist/browser/contexts/SeedPhrase/index.js.map +1 -1
- package/dist/browser/contexts/SeedPhrase/use.js +8 -2
- package/dist/browser/contexts/SeedPhrase/use.js.map +1 -1
- package/dist/browser/contexts/Wallet/Context.js +2 -1
- package/dist/browser/contexts/Wallet/Context.js.map +1 -1
- package/dist/browser/contexts/Wallet/Provider.js +90 -7
- package/dist/browser/contexts/Wallet/Provider.js.map +1 -1
- package/dist/browser/contexts/Wallet/index.js +183 -5
- package/dist/browser/contexts/Wallet/index.js.map +1 -1
- package/dist/browser/contexts/Wallet/lib/WalletPath.js +4 -3
- package/dist/browser/contexts/Wallet/lib/WalletPath.js.map +1 -1
- package/dist/browser/contexts/Wallet/lib/index.js +21 -1
- package/dist/browser/contexts/Wallet/lib/index.js.map +1 -1
- package/dist/browser/contexts/Wallet/use.js +13 -7
- package/dist/browser/contexts/Wallet/use.js.map +1 -1
- package/dist/browser/contexts/Wallet/usePromise.js +2 -1
- package/dist/browser/contexts/Wallet/usePromise.js.map +1 -1
- package/dist/browser/contexts/index.js +273 -2
- package/dist/browser/contexts/index.js.map +1 -1
- package/dist/browser/hooks/index.js +147 -4
- package/dist/browser/hooks/index.js.map +1 -1
- package/dist/browser/hooks/useAccount.js +24 -4
- package/dist/browser/hooks/useAccount.js.map +1 -1
- package/dist/browser/hooks/useWallet.js +38 -4
- package/dist/browser/hooks/useWallet.js.map +1 -1
- package/dist/browser/hooks/useWallets.js +69 -4
- package/dist/browser/hooks/useWallets.js.map +1 -1
- package/dist/browser/hooks/useWrapperAccount.js +4 -3
- package/dist/browser/hooks/useWrapperAccount.js.map +1 -1
- package/dist/browser/index.js +890 -3
- package/dist/browser/index.js.map +1 -1
- package/dist/docs.json +147 -147
- package/package.json +22 -22
|
@@ -1,13 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
// src/components/WalletAccountSelect/Select.tsx
|
|
2
2
|
import { CircularProgress, MenuItem } from "@mui/material";
|
|
3
3
|
import { SelectEx } from "@xylabs/react-select";
|
|
4
4
|
import { AddressRenderRowBox } from "@xyo-network/react-address-render";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
|
|
6
|
+
// src/contexts/Wallet/Context.ts
|
|
7
|
+
import { createContextEx } from "@xyo-network/react-shared";
|
|
8
|
+
var WalletContext = createContextEx();
|
|
9
|
+
|
|
10
|
+
// src/contexts/Wallet/use.ts
|
|
11
|
+
import { usePromise } from "@xylabs/react-promise";
|
|
12
|
+
import { useContextEx, useProvided } from "@xyo-network/react-shared";
|
|
13
|
+
var useWalletContext = (required = true) => {
|
|
14
|
+
return useContextEx(WalletContext, "Wallet", required);
|
|
15
|
+
};
|
|
16
|
+
var useWalletProvided = () => {
|
|
17
|
+
return useProvided(WalletContext);
|
|
18
|
+
};
|
|
19
|
+
var useCoinTypeWallet = (required = true) => {
|
|
20
|
+
const { coinTypeWallet } = useWalletContext(required);
|
|
21
|
+
return [coinTypeWallet, void 0];
|
|
22
|
+
};
|
|
23
|
+
var useIndexedWalletFromContext = (index, required = true) => {
|
|
24
|
+
const [coinTypeWallet] = useCoinTypeWallet(required);
|
|
25
|
+
const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
|
|
26
|
+
return [wallet, void 0];
|
|
27
|
+
};
|
|
28
|
+
var useSelectedWalletAccount = (required = true) => {
|
|
29
|
+
const { activeAccountIndex } = useWalletContext(required);
|
|
30
|
+
const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
|
|
31
|
+
if (activeAccountIndex === void 0 && account === null) {
|
|
32
|
+
return [null, void 0];
|
|
33
|
+
} else {
|
|
34
|
+
return [account, void 0];
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// src/hooks/useWallet.ts
|
|
39
|
+
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
40
|
+
import { HDWallet } from "@xyo-network/account";
|
|
41
|
+
import { useState } from "react";
|
|
42
|
+
var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
|
|
43
|
+
const walletContextProvided = useWalletProvided();
|
|
44
|
+
const [error, setError] = useState();
|
|
45
|
+
const [contextAccount] = useSelectedWalletAccount(!wallet && required);
|
|
46
|
+
const [activeAccount] = usePromise2(async () => {
|
|
47
|
+
try {
|
|
48
|
+
const newAccount = await (() => {
|
|
49
|
+
if (wallet) {
|
|
50
|
+
return wallet;
|
|
51
|
+
} else if (mnemonic) {
|
|
52
|
+
return HDWallet.fromMnemonic(mnemonic);
|
|
53
|
+
} else if (seed) {
|
|
54
|
+
return HDWallet.fromSeed(seed);
|
|
55
|
+
}
|
|
56
|
+
return contextAccount;
|
|
57
|
+
})();
|
|
58
|
+
if (path) {
|
|
59
|
+
return newAccount?.derivePath?.(path);
|
|
60
|
+
} else {
|
|
61
|
+
return newAccount ?? wallet;
|
|
62
|
+
}
|
|
63
|
+
} catch (ex) {
|
|
64
|
+
setError(ex);
|
|
65
|
+
}
|
|
66
|
+
}, [mnemonic, contextAccount, seed, path, wallet]);
|
|
67
|
+
return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// src/components/WalletAccountSelect/Select.tsx
|
|
71
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
72
|
+
var arrayRange = (length, start = 0) => {
|
|
8
73
|
return Array.from(Array(length).keys()).map((x) => x + start);
|
|
9
74
|
};
|
|
10
|
-
|
|
75
|
+
var WalletAccountSelect = ({
|
|
11
76
|
addressNames = {},
|
|
12
77
|
iconOnly,
|
|
13
78
|
iconSize = 24,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/Select.tsx"],"sourcesContent":["import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n"],"mappings":"AAgCI,mBAYc,WAZd;AAhCJ,SAAS,kBAAkB,gBAA6B;AACxD,SAAS,gBAAgB;AACzB,SAAS,2BAAqD;AAE9D,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAS1B,MAAM,aAAa,CAAC,QAAgB,QAAQ,MAAM;AAChD,SAAO,MAAM,KAAK,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;AAC9D;AAEO,MAAM,sBAA0D,CAAC;AAAA,EACtE,eAAe,CAAC;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,qBAAqB,GAAG,uBAAuB,eAAe,IAAI,iBAAiB;AAC3F,QAAM,WAAW,CAAC,kBAAkB,uBAAuB;AAE3D,SACE,gCACG,2BACC;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP;AAAA,MACA,aAAa,CAAC,yBAAyB;AACrC,cAAM,OAAiB,MAAM;AAC3B,gBAAM,CAAC,eAAe,IAAI,UAAU,EAAE,MAAM,qBAAqB,SAAS,GAAG,QAAQ,eAAe,CAAC;AACrG,gBAAM,aAAa,kBAAkB,aAAa,gBAAgB,OAAO,IAAI;AAC7E,gBAAM,WAAW,CAAC,CAAC,mBAAmB,gBAAgB,WAAW;AACjE,iBACE,oBAAC,YAAS,OAAO,sBAAsB,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,EAAE,GACzF;AAAA,YAAC;AAAA;AAAA,cACC,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,iBAAiB;AAAA,cAC1B;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN;AAAA,cACA;AAAA;AAAA,UACF,GACF;AAAA,QAEJ;AACA,eAAO,oBAAC,QAAK;AAAA,MACf;AAAA,MACA,OAAO;AAAA,MACP,UAAU,CAAC,UAAU,wBAAwB,SAAS,GAAG,MAAM,OAAO,KAAK,EAAE,CAAC;AAAA,MAC9E;AAAA,MACA,SAAQ;AAAA,MACP,GAAG;AAAA,MAEH,qBAAW,WAAW,EAAE,IAAI,CAAC,UAAU;AACtC,cAAM,OAAiB,MAAM;AAC3B,gBAAM,CAAC,OAAO,IAAI,UAAU,EAAE,MAAM,MAAM,SAAS,GAAG,QAAQ,eAAe,CAAC;AAC9E,gBAAM,aAAa,UAAU,aAAa,QAAQ,OAAO,IAAI;AAC7D,gBAAM,WAAW,CAAC,CAAC,WAAW,QAAQ,WAAW;AACjD,iBACE,oBAAC,YAAgC,OAAO,OAAO,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,EAAE,GACjG;AAAA,YAAC;AAAA;AAAA,cACC,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,SAAS;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN;AAAA;AAAA,UACF,KAXa,SAAS,OAYxB;AAAA,QAEJ;AAEA,eAAO,oBAAC,UAAU,KAAO;AAAA,MAC3B,CAAC;AAAA;AAAA,EACH,IAEA,oBAAC,oBAAiB,MAAM,IAAI,GAEhC;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/Select.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise"]}
|
|
@@ -1,7 +1,153 @@
|
|
|
1
|
-
|
|
1
|
+
// src/components/WalletAccountSelect/SelectBar.tsx
|
|
2
2
|
import { FlexCol } from "@xylabs/react-flexbox";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
// src/components/WalletAccountSelect/Select.tsx
|
|
5
|
+
import { CircularProgress, MenuItem } from "@mui/material";
|
|
6
|
+
import { SelectEx } from "@xylabs/react-select";
|
|
7
|
+
import { AddressRenderRowBox } from "@xyo-network/react-address-render";
|
|
8
|
+
|
|
9
|
+
// src/contexts/Wallet/Context.ts
|
|
10
|
+
import { createContextEx } from "@xyo-network/react-shared";
|
|
11
|
+
var WalletContext = createContextEx();
|
|
12
|
+
|
|
13
|
+
// src/contexts/Wallet/use.ts
|
|
14
|
+
import { usePromise } from "@xylabs/react-promise";
|
|
15
|
+
import { useContextEx, useProvided } from "@xyo-network/react-shared";
|
|
16
|
+
var useWalletContext = (required = true) => {
|
|
17
|
+
return useContextEx(WalletContext, "Wallet", required);
|
|
18
|
+
};
|
|
19
|
+
var useWalletProvided = () => {
|
|
20
|
+
return useProvided(WalletContext);
|
|
21
|
+
};
|
|
22
|
+
var useCoinTypeWallet = (required = true) => {
|
|
23
|
+
const { coinTypeWallet } = useWalletContext(required);
|
|
24
|
+
return [coinTypeWallet, void 0];
|
|
25
|
+
};
|
|
26
|
+
var useIndexedWalletFromContext = (index, required = true) => {
|
|
27
|
+
const [coinTypeWallet] = useCoinTypeWallet(required);
|
|
28
|
+
const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
|
|
29
|
+
return [wallet, void 0];
|
|
30
|
+
};
|
|
31
|
+
var useSelectedWalletAccount = (required = true) => {
|
|
32
|
+
const { activeAccountIndex } = useWalletContext(required);
|
|
33
|
+
const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
|
|
34
|
+
if (activeAccountIndex === void 0 && account === null) {
|
|
35
|
+
return [null, void 0];
|
|
36
|
+
} else {
|
|
37
|
+
return [account, void 0];
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// src/hooks/useWallet.ts
|
|
42
|
+
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
43
|
+
import { HDWallet } from "@xyo-network/account";
|
|
44
|
+
import { useState } from "react";
|
|
45
|
+
var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
|
|
46
|
+
const walletContextProvided = useWalletProvided();
|
|
47
|
+
const [error, setError] = useState();
|
|
48
|
+
const [contextAccount] = useSelectedWalletAccount(!wallet && required);
|
|
49
|
+
const [activeAccount] = usePromise2(async () => {
|
|
50
|
+
try {
|
|
51
|
+
const newAccount = await (() => {
|
|
52
|
+
if (wallet) {
|
|
53
|
+
return wallet;
|
|
54
|
+
} else if (mnemonic) {
|
|
55
|
+
return HDWallet.fromMnemonic(mnemonic);
|
|
56
|
+
} else if (seed) {
|
|
57
|
+
return HDWallet.fromSeed(seed);
|
|
58
|
+
}
|
|
59
|
+
return contextAccount;
|
|
60
|
+
})();
|
|
61
|
+
if (path) {
|
|
62
|
+
return newAccount?.derivePath?.(path);
|
|
63
|
+
} else {
|
|
64
|
+
return newAccount ?? wallet;
|
|
65
|
+
}
|
|
66
|
+
} catch (ex) {
|
|
67
|
+
setError(ex);
|
|
68
|
+
}
|
|
69
|
+
}, [mnemonic, contextAccount, seed, path, wallet]);
|
|
70
|
+
return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// src/components/WalletAccountSelect/Select.tsx
|
|
74
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
75
|
+
var arrayRange = (length, start = 0) => {
|
|
76
|
+
return Array.from(Array(length).keys()).map((x) => x + start);
|
|
77
|
+
};
|
|
78
|
+
var WalletAccountSelect = ({
|
|
79
|
+
addressNames = {},
|
|
80
|
+
iconOnly,
|
|
81
|
+
iconSize = 24,
|
|
82
|
+
icons,
|
|
83
|
+
maxAccounts = 1,
|
|
84
|
+
showFavorite = false,
|
|
85
|
+
size,
|
|
86
|
+
...props
|
|
87
|
+
}) => {
|
|
88
|
+
const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext();
|
|
89
|
+
const disabled = !coinTypeWallet || activeAccountIndex === void 0;
|
|
90
|
+
return /* @__PURE__ */ jsx(Fragment, { children: coinTypeWallet ? /* @__PURE__ */ jsx(
|
|
91
|
+
SelectEx,
|
|
92
|
+
{
|
|
93
|
+
margin: "dense",
|
|
94
|
+
disabled,
|
|
95
|
+
renderValue: (selectedAccountIndex) => {
|
|
96
|
+
const Item = () => {
|
|
97
|
+
const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet });
|
|
98
|
+
const customName = selectedAccount ? addressNames[selectedAccount.address] : void 0;
|
|
99
|
+
const favorite = !!selectedAccount && selectedAccount.address in addressNames;
|
|
100
|
+
return /* @__PURE__ */ jsx(MenuItem, { value: selectedAccountIndex, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ jsx(
|
|
101
|
+
AddressRenderRowBox,
|
|
102
|
+
{
|
|
103
|
+
disableSharedRef: true,
|
|
104
|
+
flexGrow: 1,
|
|
105
|
+
address: selectedAccount?.address,
|
|
106
|
+
iconOnly,
|
|
107
|
+
iconSize,
|
|
108
|
+
icons,
|
|
109
|
+
name: customName,
|
|
110
|
+
favorite,
|
|
111
|
+
showFavorite
|
|
112
|
+
}
|
|
113
|
+
) });
|
|
114
|
+
};
|
|
115
|
+
return /* @__PURE__ */ jsx(Item, {});
|
|
116
|
+
},
|
|
117
|
+
value: activeAccountIndex,
|
|
118
|
+
onChange: (event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`)),
|
|
119
|
+
size,
|
|
120
|
+
variant: "outlined",
|
|
121
|
+
...props,
|
|
122
|
+
children: arrayRange(maxAccounts).map((index) => {
|
|
123
|
+
const Item = () => {
|
|
124
|
+
const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet });
|
|
125
|
+
const customName = account ? addressNames[account.address] : void 0;
|
|
126
|
+
const favorite = !!account && account.address in addressNames;
|
|
127
|
+
return /* @__PURE__ */ jsx(MenuItem, { value: index, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ jsx(
|
|
128
|
+
AddressRenderRowBox,
|
|
129
|
+
{
|
|
130
|
+
disableSharedRef: true,
|
|
131
|
+
flexGrow: 1,
|
|
132
|
+
address: account?.address,
|
|
133
|
+
favorite,
|
|
134
|
+
iconOnly,
|
|
135
|
+
iconSize,
|
|
136
|
+
icons,
|
|
137
|
+
name: customName,
|
|
138
|
+
showFavorite
|
|
139
|
+
}
|
|
140
|
+
) }, account?.address);
|
|
141
|
+
};
|
|
142
|
+
return /* @__PURE__ */ jsx(Item, {}, index);
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
) : /* @__PURE__ */ jsx(CircularProgress, { size: 24 }) });
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// src/components/WalletAccountSelect/SelectBar.tsx
|
|
149
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
150
|
+
var WalletAccountSelectBar = ({
|
|
5
151
|
addressNames = {},
|
|
6
152
|
iconOnly,
|
|
7
153
|
iconSize,
|
|
@@ -11,7 +157,7 @@ const WalletAccountSelectBar = ({
|
|
|
11
157
|
size = "small",
|
|
12
158
|
...props
|
|
13
159
|
}) => {
|
|
14
|
-
return /* @__PURE__ */
|
|
160
|
+
return /* @__PURE__ */ jsx2(FlexCol, { alignItems: "stretch", ...props, children: /* @__PURE__ */ jsx2(
|
|
15
161
|
WalletAccountSelect,
|
|
16
162
|
{
|
|
17
163
|
addressNames,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/SelectBar.tsx"],"sourcesContent":["import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\n\nimport { WalletAccountSelect } from './Select'\n\nexport interface WalletAccountSelectBarProps extends FlexBoxProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n maxAccounts?: number\n showFavorite?: boolean\n size?: 'small' | 'medium'\n}\n\nexport const WalletAccountSelectBar: React.FC<WalletAccountSelectBarProps> = ({\n addressNames = {},\n iconOnly,\n iconSize,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size = 'small',\n ...props\n}) => {\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n <WalletAccountSelect\n addressNames={addressNames}\n fullWidth\n showFavorite={showFavorite}\n iconSize={iconSize}\n iconOnly={iconOnly}\n icons={icons}\n maxAccounts={maxAccounts}\n size={size ?? 'small'}\n />\n </FlexCol>\n )\n}\n"],"mappings":"AA0BM;AA1BN,SAAuB,eAAe;AAEtC,SAAS,2BAA2B;AAY7B,MAAM,yBAAgE,CAAC;AAAA,EAC5E,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,OAAO;AAAA,EACP,GAAG;AACL,MAAM;AACJ,SACE,oBAAC,WAAQ,YAAW,WAAW,GAAG,OAChC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA;AAAA,EAChB,GACF;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/SelectBar.tsx","../../../../src/components/WalletAccountSelect/Select.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\n\nimport { WalletAccountSelect } from './Select'\n\nexport interface WalletAccountSelectBarProps extends FlexBoxProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n maxAccounts?: number\n showFavorite?: boolean\n size?: 'small' | 'medium'\n}\n\nexport const WalletAccountSelectBar: React.FC<WalletAccountSelectBarProps> = ({\n addressNames = {},\n iconOnly,\n iconSize,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size = 'small',\n ...props\n}) => {\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n <WalletAccountSelect\n addressNames={addressNames}\n fullWidth\n showFavorite={showFavorite}\n iconSize={iconSize}\n iconOnly={iconOnly}\n icons={icons}\n maxAccounts={maxAccounts}\n size={size ?? 'small'}\n />\n </FlexCol>\n )\n}\n","import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise","jsx"]}
|
|
@@ -1,11 +1,117 @@
|
|
|
1
|
-
|
|
1
|
+
// src/components/WalletAccountSelect/WalletInfo.tsx
|
|
2
2
|
import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from "@mui/icons-material";
|
|
3
3
|
import { FlexCol } from "@xylabs/react-flexbox";
|
|
4
4
|
import { Identicon } from "@xylabs/react-identicon";
|
|
5
5
|
import { QuickTipButton } from "@xylabs/react-quick-tip-button";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
|
|
7
|
+
// src/contexts/Wallet/Context.ts
|
|
8
|
+
import { createContextEx } from "@xyo-network/react-shared";
|
|
9
|
+
var WalletContext = createContextEx();
|
|
10
|
+
|
|
11
|
+
// src/contexts/Wallet/use.ts
|
|
12
|
+
import { usePromise } from "@xylabs/react-promise";
|
|
13
|
+
import { useContextEx, useProvided } from "@xyo-network/react-shared";
|
|
14
|
+
var useWalletContext = (required = true) => {
|
|
15
|
+
return useContextEx(WalletContext, "Wallet", required);
|
|
16
|
+
};
|
|
17
|
+
var useWalletProvided = () => {
|
|
18
|
+
return useProvided(WalletContext);
|
|
19
|
+
};
|
|
20
|
+
var useCoinTypeWallet = (required = true) => {
|
|
21
|
+
const { coinTypeWallet } = useWalletContext(required);
|
|
22
|
+
return [coinTypeWallet, void 0];
|
|
23
|
+
};
|
|
24
|
+
var useRootWallet = (required = true) => {
|
|
25
|
+
const { rootWallet } = useWalletContext(required);
|
|
26
|
+
return [rootWallet, void 0];
|
|
27
|
+
};
|
|
28
|
+
var useIndexedWalletFromContext = (index, required = true) => {
|
|
29
|
+
const [coinTypeWallet] = useCoinTypeWallet(required);
|
|
30
|
+
const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
|
|
31
|
+
return [wallet, void 0];
|
|
32
|
+
};
|
|
33
|
+
var useSelectedWalletAccount = (required = true) => {
|
|
34
|
+
const { activeAccountIndex } = useWalletContext(required);
|
|
35
|
+
const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
|
|
36
|
+
if (activeAccountIndex === void 0 && account === null) {
|
|
37
|
+
return [null, void 0];
|
|
38
|
+
} else {
|
|
39
|
+
return [account, void 0];
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// src/hooks/useAccount.ts
|
|
44
|
+
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
45
|
+
import { useState } from "react";
|
|
46
|
+
var useAccount = ({ wallet, account, index, required = false } = {}) => {
|
|
47
|
+
const walletContextProvided = useWalletProvided();
|
|
48
|
+
const [validationError, setValidationError] = useState();
|
|
49
|
+
if (wallet && account && !validationError) {
|
|
50
|
+
setValidationError(Error("useAccount can not have both a wallet and an account in the parameters"));
|
|
51
|
+
}
|
|
52
|
+
if (index && account && !validationError) {
|
|
53
|
+
setValidationError(Error("useAccount can not have both a index and an account in the parameters"));
|
|
54
|
+
}
|
|
55
|
+
const [error, setError] = useState();
|
|
56
|
+
const [coinTypeWallet] = useCoinTypeWallet(!wallet && required);
|
|
57
|
+
const { activeAccountIndex } = useWalletContext(false);
|
|
58
|
+
const [activeAccount] = usePromise2(async () => {
|
|
59
|
+
try {
|
|
60
|
+
if (!validationError) {
|
|
61
|
+
if (wallet) {
|
|
62
|
+
return await wallet?.derivePath?.(`${index ?? 0}'\0`);
|
|
63
|
+
} else if (coinTypeWallet) {
|
|
64
|
+
return await coinTypeWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\0`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (ex) {
|
|
68
|
+
const error2 = ex;
|
|
69
|
+
console.error(error2.message);
|
|
70
|
+
setError(error2);
|
|
71
|
+
}
|
|
72
|
+
}, [index, wallet, coinTypeWallet, activeAccountIndex, validationError]);
|
|
73
|
+
if (validationError && !error) {
|
|
74
|
+
console.error(validationError.message);
|
|
75
|
+
setError(validationError);
|
|
76
|
+
}
|
|
77
|
+
return [error ? void 0 : account ?? activeAccount ?? walletContextProvided ? null : void 0, error];
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// src/hooks/useWallet.ts
|
|
81
|
+
import { usePromise as usePromise3 } from "@xylabs/react-promise";
|
|
82
|
+
import { HDWallet } from "@xyo-network/account";
|
|
83
|
+
import { useState as useState2 } from "react";
|
|
84
|
+
var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
|
|
85
|
+
const walletContextProvided = useWalletProvided();
|
|
86
|
+
const [error, setError] = useState2();
|
|
87
|
+
const [contextAccount] = useSelectedWalletAccount(!wallet && required);
|
|
88
|
+
const [activeAccount] = usePromise3(async () => {
|
|
89
|
+
try {
|
|
90
|
+
const newAccount = await (() => {
|
|
91
|
+
if (wallet) {
|
|
92
|
+
return wallet;
|
|
93
|
+
} else if (mnemonic) {
|
|
94
|
+
return HDWallet.fromMnemonic(mnemonic);
|
|
95
|
+
} else if (seed) {
|
|
96
|
+
return HDWallet.fromSeed(seed);
|
|
97
|
+
}
|
|
98
|
+
return contextAccount;
|
|
99
|
+
})();
|
|
100
|
+
if (path) {
|
|
101
|
+
return newAccount?.derivePath?.(path);
|
|
102
|
+
} else {
|
|
103
|
+
return newAccount ?? wallet;
|
|
104
|
+
}
|
|
105
|
+
} catch (ex) {
|
|
106
|
+
setError(ex);
|
|
107
|
+
}
|
|
108
|
+
}, [mnemonic, contextAccount, seed, path, wallet]);
|
|
109
|
+
return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// src/components/WalletAccountSelect/WalletInfo.tsx
|
|
113
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
114
|
+
var WalletError = ({ error }) => {
|
|
9
115
|
return error ? /* @__PURE__ */ jsxs("div", { children: [
|
|
10
116
|
/* @__PURE__ */ jsx(ErrorIcon, { style: { fontSize: "12px", position: "absolute" }, color: "error" }),
|
|
11
117
|
/* @__PURE__ */ jsx(
|
|
@@ -19,7 +125,7 @@ const WalletError = ({ error }) => {
|
|
|
19
125
|
)
|
|
20
126
|
] }) : null;
|
|
21
127
|
};
|
|
22
|
-
|
|
128
|
+
var WalletIdenticon = ({ account, name }) => {
|
|
23
129
|
return /* @__PURE__ */ jsxs("div", { style: { width: 20 }, children: [
|
|
24
130
|
account ? /* @__PURE__ */ jsx(Identicon, { size: 8, value: account.address, style: { position: "absolute", right: 2, top: 2 } }) : /* @__PURE__ */ jsx(LoadingIcon, { style: { fontSize: "10px", padding: 0, position: "absolute", right: 2, top: 2 }, color: "disabled" }),
|
|
25
131
|
/* @__PURE__ */ jsx(
|
|
@@ -33,35 +139,35 @@ const WalletIdenticon = ({ account, name }) => {
|
|
|
33
139
|
)
|
|
34
140
|
] });
|
|
35
141
|
};
|
|
36
|
-
|
|
142
|
+
var CoinTypeWalletInfo = (props) => {
|
|
37
143
|
const [wallet, error] = useCoinTypeWallet();
|
|
38
144
|
return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
|
|
39
145
|
error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "CoinType", account: wallet }),
|
|
40
146
|
/* @__PURE__ */ jsx(WalletError, { error })
|
|
41
147
|
] });
|
|
42
148
|
};
|
|
43
|
-
|
|
149
|
+
var RootWalletInfo = (props) => {
|
|
44
150
|
const [wallet, error] = useRootWallet();
|
|
45
151
|
return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
|
|
46
152
|
error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Root", account: wallet }),
|
|
47
153
|
/* @__PURE__ */ jsx(WalletError, { error })
|
|
48
154
|
] });
|
|
49
155
|
};
|
|
50
|
-
|
|
156
|
+
var SelectedWalletInfo = (props) => {
|
|
51
157
|
const [wallet, error] = useSelectedWalletAccount();
|
|
52
158
|
return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
|
|
53
159
|
error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Selected", account: wallet }),
|
|
54
160
|
/* @__PURE__ */ jsx(WalletError, { error })
|
|
55
161
|
] });
|
|
56
162
|
};
|
|
57
|
-
|
|
163
|
+
var WalletInfo = (props) => {
|
|
58
164
|
const [wallet, error] = useWallet();
|
|
59
165
|
return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
|
|
60
166
|
error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Wallet", account: wallet }),
|
|
61
167
|
/* @__PURE__ */ jsx(WalletError, { error })
|
|
62
168
|
] });
|
|
63
169
|
};
|
|
64
|
-
|
|
170
|
+
var AccountInfo = (props) => {
|
|
65
171
|
const [account, error] = useAccount();
|
|
66
172
|
return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
|
|
67
173
|
error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Account", account }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/WalletInfo.tsx"],"sourcesContent":["import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from '@mui/icons-material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { useCoinTypeWallet, useRootWallet, useSelectedWalletAccount } from '../../contexts'\nimport { useAccount, useWallet } from '../../hooks'\n\nexport interface WalletErrorProps {\n error?: Error\n}\n\nexport const WalletError: React.FC<WalletErrorProps> = ({ error }) => {\n return error ? (\n <div>\n <ErrorIcon style={{ fontSize: '12px', position: 'absolute' }} color=\"error\" />\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={error.message}\n disableDialog\n />\n </div>\n ) : null\n}\n\nexport interface WalletIdenticonProps {\n account?: AccountInstance | null\n name: string\n}\n\nexport const WalletIdenticon: React.FC<WalletIdenticonProps> = ({ account, name }) => {\n return (\n <div style={{ width: 20 }}>\n {account ? (\n <Identicon size={8} value={account.address} style={{ position: 'absolute', right: 2, top: 2 }} />\n ) : (\n <LoadingIcon style={{ fontSize: '10px', padding: 0, position: 'absolute', right: 2, top: 2 }} color=\"disabled\" />\n )}\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={`${name ?? ''}: ${account?.address ?? 'no address'}`}\n disableDialog\n />\n </div>\n )\n}\n\nexport const CoinTypeWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useCoinTypeWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"CoinType\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const RootWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useRootWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Root\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const SelectedWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useSelectedWalletAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Selected\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const WalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Wallet\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const AccountInfo: React.FC<FlexBoxProps> = (props) => {\n const [account, error] = useAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Account\" account={account} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n"],"mappings":"AAeI,SACE,KADF;AAfJ,SAAS,UAAU,aAAa,iBAAiB,iBAAiB;AAClE,SAAuB,eAAe;AACtC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB,eAAe,gCAAgC;AAC3E,SAAS,YAAY,iBAAiB;AAM/B,MAAM,cAA0C,CAAC,EAAE,MAAM,MAAM;AACpE,SAAO,QACL,qBAAC,SACC;AAAA,wBAAC,aAAU,OAAO,EAAE,UAAU,QAAQ,UAAU,WAAW,GAAG,OAAM,SAAQ;AAAA,IAC5E;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO,EAAE,OAAO,aAAa,UAAU,QAAQ,SAAS,GAAG,UAAU,WAAW;AAAA,QAChF,WAAW,MAAM;AAAA,QACjB,eAAa;AAAA;AAAA,IACf;AAAA,KACF,IACE;AACN;AAOO,MAAM,kBAAkD,CAAC,EAAE,SAAS,KAAK,MAAM;AACpF,SACE,qBAAC,SAAI,OAAO,EAAE,OAAO,GAAG,GACrB;AAAA,cACC,oBAAC,aAAU,MAAM,GAAG,OAAO,QAAQ,SAAS,OAAO,EAAE,UAAU,YAAY,OAAO,GAAG,KAAK,EAAE,GAAG,IAE/F,oBAAC,eAAY,OAAO,EAAE,UAAU,QAAQ,SAAS,GAAG,UAAU,YAAY,OAAO,GAAG,KAAK,EAAE,GAAG,OAAM,YAAW;AAAA,IAEjH;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO,EAAE,OAAO,aAAa,UAAU,QAAQ,SAAS,GAAG,UAAU,WAAW;AAAA,QAChF,WAAW,GAAG,QAAQ,EAAE,KAAK,SAAS,WAAW,YAAY;AAAA,QAC7D,eAAa;AAAA;AAAA,IACf;AAAA,KACF;AAEJ;AAEO,MAAM,qBAA6C,CAAC,UAAU;AACnE,QAAM,CAAC,QAAQ,KAAK,IAAI,kBAAkB;AAC1C,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,YAAW,SAAS,QAAQ;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,iBAAyC,CAAC,UAAU;AAC/D,QAAM,CAAC,QAAQ,KAAK,IAAI,cAAc;AACtC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,QAAO,SAAS,QAAQ;AAAA,IAC9D,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,qBAA6C,CAAC,UAAU;AACnE,QAAM,CAAC,QAAQ,KAAK,IAAI,yBAAyB;AACjD,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,YAAW,SAAS,QAAQ;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,aAAqC,CAAC,UAAU;AAC3D,QAAM,CAAC,QAAQ,KAAK,IAAI,UAAU;AAClC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,UAAS,SAAS,QAAQ;AAAA,IAChE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,cAAsC,CAAC,UAAU;AAC5D,QAAM,CAAC,SAAS,KAAK,IAAI,WAAW;AACpC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,WAAU,SAAkB;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/WalletAccountSelect/WalletInfo.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useAccount.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from '@mui/icons-material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { useCoinTypeWallet, useRootWallet, useSelectedWalletAccount } from '../../contexts'\nimport { useAccount, useWallet } from '../../hooks'\n\nexport interface WalletErrorProps {\n error?: Error\n}\n\nexport const WalletError: React.FC<WalletErrorProps> = ({ error }) => {\n return error ? (\n <div>\n <ErrorIcon style={{ fontSize: '12px', position: 'absolute' }} color=\"error\" />\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={error.message}\n disableDialog\n />\n </div>\n ) : null\n}\n\nexport interface WalletIdenticonProps {\n account?: AccountInstance | null\n name: string\n}\n\nexport const WalletIdenticon: React.FC<WalletIdenticonProps> = ({ account, name }) => {\n return (\n <div style={{ width: 20 }}>\n {account ? (\n <Identicon size={8} value={account.address} style={{ position: 'absolute', right: 2, top: 2 }} />\n ) : (\n <LoadingIcon style={{ fontSize: '10px', padding: 0, position: 'absolute', right: 2, top: 2 }} color=\"disabled\" />\n )}\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={`${name ?? ''}: ${account?.address ?? 'no address'}`}\n disableDialog\n />\n </div>\n )\n}\n\nexport const CoinTypeWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useCoinTypeWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"CoinType\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const RootWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useRootWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Root\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const SelectedWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useSelectedWalletAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Selected\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const WalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Wallet\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const AccountInfo: React.FC<FlexBoxProps> = (props) => {\n const [account, error] = useAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Account\" account={account} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useCoinTypeWallet, useWalletContext, useWalletProvided } from '../contexts'\n\nexport interface AccountHookParams {\n account?: AccountInstance\n index?: number\n required?: boolean\n wallet?: WalletInstance\n}\n\nexport const useAccount = ({ wallet, account, index, required = false }: AccountHookParams = {}): [\n AccountInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [validationError, setValidationError] = useState<Error>()\n if (wallet && account && !validationError) {\n setValidationError(Error('useAccount can not have both a wallet and an account in the parameters'))\n }\n\n if (index && account && !validationError) {\n setValidationError(Error('useAccount can not have both a index and an account in the parameters'))\n }\n\n const [error, setError] = useState<Error>()\n const [coinTypeWallet] = useCoinTypeWallet(!wallet && required)\n const { activeAccountIndex } = useWalletContext(false)\n const [activeAccount] = usePromise(async () => {\n try {\n if (!validationError) {\n if (wallet) {\n return await wallet?.derivePath?.(`${index ?? 0}'\\0`)\n } else if (coinTypeWallet) {\n return await coinTypeWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\\0`)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, coinTypeWallet, activeAccountIndex, validationError])\n if (validationError && !error) {\n console.error(validationError.message)\n setError(validationError)\n }\n\n return [error ? undefined : account ?? activeAccount ?? walletContextProvided ? null : undefined, error]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise","error","usePromise","useState","useState","usePromise"]}
|