@hypernetlabs/web-ui
Version:
Web ui react components for hypernet protocol
120 lines • 6.58 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const objects_1 = require("@hypernetlabs/objects");
const contexts_1 = require("../../contexts");
const formik_1 = require("formik");
const react_1 = __importStar(require("react"));
const Yup = __importStar(require("yup"));
const components_1 = require("../../components");
var ERegistryAction;
(function (ERegistryAction) {
ERegistryAction[ERegistryAction["ADD_REGISTRY"] = 0] = "ADD_REGISTRY";
})(ERegistryAction || (ERegistryAction = {}));
const CreateProposalWidget = ({ onProposalListNavigate, }) => {
const { coreProxy } = (0, contexts_1.useStoreContext)();
const { setLoading, handleCoreError } = (0, contexts_1.useLayoutContext)();
const [accountAddress, setAccountAddress] = (0, react_1.useState)((0, objects_1.EthereumAccountAddress)(""));
const [proposalThreshold, setProposalThreshold] = (0, react_1.useState)();
const [votingPower, setVotingPower] = (0, react_1.useState)();
(0, react_1.useEffect)(() => {
coreProxy.governance
.getProposalThreshold()
.map((_proposalThreshold) => {
setProposalThreshold(_proposalThreshold);
})
.mapErr(handleCoreError);
coreProxy
.getEthereumAccounts()
.map((accounts) => {
setAccountAddress(accounts[0]);
coreProxy.governance
.getVotingPower(accounts[0])
.map((power) => {
setVotingPower(power);
})
.mapErr(handleCoreError);
})
.mapErr(handleCoreError);
}, []);
const handleCreatePrposalFormSubmit = async (values, formikHelpers) => {
setLoading(true);
coreProxy.governance
.createProposal(values.name, values.symbol, (0, objects_1.EthereumAccountAddress)(values.owner), values.enumerable)
.map((proposal) => {
setLoading(false);
onProposalListNavigate && onProposalListNavigate();
})
.mapErr(handleCoreError);
};
const exceedsThreshold = (0, react_1.useMemo)(() => {
return !votingPower || !proposalThreshold
? false
: votingPower >= proposalThreshold;
}, [proposalThreshold, votingPower]);
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(components_1.GovernanceWidgetHeader, { label: "Create Proposal", navigationLink: {
label: "Proposal list",
onClick: () => {
onProposalListNavigate && onProposalListNavigate();
},
} }),
react_1.default.createElement(formik_1.Formik, { initialValues: {
action: ERegistryAction.ADD_REGISTRY,
name: "",
symbol: "",
enumerable: true,
owner: accountAddress,
}, enableReinitialize: true, onSubmit: handleCreatePrposalFormSubmit, validationSchema: Yup.object().shape({
action: Yup.number().required("Required"),
}) }, ({ handleSubmit, isSubmitting, values }) => (react_1.default.createElement(formik_1.Form, { onSubmit: handleSubmit, id: "CreateProposalForm" },
react_1.default.createElement(components_1.GovernanceDialogSelectLargeField, { name: "action", title: "Proposed Action", type: "select", placeholder: "select action", required: true, options: [
{
primaryText: "Add Registry",
secondaryText: undefined,
action: null,
value: ERegistryAction.ADD_REGISTRY,
},
] }),
values.action == ERegistryAction.ADD_REGISTRY && (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(components_1.GovernanceDialogSelectLargeField, { name: "enumerable", title: "Enumerable Tokens", type: "select", placeholder: "select action", required: true, options: [
{
primaryText: "Enabled",
secondaryText: undefined,
action: null,
value: true,
},
{
primaryText: "Disabled",
secondaryText: undefined,
action: null,
value: false,
},
] }),
react_1.default.createElement(components_1.GovernanceLargeField, { title: "Name", name: "name", type: "input", placeholder: "Type a Name", required: values.action == ERegistryAction.ADD_REGISTRY }),
react_1.default.createElement(components_1.GovernanceLargeField, { title: "Symbol", name: "symbol", type: "input", placeholder: "Type a Symbol", required: values.action == ERegistryAction.ADD_REGISTRY }),
react_1.default.createElement(components_1.GovernanceLargeField, { title: "Owner", name: "owner", type: "input", placeholder: "Type an Owner", required: values.action == ERegistryAction.ADD_REGISTRY }))),
react_1.default.createElement(components_1.GovernanceButton, { variant: "contained", size: "medium", form: "CreateProposalForm", type: "submit", fullWidth: true, color: "primary", disabled: !exceedsThreshold, onClick: () => { } }, exceedsThreshold
? "Submit"
: `You must have ${proposalThreshold} votes to submit a proposal`))))));
};
exports.default = CreateProposalWidget;
//# sourceMappingURL=CreateProposalWidget.js.map