UNPKG

@hypernetlabs/web-ui

Version:
120 lines 6.58 kB
"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