const accountId = context.accountId; const memberId = props.memberId ?? context.accountId; const roleId = props.roleId ?? "voter"; const daoId = props.daoId ?? "rc-dao.sputnik-dao.near"; const name = props.name ?? "Regional Communities"; if (!accountId) { return ""; } const policy = Near.view(daoId, "get_policy"); if (policy === null) { return ""; } const deposit = policy.proposal_bond; const group = policy.roles .filter((role) => role.name === roleId) .map((role) => role.kind.Group); State.init({ isMember: false, }); const groupMembers = group.join(", "); const checkMembership = (groupMembers) => { if (groupMembers.indexOf(accountId) !== -1) { return State.update({ isMember: true }); } }; const validMember = checkMembership(groupMembers); const handleProposal = () => { Near.call([ { contractName: daoId, methodName: "add_proposal", args: { proposal: { description: `add someone to the NEAR ${name} DAO`, kind: { AddMemberToRole: { member_id: memberId, role: roleId, }, }, }, }, gas: 300000000000000, deposit: deposit, }, ]); }; // IAH Verification let human = false; const userSBTs = Near.view("registry.i-am-human.near", "sbt_tokens_by_owner", { account: memberId, }); for (let i = 0; i < userSBTs.length; i++) { if ("fractal.i-am-human.near" == userSBTs[i][0]) { human = true; } } return ( <div> {!validMember ? ( <button disabled={!human} className="btn btn-outline-secondary m-2" onClick={handleProposal} > {name} </button> ) : ( <button disabled={validMember} className="btn btn-outline-secondary m-2"> Joined </button> )} </div> );