@polkahub/read-only 0.2.2 → 0.3.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/ManageReadOnly.js +21 -17
- package/dist/ManageReadOnly.js.map +1 -1
- package/package.json +5 -5
package/dist/ManageReadOnly.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { ModalContext, usePlugin, useAvailableAccounts, AddressIdentity, AddressBalance } from '@polkahub/context';
|
|
3
3
|
import { useSetSelectedAccount } from '@polkahub/select-account';
|
|
4
|
-
import { SourceButton, Input, Button } from '@polkahub/ui-components';
|
|
4
|
+
import { SourceButton, InlineAddressInput, Input, Button } from '@polkahub/ui-components';
|
|
5
5
|
import { Eye, Trash2 } from 'lucide-react';
|
|
6
|
-
import { getSs58AddressInfo } from 'polkadot-api';
|
|
7
6
|
import { useContext, useState } from 'react';
|
|
8
7
|
import { readOnlyProviderId } from './provider.js';
|
|
9
8
|
|
|
@@ -24,40 +23,45 @@ const ManageReadOnly = () => {
|
|
|
24
23
|
);
|
|
25
24
|
};
|
|
26
25
|
const ManageAddresses = () => {
|
|
27
|
-
const [
|
|
26
|
+
const [address, setAddress] = useState(null);
|
|
27
|
+
const [name, setName] = useState("");
|
|
28
28
|
const availableAccounts = useAvailableAccounts();
|
|
29
29
|
const readOnlyProvider = usePlugin(readOnlyProviderId);
|
|
30
30
|
const readOnlyAccounts = availableAccounts[readOnlyProviderId] ?? [];
|
|
31
31
|
const setAccount = useSetSelectedAccount();
|
|
32
|
-
const isAddrValid = (() => {
|
|
33
|
-
try {
|
|
34
|
-
return getSs58AddressInfo(addressInput).isValid;
|
|
35
|
-
} catch {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
})();
|
|
39
32
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
40
33
|
/* @__PURE__ */ jsxs(
|
|
41
34
|
"form",
|
|
42
35
|
{
|
|
43
36
|
onSubmit: (evt) => {
|
|
44
37
|
evt.preventDefault();
|
|
45
|
-
if (!
|
|
46
|
-
readOnlyProvider.addAccount(
|
|
47
|
-
|
|
38
|
+
if (!address) return;
|
|
39
|
+
readOnlyProvider.addAccount(address);
|
|
40
|
+
setAddress(null);
|
|
48
41
|
},
|
|
49
42
|
children: [
|
|
50
43
|
/* @__PURE__ */ jsx("h3", { className: "font-medium text-muted-foreground", children: "Add read-only address" }),
|
|
51
44
|
/* @__PURE__ */ jsxs("div", { className: "flex gap-2 items-center", children: [
|
|
52
45
|
/* @__PURE__ */ jsx(
|
|
53
|
-
|
|
46
|
+
InlineAddressInput,
|
|
54
47
|
{
|
|
55
48
|
name: "address",
|
|
56
|
-
value:
|
|
57
|
-
onChange:
|
|
49
|
+
value: address,
|
|
50
|
+
onChange: setAddress,
|
|
51
|
+
className: "shrink-[2]"
|
|
52
|
+
}
|
|
53
|
+
),
|
|
54
|
+
/* @__PURE__ */ jsx(
|
|
55
|
+
Input,
|
|
56
|
+
{
|
|
57
|
+
name: "name",
|
|
58
|
+
value: name,
|
|
59
|
+
onChange: (evt) => setName(evt.target.value),
|
|
60
|
+
placeholder: "Name (optional)",
|
|
61
|
+
className: "shrink-[3]"
|
|
58
62
|
}
|
|
59
63
|
),
|
|
60
|
-
/* @__PURE__ */ jsx(Button, { disabled: !
|
|
64
|
+
/* @__PURE__ */ jsx(Button, { disabled: !address, children: "Add" })
|
|
61
65
|
] })
|
|
62
66
|
]
|
|
63
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageReadOnly.js","sources":["../src/ManageReadOnly.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useAvailableAccounts,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {
|
|
1
|
+
{"version":3,"file":"ManageReadOnly.js","sources":["../src/ManageReadOnly.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useAvailableAccounts,\n usePlugin,\n} from \"@polkahub/context\";\nimport { AccountAddress } from \"@polkahub/plugin\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {\n Button,\n InlineAddressInput,\n Input,\n SourceButton,\n} from \"@polkahub/ui-components\";\nimport { Eye, Trash2 } from \"lucide-react\";\nimport { useContext, useState, type FC } from \"react\";\nimport { ReadOnlyProvider, readOnlyProviderId } from \"./provider\";\n\nexport const ManageReadOnly: FC = () => {\n const { pushContent } = useContext(ModalContext)!;\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId);\n\n return (\n <SourceButton\n label=\"Address\"\n onClick={() =>\n pushContent({\n title: \"Read-only accounts\",\n element: <ManageAddresses />,\n })\n }\n disabled={!readOnlyProvider}\n >\n <div>\n <Eye className=\"size-10\" />\n </div>\n </SourceButton>\n );\n};\n\nconst ManageAddresses = () => {\n const [address, setAddress] = useState<AccountAddress | null>(null);\n const [name, setName] = useState(\"\");\n const availableAccounts = useAvailableAccounts();\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId)!;\n const readOnlyAccounts = availableAccounts[readOnlyProviderId] ?? [];\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n <form\n onSubmit={(evt) => {\n evt.preventDefault();\n if (!address) return;\n readOnlyProvider.addAccount(address);\n setAddress(null);\n }}\n >\n <h3 className=\"font-medium text-muted-foreground\">\n Add read-only address\n </h3>\n <div className=\"flex gap-2 items-center\">\n <InlineAddressInput\n name=\"address\"\n value={address}\n onChange={setAddress}\n className=\"shrink-[2]\"\n />\n <Input\n name=\"name\"\n value={name}\n onChange={(evt) => setName(evt.target.value)}\n placeholder=\"Name (optional)\"\n className=\"shrink-[3]\"\n />\n <Button disabled={!address}>Add</Button>\n </div>\n </form>\n {readOnlyAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {readOnlyAccounts.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={() =>\n readOnlyProvider.removeAccount(account.address)\n }\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>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/read-only",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"lucide-react": "^0.552.0",
|
|
31
31
|
"polkadot-api": "^1.20.1",
|
|
32
32
|
"rxjs": "^7.8.2",
|
|
33
|
-
"@polkahub/
|
|
34
|
-
"@polkahub/
|
|
35
|
-
"@polkahub/select-account": "0.
|
|
36
|
-
"@polkahub/ui-components": "0.
|
|
33
|
+
"@polkahub/plugin": "0.3.0",
|
|
34
|
+
"@polkahub/context": "0.3.0",
|
|
35
|
+
"@polkahub/select-account": "0.3.0",
|
|
36
|
+
"@polkahub/ui-components": "0.3.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@types/react": "^19.2.2",
|