diff --git a/apps/web/.eslintrc.js b/apps/web/.eslintrc.js index 92e08a265..d86a8a457 100644 --- a/apps/web/.eslintrc.js +++ b/apps/web/.eslintrc.js @@ -76,26 +76,14 @@ module.exports = { ], "prefer-const": "off", "@typescript-eslint/consistent-type-definitions": "off", - curly: ["error", "multi-line"], "no-unused-expressions": "error", "no-unsafe-optional-chaining": "error", - "comma-dangle": ["error", "always-multiline"], - semi: ["error", "always"], - "brace-style": ["error"], - "@typescript-eslint/indent": ["error", 2], - "@typescript-eslint/quotes": ["error", "double"], "import/extensions": "off", - "no-multiple-empty-lines": ["error", { max: 1 }], - "no-trailing-spaces": "error", - "no-multi-spaces": "error", + "@typescript-eslint/quotes": ["error", "double"], "@typescript-eslint/no-use-before-define": "off", "jsx-a11y/no-static-element-interactions": "off", - "no-irregular-whitespace": "error", - "object-property-newline": [ - "error", - { allowAllPropertiesOnSameLine: true }, - ], - "semi-spacing": "error", "react/no-array-index-key": "warn", + indent: "off", + "@typescript-eslint/indent": "off", }, }; diff --git a/apps/web/actions/getProposals.ts b/apps/web/actions/getProposals.ts index 5a90a5d61..bcd54f0d5 100644 --- a/apps/web/actions/getProposals.ts +++ b/apps/web/actions/getProposals.ts @@ -45,17 +45,19 @@ export async function getProposals( const transformProposals = async function (_strategy: LightCVStrategy) { const proposalsData = await fetchIPFSDataBatch(_strategy.proposals); - const transformedProposals = proposalsData.map((data, index) => { - const p = _strategy.proposals[index]; - return { - ...p, - voterStakedPointsPct: 0, - stakedAmount: _strategy.proposals[index].stakedAmount, - title: data.title, - type: _strategy.config?.proposalType as number, - status: _strategy.proposals[index].proposalStatus, - }; - }).sort((a, b) => +a.proposalNumber - +b.proposalNumber); // Sort by proposal number ascending + const transformedProposals = proposalsData + .map((data, index) => { + const p = _strategy.proposals[index]; + return { + ...p, + voterStakedPointsPct: 0, + stakedAmount: _strategy.proposals[index].stakedAmount, + title: data.title, + type: _strategy.config?.proposalType as number, + status: _strategy.proposals[index].proposalStatus, + }; + }) + .sort((a, b) => +a.proposalNumber - +b.proposalNumber); // Sort by proposal number ascending return transformedProposals; }; diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx index f4664cdef..cb0ed915d 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx @@ -244,14 +244,14 @@ export default function Page({ Proposal passed and executed successfully - : ( - )} + } ); diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/create-proposal/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/create-proposal/page.tsx index a537f9dc8..879f866f4 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/create-proposal/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/create-proposal/page.tsx @@ -45,8 +45,8 @@ export default function Page({ const tokenGarden = data.tokenGarden; const maxRatioDivPrecision = - (Number(strategyObj.config?.maxRatio) / CV_SCALE_PRECISION) * - MAX_RATIO_CONSTANT; + (Number(strategyObj.config?.maxRatio) / CV_SCALE_PRECISION) * + MAX_RATIO_CONSTANT; const spendingLimitPct = maxRatioDivPrecision * 100; const poolAmountSpendingLimit = poolAmount * maxRatioDivPrecision; @@ -60,7 +60,7 @@ export default function Page({

- Create a Proposal in Pool + Create a Proposal in Pool

{metadata.title}

diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/page.tsx index 8d24091d0..d5e85473e 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/page.tsx @@ -66,7 +66,7 @@ export default function Page({ }, [error]); const [ipfsResult, setIpfsResult] = - useState>>(); + useState>>(); const metadata = data?.cvstrategies?.[0]?.metadata; @@ -93,7 +93,11 @@ export default function Page({ useEffect(() => { const newProposalId = searchParams[QUERY_PARAMS.poolPage.newPropsoal]; - if (newProposalId && data && !strategyObj?.proposals.some(c => c.proposalNumber === newProposalId)) { + if ( + newProposalId && + data && + !strategyObj?.proposals.some((c) => c.proposalNumber === newProposalId) + ) { refetch(); } }, [searchParams, strategyObj?.proposals]); @@ -121,7 +125,7 @@ export default function Page({ const isEnabled = data.cvstrategies?.[0]?.isEnabled as boolean; const spendingLimitPct = - (Number(strategyObj?.config?.maxRatio || 0) / CV_SCALE_PRECISION) * 100; + (Number(strategyObj?.config?.maxRatio || 0) / CV_SCALE_PRECISION) * 100; return (
@@ -135,18 +139,12 @@ export default function Page({

{ipfsResult.description}

- } - > + }> {poolTypes[proposalType] === "funding" && ( - } - > + }> } /> - } - /> + } />
- {!isEnabled ? ( + {!isEnabled ?
Waiting for council approval
- ) : ( - pool image - )} + }
{isEnabled && ( diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/create-pool/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/create-pool/page.tsx index acef00e4e..f8bfced16 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/create-pool/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/create-pool/page.tsx @@ -24,25 +24,23 @@ export default function Page({ let alloAddr = result?.allos[0]?.id as Address; let communityName = result?.registryCommunity?.communityName as string; - return result ? ( -
-
-
-

- Create a Pool in {communityName} community -

-
- -
-
- ) : ( -
- -
- ); + return result ? +
+
+
+

+ Create a Pool in {communityName} community +

+
+ +
+
+ :
+ +
; } diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index 51f487721..3c6018884 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -100,23 +100,23 @@ export default function Page({ } = result?.registryCommunity ?? {}; const communityStakedTokens = - members?.reduce( - (acc: bigint, member) => acc + BigInt(member?.stakedTokens), - 0n, - ) ?? 0; + members?.reduce( + (acc: bigint, member) => acc + BigInt(member?.stakedTokens), + 0n, + ) ?? 0; strategies = strategies ?? []; const signalingPools = strategies.filter( (strategy) => poolTypes[strategy.config?.proposalType] === "signaling" && - strategy.isEnabled, + strategy.isEnabled, ); const fundingPools = strategies.filter( (strategy) => poolTypes[strategy.config?.proposalType] === "funding" && - strategy.isEnabled, + strategy.isEnabled, ); const activePools = strategies?.filter((strategy) => strategy?.isEnabled); @@ -172,8 +172,8 @@ export default function Page({ } else { return ( BigInt(registerStakeAmount) + - BigInt(registerStakeAmount) / - (BigInt(SCALE_PRECISION) / BigInt(communityFee)) + BigInt(registerStakeAmount) / + (BigInt(SCALE_PRECISION) / BigInt(communityFee)) ); } } else { @@ -199,24 +199,15 @@ export default function Page({
- + } count={activePools.length ?? 0} /> - } - > + }> @@ -228,10 +219,7 @@ export default function Page({ data-tip={`Registration amount: ${parseToken(registrationAmount)} ${tokenGarden.symbol}\nCommunity fee: ${parseToken(parsedCommunityFee())} ${tokenGarden.symbol}`} > } > - Create Pool + Create Pool

- Funding pools ({fundingPools.length}) + Funding pools ({fundingPools.length})

{fundingPools.map((pool) => ( @@ -299,7 +287,7 @@ export default function Page({

- Signaling pools ({signalingPools.length}) + Signaling pools ({signalingPools.length})

{signalingPools.map((pool) => ( @@ -315,7 +303,7 @@ export default function Page({

- Pools in Review ({poolsInReview.length}) + Pools in Review ({poolsInReview.length})

{poolsInReview.map((pool) => ( @@ -332,15 +320,11 @@ export default function Page({

Covenant

- {covenantIpfsHash ? ( - covenant ? ( + {covenantIpfsHash ? + covenant ?

{covenant}

- ) : ( - - ) - ) : ( -

No covenant was submitted.

- )} + : + :

No covenant was submitted.

}
- {!isProd && tokenGarden && ( - - )} + {!isProd && tokenGarden && }
); } diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/page.tsx index cbe899f86..b024331eb 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/page.tsx @@ -61,7 +61,8 @@ export default function Page({ result?.tokenGarden?.communities?.filter((com) => com.isValid) ?? []; useEffect(() => { - const newCommunityId = searchParams[QUERY_PARAMS.gardenPage.newCommunity]?.toLowerCase(); + const newCommunityId = + searchParams[QUERY_PARAMS.gardenPage.newCommunity]?.toLowerCase(); if ( newCommunityId && @@ -109,19 +110,15 @@ export default function Page({
-

{tokenGarden?.name}

{" "} - +

{tokenGarden?.name}

- Discover communities in the - - {" "} - {tokenGarden?.name} Garden - - , where you connect with people and support - proposals bounded by a shared + Discover communities in the + {tokenGarden?.name} Garden, + where you connect with people and support proposals bounded by a + shared covenant.

@@ -131,10 +128,7 @@ export default function Page({ icon={} count={communities?.length ?? 0} /> - +
@@ -143,7 +137,7 @@ export default function Page({

- Create your own community + Create your own community

@@ -157,7 +151,7 @@ export default function Page({ tooltip={tooltipMessage} icon={} > - Create a community + Create a community
- {!isProd && tokenGarden && ( - - )} + {!isProd && tokenGarden && }
); } diff --git a/apps/web/app/(app)/gardens/page.tsx b/apps/web/app/(app)/gardens/page.tsx index e84c3ba02..39e0e24ef 100644 --- a/apps/web/app/(app)/gardens/page.tsx +++ b/apps/web/app/(app)/gardens/page.tsx @@ -58,9 +58,7 @@ export default function Page() { ); } return ( -

- No Gardens -

+

No Gardens

); }, [fetching, tokenGardens?.length]); @@ -74,10 +72,10 @@ export default function Page() {

- Explore and Join Gardens Ecosystems + Explore and Join Gardens Ecosystems

- A place where you help shape digital economies + A place where you help shape digital economies

diff --git a/apps/web/app/api/ably-auth/route.ts b/apps/web/app/api/ably-auth/route.ts index 8e2a48663..6d3c087c7 100644 --- a/apps/web/app/api/ably-auth/route.ts +++ b/apps/web/app/api/ably-auth/route.ts @@ -1,3 +1,5 @@ +// api/ably-auth + import Ably from "ably"; import { NextResponse } from "next/server"; import { HTTP_CODES } from "../utils"; @@ -19,15 +21,10 @@ export async function POST() { try { const tokenRequestData = { capability: JSON.stringify({ - [CHANGE_EVENT_CHANNEL_NAME]: [ - "publish", - "subscribe", - "presence", - ], + [CHANGE_EVENT_CHANNEL_NAME]: ["publish", "subscribe", "presence"], }), }; - const tokenDetails = - await ably.auth.createTokenRequest(tokenRequestData); + const tokenDetails = await ably.auth.createTokenRequest(tokenRequestData); return NextResponse.json(tokenDetails); } catch (error) { console.error(error); diff --git a/apps/web/app/api/ipfs/route.ts b/apps/web/app/api/ipfs/route.ts index 07e485879..f9b6f3b8b 100644 --- a/apps/web/app/api/ipfs/route.ts +++ b/apps/web/app/api/ipfs/route.ts @@ -1,3 +1,5 @@ +// api/ipfs + import { Readable } from "stream"; import pinataSDK from "@pinata/sdk"; import { NextRequest, NextResponse } from "next/server"; diff --git a/apps/web/app/api/passport-oracle/addStrategy/route.ts b/apps/web/app/api/passport-oracle/addStrategy/route.ts index 4098b80d6..43e6db456 100644 --- a/apps/web/app/api/passport-oracle/addStrategy/route.ts +++ b/apps/web/app/api/passport-oracle/addStrategy/route.ts @@ -1,4 +1,4 @@ -// pages/api/addStrategy.ts +// api/add-strategy import { NextResponse } from "next/server"; import { @@ -7,59 +7,34 @@ import { createWalletClient, custom, Address, - Chain, } from "viem"; import { privateKeyToAccount } from "viem/accounts"; -import { localhost, arbitrumSepolia, sepolia, arbitrum } from "viem/chains"; import { getConfigByChain } from "@/constants/contracts"; import { passportScorerABI, registryCommunityABI, cvStrategyABI, } from "@/src/generated"; +import { getViemChain } from "@/utils/viem"; const LIST_MANAGER_PRIVATE_KEY = process.env.LIST_MANAGER_PRIVATE_KEY; -const CHAIN = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; +const CHAIN_ID = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; const LOCAL_RPC = "http://127.0.0.1:8545"; -const RPC_URL = getConfigByChain(CHAIN)?.rpcUrl ?? LOCAL_RPC; +const RPC_URL = getConfigByChain(CHAIN_ID)?.rpcUrl ?? LOCAL_RPC; -const PASSPORT_SCORER_ADDRESS = getConfigByChain(CHAIN) +const PASSPORT_SCORER_ADDRESS = getConfigByChain(CHAIN_ID) ?.passportScorer as Address; -function getViemChain(chain: number): Chain { - let viemChain: Chain; - - switch (chain) { - case localhost.id: - viemChain = localhost; - break; - case arbitrumSepolia.id: - viemChain = arbitrumSepolia; - break; - case sepolia.id: - viemChain = sepolia; - break; - case arbitrum.id: - viemChain = arbitrum; - break; - default: - viemChain = localhost; - break; - } - - return viemChain; -} - const client = createPublicClient({ - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: http(RPC_URL), }); const walletClient = createWalletClient({ account: privateKeyToAccount(`${LIST_MANAGER_PRIVATE_KEY}` as Address), - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: custom(client.transport), }); diff --git a/apps/web/app/api/passport-oracle/dailyJob/route.ts b/apps/web/app/api/passport-oracle/dailyJob/route.ts index 91f19022c..41a81b98e 100644 --- a/apps/web/app/api/passport-oracle/dailyJob/route.ts +++ b/apps/web/app/api/passport-oracle/dailyJob/route.ts @@ -1,4 +1,4 @@ -// pages/api/passport-oracles/daily-job +// api/passport-oracles/daily-job import { NextResponse } from "next/server"; import { gql } from "urql"; @@ -8,21 +8,20 @@ import { createWalletClient, custom, Address, - Chain, } from "viem"; import { privateKeyToAccount } from "viem/accounts"; -import { localhost, arbitrumSepolia, sepolia } from "viem/chains"; import { getConfigByChain } from "@/constants/contracts"; import { initUrqlClient } from "@/providers/urql"; import { passportScorerABI } from "@/src/generated"; import { CV_PERCENTAGE_SCALE } from "@/utils/numbers"; +import { getViemChain } from "@/utils/viem"; const LIST_MANAGER_PRIVATE_KEY = process.env.LIST_MANAGER_PRIVATE_KEY ?? ""; -const CHAIN = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; +const CHAIN_ID = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; const LOCAL_RPC = "http://127.0.0.1:8545"; -const RPC_URL = getConfigByChain(CHAIN)?.rpcUrl ?? LOCAL_RPC; -const CONTRACT_ADDRESS = getConfigByChain(CHAIN)?.passportScorer as Address; -const SUBGRAPH = getConfigByChain(CHAIN)?.subgraphUrl as string; +const RPC_URL = getConfigByChain(CHAIN_ID)?.rpcUrl ?? LOCAL_RPC; +const CONTRACT_ADDRESS = getConfigByChain(CHAIN_ID)?.passportScorer as Address; +const SUBGRAPH = getConfigByChain(CHAIN_ID)?.subgraphUrl as string; const API_ENDPOINT = "/api/passport/scores"; interface PassportUser { @@ -43,32 +42,18 @@ interface ApiScore { stamp_scores: Record; } -function getViemChain(chain: number): Chain { - - switch (chain) { - case localhost.id: - return localhost; - case arbitrumSepolia.id: - return arbitrumSepolia; - case sepolia.id: - return sepolia; - default: - return localhost; - } -} - const client = createPublicClient({ - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: http(RPC_URL), }); const walletClient = createWalletClient({ account: privateKeyToAccount(LIST_MANAGER_PRIVATE_KEY as Address), - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: custom(client.transport), }); -const { urqlClient } = initUrqlClient({ chainId: CHAIN }); +const { urqlClient } = initUrqlClient({ chainId: CHAIN_ID }); const query = gql` query { diff --git a/apps/web/app/api/passport-oracle/writeScore/route.ts b/apps/web/app/api/passport-oracle/writeScore/route.ts index a2ab26eb1..e5a8bb880 100644 --- a/apps/web/app/api/passport-oracle/writeScore/route.ts +++ b/apps/web/app/api/passport-oracle/writeScore/route.ts @@ -1,4 +1,4 @@ -// pages/api/addUserScore.ts +// api/passport-oracle/write-score import { NextResponse } from "next/server"; import { @@ -7,52 +7,26 @@ import { createWalletClient, custom, Address, - Chain, } from "viem"; import { privateKeyToAccount } from "viem/accounts"; -import { arbitrum, localhost, arbitrumSepolia, sepolia } from "viem/chains"; import { getConfigByChain } from "@/constants/contracts"; import { passportScorerABI } from "@/src/generated"; import { CV_PERCENTAGE_SCALE } from "@/utils/numbers"; +import { getViemChain } from "@/utils/viem"; const LIST_MANAGER_PRIVATE_KEY = process.env.LIST_MANAGER_PRIVATE_KEY; -const CHAIN = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; +const CHAIN_ID = process.env.CHAIN_ID ? parseInt(process.env.CHAIN_ID) : 1337; const LOCAL_RPC = "http://127.0.0.1:8545"; -const RPC_URL = getConfigByChain(CHAIN)?.rpcUrl ?? LOCAL_RPC; +const RPC_URL = getConfigByChain(CHAIN_ID)?.rpcUrl ?? LOCAL_RPC; -const CONTRACT_ADDRESS = getConfigByChain(CHAIN)?.passportScorer as Address; +const CONTRACT_ADDRESS = getConfigByChain(CHAIN_ID)?.passportScorer as Address; const API_ENDPOINT = "/api/passport"; -function getViemChain(chain: number): Chain { - let viemChain: Chain; - - switch (chain) { - case localhost.id: - viemChain = localhost; - break; - case arbitrumSepolia.id: - viemChain = arbitrumSepolia; - break; - case sepolia.id: - viemChain = sepolia; - break; - case arbitrum.id: - viemChain = arbitrum; - break; - - default: - viemChain = localhost; - break; - } - - return viemChain; -} - const client = createPublicClient({ - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: http(RPC_URL), }); @@ -60,7 +34,7 @@ const walletClient = createWalletClient({ account: privateKeyToAccount( (`${LIST_MANAGER_PRIVATE_KEY}` as Address) || "", ), - chain: getViemChain(CHAIN), + chain: getViemChain(CHAIN_ID), transport: custom(client.transport), }); diff --git a/apps/web/app/api/passport/[account]/route.ts b/apps/web/app/api/passport/[account]/route.ts index ad2f7cceb..268d43ce3 100644 --- a/apps/web/app/api/passport/[account]/route.ts +++ b/apps/web/app/api/passport/[account]/route.ts @@ -1,4 +1,5 @@ -// app/api/passport/[account]/route.ts +// api/passport/[account] + import { NextResponse } from "next/server"; interface Params { diff --git a/apps/web/app/api/passport/scores/route.ts b/apps/web/app/api/passport/scores/route.ts index 40c89bae4..b04c96dda 100644 --- a/apps/web/app/api/passport/scores/route.ts +++ b/apps/web/app/api/passport/scores/route.ts @@ -1,4 +1,5 @@ -// app/api/passport/scores/route.ts +// api/passport/scores + import { NextResponse } from "next/server"; export async function GET() { diff --git a/apps/web/app/api/passport/signMessage/route.ts b/apps/web/app/api/passport/signMessage/route.ts index d8fb01121..f83d3b830 100644 --- a/apps/web/app/api/passport/signMessage/route.ts +++ b/apps/web/app/api/passport/signMessage/route.ts @@ -1,4 +1,4 @@ -// app/api/passport/sign-message/route.ts +// api/passport/sign-message import { NextResponse } from "next/server"; diff --git a/apps/web/app/api/passport/submitPassport/route.ts b/apps/web/app/api/passport/submitPassport/route.ts index a59bc39b4..a1394f851 100644 --- a/apps/web/app/api/passport/submitPassport/route.ts +++ b/apps/web/app/api/passport/submitPassport/route.ts @@ -1,4 +1,5 @@ -// app/api/passport/submit-passport/route.ts +// api/passport/submit-passport + import { NextResponse } from "next/server"; interface PassportData { diff --git a/apps/web/assets/TxError.svg b/apps/web/assets/TxError.svg new file mode 100644 index 000000000..b2e2f5272 --- /dev/null +++ b/apps/web/assets/TxError.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/assets/TxInProgress.svg b/apps/web/assets/TxInProgress.svg new file mode 100644 index 000000000..04b08b256 --- /dev/null +++ b/apps/web/assets/TxInProgress.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/assets/TxPreparing.svg b/apps/web/assets/TxPreparing.svg new file mode 100644 index 000000000..b602e52ed --- /dev/null +++ b/apps/web/assets/TxPreparing.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/assets/TxSuccess.svg b/apps/web/assets/TxSuccess.svg new file mode 100644 index 000000000..886f54bbb --- /dev/null +++ b/apps/web/assets/TxSuccess.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/assets/TxWaitingForSig.svg b/apps/web/assets/TxWaitingForSig.svg new file mode 100644 index 000000000..ea7ffd9df --- /dev/null +++ b/apps/web/assets/TxWaitingForSig.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/assets/index.ts b/apps/web/assets/index.ts index 15f9065ec..a5578282b 100644 --- a/apps/web/assets/index.ts +++ b/apps/web/assets/index.ts @@ -20,3 +20,8 @@ export { default as tree2 } from "./TreeTwo.svg"; export { default as walletIcon } from "./WalletIcon.svg"; export { default as flowers } from "./yellow-blue-flowers.svg"; export { default as GardensLogo } from "./GardensLogo"; +export { default as TxWaitingForSig } from "./TxWaitingForSig.svg"; +export { default as TxSuccess } from "./TxSuccess.svg"; +export { default as TxError } from "./TxError.svg"; +export { default as TxPreparing } from "./TxPreparing.svg"; +export { default as TxInProgress } from "./TxInProgress.svg"; diff --git a/apps/web/components/ActivatePoints.tsx b/apps/web/components/ActivatePoints.tsx index 392bc5ec9..0f30550b0 100644 --- a/apps/web/components/ActivatePoints.tsx +++ b/apps/web/components/ActivatePoints.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useEffect } from "react"; +import React from "react"; import { useConnectModal } from "@rainbow-me/rainbowkit"; import { Address, useAccount } from "wagmi"; import { Button } from "./Button"; @@ -8,7 +8,6 @@ import { usePubSubContext } from "@/contexts/pubsub.context"; import { useChainIdFromPath } from "@/hooks/useChainIdFromPath"; import { useContractWriteWithConfirmations } from "@/hooks/useContractWriteWithConfirmations"; import { ConditionObject, useDisableButtons } from "@/hooks/useDisableButtons"; -import { useTransactionNotification } from "@/hooks/useTransactionNotification"; import { cvStrategyABI } from "@/src/generated"; import { abiWithErrors } from "@/utils/abiWithErrors"; import { useErrorDetails } from "@/utils/getErrorName"; @@ -31,48 +30,44 @@ export function ActivatePoints({ const chainId = useChainIdFromPath(); const { publish } = usePubSubContext(); - const { - transactionData: activatePointsTxData, - write: writeActivatePoints, - error: errorActivatePoints, - status: activatePointsStatus, - } = useContractWriteWithConfirmations({ - chainId, - address: strategyAddress, - abi: abiWithErrors(cvStrategyABI), - functionName: "activatePoints", - onConfirmations: () => { - publish({ - topic: "member", - id: connectedAccount, - type: "update", - function: "activatePoints", - containerId: communityAddress, - chainId, - }); - }, - }); + const { write: writeActivatePoints, error: errorActivatePoints } = + useContractWriteWithConfirmations({ + chainId, + address: strategyAddress, + contractName: "CV Strategy", + abi: abiWithErrors(cvStrategyABI), + functionName: "activatePoints", + fallbackErrorMessage: "Error activating points. Please try again.", + onConfirmations: () => { + publish({ + topic: "member", + id: connectedAccount, + type: "update", + function: "activatePoints", + containerId: communityAddress, + chainId, + }); + }, + }); - const { - transactionData: deactivatePointsTxData, - write: writeDeactivatePoints, - error: errorDeactivatePoints, - status: deactivatePointsStatus, - } = useContractWriteWithConfirmations({ - address: strategyAddress, - abi: abiWithErrors(cvStrategyABI), - functionName: "deactivatePoints", - onConfirmations: () => { - publish({ - topic: "member", - id: connectedAccount, - containerId: communityAddress, - type: "update", - function: "deactivatePoints", - chainId, - }); - }, - }); + const { write: writeDeactivatePoints, error: errorDeactivatePoints } = + useContractWriteWithConfirmations({ + address: strategyAddress, + abi: abiWithErrors(cvStrategyABI), + contractName: "CV Strategy", + functionName: "deactivatePoints", + fallbackErrorMessage: "Error deactivating points. Please try again.", + onConfirmations: () => { + publish({ + topic: "member", + id: connectedAccount, + containerId: communityAddress, + type: "update", + function: "deactivatePoints", + chainId, + }); + }, + }); useErrorDetails(errorActivatePoints, "activatePoints"); useErrorDetails(errorDeactivatePoints, "deactivatePoints"); @@ -89,20 +84,6 @@ export function ActivatePoints({ } } - const { updateTransactionStatus: updateActivePointsStatus } = - useTransactionNotification(activatePointsTxData); - - const { updateTransactionStatus: updateDeactivePointsStatus } = - useTransactionNotification(deactivatePointsTxData); - - useEffect(() => { - updateActivePointsStatus(activatePointsStatus); - }, [activatePointsStatus]); - - useEffect(() => { - updateDeactivePointsStatus(deactivatePointsStatus); - }, [deactivatePointsStatus]); - // Activate Disable Button condition => message mapping const disableActiveBtnCondition: ConditionObject[] = [ { diff --git a/apps/web/components/Badge.tsx b/apps/web/components/Badge.tsx index 6338ca56b..3c97d8f8f 100644 --- a/apps/web/components/Badge.tsx +++ b/apps/web/components/Badge.tsx @@ -46,15 +46,15 @@ export function Badge({ // Determine the appropriate styles based on whether it's a proposal status badge or a pool type badge const styles = isStatusBadge ? `${PROPOSAL_STATUS_STYLES[status] ?? "bg-secondary-soft"}` - : ispoolTypeDefined ? - `${POOL_TYPE_STYLES[type] ?? "bg-tertiary-soft text-tertiary-content"}` - : "bg-tertiary-soft text-tertiary-content"; + : ispoolTypeDefined ? + `${POOL_TYPE_STYLES[type] ?? "bg-tertiary-soft text-tertiary-content"}` + : "bg-tertiary-soft text-tertiary-content"; // Determine the label content const content = isStatusBadge ? proposalStatus[status] - : ispoolTypeDefined ? poolTypes[type] ?? label - : label; + : ispoolTypeDefined ? poolTypes[type] ?? label + : label; //For type => conditionally set the icon based on type === poolTypes[type] const iconIncluded = diff --git a/apps/web/components/Breadcrumbs.tsx b/apps/web/components/Breadcrumbs.tsx index e2184ec16..fda199a4b 100644 --- a/apps/web/components/Breadcrumbs.tsx +++ b/apps/web/components/Breadcrumbs.tsx @@ -74,7 +74,7 @@ export function Breadcrumbs() { {label} - : diff --git a/apps/web/components/Button.tsx b/apps/web/components/Button.tsx index e538585ce..856ee0594 100644 --- a/apps/web/components/Button.tsx +++ b/apps/web/components/Button.tsx @@ -5,10 +5,10 @@ import { Size } from "@/types"; type ButtonProps = { type?: - | "button" - | "submit" - | "reset" - | React.ButtonHTMLAttributes["type"]; + | "button" + | "submit" + | "reset" + | React.ButtonHTMLAttributes["type"]; btnStyle?: BtnStyle; color?: Color; onClick?: React.DOMAttributes["onClick"]; @@ -89,8 +89,8 @@ export function Button({ ); return disabled ? -
- {buttonElement} -
+
+ {buttonElement} +
: buttonElement; } diff --git a/apps/web/components/Charts/ChartWrapper.tsx b/apps/web/components/Charts/ChartWrapper.tsx index 61d966370..c92c13521 100644 --- a/apps/web/components/Charts/ChartWrapper.tsx +++ b/apps/web/components/Charts/ChartWrapper.tsx @@ -54,7 +54,7 @@ export const ChartWrapper = ({
- :
} + :
}

{item.name}

@@ -72,7 +72,7 @@ export const ChartWrapper = ({ {growing ? - : }{" "} + : }{" "}

diff --git a/apps/web/components/Charts/ConvictionBarChart.tsx b/apps/web/components/Charts/ConvictionBarChart.tsx index a200fc7d5..bbd941915 100644 --- a/apps/web/components/Charts/ConvictionBarChart.tsx +++ b/apps/web/components/Charts/ConvictionBarChart.tsx @@ -163,7 +163,7 @@ export const ConvictionBarChart = ({ message: proposalSupportPct == 0 ? "Proposal waiting for support" - : "Scenario not found", + : "Scenario not found", growing: null, }; @@ -191,7 +191,7 @@ export const ConvictionBarChart = ({ const markLineTh: MarkLineComponentOption = isSignalingType || compact ? {} - : { + : { ...markLine, data: [ { @@ -268,8 +268,8 @@ export const ConvictionBarChart = ({ }, z: supportGtConv ? 1 - : convEqSupport ? 1 - : 2, + : convEqSupport ? 1 + : 2, barWidth: 23, data: [proposalSupportPct], }, @@ -294,7 +294,7 @@ export const ConvictionBarChart = ({ }, isSignalingType ? {} - : { + : { type: "bar", name: "Threshold", barWidth: 23, @@ -319,7 +319,7 @@ export const ConvictionBarChart = ({ option={option} style={{ height: "100%", width: "100%" }} /> - : + {`${name} - {"Chain

@@ -110,7 +115,7 @@ export function ConnectWallet() {

{chain.name} - : + : Network mismatch } @@ -149,7 +154,7 @@ export function ConnectWallet() { {" "} {!tokenUrlAddress ? "Unknow garden" - : Number(token?.formatted).toFixed(0)}{" "} + : Number(token?.formatted).toFixed(0)}{" "} {token?.symbol === "ETH" ? "" : token?.symbol}
@@ -160,15 +165,15 @@ export function ConnectWallet() { {chain.id !== urlChainId && urlChainId && !isNaN(urlChainId) && ( - - )} + + )} } + : }
); diff --git a/apps/web/components/Forms/FormInput.tsx b/apps/web/components/Forms/FormInput.tsx index e5f4590ed..a0de8c599 100644 --- a/apps/web/components/Forms/FormInput.tsx +++ b/apps/web/components/Forms/FormInput.tsx @@ -70,7 +70,7 @@ export function FormInput({ })} {...otherProps} /> - :