@polkahub/proxy 0.5.0 → 0.6.0
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/AddProxy.js +6 -2
- package/dist/AddProxy.js.map +1 -1
- package/dist/ManageProxy.js +1 -1
- package/dist/ManageProxy.js.map +1 -1
- package/package.json +9 -9
package/dist/AddProxy.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useModalContext, usePlugin, usePolkaHubContext, useAvailableAccounts, AddressIdentity } from '@polkahub/context';
|
|
3
3
|
import { defaultSerialize } from '@polkahub/plugin';
|
|
4
|
-
import { InlineAddressInput, Input, Button,
|
|
4
|
+
import { InlineAddressInput, Input, Button, Alert, AlertDescription, AccountPicker } from '@polkahub/ui-components';
|
|
5
5
|
import { AccountId } from 'polkadot-api';
|
|
6
6
|
import { toHex } from 'polkadot-api/utils';
|
|
7
7
|
import { useState, useMemo, useEffect } from 'react';
|
|
8
8
|
import { proxyProviderId } from './provider.js';
|
|
9
|
+
import { OctagonX } from 'lucide-react';
|
|
9
10
|
|
|
10
11
|
const proxyTypeText = {
|
|
11
12
|
AssetManager: "Asset Manager",
|
|
@@ -174,7 +175,10 @@ const ProxySignerPicker = ({ value, onChange, proxy }) => {
|
|
|
174
175
|
if (selectableSigners == null) return /* @__PURE__ */ jsx("div", { children: "Loading\u2026" });
|
|
175
176
|
if (selectableSigners.length === 0 && delegatesResult.type === "result" && delegatesResult.value) {
|
|
176
177
|
const reason = delegatesResult.value.length === 0 ? `This account doesn't appear to be a proxy.` : `None of your connected signers are recognized as delegates of this proxy. Please configure the real signer account and try again`;
|
|
177
|
-
return /* @__PURE__ */
|
|
178
|
+
return /* @__PURE__ */ jsxs(Alert, { variant: "destructive", children: [
|
|
179
|
+
/* @__PURE__ */ jsx(OctagonX, {}),
|
|
180
|
+
/* @__PURE__ */ jsx(AlertDescription, { children: reason })
|
|
181
|
+
] });
|
|
178
182
|
}
|
|
179
183
|
return /* @__PURE__ */ jsx(
|
|
180
184
|
AccountPicker,
|
package/dist/AddProxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddProxy.js","sources":["../src/AddProxy.tsx"],"sourcesContent":["import {\n AddressIdentity,\n useAvailableAccounts,\n useModalContext,\n usePlugin,\n usePolkaHubContext,\n} from \"@polkahub/context\";\nimport { Account, AccountAddress, defaultSerialize } from \"@polkahub/plugin\";\nimport {\n AccountPicker,\n AlertBox,\n Button,\n InlineAddressInput,\n Input,\n} from \"@polkahub/ui-components\";\nimport { AccountId } from \"polkadot-api\";\nimport { toHex } from \"polkadot-api/utils\";\nimport { useEffect, useMemo, useState, type FC } from \"react\";\nimport { ProxyEntry, ProxyProvider, proxyProviderId } from \"./provider\";\n\nconst proxyTypeText: Record<string, string | undefined> = {\n AssetManager: \"Asset Manager\",\n AssetOwner: \"Asset Owner\",\n CancelProxy: \"Cancel Proxy\",\n NominationPools: \"Nomination Pools\",\n NonTransfer: \"Non-Transfer\",\n ParaRegistration: \"Para Registration\",\n};\n\nexport type AddProxyProps = {\n blockLength?: number;\n};\n\nexport const AddProxy: FC<AddProxyProps> = ({ blockLength }) => {\n const { popContent } = useModalContext();\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId);\n const { polkaHub } = usePolkaHubContext();\n\n const [proxyAddress, setProxyAddress] = useState<AccountAddress | null>(null);\n const [name, setName] = useState(\"\");\n const [selectedAccount, setSelectedAccount] =\n useState<AccountWithProxy | null>(null);\n\n return (\n <form\n className=\"space-y-2\"\n onSubmit={(evt) => {\n evt.preventDefault();\n if (!proxyAddress || !selectedAccount) return null;\n\n const plugins = polkaHub.plugins$.getValue();\n const parentProvider = plugins.find(\n (p) => p.id === selectedAccount.provider\n );\n if (!parentProvider)\n throw new Error(\n `Parent provider ${selectedAccount.provider} not found`\n );\n\n const serializeFn = parentProvider.serialize ?? defaultSerialize;\n proxyProvider?.addProxy({\n real: proxyAddress,\n parentSigner: serializeFn(selectedAccount),\n name: name.trim() ? name.trim() : undefined,\n });\n\n popContent();\n }}\n >\n <div className=\"space-y-2\">\n <h3 className=\"font-medium text-muted-foreground\">\n Insert Proxy Address (Delegator)\n </h3>\n <div className=\"flex gap-2\">\n <InlineAddressInput\n value={proxyAddress}\n onChange={setProxyAddress}\n className=\"max-w-auto shrink-[2]\"\n />\n <Input\n name=\"account-name\"\n value={name}\n onChange={(evt) => setName(evt.target.value)}\n placeholder=\"Name (optional)\"\n className=\"shrink-[3]\"\n />\n </div>\n </div>\n {proxyAddress ? (\n <div className=\"space-y-2\">\n <h3 className=\"font-medium text-muted-foreground\">\n Select your signer (Delegate)\n </h3>\n <ProxySignerPicker\n value={selectedAccount}\n onChange={setSelectedAccount}\n proxy={proxyAddress}\n />\n </div>\n ) : null}\n {selectedAccount?.delegate ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Permissions</h3>\n <ul className=\"flex flex-wrap gap-2\">\n {selectedAccount.delegate.map((entry, i) => (\n <li key={i} className=\"border rounded px-2 py-1\">\n {proxyTypeText[entry.proxy_type.type] ?? entry.proxy_type.type}\n {entry.delay\n ? ` (${getDelayLength(entry.delay, blockLength)})`\n : \"\"}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className=\"flex justify-end\">\n <Button disabled={!proxyAddress || !selectedAccount}>Add Proxy</Button>\n </div>\n </form>\n );\n};\n\nconst getDelayLength = (blocks: number, blockLength?: number) => {\n if (!blockLength) return `delay ${blocks}`;\n\n const seconds = (blocks * blockLength) / 1000;\n if (seconds < 120) {\n return `${Math.round(seconds)}s delay`;\n }\n const minutes = Math.round(seconds / 60);\n const min = minutes % 60;\n const hours = Math.floor(minutes / 60);\n const hr = hours % 24;\n const days = Math.floor(hours / 24);\n\n const time = `${hr}:${min.toString().padStart(2, \"0\")} delay`;\n if (!days) {\n return time;\n }\n return `${days}d ${time}`;\n};\n\nconst useAsync = <T,>(fn: () => Promise<T>, deps: unknown[]) => {\n const [value, setValue] = useState<\n | {\n type: \"loading\" | \"error\";\n value?: never;\n }\n | {\n type: \"result\";\n value: T;\n }\n >({\n type: \"loading\",\n });\n\n useEffect(() => {\n let cancelled = false;\n\n setValue({ type: \"loading\" });\n fn().then(\n (value) => {\n if (cancelled) return;\n setValue({ type: \"result\", value });\n },\n (ex) => {\n if (cancelled) return;\n console.error(ex);\n setValue({ type: \"error\" });\n }\n );\n\n return () => {\n cancelled = true;\n };\n }, deps);\n\n return value;\n};\n\ntype AccountWithProxy = Account & {\n delegate?: ProxyEntry[];\n};\n\nconst ProxySignerPicker: FC<{\n value: AccountWithProxy | null;\n onChange: (value: AccountWithProxy | null) => void;\n proxy: AccountAddress;\n}> = ({ value, onChange, proxy }) => {\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId)!;\n const availableAccounts = useAvailableAccounts();\n const delegatesResult = useAsync(\n () => proxyProvider.getDelegates(proxy),\n [proxy]\n );\n const availableSigners = useMemo(\n () =>\n Object.entries(availableAccounts)\n .map(([name, accounts]) => ({\n name,\n accounts: accounts.filter((acc) => !!acc.signer),\n }))\n .filter(({ accounts }) => accounts.length > 0),\n [availableAccounts]\n );\n\n const selectableSigners = useMemo(() => {\n if (delegatesResult.type === \"loading\") return null;\n if (delegatesResult.value == null) return availableSigners;\n\n const delegates = delegatesResult.value.reduce(\n (acc: Record<string, ProxyEntry[]>, delegate) => {\n const commonAddr = addrToCommon(delegate.delegate);\n acc[commonAddr] ??= [];\n acc[commonAddr].push(delegate);\n return acc;\n },\n {}\n );\n\n return availableSigners\n .map(({ name, accounts }) => ({\n name,\n accounts: accounts\n .map((account): AccountWithProxy | null => {\n const delegate = delegates[addrToCommon(account.address)];\n if (!delegate) return null;\n return {\n ...account,\n delegate,\n };\n })\n .filter((v) => v != null),\n }))\n .filter(({ accounts }) => accounts.length > 0);\n }, [delegatesResult, availableSigners]);\n\n if (selectableSigners == null) return <div>Loading…</div>;\n\n if (\n selectableSigners.length === 0 &&\n delegatesResult.type === \"result\" &&\n delegatesResult.value\n ) {\n const reason =\n delegatesResult.value.length === 0\n ? `This account doesn't appear to be a proxy.`\n : `None of your connected signers are recognized as delegates of this proxy. Please configure the real signer account and try again`;\n\n return <AlertBox variant=\"error\">{reason}</AlertBox>;\n }\n\n return (\n <AccountPicker\n value={value}\n onChange={onChange}\n groups={selectableSigners}\n className=\"max-w-auto\"\n disableClear\n renderAddress={(account) => (\n <AddressIdentity\n addr={account.address}\n name={account?.name}\n copyable={false}\n />\n )}\n />\n );\n};\n\nconst [ss58ToBin] = AccountId();\nconst addrToCommon = (addr: AccountAddress) =>\n addr.startsWith(\"0x\") ? \"0x\" : toHex(ss58ToBin(addr));\n"],"names":["value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddProxy.js","sources":["../src/AddProxy.tsx"],"sourcesContent":["import {\n AddressIdentity,\n useAvailableAccounts,\n useModalContext,\n usePlugin,\n usePolkaHubContext,\n} from \"@polkahub/context\";\nimport { Account, AccountAddress, defaultSerialize } from \"@polkahub/plugin\";\nimport {\n AccountPicker,\n Alert,\n AlertDescription,\n Button,\n InlineAddressInput,\n Input,\n} from \"@polkahub/ui-components\";\nimport { AccountId } from \"polkadot-api\";\nimport { toHex } from \"polkadot-api/utils\";\nimport { useEffect, useMemo, useState, type FC } from \"react\";\nimport { ProxyEntry, ProxyProvider, proxyProviderId } from \"./provider\";\nimport { OctagonX } from \"lucide-react\";\n\nconst proxyTypeText: Record<string, string | undefined> = {\n AssetManager: \"Asset Manager\",\n AssetOwner: \"Asset Owner\",\n CancelProxy: \"Cancel Proxy\",\n NominationPools: \"Nomination Pools\",\n NonTransfer: \"Non-Transfer\",\n ParaRegistration: \"Para Registration\",\n};\n\nexport type AddProxyProps = {\n blockLength?: number;\n};\n\nexport const AddProxy: FC<AddProxyProps> = ({ blockLength }) => {\n const { popContent } = useModalContext();\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId);\n const { polkaHub } = usePolkaHubContext();\n\n const [proxyAddress, setProxyAddress] = useState<AccountAddress | null>(null);\n const [name, setName] = useState(\"\");\n const [selectedAccount, setSelectedAccount] =\n useState<AccountWithProxy | null>(null);\n\n return (\n <form\n className=\"space-y-2\"\n onSubmit={(evt) => {\n evt.preventDefault();\n if (!proxyAddress || !selectedAccount) return null;\n\n const plugins = polkaHub.plugins$.getValue();\n const parentProvider = plugins.find(\n (p) => p.id === selectedAccount.provider\n );\n if (!parentProvider)\n throw new Error(\n `Parent provider ${selectedAccount.provider} not found`\n );\n\n const serializeFn = parentProvider.serialize ?? defaultSerialize;\n proxyProvider?.addProxy({\n real: proxyAddress,\n parentSigner: serializeFn(selectedAccount),\n name: name.trim() ? name.trim() : undefined,\n });\n\n popContent();\n }}\n >\n <div className=\"space-y-2\">\n <h3 className=\"font-medium text-muted-foreground\">\n Insert Proxy Address (Delegator)\n </h3>\n <div className=\"flex gap-2\">\n <InlineAddressInput\n value={proxyAddress}\n onChange={setProxyAddress}\n className=\"max-w-auto shrink-[2]\"\n />\n <Input\n name=\"account-name\"\n value={name}\n onChange={(evt) => setName(evt.target.value)}\n placeholder=\"Name (optional)\"\n className=\"shrink-[3]\"\n />\n </div>\n </div>\n {proxyAddress ? (\n <div className=\"space-y-2\">\n <h3 className=\"font-medium text-muted-foreground\">\n Select your signer (Delegate)\n </h3>\n <ProxySignerPicker\n value={selectedAccount}\n onChange={setSelectedAccount}\n proxy={proxyAddress}\n />\n </div>\n ) : null}\n {selectedAccount?.delegate ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Permissions</h3>\n <ul className=\"flex flex-wrap gap-2\">\n {selectedAccount.delegate.map((entry, i) => (\n <li key={i} className=\"border rounded px-2 py-1\">\n {proxyTypeText[entry.proxy_type.type] ?? entry.proxy_type.type}\n {entry.delay\n ? ` (${getDelayLength(entry.delay, blockLength)})`\n : \"\"}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className=\"flex justify-end\">\n <Button disabled={!proxyAddress || !selectedAccount}>Add Proxy</Button>\n </div>\n </form>\n );\n};\n\nconst getDelayLength = (blocks: number, blockLength?: number) => {\n if (!blockLength) return `delay ${blocks}`;\n\n const seconds = (blocks * blockLength) / 1000;\n if (seconds < 120) {\n return `${Math.round(seconds)}s delay`;\n }\n const minutes = Math.round(seconds / 60);\n const min = minutes % 60;\n const hours = Math.floor(minutes / 60);\n const hr = hours % 24;\n const days = Math.floor(hours / 24);\n\n const time = `${hr}:${min.toString().padStart(2, \"0\")} delay`;\n if (!days) {\n return time;\n }\n return `${days}d ${time}`;\n};\n\nconst useAsync = <T,>(fn: () => Promise<T>, deps: unknown[]) => {\n const [value, setValue] = useState<\n | {\n type: \"loading\" | \"error\";\n value?: never;\n }\n | {\n type: \"result\";\n value: T;\n }\n >({\n type: \"loading\",\n });\n\n useEffect(() => {\n let cancelled = false;\n\n setValue({ type: \"loading\" });\n fn().then(\n (value) => {\n if (cancelled) return;\n setValue({ type: \"result\", value });\n },\n (ex) => {\n if (cancelled) return;\n console.error(ex);\n setValue({ type: \"error\" });\n }\n );\n\n return () => {\n cancelled = true;\n };\n }, deps);\n\n return value;\n};\n\ntype AccountWithProxy = Account & {\n delegate?: ProxyEntry[];\n};\n\nconst ProxySignerPicker: FC<{\n value: AccountWithProxy | null;\n onChange: (value: AccountWithProxy | null) => void;\n proxy: AccountAddress;\n}> = ({ value, onChange, proxy }) => {\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId)!;\n const availableAccounts = useAvailableAccounts();\n const delegatesResult = useAsync(\n () => proxyProvider.getDelegates(proxy),\n [proxy]\n );\n const availableSigners = useMemo(\n () =>\n Object.entries(availableAccounts)\n .map(([name, accounts]) => ({\n name,\n accounts: accounts.filter((acc) => !!acc.signer),\n }))\n .filter(({ accounts }) => accounts.length > 0),\n [availableAccounts]\n );\n\n const selectableSigners = useMemo(() => {\n if (delegatesResult.type === \"loading\") return null;\n if (delegatesResult.value == null) return availableSigners;\n\n const delegates = delegatesResult.value.reduce(\n (acc: Record<string, ProxyEntry[]>, delegate) => {\n const commonAddr = addrToCommon(delegate.delegate);\n acc[commonAddr] ??= [];\n acc[commonAddr].push(delegate);\n return acc;\n },\n {}\n );\n\n return availableSigners\n .map(({ name, accounts }) => ({\n name,\n accounts: accounts\n .map((account): AccountWithProxy | null => {\n const delegate = delegates[addrToCommon(account.address)];\n if (!delegate) return null;\n return {\n ...account,\n delegate,\n };\n })\n .filter((v) => v != null),\n }))\n .filter(({ accounts }) => accounts.length > 0);\n }, [delegatesResult, availableSigners]);\n\n if (selectableSigners == null) return <div>Loading…</div>;\n\n if (\n selectableSigners.length === 0 &&\n delegatesResult.type === \"result\" &&\n delegatesResult.value\n ) {\n const reason =\n delegatesResult.value.length === 0\n ? `This account doesn't appear to be a proxy.`\n : `None of your connected signers are recognized as delegates of this proxy. Please configure the real signer account and try again`;\n\n return (\n <Alert variant=\"destructive\">\n <OctagonX />\n <AlertDescription>{reason}</AlertDescription>\n </Alert>\n );\n }\n\n return (\n <AccountPicker\n value={value}\n onChange={onChange}\n groups={selectableSigners}\n className=\"max-w-auto\"\n disableClear\n renderAddress={(account) => (\n <AddressIdentity\n addr={account.address}\n name={account?.name}\n copyable={false}\n />\n )}\n />\n );\n};\n\nconst [ss58ToBin] = AccountId();\nconst addrToCommon = (addr: AccountAddress) =>\n addr.startsWith(\"0x\") ? \"0x\" : toHex(ss58ToBin(addr));\n"],"names":["value"],"mappings":"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"}
|
package/dist/ManageProxy.js
CHANGED
|
@@ -43,7 +43,7 @@ const ManageAddresses = (props) => {
|
|
|
43
43
|
children: /* @__PURE__ */ jsx(Trash2, {})
|
|
44
44
|
}
|
|
45
45
|
),
|
|
46
|
-
/* @__PURE__ */ jsx(AddressIdentity, { addr: account.address }),
|
|
46
|
+
/* @__PURE__ */ jsx(AddressIdentity, { addr: account.address, name: account.name }),
|
|
47
47
|
/* @__PURE__ */ jsx("div", { className: "grow" }),
|
|
48
48
|
/* @__PURE__ */ jsx(AddressBalance, { addr: account.address }),
|
|
49
49
|
setAccount ? /* @__PURE__ */ jsx(
|
package/dist/ManageProxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageProxy.js","sources":["../src/ManageProxy.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useModalContext,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport { Button, SourceButton } from \"@polkahub/ui-components\";\nimport { useStateObservable } from \"@react-rxjs/core\";\nimport { Trash2, UserLock } from \"lucide-react\";\nimport { useContext, type FC } from \"react\";\nimport { AddProxy, AddProxyProps } from \"./AddProxy\";\nimport { ProxyProvider, proxyProviderId } from \"./provider\";\n\nexport const ManageProxy: FC = () => {\n const { pushContent } = useContext(ModalContext)!;\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId);\n\n return (\n <SourceButton\n label=\"Proxy\"\n onClick={() =>\n pushContent({\n title: \"Proxied accounts\",\n element: <ManageAddresses />,\n })\n }\n disabled={!proxyProvider}\n >\n <div>\n <UserLock className=\"size-10\" />\n </div>\n </SourceButton>\n );\n};\n\nconst ManageAddresses: FC<AddProxyProps> = (props) => {\n const { pushContent } = useModalContext();\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId)!;\n const proxyAccounts = useStateObservable(proxyProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n {proxyAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {proxyAccounts.map((account, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => proxyProvider.removeProxy(account.info)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={account.address} />\n <div className=\"grow\" />\n <AddressBalance addr={account.address} />\n {setAccount ? (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(account);\n }}\n >\n Select\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n onClick={() =>\n pushContent({\n title: \"Add Proxy\",\n element: <AddProxy {...props} />,\n })\n }\n >\n Add Proxy\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAeO,MAAM,cAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,UAAA,CAAW,YAAY,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgB,UAAyB,eAAe,CAAA;AAE9D,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,MACP,WAAA,CAAY;AAAA,QACV,KAAA,EAAO,kBAAA;AAAA,QACP,OAAA,sBAAU,eAAA,EAAA,EAAgB;AAAA,OAC3B,CAAA;AAAA,MAEH,UAAU,CAAC,aAAA;AAAA,MAEX,8BAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAU,CAAA,EAChC;AAAA;AAAA,GACF;AAEJ;AAEA,MAAM,eAAA,GAAqC,CAAC,KAAA,KAAU;AACpD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,eAAA,EAAgB;AACxC,EAAA,MAAM,aAAA,GAAgB,UAAyB,eAAe,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,aAAA,CAAc,SAAS,CAAA;AAChE,EAAA,MAAM,aAAa,qBAAA,EAAsB;AAEzC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,IAAA,aAAA,CAAc,MAAA,wBACZ,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mCAAA,EAAoC,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,sBACjE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,WAAA,EACX,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBAC3B,IAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,yBAAA,EACpB,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,SAAA,EAAU,kBAAA;AAAA,YACV,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,aAAA,CAAc,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,YAErD,8BAAC,MAAA,EAAA,EAAO;AAAA;AAAA,SACV;AAAA,
|
|
1
|
+
{"version":3,"file":"ManageProxy.js","sources":["../src/ManageProxy.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useModalContext,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport { Button, SourceButton } from \"@polkahub/ui-components\";\nimport { useStateObservable } from \"@react-rxjs/core\";\nimport { Trash2, UserLock } from \"lucide-react\";\nimport { useContext, type FC } from \"react\";\nimport { AddProxy, AddProxyProps } from \"./AddProxy\";\nimport { ProxyProvider, proxyProviderId } from \"./provider\";\n\nexport const ManageProxy: FC = () => {\n const { pushContent } = useContext(ModalContext)!;\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId);\n\n return (\n <SourceButton\n label=\"Proxy\"\n onClick={() =>\n pushContent({\n title: \"Proxied accounts\",\n element: <ManageAddresses />,\n })\n }\n disabled={!proxyProvider}\n >\n <div>\n <UserLock className=\"size-10\" />\n </div>\n </SourceButton>\n );\n};\n\nconst ManageAddresses: FC<AddProxyProps> = (props) => {\n const { pushContent } = useModalContext();\n const proxyProvider = usePlugin<ProxyProvider>(proxyProviderId)!;\n const proxyAccounts = useStateObservable(proxyProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n {proxyAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {proxyAccounts.map((account, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => proxyProvider.removeProxy(account.info)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={account.address} name={account.name} />\n <div className=\"grow\" />\n <AddressBalance addr={account.address} />\n {setAccount ? (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(account);\n }}\n >\n Select\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n onClick={() =>\n pushContent({\n title: \"Add Proxy\",\n element: <AddProxy {...props} />,\n })\n }\n >\n Add Proxy\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/proxy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,16 +29,16 @@
|
|
|
29
29
|
"index.css"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@polkadot-api/meta-signers": "^0.1
|
|
32
|
+
"@polkadot-api/meta-signers": "^0.2.1",
|
|
33
33
|
"@react-rxjs/core": "^0.10.8",
|
|
34
34
|
"@react-rxjs/utils": "^0.9.7",
|
|
35
|
-
"lucide-react": "^
|
|
36
|
-
"polkadot-api": "^2.
|
|
35
|
+
"lucide-react": "^1.14.0",
|
|
36
|
+
"polkadot-api": "^2.1.0",
|
|
37
37
|
"rxjs": "^7.8.2",
|
|
38
|
-
"@polkahub/
|
|
39
|
-
"@polkahub/
|
|
40
|
-
"@polkahub/select-account": "0.
|
|
41
|
-
"@polkahub/ui-components": "0.
|
|
38
|
+
"@polkahub/plugin": "0.6.0",
|
|
39
|
+
"@polkahub/context": "0.6.0",
|
|
40
|
+
"@polkahub/select-account": "0.6.0",
|
|
41
|
+
"@polkahub/ui-components": "0.6.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@types/react": "^19.2.2",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/react": "^19.2.14",
|
|
49
|
-
"react": "^19.2.
|
|
49
|
+
"react": "^19.2.5"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "tsc -b && rollup -c ../../rollup.config.js"
|