diff --git a/apps/builddao/widget/components/buttons/JoinNow.jsx b/apps/builddao/widget/components/buttons/JoinNow.jsx index 27ba3914..12a4cb79 100644 --- a/apps/builddao/widget/components/buttons/JoinNow.jsx +++ b/apps/builddao/widget/components/buttons/JoinNow.jsx @@ -1,40 +1,10 @@ -const daoId = "build.sputnik-dao.near"; -const accountId = context.accountId; -const alreadyJoinedRolesNames = ["community", "council"]; -const searchRange = 100; - -const policy = Near.view(daoId, "get_policy"); - -const lastProposalId = Near.view(daoId, "get_last_proposal_id") - 1; - -const lastProposals = Near.view(daoId, "get_proposals", { - from_index: lastProposalId - searchRange, - limit: searchRange, -}) || []; - -const alreadyMadeAProposal = - lastProposals.filter((proposal) => { - return proposal.proposer === accountId; - }).length > 0; - -if (policy === null) { - return ""; -} - -const deposit = policy.proposal_bond; - -const group = policy.roles - .filter((role) => alreadyJoinedRolesNames.includes(role.name)) - .map((role) => { - return role.kind.Group; - }); - -const accounts = new Set(group[0].concat(group[1])); +const { checkIsMemberOrPending } = VM.require( + "buildhub.near/widget/core.lib.common" +); -const isCommunityOrCouncilMember = accounts.has(accountId); +checkIsMemberOrPending || (checkIsMemberOrPending = () => {}); -const canJoin = - (accountId && !isCommunityOrCouncilMember )|| (accountId && !alreadyMadeAProposal); +const isMemberOrPending = checkIsMemberOrPending(context.accountId); const Button = styled.a` width: max-content; @@ -83,6 +53,10 @@ const Container = styled.div` return ( - {canJoin ? : props.children} + {!isMemberOrPending ? ( + + ) : ( + props.children + )} ); diff --git a/apps/builddao/widget/core/lib/common.js b/apps/builddao/widget/core/lib/common.js new file mode 100644 index 00000000..96bb4082 --- /dev/null +++ b/apps/builddao/widget/core/lib/common.js @@ -0,0 +1,37 @@ +// checks if the user is already dao's community/council member or has an active proposal +const checkIsMemberOrPending = (accountId) => { + const daoId = "build.sputnik-dao.near"; + if (!accountId) { + return false; + } + const alreadyJoinedRolesNames = ["community", "council"]; + const searchRange = 100; + + const lastProposalId = Near.view(daoId, "get_last_proposal_id"); + + const policy = Near.view(daoId, "get_policy"); + const isDaoMember = false; + const lastProposals = + Near.view(daoId, "get_proposals", { + from_index: lastProposalId - searchRange, + limit: searchRange + }) || []; + + const alreadyMadeAProposal = + lastProposals.filter((proposal) => { + return ( + proposal.proposer === accountId && proposal.status === "InProgress" + ); + }).length > 0; + + policy.roles + .filter((role) => alreadyJoinedRolesNames.includes(role.name)) + .map((role) => { + if (Array.isArray(role.kind.Group) && !isDaoMember) { + isDaoMember = role.kind.Group.includes(accountId); + } + }); + return isDaoMember || alreadyMadeAProposal; +}; + +return { checkIsMemberOrPending }; diff --git a/apps/builddao/widget/section/cta.jsx b/apps/builddao/widget/section/cta.jsx index 63c03111..4665c7c6 100644 --- a/apps/builddao/widget/section/cta.jsx +++ b/apps/builddao/widget/section/cta.jsx @@ -1,3 +1,11 @@ +const { checkIsMemberOrPending } = VM.require( + "buildhub.near/widget/core.lib.common" +); + +checkIsMemberOrPending || (checkIsMemberOrPending = () => {}); + +const isMemberOrPending = checkIsMemberOrPending(context.accountId); + const logoLink = "https://ipfs.near.social/ipfs/bafkreihbwho3qfvnu4yss3eh5jrx6uxhrlzdgtdjyzyjrpa6odro6wdxya"; const gridLink = @@ -133,7 +141,7 @@ return (

Together, we can build a better future.

- Join Now + {!isMemberOrPending && Join Now}
diff --git a/apps/builddao/widget/section/join.jsx b/apps/builddao/widget/section/join.jsx index 6e3d8b54..dbf97c64 100644 --- a/apps/builddao/widget/section/join.jsx +++ b/apps/builddao/widget/section/join.jsx @@ -1,3 +1,11 @@ +const { checkIsMemberOrPending } = VM.require( + "buildhub.near/widget/core.lib.common" +); + +checkIsMemberOrPending || (checkIsMemberOrPending = () => {}); + +const isMemberOrPending = checkIsMemberOrPending(context.accountId); + const SectionPill = ({ title, icon }) => { const Pill = styled.div` display: flex; @@ -356,7 +364,7 @@ return (
3. Fulfill contribution requirements

- Join Now + {!isMemberOrPending && Join Now}