{
"data": {
"buildhub.near": {
"widget": {
"components.modals.propose.AddMember": {
"": "const { Button } = VM.require(\"buildhub.near/widget/components\") || {\n Button: () => <></>,\n};\nconst DaoSDK = VM.require(\"sdks.near/widget/SDKs.Sputnik.DaoSDK\") || (() => {});\nif (!DaoSDK) {\n return <></>;\n}\nconst [accountId, setAccountId] = useState(\"\");\nconst [role, setRole] = useState(\"\");\nconst roles = props.roles;\nconst selectedDAO = props.selectedDAO;\nconst sdk = DaoSDK(selectedDAO);\nconst [text, setText] = useState(\"\");\nconst [editorKey, setEditorKey] = useState(0);\nconst bootstrapTheme = props.bootstrapTheme;\nuseEffect(() => {\n if (!props.item) {\n return;\n }\n const { path, blockHeight } = props.item;\n setText(`[EMBED](${path}@${blockHeight})`);\n setEditorKey((editorKey) => editorKey + 1);\n}, [props.item]);\nconst memoizedKey = useMemo((editorKey) => editorKey, [editorKey]);\nconst [validatedAddresss, setValidatedAddresss] = useState(true);\nconst [notificationsData, setNotificationData] = useState(null);\nconst regex = /.{1}\\.near$/;\nuseEffect(() => {\n if (regex.test(accountId) || accountId === \"\") {\n setValidatedAddresss(true);\n } else {\n setValidatedAddresss(false);\n }\n});\nconst MarkdownEditor = `\n html {\n background: #23242b;\n }\n * {\n border: none !important;\n }\n .rc-md-editor {\n background: #4f5055;\n border-top: 1px solid #4f5055 !important;\n border-radius: 8px;\n }\n .editor-container {\n background: #4f5055;\n }\n \n .drop-wrap {\n \n border-radius: 0.5rem !important;\n }\n .header-list {\n display: flex;\n align-items: center;\n }\n textarea {\n background: #23242b !important;\n color: #fff !important;\n font-family: sans-serif !important;\n font-size: 1rem;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-radius: 0 0 8px 8px;\n }\n .rc-md-navigation {\n background: #23242b !important;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-bottom: 0 !important;\n border-radius: 8px 8px 0 0;\n \n i {\n color: #cdd0d5;\n }\n }\n .editor-container {\n border-radius: 0 0 8px 8px;\n }\n .rc-md-editor .editor-container .sec-md .input {\n overflow-y: auto;\n padding: 8px !important;\n line-height: normal;\n border-radius: 0 0 8px 8px;\n }\n`;\nconst TextareaWrapper = styled.div`\n display: grid;\n vertical-align: top;\n align-items: center;\n position: relative;\n align-items: stretch;\n width: 100%;\n textarea {\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n }\n textarea::placeholder {\n padding-top: 4px;\n font-size: 20px;\n }\n textarea:focus::placeholder {\n font-size: inherit;\n padding-top: 0px;\n }\n &::after,\n textarea,\n iframe {\n width: 100%;\n min-width: 1em;\n height: unset;\n min-height: 3em;\n font: inherit;\n margin: 0;\n resize: none;\n background: none;\n appearance: none;\n border: 0px solid #eee;\n grid-area: 1 / 1;\n overflow: hidden;\n outline: none;\n }\n iframe {\n padding: 0;\n }\n textarea:focus,\n textarea:not(:empty) {\n border-bottom: 1px solid #eee;\n min-height: 5em;\n }\n &::after {\n content: attr(data-value) \" \";\n visibility: hidden;\n white-space: pre-wrap;\n }\n &.markdown-editor::after {\n padding-top: 66px;\n font-family: monospace;\n font-size: 14px;\n }\n`;\nreturn (\n <div className=\"d-flex flex-column\">\n <div className=\"form-group mb-3\">\n <label htmlFor=\"accountId\">\n Account ID<span className=\"text-danger\">*</span>\n </label>\n <input\n name=\"accountId\"\n id=\"accountId\"\n className=\"form-control\"\n data-bs-theme={bootstrapTheme}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n />\n {!validatedAddresss && (\n <span className=\"text-danger\" style={{ fontSize: 12 }}>\n Please check if the NEAR address is valid!\n </span>\n )}\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"role\">\n Role<span className=\"text-danger\">*</span>\n </label>\n <select\n name=\"role\"\n id=\"role\"\n data-bs-theme={bootstrapTheme}\n class=\"form-select\"\n onChange={(e) => setRole(e.target.value)}\n selected={role}\n >\n <option value=\"\">Select a role</option>\n {roles.length > 0 &&\n roles.map((role) => <option value={role}>{role}</option>)}\n </select>\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"description\">Proposal Description</label>\n <TextareaWrapper\n className=\"markdown-editor mb-3\"\n data-value={text || \"\"}\n key={memoizedKey}\n >\n <Widget\n src=\"mob.near/widget/MarkdownEditorIframe\"\n props={{\n initialText: text,\n embedCss: props.customCSS || MarkdownEditor,\n onChange: (v) => {\n setText(v);\n },\n }}\n />\n </TextareaWrapper>\n </div>\n <Widget\n src=\"buildhub.near/widget/Notification.NotificationRolesSelector\"\n props={{\n daoId: selectedDAO,\n onUpdate: (v) => {\n setNotificationData(v);\n },\n proposalType: \"Add Member\",\n }}\n />\n <div className=\"w-100 d-flex\">\n <Button\n className=\"ms-auto\"\n variant=\"primary\"\n disabled={!accountId || !role || !validatedAddresss}\n onClick={() => {\n sdk.createAddMemberProposal({\n description: text,\n memberId: accountId,\n roleId: role,\n gas: 180000000000000,\n deposit: 200000000000000,\n additionalCalls: notificationsData,\n });\n }}\n >\n Create\n </Button>\n </div>\n </div>\n);\n"
},
"components.modals.propose.Transfer": {
"": "const { Button } = VM.require(\"buildhub.near/widget/components\") || {\n Button: () => <></>,\n};\nconst DaoSDK = VM.require(\"sdks.near/widget/SDKs.Sputnik.DaoSDK\") || (() => {});\nif (!DaoSDK) {\n return <></>;\n}\nconst [recipient, setRecipient] = useState(\"\");\nconst [token, setToken] = useState(\"\");\nconst [amount, setAmount] = useState(0);\nconst [description, setDescription] = useState(\"\");\nconst [validatedAddresss, setValidatedAddress] = useState(true);\nconst bootstrapTheme = props.bootstrapTheme;\nconst [text, setText] = useState(\"\");\nconst [editorKey, setEditorKey] = useState(0);\nconst [notificationsData, setNotificationData] = useState(null);\nuseEffect(() => {\n if (!props.item) {\n return;\n }\n const { path, blockHeight } = props.item;\n setText(`[EMBED](${path}@${blockHeight})`);\n setEditorKey((editorKey) => editorKey + 1);\n}, [props.item]);\nconst memoizedKey = useMemo((editorKey) => editorKey, [editorKey]);\nconst selectedDAO = props.selectedDAO;\nconst sdk = DaoSDK(selectedDAO);\nconst res = fetch(`https://api.nearblocks.io/v1/account/${selectedDAO}/tokens`);\nconst NearTokenId = \"NEAR\";\nconst tokensData = [\n {\n decimals: 24,\n icon: \"\",\n name: \"NEAR\",\n symbol: \"NEAR\",\n tokenId: NearTokenId,\n },\n];\nif (res.body) {\n res.body?.tokens?.fts.map((item) => {\n const ftMetadata = Near.view(item, \"ft_metadata\", {});\n if (ftMetadata === null) {\n return;\n }\n tokensData.push({ ...ftMetadata, tokenId: item });\n });\n}\n// handle checking\nconst regex = /.{1}\\.near$/;\nuseEffect(() => {\n if (regex.test(recipient) || recipient === \"\") {\n setValidatedAddress(true);\n } else {\n setValidatedAddress(false);\n }\n}, [recipient]);\nuseEffect(() => {\n if (amount < 0) {\n setAmount(0);\n }\n}, [amount]);\nconst MarkdownEditor = `\n html {\n background: #23242b;\n }\n * {\n border: none !important;\n }\n .rc-md-editor {\n background: #4f5055;\n border-top: 1px solid #4f5055 !important;\n border-radius: 8px;\n }\n .editor-container {\n background: #4f5055;\n }\n \n .drop-wrap {\n \n border-radius: 0.5rem !important;\n }\n .header-list {\n display: flex;\n align-items: center;\n }\n textarea {\n background: #23242b !important;\n color: #fff !important;\n font-family: sans-serif !important;\n font-size: 1rem;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-radius: 0 0 8px 8px;\n }\n .rc-md-navigation {\n background: #23242b !important;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-bottom: 0 !important;\n border-radius: 8px 8px 0 0;\n \n i {\n color: #cdd0d5;\n }\n }\n .editor-container {\n border-radius: 0 0 8px 8px;\n }\n .rc-md-editor .editor-container .sec-md .input {\n overflow-y: auto;\n padding: 8px !important;\n line-height: normal;\n border-radius: 0 0 8px 8px;\n }\n`;\nconst TextareaWrapper = styled.div`\n display: grid;\n vertical-align: top;\n align-items: center;\n position: relative;\n align-items: stretch;\n width: 100%;\n textarea {\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n }\n textarea::placeholder {\n padding-top: 4px;\n font-size: 20px;\n }\n textarea:focus::placeholder {\n font-size: inherit;\n padding-top: 0px;\n }\n &::after,\n textarea,\n iframe {\n width: 100%;\n min-width: 1em;\n height: unset;\n min-height: 3em;\n font: inherit;\n margin: 0;\n resize: none;\n background: none;\n appearance: none;\n border: 0px solid #eee;\n grid-area: 1 / 1;\n overflow: hidden;\n outline: none;\n }\n iframe {\n padding: 0;\n }\n textarea:focus,\n textarea:not(:empty) {\n border-bottom: 1px solid #eee;\n min-height: 5em;\n }\n &::after {\n content: attr(data-value) \" \";\n visibility: hidden;\n white-space: pre-wrap;\n }\n &.markdown-editor::after {\n padding-top: 66px;\n font-family: monospace;\n font-size: 14px;\n }\n`;\nreturn (\n <div className=\"d-flex flex-column\">\n <div className=\"form-group mb-3\">\n <label htmlFor=\"recipient\">\n Recipient<span className=\"text-danger\">*</span>\n </label>\n <input\n className=\"form-control\"\n name=\"recipient\"\n id=\"recipient\"\n placeholder=\"NEAR Address\"\n value={recipient}\n data-bs-theme={bootstrapTheme}\n onChange={(e) => setRecipient(e.target.value)}\n />\n {!validatedAddresss && (\n <span className=\"text-danger\" style={{ fontSize: 12 }}>\n Please check if the NEAR address is valid!\n </span>\n )}\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"token\">\n Token<span className=\"text-danger\">*</span>\n </label>\n <select\n class=\"form-select\"\n name=\"token\"\n id=\"token\"\n value={token}\n data-bs-theme={bootstrapTheme}\n onChange={(e) => setToken(e.target.value)}\n >\n <option value=\"\">Select a token</option>\n {tokensData?.map((item) => {\n return <option value={item.tokenId}>{item.symbol}</option>;\n })}\n </select>\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"amount\">\n Amount<span className=\"text-danger\">*</span>\n </label>\n <input\n className=\"form-control\"\n name=\"amount\"\n id=\"amount\"\n type=\"number\"\n value={amount}\n data-bs-theme={bootstrapTheme}\n onChange={(e) => setAmount(e.target.value)}\n />\n </div>\n <div className=\"form-group mb-3\">\n <label>Proposal Description</label>\n <TextareaWrapper\n className=\"markdown-editor mb-3\"\n data-value={text || \"\"}\n key={memoizedKey}\n >\n <Widget\n src=\"mob.near/widget/MarkdownEditorIframe\"\n props={{\n initialText: text,\n embedCss: props.customCSS || MarkdownEditor,\n onChange: (v) => {\n setText(v);\n },\n }}\n />\n </TextareaWrapper>\n </div>\n <Widget\n src=\"buildhub.near/widget/Notification.NotificationRolesSelector\"\n props={{\n daoId: selectedDAO,\n onUpdate: (v) => {\n setNotificationData(v);\n },\n proposalType: \"Add Member\",\n }}\n />\n <div className=\"w-100 d-flex\">\n <Button\n disabled={!token || !recipient || !amount || !validatedAddresss}\n className=\"ms-auto\"\n variant=\"primary\"\n onClick={() => {\n let ftMetadata = tokensData.find((item) => item.tokenId === token);\n const amountInYocto = Big(amount)\n .mul(Big(10).pow(ftMetadata.decimals))\n .toFixed();\n sdk.createTransferProposal({\n description: text,\n tokenId: token === NearTokenId ? \"\" : token,\n receiverId: recipient,\n amount: amountInYocto,\n gas,\n deposit,\n gas: 180000000000000,\n deposit: 200000000000000,\n additionalCalls: notificationsData,\n });\n }}\n >\n Create\n </Button>\n </div>\n </div>\n);\n"
},
"components.modals.propose.FunctionCall": {
"": "const { Button } = VM.require(\"buildhub.near/widget/components\") || {\n Button: () => <></>,\n};\nconst DaoSDK = VM.require(\"sdks.near/widget/SDKs.Sputnik.DaoSDK\") || (() => {});\nif (!DaoSDK) {\n return <></>;\n}\nconst [contract, setContract] = useState(\"\");\nconst [method, setMethod] = useState(\"\");\nconst [args, setArgs] = useState(\"{}\");\nconst [gas, setGas] = useState(180000000000000);\nconst [deposit, setDeposit] = useState(0);\nconst [validatedAddresss, setValidatedAddress] = useState(true);\nconst [text, setText] = useState(\"\");\nconst [editorKey, setEditorKey] = useState(0);\nconst [notificationsData, setNotificationData] = useState(null);\nconst bootstrapTheme = props.bootstrapTheme;\nuseEffect(() => {\n if (!props.item) {\n return;\n }\n const { path, blockHeight } = props.item;\n setText(`[EMBED](${path}@${blockHeight})`);\n setEditorKey((editorKey) => editorKey + 1);\n}, [props.item]);\nconst memoizedKey = useMemo((editorKey) => editorKey, [editorKey]);\nconst selectedDAO = props.selectedDAO;\nconst sdk = DaoSDK(selectedDAO);\nconst regex = /.{1}\\.near$/;\nuseEffect(() => {\n if (regex.test(contract) || contract === \"\") {\n setValidatedAddress(true);\n } else {\n setValidatedAddress(false);\n }\n}, [contract]);\nconst MarkdownEditor = `\n html {\n background: #23242b;\n }\n * {\n border: none !important;\n }\n .rc-md-editor {\n background: #4f5055;\n border-top: 1px solid #4f5055 !important;\n border-radius: 8px;\n }\n .editor-container {\n background: #4f5055;\n }\n \n .drop-wrap {\n \n border-radius: 0.5rem !important;\n }\n .header-list {\n display: flex;\n align-items: center;\n }\n textarea {\n background: #23242b !important;\n color: #fff !important;\n font-family: sans-serif !important;\n font-size: 1rem;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-radius: 0 0 8px 8px;\n }\n .rc-md-navigation {\n background: #23242b !important;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-bottom: 0 !important;\n border-radius: 8px 8px 0 0;\n \n i {\n color: #cdd0d5;\n }\n }\n .editor-container {\n border-radius: 0 0 8px 8px;\n }\n .rc-md-editor .editor-container .sec-md .input {\n overflow-y: auto;\n padding: 8px !important;\n line-height: normal;\n border-radius: 0 0 8px 8px;\n }\n`;\nconst TextareaWrapper = styled.div`\n display: grid;\n vertical-align: top;\n align-items: center;\n position: relative;\n align-items: stretch;\n width: 100%;\n textarea {\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n }\n textarea::placeholder {\n padding-top: 4px;\n font-size: 20px;\n }\n textarea:focus::placeholder {\n font-size: inherit;\n padding-top: 0px;\n }\n &::after,\n textarea,\n iframe {\n width: 100%;\n min-width: 1em;\n height: unset;\n min-height: 3em;\n font: inherit;\n margin: 0;\n resize: none;\n background: none;\n appearance: none;\n border: 0px solid #eee;\n grid-area: 1 / 1;\n overflow: hidden;\n outline: none;\n }\n iframe {\n padding: 0;\n }\n textarea:focus,\n textarea:not(:empty) {\n border-bottom: 1px solid #eee;\n min-height: 5em;\n }\n &::after {\n content: attr(data-value) \" \";\n visibility: hidden;\n white-space: pre-wrap;\n }\n &.markdown-editor::after {\n padding-top: 66px;\n font-family: monospace;\n font-size: 14px;\n }\n`;\nreturn (\n <div className=\"d-flex flex-column\">\n <div className=\"form-group mb-3\">\n <label htmlFor=\"contract\">\n Contract<span className=\"text-danger\">*</span>\n </label>\n <input\n name=\"contract\"\n id=\"contract\"\n data-bs-theme={bootstrapTheme}\n value={contract}\n onChange={(e) => setContract(e.target.value)}\n className=\"form-control\"\n />\n {!validatedAddresss && (\n <span className=\"text-danger\" style={{ fontSize: 12 }}>\n Please check if the NEAR address is valid!\n </span>\n )}\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"method\">\n Method<span className=\"text-danger\">*</span>\n </label>\n <input\n name=\"method\"\n id=\"method\"\n data-bs-theme={bootstrapTheme}\n value={method}\n onChange={(e) => setMethod(e.target.value)}\n className=\"form-control\"\n />\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"args\">Arguments (JSON)</label>\n <textarea\n name=\"args\"\n id=\"args\"\n data-bs-theme={bootstrapTheme}\n value={args}\n onChange={(e) => setArgs(e.target.value)}\n className=\"form-control\"\n />\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"gas\">Gas</label>\n <input\n name=\"gas\"\n id=\"gas\"\n type=\"number\"\n data-bs-theme={bootstrapTheme}\n value={gas}\n onChange={(e) => setGas(e.target.value)}\n className=\"form-control\"\n />\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"deposit\">Deposit</label>\n <input\n name=\"deposit\"\n id=\"deposit\"\n type=\"number\"\n data-bs-theme={bootstrapTheme}\n value={deposit}\n onChange={(e) => setDeposit(e.target.value)}\n className=\"form-control\"\n />\n </div>\n <div className=\"form-group mb-3\">\n <label>Proposal Description</label>\n <TextareaWrapper\n className=\"markdown-editor mb-3\"\n data-value={text || \"\"}\n key={memoizedKey}\n >\n <Widget\n src=\"mob.near/widget/MarkdownEditorIframe\"\n props={{\n initialText: text,\n embedCss: props.customCSS || MarkdownEditor,\n onChange: (v) => {\n setText(v);\n },\n }}\n />\n </TextareaWrapper>\n </div>\n <Widget\n src=\"buildhub.near/widget/Notification.NotificationRolesSelector\"\n props={{\n daoId: selectedDAO,\n onUpdate: (v) => {\n setNotificationData(v);\n },\n proposalType: \"Function Call\",\n }}\n />\n <div className=\"w-100 d-flex\">\n <Button\n disabled={!contract || !method || !validatedAddresss}\n className=\"ms-auto\"\n variant=\"primary\"\n onClick={() => {\n sdk.createFunctionCallProposal({\n description: text,\n receiverId: contract,\n methodName: method,\n args: args,\n proposalDeposit: deposit,\n proposalGas: gas,\n gas: 180000000000000,\n deposit: 200000000000000,\n additionalCalls: notificationsData,\n });\n }}\n >\n Create\n </Button>\n </div>\n </div>\n);\n"
},
"Notification.Item.buildhub": {
"": "const { value } = props;\nreturn (\n <Widget\n src=\"mob.near/widget/Notification.Item.LR\"\n props={{\n L: (\n <Widget\n src=\"buildhub.near/widget/Notification.Item.Left\"\n props={{ ...value }}\n />\n ),\n R: (\n <Widget\n src=\"buildhub.near/widget/Notification.Item.Right\"\n props={{ ...value }}\n />\n ),\n ...props,\n }}\n />\n);\n"
},
"components.modals.propose.Text": {
"": "const { Button } = VM.require(\"buildhub.near/widget/components\") || {\n Button: () => <></>,\n};\nconst DaoSDK = VM.require(\"sdks.near/widget/SDKs.Sputnik.DaoSDK\") || (() => {});\nif (!DaoSDK) {\n return <></>;\n}\nconst [text, setText] = useState(\"\");\nconst [editorKey, setEditorKey] = useState(0);\nuseEffect(() => {\n if (!props.item) {\n return;\n }\n const { path, blockHeight } = props.item;\n setText(`[EMBED](${path}@${blockHeight})`);\n setEditorKey((editorKey) => editorKey + 1);\n}, [props.item]);\nconst memoizedKey = useMemo((editorKey) => editorKey, [editorKey]);\nconst selectedDAO = props.selectedDAO;\nconst [notificationsData, setNotificationData] = useState(null);\nconst sdk = DaoSDK(selectedDAO);\nconst MarkdownEditor = `\n html {\n background: #23242b;\n }\n * {\n border: none !important;\n }\n .rc-md-editor {\n background: #4f5055;\n border-top: 1px solid #4f5055 !important;\n border-radius: 8px;\n }\n .editor-container {\n background: #4f5055;\n }\n \n .drop-wrap {\n \n border-radius: 0.5rem !important;\n }\n .header-list {\n display: flex;\n align-items: center;\n }\n textarea {\n background: #23242b !important;\n color: #fff !important;\n font-family: sans-serif !important;\n font-size: 1rem;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-radius: 0 0 8px 8px;\n }\n .rc-md-navigation {\n background: #23242b !important;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-bottom: 0 !important;\n border-radius: 8px 8px 0 0;\n \n i {\n color: #cdd0d5;\n }\n }\n .editor-container {\n border-radius: 0 0 8px 8px;\n }\n .rc-md-editor .editor-container .sec-md .input {\n overflow-y: auto;\n padding: 8px !important;\n line-height: normal;\n border-radius: 0 0 8px 8px;\n }\n`;\nconst TextareaWrapper = styled.div`\n display: grid;\n vertical-align: top;\n align-items: center;\n position: relative;\n align-items: stretch;\n width: 100%;\n textarea {\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n }\n textarea::placeholder {\n padding-top: 4px;\n font-size: 20px;\n }\n textarea:focus::placeholder {\n font-size: inherit;\n padding-top: 0px;\n }\n &::after,\n textarea,\n iframe {\n width: 100%;\n min-width: 1em;\n height: unset;\n min-height: 3em;\n font: inherit;\n margin: 0;\n resize: none;\n background: none;\n appearance: none;\n border: 0px solid #eee;\n grid-area: 1 / 1;\n overflow: hidden;\n outline: none;\n }\n iframe {\n padding: 0;\n }\n textarea:focus,\n textarea:not(:empty) {\n border-bottom: 1px solid #eee;\n min-height: 5em;\n }\n &::after {\n content: attr(data-value) \" \";\n visibility: hidden;\n white-space: pre-wrap;\n }\n &.markdown-editor::after {\n padding-top: 66px;\n font-family: monospace;\n font-size: 14px;\n }\n`;\nreturn (\n <div className=\"d-flex flex-column \">\n <label>Proposal Description</label>\n <TextareaWrapper\n className=\"markdown-editor mb-3\"\n data-value={text || \"\"}\n key={memoizedKey}\n >\n <Widget\n src=\"mob.near/widget/MarkdownEditorIframe\"\n props={{\n initialText: text,\n embedCss: props.customCSS || MarkdownEditor,\n onChange: (v) => {\n setText(v);\n },\n }}\n />\n </TextareaWrapper>\n <Widget\n src=\"buildhub.near/widget/Notification.NotificationRolesSelector\"\n props={{\n daoId: selectedDAO,\n onUpdate: (v) => {\n setNotificationData(v);\n },\n proposalType: \"Add Member\",\n }}\n />\n {/* {console.log(notificationsData)} */}\n <div className=\"w-100 d-flex\">\n <Button\n className=\"ms-auto\"\n variant=\"primary\"\n onClick={() => {\n sdk.createPollProposal({\n description: text,\n gas: 180000000000000,\n deposit: 200000000000000,\n additionalCalls: notificationsData,\n });\n }}\n >\n Create\n </Button>\n </div>\n </div>\n);\n"
},
"components.modals.propose.RemoveMember": {
"": "const { Button } = VM.require(\"buildhub.near/widget/components\") || {\n Button: () => <></>,\n};\nconst DaoSDK = VM.require(\"sdks.near/widget/SDKs.Sputnik.DaoSDK\") || (() => {});\nif (!DaoSDK) {\n return <></>;\n}\nconst [accountId, setAccountId] = useState(\"\");\nconst [role, setRole] = useState(\"\");\nconst roles = props.roles;\nconst selectedDAO = props.selectedDAO;\nconst sdk = DaoSDK(selectedDAO);\nconst [text, setText] = useState(\"\");\nconst [editorKey, setEditorKey] = useState(0);\nconst [notificationsData, setNotificationData] = useState(null);\nconst bootstrapTheme = props.bootstrapTheme;\nuseEffect(() => {\n if (!props.item) {\n return;\n }\n const { path, blockHeight } = props.item;\n setText(`[EMBED](${path}@${blockHeight})`);\n setEditorKey((editorKey) => editorKey + 1);\n}, [props.item]);\nconst memoizedKey = useMemo((editorKey) => editorKey, [editorKey]);\nconst [validatedAddresss, setValidatedAddresss] = useState(true);\nconst regex = /.{1}\\.near$/;\nuseEffect(() => {\n if (regex.test(accountId) || accountId === \"\") {\n setValidatedAddresss(true);\n } else {\n setValidatedAddresss(false);\n }\n});\nconst MarkdownEditor = `\n html {\n background: #23242b;\n }\n * {\n border: none !important;\n }\n .rc-md-editor {\n background: #4f5055;\n border-top: 1px solid #4f5055 !important;\n border-radius: 8px;\n }\n .editor-container {\n background: #4f5055;\n }\n \n .drop-wrap {\n \n border-radius: 0.5rem !important;\n }\n .header-list {\n display: flex;\n align-items: center;\n }\n textarea {\n background: #23242b !important;\n color: #fff !important;\n font-family: sans-serif !important;\n font-size: 1rem;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-radius: 0 0 8px 8px;\n }\n .rc-md-navigation {\n background: #23242b !important;\n border: 1px solid #4f5055 !important;\n border-top: 0 !important;\n border-bottom: 0 !important;\n border-radius: 8px 8px 0 0;\n \n i {\n color: #cdd0d5;\n }\n }\n .editor-container {\n border-radius: 0 0 8px 8px;\n }\n .rc-md-editor .editor-container .sec-md .input {\n overflow-y: auto;\n padding: 8px !important;\n line-height: normal;\n border-radius: 0 0 8px 8px;\n }\n`;\nconst TextareaWrapper = styled.div`\n display: grid;\n vertical-align: top;\n align-items: center;\n position: relative;\n align-items: stretch;\n width: 100%;\n textarea {\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n }\n textarea::placeholder {\n padding-top: 4px;\n font-size: 20px;\n }\n textarea:focus::placeholder {\n font-size: inherit;\n padding-top: 0px;\n }\n &::after,\n textarea,\n iframe {\n width: 100%;\n min-width: 1em;\n height: unset;\n min-height: 3em;\n font: inherit;\n margin: 0;\n resize: none;\n background: none;\n appearance: none;\n border: 0px solid #eee;\n grid-area: 1 / 1;\n overflow: hidden;\n outline: none;\n }\n iframe {\n padding: 0;\n }\n textarea:focus,\n textarea:not(:empty) {\n border-bottom: 1px solid #eee;\n min-height: 5em;\n }\n &::after {\n content: attr(data-value) \" \";\n visibility: hidden;\n white-space: pre-wrap;\n }\n &.markdown-editor::after {\n padding-top: 66px;\n font-family: monospace;\n font-size: 14px;\n }\n`;\nreturn (\n <div className=\"d-flex flex-column\">\n <div className=\"form-group mb-3\">\n <label htmlFor=\"accountId\">\n Account ID<span className=\"text-danger\">*</span>\n </label>\n <input\n name=\"accountId\"\n id=\"accountId\"\n className=\"form-control\"\n data-bs-theme={bootstrapTheme}\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n />\n {!validatedAddresss && (\n <span className=\"text-danger\" style={{ fontSize: 12 }}>\n Please check if the NEAR address is valid!\n </span>\n )}\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"role\">\n Role<span className=\"text-danger\">*</span>\n </label>\n <select\n name=\"role\"\n id=\"role\"\n data-bs-theme={bootstrapTheme}\n class=\"form-select\"\n onChange={(e) => setRole(e.target.value)}\n selected={role}\n >\n <option value=\"\">Select a role</option>\n {roles.length > 0 &&\n roles.map((role) => (\n <option key={`RemoveMember-${selectedDAO}-${role}`} value={role}>\n {role}\n </option>\n ))}\n </select>\n </div>\n <div className=\"form-group mb-3\">\n <label htmlFor=\"description\">Proposal Description</label>\n <TextareaWrapper\n className=\"markdown-editor mb-3\"\n data-value={text || \"\"}\n key={memoizedKey}\n >\n <Widget\n src=\"mob.near/widget/MarkdownEditorIframe\"\n props={{\n initialText: text,\n embedCss: props.customCSS || MarkdownEditor,\n onChange: (v) => {\n setText(v);\n },\n }}\n />\n </TextareaWrapper>\n </div>\n <Widget\n src=\"buildhub.near/widget/Notification.NotificationRolesSelector\"\n props={{\n daoId: selectedDAO,\n onUpdate: (v) => {\n setNotificationData(v);\n },\n proposalType: \"Remove Member\",\n }}\n />\n <div className=\"d-flex w-100\">\n <Button\n className=\"ms-auto\"\n variant=\"primary\"\n disabled={!accountId || !role || !validatedAddresss}\n onClick={() => {\n sdk.createRemoveMemberProposal({\n description: text,\n memberId: accountId,\n roleId: role,\n gas: 180000000000000,\n deposit: 200000000000000,\n additionalCalls: notificationsData,\n });\n }}\n >\n Create\n </Button>\n </div>\n </div>\n);\n"
}
}
}
}
}