From afb3e4c7335d87ba530ce962a492e9e223632c7b Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Wed, 22 Nov 2023 11:09:03 +0100 Subject: [PATCH 01/32] Fix snapshot/shutter bugs, fix loading state when navigating between dao --- app/daos/[daoAddress]/layout.tsx | 6 +++--- .../Proposals/ProposalActions/ProposalAction.tsx | 2 +- src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts | 8 ++------ src/hooks/DAO/loaders/snapshot/useSnapshotProposals.ts | 1 + src/hooks/DAO/loaders/useFractalNode.ts | 3 ++- src/hooks/DAO/useDAOController.ts | 5 ++++- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index c93d6198a2..edc8a86031 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -74,7 +74,7 @@ export default function DaoPageLayout({ params: { daoAddress?: string }; }) { const { node } = useFractal(); - const loading = useDAOController({ daoAddress }); + const { nodeLoading, reloadingDAO } = useDAOController({ daoAddress }); const { chain } = useNetwork(); const validSafe = node.safe; @@ -84,7 +84,7 @@ export default function DaoPageLayout({ display = children; } else if (!chain) { // if we're disconnected - if (loading || validSafe) { + if (nodeLoading || reloadingDAO || validSafe) { display = children; } else { display = ; @@ -94,7 +94,7 @@ export default function DaoPageLayout({ const invalidChain = !supportedChains.map(c => c.chainId).includes(chain.id); if (invalidChain) { display = ; - } else if (loading || validSafe) { + } else if (nodeLoading || reloadingDAO || validSafe) { display = children; } else { display = ; diff --git a/src/components/Proposals/ProposalActions/ProposalAction.tsx b/src/components/Proposals/ProposalActions/ProposalAction.tsx index bad0ed455a..c28c14db14 100644 --- a/src/components/Proposals/ProposalActions/ProposalAction.tsx +++ b/src/components/Proposals/ProposalActions/ProposalAction.tsx @@ -71,7 +71,7 @@ export function ProposalAction({ ); const showActionButton = - (isSnapshotProposal && canVote) || + (isSnapshotProposal && canVote && isActiveProposal) || (user.votingWeight.gt(0) && (isActiveProposal || proposal.state === FractalProposalState.EXECUTABLE || diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index e162641749..793dfab355 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -27,11 +27,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u [snapshotProposal] ); - const getVoteWeight = useCallback( - (vote: SnapshotVote) => - vote.votingWeight * vote.votingWeightByStrategy.reduce((prev, curr) => prev + curr, 0), - [] - ); + const getVoteWeight = useCallback((vote: SnapshotVote) => vote.votingWeight, []); const loadProposal = useCallback(async () => { if (snapshotProposal?.snapshotProposalId) { @@ -78,7 +74,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u const votesQueryResult = await client .query({ query: gql`query SnapshotProposalVotes { - votes(where: {proposal: "${snapshotProposal.snapshotProposalId}"}) { + votes(where: {proposal: "${snapshotProposal.snapshotProposalId}"}, first: 100) { id voter vp diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposals.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposals.ts index a8c76f888f..4d660805d9 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposals.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposals.ts @@ -19,6 +19,7 @@ export const useSnapshotProposals = () => { query: gql` query Proposals { proposals( + first: 50, where: { space_in: ["${daoSnapshotURL}"] }, diff --git a/src/hooks/DAO/loaders/useFractalNode.ts b/src/hooks/DAO/loaders/useFractalNode.ts index d02a446136..b9383cca7d 100644 --- a/src/hooks/DAO/loaders/useFractalNode.ts +++ b/src/hooks/DAO/loaders/useFractalNode.ts @@ -123,9 +123,10 @@ export const useFractalNode = ({ daoAddress }: { daoAddress?: string }) => { const chainId = chain ? chain.id : disconnectedChain.id; useEffect(() => { if (daoAddress && chainId + daoAddress !== currentValidSafe.current) { + setNodeLoading(true); setDAO(chainId, daoAddress); } - }, [daoAddress, setDAO, action, currentValidSafe, chainId]); + }, [daoAddress, setDAO, currentValidSafe, chainId]); return nodeLoading; }; diff --git a/src/hooks/DAO/useDAOController.ts b/src/hooks/DAO/useDAOController.ts index e24feddacf..a91af59f21 100644 --- a/src/hooks/DAO/useDAOController.ts +++ b/src/hooks/DAO/useDAOController.ts @@ -13,6 +13,7 @@ import { useGovernanceContracts } from './loaders/useGovernanceContracts'; export default function useDAOController({ daoAddress }: { daoAddress?: string }) { const [currentDAOAddress, setCurrentDAOAddress] = useState(); + const [reloadingDAO, setReloadingDAO] = useState(false); const { node: { nodeHierarchy: { parentAddress }, @@ -21,8 +22,10 @@ export default function useDAOController({ daoAddress }: { daoAddress?: string } } = useFractal(); useEffect(() => { if (daoAddress && currentDAOAddress !== daoAddress) { + setReloadingDAO(true); action.resetDAO().then(() => { setCurrentDAOAddress(daoAddress); + setReloadingDAO(false); }); } }, [daoAddress, currentDAOAddress, action]); @@ -35,5 +38,5 @@ export default function useDAOController({ daoAddress }: { daoAddress?: string } useFractalTreasury(); useERC20Claim(); useSnapshotProposals(); - return nodeLoading; + return { nodeLoading, reloadingDAO }; } From 8e0aa2e1367872d9a7aa2931a85f4fbb29a06949 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Wed, 22 Nov 2023 11:16:33 +0100 Subject: [PATCH 02/32] Remove getVoteWeight from useSnapshotProposal --- .../SnapshotProposalVoteItem.tsx | 4 +--- .../hooks/useTotalVotes.ts | 6 ++---- .../DAO/loaders/snapshot/useSnapshotProposal.ts | 17 +++++++---------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx index 95df867cbf..17560334ec 100644 --- a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx +++ b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx @@ -1,6 +1,5 @@ import { Grid, GridItem, Text, Flex } from '@chakra-ui/react'; import { useTranslation } from 'react-i18next'; -import useSnapshotProposal from '../../../hooks/DAO/loaders/snapshot/useSnapshotProposal'; import useDisplayName from '../../../hooks/utils/useDisplayName'; import { useFractal } from '../../../providers/App/AppProvider'; import { @@ -17,7 +16,6 @@ interface ISnapshotProposalVoteItem { export default function SnapshotProposalVoteItem({ proposal, vote }: ISnapshotProposalVoteItem) { const { t } = useTranslation(); - const { getVoteWeight } = useSnapshotProposal(proposal); const { displayName } = useDisplayName(vote.voter); const { readOnly: { user }, @@ -62,7 +60,7 @@ export default function SnapshotProposalVoteItem({ proposal, vote }: ISnapshotPr - {getVoteWeight(vote)} {proposal.strategies[0].params.symbol} + {vote.votingWeight} {proposal.strategies[0].params.symbol} diff --git a/src/components/Proposals/SnapshotProposalDetails/hooks/useTotalVotes.ts b/src/components/Proposals/SnapshotProposalDetails/hooks/useTotalVotes.ts index f38fb85737..fcdf62d885 100644 --- a/src/components/Proposals/SnapshotProposalDetails/hooks/useTotalVotes.ts +++ b/src/components/Proposals/SnapshotProposalDetails/hooks/useTotalVotes.ts @@ -1,18 +1,16 @@ import { useState, useEffect } from 'react'; -import useSnapshotProposal from '../../../../hooks/DAO/loaders/snapshot/useSnapshotProposal'; import { ExtendedSnapshotProposal } from '../../../../types'; export default function useTotalVotes({ proposal }: { proposal?: ExtendedSnapshotProposal }) { const [totalVotesCasted, setTotalVotesCasted] = useState(0); - const { getVoteWeight } = useSnapshotProposal(proposal); useEffect(() => { if (proposal) { let newTotalVotesCasted = 0; - proposal.votes.forEach(vote => (newTotalVotesCasted += getVoteWeight(vote))); + proposal.votes.forEach(vote => (newTotalVotesCasted += vote.votingWeight)); setTotalVotesCasted(newTotalVotesCasted); } - }, [proposal, totalVotesCasted, getVoteWeight]); + }, [proposal, totalVotesCasted]); return { totalVotesCasted }; } diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index 793dfab355..e6e0f15e7c 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -27,8 +27,6 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u [snapshotProposal] ); - const getVoteWeight = useCallback((vote: SnapshotVote) => vote.votingWeight, []); - const loadProposal = useCallback(async () => { if (snapshotProposal?.snapshotProposalId) { const proposalQueryResult = await client @@ -135,12 +133,12 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u const existingChoiceType = votesBreakdown[voteChoice]; if (existingChoiceType) { votesBreakdown[voteChoice] = { - total: existingChoiceType.total + getVoteWeight(vote), + total: existingChoiceType.total + vote.votingWeight, votes: [...existingChoiceType.votes, vote], }; } else { votesBreakdown[voteChoice] = { - total: getVoteWeight(vote), + total: vote.votingWeight, votes: [vote], }; } @@ -152,12 +150,12 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u const existingChoiceType = votesBreakdown[voteChoice]; if (existingChoiceType) { votesBreakdown[voteChoice] = { - total: existingChoiceType.total + getVoteWeight(vote), + total: existingChoiceType.total + vote.votingWeight, votes: [...existingChoiceType.votes, vote], }; } else { votesBreakdown[voteChoice] = { - total: getVoteWeight(vote), + total: vote.votingWeight, votes: [vote], }; } @@ -170,12 +168,12 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u if (existingChoiceType) { votesBreakdown[choiceKey] = { - total: existingChoiceType.total + getVoteWeight(vote), + total: existingChoiceType.total + vote.votingWeight, votes: [...existingChoiceType.votes, vote], }; } else { votesBreakdown[choiceKey] = { - total: getVoteWeight(vote), + total: vote.votingWeight, votes: [vote], }; } @@ -190,7 +188,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u votes: votesQueryResult, } as ExtendedSnapshotProposal); } - }, [snapshotProposal?.snapshotProposalId, proposal, snapshotProposal?.state, getVoteWeight]); + }, [snapshotProposal?.snapshotProposalId, proposal, snapshotProposal?.state]); const loadVotingWeight = useCallback(async () => { if (snapshotProposal?.snapshotProposalId) { @@ -230,7 +228,6 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u return { loadVotingWeight, loadProposal, - getVoteWeight, snapshotProposal, isSnapshotProposal, extendedSnapshotProposal, From 73a6304639e53a77c5fd04e62e3f065d7a4b47e6 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 14:25:30 +0100 Subject: [PATCH 03/32] Implement DAO metadata - showing banner, meta links, logo in DAO dashboard header and additional sections --- app/daos/[daoAddress]/page.tsx | 16 ++- .../pages/DaoDashboard/Info/InfoHeader.tsx | 77 +++++++++++ .../pages/DaoDashboard/Info/index.tsx | 130 +++++++++++++----- src/components/ui/containers/InfoBox.tsx | 22 +-- .../loaders/snapshot/useSnapshotProposal.ts | 7 + src/hooks/DAO/useDAOMetadata.ts | 20 +++ src/i18n/locales/en/common.json | 3 +- src/metadata/lizzardsDAO/assets/logo.png | Bin 0 -> 15426 bytes .../assets/meta-section-background-1.png | Bin 0 -> 179765 bytes src/metadata/lizzardsDAO/index.ts | 40 ++++++ src/types/daoGeneral.ts | 15 ++ 11 files changed, 283 insertions(+), 47 deletions(-) create mode 100644 src/components/pages/DaoDashboard/Info/InfoHeader.tsx create mode 100644 src/hooks/DAO/useDAOMetadata.ts create mode 100644 src/metadata/lizzardsDAO/assets/logo.png create mode 100644 src/metadata/lizzardsDAO/assets/meta-section-background-1.png create mode 100644 src/metadata/lizzardsDAO/index.ts diff --git a/app/daos/[daoAddress]/page.tsx b/app/daos/[daoAddress]/page.tsx index e69d2ede08..f5d3f92fc1 100644 --- a/app/daos/[daoAddress]/page.tsx +++ b/app/daos/[daoAddress]/page.tsx @@ -3,14 +3,20 @@ import { Activities } from '../../../src/components/pages/DaoDashboard/Activities'; import { ERCO20Claim } from '../../../src/components/pages/DaoDashboard/ERC20Claim'; import { Info } from '../../../src/components/pages/DaoDashboard/Info'; +import InfoHeader from '../../../src/components/pages/DaoDashboard/Info/InfoHeader'; import ClientOnly from '../../../src/components/ui/utils/ClientOnly'; +import useDAOMetadata from '../../../src/hooks/DAO/useDAOMetadata'; export default function DaoDashboardPage() { + const daoMetadata = useDAOMetadata(); return ( - - - - - + <> + + + + + + + ); } diff --git a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx new file mode 100644 index 0000000000..bc07385be9 --- /dev/null +++ b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx @@ -0,0 +1,77 @@ +import { Box, Flex, Image, Menu, MenuButton, MenuList, Text } from '@chakra-ui/react'; +import { FractalBrandBurger } from '@decent-org/fractal-ui'; +import { useTranslation } from 'react-i18next'; +import useDAOMetadata from '../../../../hooks/DAO/useDAOMetadata'; +import { useFractal } from '../../../../providers/App/AppProvider'; +import ExternalLink from '../../../ui/links/ExternalLink'; + +export default function InfoHeader() { + const { + node: { daoName }, + } = useFractal(); + const daoMetadata = useDAOMetadata(); + const { t } = useTranslation(); + + if (!daoMetadata) { + return null; + } + + return ( + + {`${daoName} + + + + + {/* TODO: Replace with regular burger icon once added to @decent-org/fractal-ui */} + + + {daoName} + + + + + + {t('goTo')} + + {daoMetadata.links.map(link => ( + + {link.title} + + ))} + + + + + ); +} diff --git a/src/components/pages/DaoDashboard/Info/index.tsx b/src/components/pages/DaoDashboard/Info/index.tsx index 0ba3aca9f9..2a61717590 100644 --- a/src/components/pages/DaoDashboard/Info/index.tsx +++ b/src/components/pages/DaoDashboard/Info/index.tsx @@ -1,7 +1,8 @@ 'use client'; -import { Box, Flex } from '@chakra-ui/react'; +import { Box, Flex, Text } from '@chakra-ui/react'; import { DAO_ROUTES } from '../../../../constants/routes'; +import useDAOMetadata from '../../../../hooks/DAO/useDAOMetadata'; import { useFractal } from '../../../../providers/App/AppProvider'; import { InfoBox } from '../../../ui/containers/InfoBox'; import { InfoDAO } from './InfoDAO'; @@ -14,6 +15,7 @@ export function Info() { const { node: { daoAddress }, } = useFractal(); + const daoMetadata = useDAOMetadata(); // using this gap method instead of 'gap' to make width percentages more precise, since they // can now add up to 100%, as well as prevent variable gap space as you widen the screen @@ -40,37 +42,101 @@ export function Info() { - - - - - - - - - - - - - - - + {daoMetadata ? ( + <> + + + + + + + + + + + + + + + {daoMetadata.sections.map((section, index) => ( + + {section.background && ( + + )} + {section.title} + {section.content} + + ))} + + + ) : ( + <> + + + + + + + + + + + + + + + + + )} ); diff --git a/src/components/ui/containers/InfoBox.tsx b/src/components/ui/containers/InfoBox.tsx index 4f270cfaf7..e965e73080 100644 --- a/src/components/ui/containers/InfoBox.tsx +++ b/src/components/ui/containers/InfoBox.tsx @@ -1,21 +1,25 @@ -import { Box } from '@chakra-ui/react'; +import { Box, BoxProps } from '@chakra-ui/react'; import { useRouter } from 'next/navigation'; import { ReactNode } from 'react'; import { BACKGROUND_SEMI_TRANSPARENT } from '../../../constants/common'; +type InfoBoxProps = { + minHeight?: string; + minWidth?: { [key: string]: string } | string; + m?: string | number; + to?: string; + background?: string; + children: ReactNode; +} & BoxProps; + export function InfoBox({ minWidth = '100%', minHeight = '10.6rem', children, to, + background, ...rest -}: { - minHeight?: string; - minWidth?: { [key: string]: string } | string; - m?: string | number; - to?: string; - children: ReactNode; -}) { +}: InfoBoxProps) { const { push } = useRouter(); return ( { + if (!vp) { + return { + votingWeight: 0, + votingWeightByStrategy: [0], + votingState: 'final', + }; + } return { votingWeight: vp.vp, votingWeightByStrategy: vp.vp_by_strategy, diff --git a/src/hooks/DAO/useDAOMetadata.ts b/src/hooks/DAO/useDAOMetadata.ts new file mode 100644 index 0000000000..93f39597a5 --- /dev/null +++ b/src/hooks/DAO/useDAOMetadata.ts @@ -0,0 +1,20 @@ +import { useMemo } from 'react'; +import lizzardsDAOMetadata from '../../metadata/lizzardsDAO'; +import { useFractal } from '../../providers/App/AppProvider'; + +export default function useDAOMetadata() { + const { + node: { daoAddress }, + } = useFractal(); + + const daoMetadata = useMemo(() => { + switch (daoAddress) { + case lizzardsDAOMetadata.address: + return lizzardsDAOMetadata; + default: + return undefined; + } + }, [daoAddress]); + + return daoMetadata; +} diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index a4bd181c69..d59cf73c70 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -101,5 +101,6 @@ "invalidChain": "Your currently connected chain is not supported.", "showMore": "Show More", "showLess": "Show Less", - "poweredBy": "Powered by" + "poweredBy": "Powered by", + "goTo": "Go to" } \ No newline at end of file diff --git a/src/metadata/lizzardsDAO/assets/logo.png b/src/metadata/lizzardsDAO/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ee25aa100664b3407b1864f5612f3b2614a7ab3c GIT binary patch literal 15426 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�a>XjKN^K;+t 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 Date: Thu, 30 Nov 2023 14:59:15 +0100 Subject: [PATCH 04/32] Set body background based on DAO metadata --- app/daos/[daoAddress]/page.tsx | 30 +++++++++++++++++-- .../pages/DaoDashboard/Info/InfoHeader.tsx | 7 ++++- src/hooks/DAO/useDAOMetadata.ts | 19 ++++++------ src/metadata/lizzardsDAO/index.ts | 1 + src/types/daoGeneral.ts | 1 + 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/app/daos/[daoAddress]/page.tsx b/app/daos/[daoAddress]/page.tsx index f5d3f92fc1..3099d524d5 100644 --- a/app/daos/[daoAddress]/page.tsx +++ b/app/daos/[daoAddress]/page.tsx @@ -1,5 +1,8 @@ 'use client'; +import { ChakraProvider, extendTheme } from '@chakra-ui/react'; +import { theme } from '@decent-org/fractal-ui'; +import { useMemo } from 'react'; import { Activities } from '../../../src/components/pages/DaoDashboard/Activities'; import { ERCO20Claim } from '../../../src/components/pages/DaoDashboard/ERC20Claim'; import { Info } from '../../../src/components/pages/DaoDashboard/Info'; @@ -9,14 +12,37 @@ import useDAOMetadata from '../../../src/hooks/DAO/useDAOMetadata'; export default function DaoDashboardPage() { const daoMetadata = useDAOMetadata(); + const activeTheme = useMemo(() => { + if (daoMetadata && daoMetadata.bodyBackground) { + return extendTheme({ + ...theme, + styles: { + ...theme.styles, + global: { + ...theme.styles.global, + html: { + ...theme.styles.global.html, + background: daoMetadata.bodyBackground, + }, + body: { + ...theme.styles.global.body, + background: daoMetadata.bodyBackground, + }, + }, + }, + }); + } + return theme; + }, [daoMetadata]); + return ( - <> + - + ); } diff --git a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx index bc07385be9..99f607bb93 100644 --- a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx +++ b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx @@ -66,7 +66,12 @@ export default function InfoHeader() { {daoMetadata.links.map(link => ( - {link.title} + + {link.title} + ))} diff --git a/src/hooks/DAO/useDAOMetadata.ts b/src/hooks/DAO/useDAOMetadata.ts index 93f39597a5..4effcd69c8 100644 --- a/src/hooks/DAO/useDAOMetadata.ts +++ b/src/hooks/DAO/useDAOMetadata.ts @@ -3,18 +3,19 @@ import lizzardsDAOMetadata from '../../metadata/lizzardsDAO'; import { useFractal } from '../../providers/App/AppProvider'; export default function useDAOMetadata() { - const { - node: { daoAddress }, - } = useFractal(); + const storeState = useFractal(); const daoMetadata = useMemo(() => { - switch (daoAddress) { - case lizzardsDAOMetadata.address: - return lizzardsDAOMetadata; - default: - return undefined; + if (storeState && storeState.node && storeState.node.daoAddress) { + switch (storeState.node.daoAddress) { + case lizzardsDAOMetadata.address: + return lizzardsDAOMetadata; + default: + return undefined; + } } - }, [daoAddress]); + return undefined; + }, [storeState]); return daoMetadata; } diff --git a/src/metadata/lizzardsDAO/index.ts b/src/metadata/lizzardsDAO/index.ts index c8babd543e..9e6694aa13 100644 --- a/src/metadata/lizzardsDAO/index.ts +++ b/src/metadata/lizzardsDAO/index.ts @@ -7,6 +7,7 @@ const LIZZARDS_DAO_METADATA: DAOMetadata = { logo: logo.src, headerBackground: 'linear-gradient(269deg, rgba(110, 97, 240, 0.35) 3.2%, rgba(74, 163, 183, 0.35) 51.2%, rgba(101, 211, 138, 0.35) 98.2%), #000', + bodyBackground: 'linear-gradient(180deg, #2A2F33 0%, #101212 100%)', links: [ { title: 'Eth Lizards White Paper', diff --git a/src/types/daoGeneral.ts b/src/types/daoGeneral.ts index 22241b79f1..154b63e6b3 100644 --- a/src/types/daoGeneral.ts +++ b/src/types/daoGeneral.ts @@ -12,6 +12,7 @@ export type DAOMetadata = { address: string; logo: string; headerBackground: string; + bodyBackground?: string; links: { title: string; url: string; From 7b2d9ee3c2339fc181283e6dfecb183688aad806 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 15:25:46 +0100 Subject: [PATCH 05/32] Fix showing section image on DAO dasbhoard metadata --- app/daos/[daoAddress]/page.tsx | 3 ++- src/components/pages/DaoDashboard/Info/InfoHeader.tsx | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/daos/[daoAddress]/page.tsx b/app/daos/[daoAddress]/page.tsx index 3099d524d5..c773fbdb03 100644 --- a/app/daos/[daoAddress]/page.tsx +++ b/app/daos/[daoAddress]/page.tsx @@ -26,6 +26,7 @@ export default function DaoDashboardPage() { }, body: { ...theme.styles.global.body, + zIndex: '-1', background: daoMetadata.bodyBackground, }, }, @@ -38,7 +39,7 @@ export default function DaoDashboardPage() { return ( - + diff --git a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx index 99f607bb93..2912373a5a 100644 --- a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx +++ b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx @@ -21,9 +21,9 @@ export default function InfoHeader() { bg={daoMetadata.headerBackground} justifyContent="center" alignItems="center" - marginLeft="-3rem" - marginRight="-3rem" - width="calc(100% + 6rem)" + position="absolute" + left="4.25rem" + width="calc(100vw - 4.25rem)" paddingTop={2} paddingBottom={2} flexDirection="column" From 9c94a576416b1e8e1a3b66e3797496e82fcb11bd Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 15:47:10 +0100 Subject: [PATCH 06/32] Move nexted ChakraProvider to the DAO pages layout so that theme styling applied to all DAO pages --- app/daos/[daoAddress]/layout.tsx | 32 +++++++++++++++++++++++++++++--- app/daos/[daoAddress]/page.tsx | 30 ++---------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index c93d6198a2..2e150dd045 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -1,12 +1,14 @@ 'use client'; -import { Button, Center, Text, VStack } from '@chakra-ui/react'; -import { ReactNode } from 'react'; +import { Button, Center, Text, VStack, ChakraProvider, extendTheme } from '@chakra-ui/react'; +import { theme } from '@decent-org/fractal-ui'; +import { ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useNetwork } from 'wagmi'; import ClientOnly from '../../../src/components/ui/utils/ClientOnly'; import { APP_NAME } from '../../../src/constants/common'; import useDAOController from '../../../src/hooks/DAO/useDAOController'; +import useDAOMetadata from '../../../src/hooks/DAO/useDAOMetadata'; import { useFractal } from '../../../src/providers/App/AppProvider'; import { disconnectedChain, @@ -75,7 +77,31 @@ export default function DaoPageLayout({ }) { const { node } = useFractal(); const loading = useDAOController({ daoAddress }); + const daoMetadata = useDAOMetadata(); const { chain } = useNetwork(); + const activeTheme = useMemo(() => { + if (daoMetadata && daoMetadata.bodyBackground) { + return extendTheme({ + ...theme, + styles: { + ...theme.styles, + global: { + ...theme.styles.global, + html: { + ...theme.styles.global.html, + background: daoMetadata.bodyBackground, + }, + body: { + ...theme.styles.global.body, + zIndex: '-1', + background: daoMetadata.bodyBackground, + }, + }, + }, + }); + } + return theme; + }, [daoMetadata]); const validSafe = node.safe; let display; @@ -95,7 +121,7 @@ export default function DaoPageLayout({ if (invalidChain) { display = ; } else if (loading || validSafe) { - display = children; + display = {children}; } else { display = ; } diff --git a/app/daos/[daoAddress]/page.tsx b/app/daos/[daoAddress]/page.tsx index c773fbdb03..e1054d30d3 100644 --- a/app/daos/[daoAddress]/page.tsx +++ b/app/daos/[daoAddress]/page.tsx @@ -1,8 +1,5 @@ 'use client'; -import { ChakraProvider, extendTheme } from '@chakra-ui/react'; -import { theme } from '@decent-org/fractal-ui'; -import { useMemo } from 'react'; import { Activities } from '../../../src/components/pages/DaoDashboard/Activities'; import { ERCO20Claim } from '../../../src/components/pages/DaoDashboard/ERC20Claim'; import { Info } from '../../../src/components/pages/DaoDashboard/Info'; @@ -12,38 +9,15 @@ import useDAOMetadata from '../../../src/hooks/DAO/useDAOMetadata'; export default function DaoDashboardPage() { const daoMetadata = useDAOMetadata(); - const activeTheme = useMemo(() => { - if (daoMetadata && daoMetadata.bodyBackground) { - return extendTheme({ - ...theme, - styles: { - ...theme.styles, - global: { - ...theme.styles.global, - html: { - ...theme.styles.global.html, - background: daoMetadata.bodyBackground, - }, - body: { - ...theme.styles.global.body, - zIndex: '-1', - background: daoMetadata.bodyBackground, - }, - }, - }, - }); - } - return theme; - }, [daoMetadata]); return ( - + <> - + ); } From fb9f24cea21a8b80ca157cc70df5088dfb728059 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 15:48:45 +0100 Subject: [PATCH 07/32] Reset body style to rely on html style for custom dao theme --- app/daos/[daoAddress]/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index 2e150dd045..6af144ce81 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -94,7 +94,7 @@ export default function DaoPageLayout({ body: { ...theme.styles.global.body, zIndex: '-1', - background: daoMetadata.bodyBackground, + background: 'none', }, }, }, From 3ce2ae0883615e9dc2a5800c81e8fe1e33163d76 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 15:50:00 +0100 Subject: [PATCH 08/32] Remove zIndex in custom DAO theme --- app/daos/[daoAddress]/layout.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index 6af144ce81..3cb11c7afe 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -93,7 +93,6 @@ export default function DaoPageLayout({ }, body: { ...theme.styles.global.body, - zIndex: '-1', background: 'none', }, }, From 6fed53fd98e7e6b21b1ae8a0221aa694701baa95 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 30 Nov 2023 16:29:19 +0100 Subject: [PATCH 09/32] Replace FractalBrandBurger with usual Burger in InfoHeader --- package-lock.json | 14 +++++++------- package.json | 2 +- .../pages/DaoDashboard/Info/InfoHeader.tsx | 7 +++---- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a14a7b9e0..2ba5789efd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@apollo/client": "^3.7.10", "@chakra-ui/next-js": "^2.0.1", "@chakra-ui/react": "^2.5.2", - "@decent-org/fractal-ui": "^0.1.21", + "@decent-org/fractal-ui": "^0.1.22", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@ethersproject/abstract-signer": "^5.7.0", @@ -3498,9 +3498,9 @@ } }, "node_modules/@decent-org/fractal-ui": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/@decent-org/fractal-ui/-/fractal-ui-0.1.21.tgz", - "integrity": "sha512-F9OvB1VqyPREqocwDEfM0UasBVF5qdw4tsbaM6mHNQZDyXhWXfWF6i9bxO/wlo9GLfd9vbF9TDaAb0dLwURiLw==", + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@decent-org/fractal-ui/-/fractal-ui-0.1.22.tgz", + "integrity": "sha512-17exPAa4jXljrsXatDpB3fJC0l4XGo1nj3dxoS2H13ruJhPnOsQhH/ooDPXXUnmEC7YvFOp0gq4XNiLOMoOvDA==", "peerDependencies": { "@chakra-ui/react": "^2.3.4", "react": "^16 || ^17 || ^18", @@ -28017,9 +28017,9 @@ } }, "@decent-org/fractal-ui": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/@decent-org/fractal-ui/-/fractal-ui-0.1.21.tgz", - "integrity": "sha512-F9OvB1VqyPREqocwDEfM0UasBVF5qdw4tsbaM6mHNQZDyXhWXfWF6i9bxO/wlo9GLfd9vbF9TDaAb0dLwURiLw==", + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@decent-org/fractal-ui/-/fractal-ui-0.1.22.tgz", + "integrity": "sha512-17exPAa4jXljrsXatDpB3fJC0l4XGo1nj3dxoS2H13ruJhPnOsQhH/ooDPXXUnmEC7YvFOp0gq4XNiLOMoOvDA==", "requires": {} }, "@emotion/babel-plugin": { diff --git a/package.json b/package.json index 25cccdad98..f6b4783d2b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@apollo/client": "^3.7.10", "@chakra-ui/next-js": "^2.0.1", "@chakra-ui/react": "^2.5.2", - "@decent-org/fractal-ui": "^0.1.21", + "@decent-org/fractal-ui": "^0.1.22", "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@ethersproject/abstract-signer": "^5.7.0", diff --git a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx index 2912373a5a..eaf42ffe69 100644 --- a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx +++ b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx @@ -1,5 +1,5 @@ import { Box, Flex, Image, Menu, MenuButton, MenuList, Text } from '@chakra-ui/react'; -import { FractalBrandBurger } from '@decent-org/fractal-ui'; +import { Burger } from '@decent-org/fractal-ui'; import { useTranslation } from 'react-i18next'; import useDAOMetadata from '../../../../hooks/DAO/useDAOMetadata'; import { useFractal } from '../../../../providers/App/AppProvider'; @@ -37,9 +37,8 @@ export default function InfoHeader() { - - {/* TODO: Replace with regular burger icon once added to @decent-org/fractal-ui */} - + + Date: Fri, 1 Dec 2023 20:08:04 +0100 Subject: [PATCH 10/32] Fix custom DAO theme when wallet is not connected --- app/daos/[daoAddress]/layout.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index 3cb11c7afe..d85ffe4ab7 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -104,13 +104,14 @@ export default function DaoPageLayout({ const validSafe = node.safe; let display; + const childrenDisplay = {children}; if (process.env.NEXT_PUBLIC_TESTING_ENVIRONMENT) { - display = children; + display = childrenDisplay; } else if (!chain) { // if we're disconnected if (loading || validSafe) { - display = children; + display = childrenDisplay; } else { display = ; } @@ -120,7 +121,7 @@ export default function DaoPageLayout({ if (invalidChain) { display = ; } else if (loading || validSafe) { - display = {children}; + display = childrenDisplay; } else { display = ; } From 87902e6ed01263a4da3da1312d9d366a4bd52c4a Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Tue, 5 Dec 2023 15:34:41 +0100 Subject: [PATCH 11/32] Fix DAO metadata paddings in the Menu and metadata sections, add links to metadata sections --- .../pages/DaoDashboard/Info/InfoHeader.tsx | 33 ++++++++++++------- .../pages/DaoDashboard/Info/index.tsx | 19 +++++++++-- src/metadata/lizzardsDAO/index.ts | 15 +++++++-- src/types/daoGeneral.ts | 5 +++ 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx index eaf42ffe69..5efbe40fb4 100644 --- a/src/components/pages/DaoDashboard/Info/InfoHeader.tsx +++ b/src/components/pages/DaoDashboard/Info/InfoHeader.tsx @@ -1,5 +1,5 @@ import { Box, Flex, Image, Menu, MenuButton, MenuList, Text } from '@chakra-ui/react'; -import { Burger } from '@decent-org/fractal-ui'; +import { ArrowAngleUp, Burger } from '@decent-org/fractal-ui'; import { useTranslation } from 'react-i18next'; import useDAOMetadata from '../../../../hooks/DAO/useDAOMetadata'; import { useFractal } from '../../../../providers/App/AppProvider'; @@ -53,7 +53,7 @@ export default function InfoHeader() { mr={['auto', '1rem']} bg="grayscale.black" border="none" - padding="1rem" + padding="1rem 1.5rem" zIndex={1000} > {t('goTo')} - {daoMetadata.links.map(link => ( - - - {link.title} - - - ))} + + {daoMetadata.links.map(link => ( + + + {link.title}{' '} + + + + ))} + diff --git a/src/components/pages/DaoDashboard/Info/index.tsx b/src/components/pages/DaoDashboard/Info/index.tsx index 2a61717590..790cded3b2 100644 --- a/src/components/pages/DaoDashboard/Info/index.tsx +++ b/src/components/pages/DaoDashboard/Info/index.tsx @@ -5,6 +5,7 @@ import { DAO_ROUTES } from '../../../../constants/routes'; import useDAOMetadata from '../../../../hooks/DAO/useDAOMetadata'; import { useFractal } from '../../../../providers/App/AppProvider'; import { InfoBox } from '../../../ui/containers/InfoBox'; +import ExternalLink from '../../../ui/links/ExternalLink'; import { InfoDAO } from './InfoDAO'; import { InfoGovernance } from './InfoGovernance'; import { InfoProposals } from './InfoProposals'; @@ -79,6 +80,7 @@ export function Info() { position="relative" minWidth="auto" width="50%" + p="1.5rem" key={index} > {section.background && ( @@ -96,8 +98,21 @@ export function Info() { backgroundPosition="50%" /> )} - {section.title} - {section.content} + + {section.title} + + + {section.link && section.link.position === 'start' && ( + {section.link.text} + )} + {section.content} + {section.link && section.link.position === 'end' && ( + {section.link.text} + )} + ))} diff --git a/src/metadata/lizzardsDAO/index.ts b/src/metadata/lizzardsDAO/index.ts index 9e6694aa13..6241d36109 100644 --- a/src/metadata/lizzardsDAO/index.ts +++ b/src/metadata/lizzardsDAO/index.ts @@ -25,15 +25,24 @@ const LIZZARDS_DAO_METADATA: DAOMetadata = { sections: [ { title: 'Description', - content: - 'Vote here for this proposal or just click on the link to learn more about the proposal', + content: ' for this proposal or just click on the link to learn more about the proposal', background: undefined, + link: { + position: 'start', + text: 'Vote here', + url: '/proposals/0xe10c44fceb1b43f74c42bd6efc9316e9ce14109ac8a166e5266fc78499cb4fea', + }, }, { title: 'Elemental Lizards coming soon', content: - 'Designed by gamers for Web3 Gamers, Guild Leaders, and Content Creators. The Elemental Lizards provide battle passes for all Ethlizards gaming experiences, customizable avatars, and exclusive community access for the Community Sub-DAO. Learn more ', + 'Designed by gamers for Web3 Gamers, Guild Leaders, and Content Creators. The Elemental Lizards provide battle passes for all Ethlizards gaming experiences, customizable avatars, and exclusive community access for the Community Sub-DAO. ', background: metaSectionBackground1.src, + link: { + position: 'end', + text: 'Learn more', + url: 'https://ethlizards.io/#lizards', + }, }, ], }; diff --git a/src/types/daoGeneral.ts b/src/types/daoGeneral.ts index 154b63e6b3..e0ea2b0577 100644 --- a/src/types/daoGeneral.ts +++ b/src/types/daoGeneral.ts @@ -21,6 +21,11 @@ export type DAOMetadata = { title: string; content: string; background?: string; + link?: { + url: string; + text: string; + position: 'start' | 'end'; + }; }[]; }; From 66be84876bbf9af02fca8e13da3b693141f5ad1e Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Fri, 15 Dec 2023 12:47:52 +0100 Subject: [PATCH 12/32] Fix proposal creation error toast while actual proposal creation was successful, change Snapshot link from rendering button to rendering , change proposal Details link from rendering button to rendering --- .../ProposalActions/ProposalAction.tsx | 50 ++++++++----------- src/components/Proposals/ProposalInfo.tsx | 10 ++-- src/components/ui/badges/Snapshot.tsx | 19 +++---- .../loaders/snapshot/useSnapshotProposal.ts | 16 ++++-- src/hooks/DAO/proposal/useCastVote.ts | 3 +- src/hooks/DAO/proposal/useSubmitProposal.ts | 15 ++++-- src/hooks/utils/useAsyncRetry.ts | 3 +- 7 files changed, 59 insertions(+), 57 deletions(-) diff --git a/src/components/Proposals/ProposalActions/ProposalAction.tsx b/src/components/Proposals/ProposalActions/ProposalAction.tsx index bad0ed455a..60cb224a18 100644 --- a/src/components/Proposals/ProposalActions/ProposalAction.tsx +++ b/src/components/Proposals/ProposalActions/ProposalAction.tsx @@ -1,17 +1,12 @@ import { Button, Flex, Text } from '@chakra-ui/react'; -import { useRouter } from 'next/navigation'; +import Link from 'next/link'; import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { BACKGROUND_SEMI_TRANSPARENT } from '../../../constants/common'; import { DAO_ROUTES } from '../../../constants/routes'; import useSnapshotProposal from '../../../hooks/DAO/loaders/snapshot/useSnapshotProposal'; import { useFractal } from '../../../providers/App/AppProvider'; -import { - ExtendedSnapshotProposal, - FractalProposal, - FractalProposalState, - SnapshotProposal, -} from '../../../types'; +import { ExtendedSnapshotProposal, FractalProposal, FractalProposalState } from '../../../types'; import ContentBox from '../../ui/containers/ContentBox'; import { ProposalCountdown } from '../../ui/proposal/ProposalCountdown'; import { useVoteContext } from '../ProposalVotes/context/VoteContext'; @@ -60,7 +55,6 @@ export function ProposalAction({ node: { daoAddress }, readOnly: { user, dao }, } = useFractal(); - const { push } = useRouter(); const { t } = useTranslation(); const { isSnapshotProposal } = useSnapshotProposal(proposal); const { canVote } = useVoteContext(); @@ -78,16 +72,6 @@ export function ProposalAction({ proposal.state === FractalProposalState.TIMELOCKABLE || proposal.state === FractalProposalState.TIMELOCKED)); - const handleClick = () => { - if (isSnapshotProposal) { - push( - DAO_ROUTES.proposal.relative(daoAddress, (proposal as SnapshotProposal).snapshotProposalId) - ); - } else { - push(DAO_ROUTES.proposal.relative(daoAddress, proposal.proposalId)); - } - }; - const labelKey = useMemo(() => { switch (proposal.state) { case FractalProposalState.ACTIVE: @@ -119,12 +103,17 @@ export function ProposalAction({ if (!showActionButton) { if (!expandedView) { return ( - + + ); } // This means that Proposal in state where there's no action to perform @@ -155,11 +144,16 @@ export function ProposalAction({ } return ( - + + ); } diff --git a/src/components/Proposals/ProposalInfo.tsx b/src/components/Proposals/ProposalInfo.tsx index 123481654a..e0b8ab4cd8 100644 --- a/src/components/Proposals/ProposalInfo.tsx +++ b/src/components/Proposals/ProposalInfo.tsx @@ -1,4 +1,4 @@ -import { Box, Flex, Text, Image, Button } from '@chakra-ui/react'; +import { Box, Flex, Text, Image, Button, Link } from '@chakra-ui/react'; import { Shield } from '@decent-org/fractal-ui'; import { useTranslation } from 'react-i18next'; import useSnapshotProposal from '../../hooks/DAO/loaders/snapshot/useSnapshotProposal'; @@ -41,14 +41,12 @@ export function ProposalInfo({ /> {(proposal as ExtendedSnapshotProposal).privacy === 'shutter' && ( ); diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index e162641749..de70cd7397 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -1,5 +1,6 @@ import { gql } from '@apollo/client'; import { useCallback, useMemo, useState } from 'react'; +import { logError } from '../../../../helpers/errorLogging'; import { useFractal } from '../../../../providers/App/AppProvider'; import { ExtendedSnapshotProposal, @@ -197,6 +198,11 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u }, [snapshotProposal?.snapshotProposalId, proposal, snapshotProposal?.state, getVoteWeight]); const loadVotingWeight = useCallback(async () => { + const emptyVotingWeight = { + votingWeight: 0, + votingWeightByStrategy: [0], + votingState: '', + }; if (snapshotProposal?.snapshotProposalId) { const queryResult = await client .query({ @@ -214,6 +220,10 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u }`, }) .then(({ data: { vp } }) => { + if (!vp) { + logError('Error while retrieving Snapshot voting weight', vp); + return emptyVotingWeight; + } return { votingWeight: vp.vp, votingWeightByStrategy: vp.vp_by_strategy, @@ -224,11 +234,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u return queryResult; } - return { - votingWeight: 0, - votingWeightByStrategy: [0], - votingState: '', - }; + return emptyVotingWeight; }, [address, daoSnapshotURL, snapshotProposal?.snapshotProposalId]); return { diff --git a/src/hooks/DAO/proposal/useCastVote.ts b/src/hooks/DAO/proposal/useCastVote.ts index ff5498b382..d077a7e714 100644 --- a/src/hooks/DAO/proposal/useCastVote.ts +++ b/src/hooks/DAO/proposal/useCastVote.ts @@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; import { useSigner } from 'wagmi'; import { useVoteContext } from '../../../components/Proposals/ProposalVotes/context/VoteContext'; +import { logError } from '../../../helpers/errorLogging'; import { useFractal } from '../../../providers/App/AppProvider'; import { AzoriusGovernance, @@ -167,7 +168,7 @@ const useCastVote = ({ } catch (e) { toast.dismiss(toastId); toast.error('failedCastVote'); - console.error('Error while casting Snapshot vote', e); + logError('Error while casting Snapshot vote', e); } } }, diff --git a/src/hooks/DAO/proposal/useSubmitProposal.ts b/src/hooks/DAO/proposal/useSubmitProposal.ts index 9dc80667ec..21b36939a2 100644 --- a/src/hooks/DAO/proposal/useSubmitProposal.ts +++ b/src/hooks/DAO/proposal/useSubmitProposal.ts @@ -295,6 +295,7 @@ export default function useSubmitProposal() { }); setPendingCreateTx(true); + let success = false; try { const transactions = proposalData.targets.map((target, index) => ({ to: target, @@ -316,12 +317,12 @@ export default function useSubmitProposal() { }) ) ).wait(); - await loadDAOProposals(); + success = true; + toast.dismiss(toastId); + toast(successToastMessage); if (successCallback) { successCallback(safeAddress!); } - toast.dismiss(toastId); - toast(successToastMessage); } catch (e) { toast.dismiss(toastId); toast(failedToastMessage); @@ -329,6 +330,14 @@ export default function useSubmitProposal() { } finally { setPendingCreateTx(false); } + + if (success) { + // Frequently there's an error in loadDAOProposals if we're loading the proposal immediately after proposal creation + // The error occurs because block of proposal creation not yet mined and trying to fetch underlying data of voting weight for new proposal fails with that error + // The code that throws an error: https://github.com/decent-dao/fractal-contracts/blob/develop/contracts/azorius/LinearERC20Voting.sol#L205-L211 + // So to avoid showing error toast - we're marking proposal creation as success and only then re-fetching proposals + await loadDAOProposals(); + } }, [loadDAOProposals] ); diff --git a/src/hooks/utils/useAsyncRetry.ts b/src/hooks/utils/useAsyncRetry.ts index dc8f629169..2781cbffdd 100644 --- a/src/hooks/utils/useAsyncRetry.ts +++ b/src/hooks/utils/useAsyncRetry.ts @@ -1,4 +1,5 @@ import { useCallback } from 'react'; +import { logError } from '../../helpers/errorLogging'; function sleep(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); @@ -23,7 +24,7 @@ export function useAsyncRetry() { return result; } } catch (error) { - console.error('Error in requestWithRetries:', error); + logError('Error in requestWithRetries:', error); } currentRetries += 1; From 16ae3a3558d4c79c6750eb692d7f95e2f7ad341d Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Fri, 15 Dec 2023 12:48:55 +0100 Subject: [PATCH 13/32] Set loadDAOProposals loading via timeout instead of immediatelly calling that --- src/hooks/DAO/proposal/useSubmitProposal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/DAO/proposal/useSubmitProposal.ts b/src/hooks/DAO/proposal/useSubmitProposal.ts index 21b36939a2..7185f3835e 100644 --- a/src/hooks/DAO/proposal/useSubmitProposal.ts +++ b/src/hooks/DAO/proposal/useSubmitProposal.ts @@ -336,7 +336,7 @@ export default function useSubmitProposal() { // The error occurs because block of proposal creation not yet mined and trying to fetch underlying data of voting weight for new proposal fails with that error // The code that throws an error: https://github.com/decent-dao/fractal-contracts/blob/develop/contracts/azorius/LinearERC20Voting.sol#L205-L211 // So to avoid showing error toast - we're marking proposal creation as success and only then re-fetching proposals - await loadDAOProposals(); + setTimeout(loadDAOProposals, 5000); } }, [loadDAOProposals] From b2b91b07b4d92886ca4c2785b515b3aca716301d Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Fri, 15 Dec 2023 12:54:52 +0100 Subject: [PATCH 14/32] Increase timeout --- src/hooks/DAO/proposal/useSubmitProposal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/DAO/proposal/useSubmitProposal.ts b/src/hooks/DAO/proposal/useSubmitProposal.ts index 7185f3835e..eb98e3d868 100644 --- a/src/hooks/DAO/proposal/useSubmitProposal.ts +++ b/src/hooks/DAO/proposal/useSubmitProposal.ts @@ -336,7 +336,7 @@ export default function useSubmitProposal() { // The error occurs because block of proposal creation not yet mined and trying to fetch underlying data of voting weight for new proposal fails with that error // The code that throws an error: https://github.com/decent-dao/fractal-contracts/blob/develop/contracts/azorius/LinearERC20Voting.sol#L205-L211 // So to avoid showing error toast - we're marking proposal creation as success and only then re-fetching proposals - setTimeout(loadDAOProposals, 5000); + setTimeout(loadDAOProposals, 10000); } }, [loadDAOProposals] From 4327f48b9d17e5103a1654e288ebd520690b3b17 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Fri, 15 Dec 2023 13:00:40 +0100 Subject: [PATCH 15/32] Proper timeout based on averageBlockTime --- src/hooks/DAO/proposal/useSubmitProposal.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/hooks/DAO/proposal/useSubmitProposal.ts b/src/hooks/DAO/proposal/useSubmitProposal.ts index eb98e3d868..073f4b03e9 100644 --- a/src/hooks/DAO/proposal/useSubmitProposal.ts +++ b/src/hooks/DAO/proposal/useSubmitProposal.ts @@ -9,7 +9,7 @@ import { BigNumber, Signer, utils } from 'ethers'; import { getAddress, isAddress } from 'ethers/lib/utils'; import { useCallback, useMemo, useState, useEffect } from 'react'; import { toast } from 'react-toastify'; -import { useSigner } from 'wagmi'; +import { useProvider, useSigner } from 'wagmi'; import { ADDRESS_MULTISIG_METADATA } from '../../../constants/common'; import { buildSafeAPIPost, encodeMultiSend } from '../../../helpers'; import { logError } from '../../../helpers/errorLogging'; @@ -24,6 +24,7 @@ import { ProposalMetadata, } from '../../../types'; import { buildSafeApiUrl, getAzoriusModuleFromModules } from '../../../utils'; +import { getAverageBlockTime } from '../../../utils/contract'; import useSignerOrProvider from '../../utils/useSignerOrProvider'; import { useFractalModules } from '../loaders/useFractalModules'; import { useDAOProposals } from '../loaders/useProposals'; @@ -61,6 +62,7 @@ export default function useSubmitProposal() { const [canUserCreateProposal, setCanUserCreateProposal] = useState(false); const loadDAOProposals = useDAOProposals(); const { data: signer } = useSigner(); + const provider = useProvider(); const { node: { safe, fractalModules }, @@ -332,14 +334,15 @@ export default function useSubmitProposal() { } if (success) { + const averageBlockTime = await getAverageBlockTime(provider); // Frequently there's an error in loadDAOProposals if we're loading the proposal immediately after proposal creation // The error occurs because block of proposal creation not yet mined and trying to fetch underlying data of voting weight for new proposal fails with that error // The code that throws an error: https://github.com/decent-dao/fractal-contracts/blob/develop/contracts/azorius/LinearERC20Voting.sol#L205-L211 // So to avoid showing error toast - we're marking proposal creation as success and only then re-fetching proposals - setTimeout(loadDAOProposals, 10000); + setTimeout(loadDAOProposals, averageBlockTime * 1.5 * 1000); } }, - [loadDAOProposals] + [loadDAOProposals, provider] ); const submitProposal = useCallback( From 9ea13f0fc6f6d645ac3b9c7071176b7c6629d361 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Tue, 19 Dec 2023 12:52:36 +0100 Subject: [PATCH 16/32] Implement Sepolia support --- app/page.tsx | 19 ++++- package-lock.json | 14 ++-- package.json | 2 +- src/helpers/crypto.ts | 4 +- .../NetworkConfig/NetworkConfigProvider.tsx | 6 +- src/providers/NetworkConfig/networks/index.ts | 1 + .../NetworkConfig/networks/sepolia.ts | 72 +++++++++++++++++++ 7 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 src/providers/NetworkConfig/networks/sepolia.ts diff --git a/app/page.tsx b/app/page.tsx index 5c33a0fd27..f07e82b9e1 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/navigation'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useNetwork } from 'wagmi'; -import { goerli, mainnet } from 'wagmi/chains'; +import { goerli, mainnet, sepolia } from 'wagmi/chains'; import { AppFooter } from '../src/components/pages/AppHome/AppFooter'; import { CTABox } from '../src/components/pages/AppHome/CTABox'; import FeaturedDAOCard from '../src/components/pages/AppHome/FeaturedDAOCard'; @@ -78,6 +78,23 @@ const FEATURED_DAOS = new Map([ }, ], ], + [ + sepolia.id, + [ + { + iconSrc: '/images/icon-decent.svg', + titleKey: 'decentTitle', + descKey: 'decentDesc', + address: '0xD26c85D435F02DaB8B220cd4D2d398f6f646e235', // TODO: Change to Sepolia Address once it will be there + }, + { + iconSrc: '/images/icon-awakevc.svg', + titleKey: 'awakeTitle', + descKey: 'awakeDesc', + address: '0xdD6CeFA62239272f1eDf755ba6471eacb7DF2Fa5', // TODO: Change to Sepolia Address once it will be there + }, + ], + ], ]); export default function HomePage() { diff --git a/package-lock.json b/package-lock.json index 5a14a7b9e0..83773217f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@ethersproject/providers": "^5.7.2", "@fontsource/ibm-plex-mono": "^4.5.12", "@fontsource/ibm-plex-sans": "^4.5.13", - "@fractal-framework/fractal-contracts": "^0.3.6", + "@fractal-framework/fractal-contracts": "^0.4.0", "@graphprotocol/client-apollo": "^1.0.16", "@lido-sdk/contracts": "^3.0.2", "@rainbow-me/rainbowkit": "^0.8.1", @@ -4450,9 +4450,9 @@ "integrity": "sha512-7oDAqvuIArnMJck/JBqCnQZwqL4za+5xG+1Gu4enYbGcGqmUPktiuOy1i0N3XrzrNO70ZvsSt1Rdkxr2oemE6Q==" }, "node_modules/@fractal-framework/fractal-contracts": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@fractal-framework/fractal-contracts/-/fractal-contracts-0.3.6.tgz", - "integrity": "sha512-ZsShLHcZ6/PucP32GSi2fhaR3UvFDxB7sTxHn3k5g+Lg4gVv6U4RL5YHPadrqUu5byuffEmF5k5uKrdLEt7xZA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@fractal-framework/fractal-contracts/-/fractal-contracts-0.4.0.tgz", + "integrity": "sha512-kFtpv/pPPZ4neimnRu4ILWUyrJJlaNTP+jc2/uyfq183UxmcN35AU7eZmDfE+5pFwXaQeKioHsnNVy9wcQZNMQ==", "dependencies": { "solidity-docgen": "^0.6.0-beta.35" } @@ -28624,9 +28624,9 @@ "integrity": "sha512-7oDAqvuIArnMJck/JBqCnQZwqL4za+5xG+1Gu4enYbGcGqmUPktiuOy1i0N3XrzrNO70ZvsSt1Rdkxr2oemE6Q==" }, "@fractal-framework/fractal-contracts": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@fractal-framework/fractal-contracts/-/fractal-contracts-0.3.6.tgz", - "integrity": "sha512-ZsShLHcZ6/PucP32GSi2fhaR3UvFDxB7sTxHn3k5g+Lg4gVv6U4RL5YHPadrqUu5byuffEmF5k5uKrdLEt7xZA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@fractal-framework/fractal-contracts/-/fractal-contracts-0.4.0.tgz", + "integrity": "sha512-kFtpv/pPPZ4neimnRu4ILWUyrJJlaNTP+jc2/uyfq183UxmcN35AU7eZmDfE+5pFwXaQeKioHsnNVy9wcQZNMQ==", "requires": { "solidity-docgen": "^0.6.0-beta.35" }, diff --git a/package.json b/package.json index 25cccdad98..fdae287e81 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@ethersproject/providers": "^5.7.2", "@fontsource/ibm-plex-mono": "^4.5.12", "@fontsource/ibm-plex-sans": "^4.5.13", - "@fractal-framework/fractal-contracts": "^0.3.6", + "@fractal-framework/fractal-contracts": "^0.4.0", "@graphprotocol/client-apollo": "^1.0.16", "@lido-sdk/contracts": "^3.0.2", "@rainbow-me/rainbowkit": "^0.8.1", diff --git a/src/helpers/crypto.ts b/src/helpers/crypto.ts index 978b7d30cd..f79c5b5ef5 100644 --- a/src/helpers/crypto.ts +++ b/src/helpers/crypto.ts @@ -1,6 +1,6 @@ import { TypedDataSigner } from '@ethersproject/abstract-signer'; import { BigNumber, Contract, constants, utils, BigNumberish, Signer } from 'ethers'; -import { goerli, mainnet, polygon } from 'wagmi/chains'; +import { goerli, sepolia, mainnet, polygon } from 'wagmi/chains'; import { ContractConnection } from '../types'; import { MetaTransaction, SafePostTransaction, SafeTransaction } from '../types/transaction'; @@ -211,5 +211,5 @@ export function getEventRPC(connection: ContractConnection, chainId: numbe } export function supportsENS(chainId: number): boolean { - return chainId === goerli.id || chainId == mainnet.id; + return chainId === goerli.id || chainId == mainnet.id || chainId == sepolia.id; } diff --git a/src/providers/NetworkConfig/NetworkConfigProvider.tsx b/src/providers/NetworkConfig/NetworkConfigProvider.tsx index 2604cbcdb6..2040e85345 100644 --- a/src/providers/NetworkConfig/NetworkConfigProvider.tsx +++ b/src/providers/NetworkConfig/NetworkConfigProvider.tsx @@ -2,7 +2,7 @@ import { Context, createContext, ReactNode, useContext, useEffect, useState } fr import { Chain, useProvider } from 'wagmi'; import { NetworkConfig } from '../../types/network'; import { isProd } from '../../utils'; -import { goerliConfig, mainnetConfig } from './networks'; +import { goerliConfig, sepoliaConfig, mainnetConfig } from './networks'; import { polygonConfig } from './networks/polygon'; export const NetworkConfigContext = createContext({} as NetworkConfig); @@ -12,8 +12,8 @@ export const useNetworkConfig = (): NetworkConfig => // mainnet is first so it defaults to that when disconnected on production export const supportedChains: NetworkConfig[] = isProd() - ? [mainnetConfig, goerliConfig] - : [goerliConfig, mainnetConfig, polygonConfig]; + ? [mainnetConfig, goerliConfig, sepoliaConfig] + : [goerliConfig, sepoliaConfig, mainnetConfig, polygonConfig]; export const disconnectedChain: Chain = supportedChains[0].wagmiChain; diff --git a/src/providers/NetworkConfig/networks/index.ts b/src/providers/NetworkConfig/networks/index.ts index 0d733d2ac7..b76c56cd5d 100644 --- a/src/providers/NetworkConfig/networks/index.ts +++ b/src/providers/NetworkConfig/networks/index.ts @@ -1,2 +1,3 @@ export * from './goerli'; +export * from './sepolia'; export * from './mainnet'; diff --git a/src/providers/NetworkConfig/networks/sepolia.ts b/src/providers/NetworkConfig/networks/sepolia.ts new file mode 100644 index 0000000000..f6dcd59cb4 --- /dev/null +++ b/src/providers/NetworkConfig/networks/sepolia.ts @@ -0,0 +1,72 @@ +import Azorius from '@fractal-framework/fractal-contracts/deployments/sepolia/Azorius.json'; +import AzoriusFreezeGuard from '@fractal-framework/fractal-contracts/deployments/sepolia/AzoriusFreezeGuard.json'; +import ERC20Claim from '@fractal-framework/fractal-contracts/deployments/sepolia/ERC20Claim.json'; +import ERC20FreezeVoting from '@fractal-framework/fractal-contracts/deployments/sepolia/ERC20FreezeVoting.json'; +import ERC721FreezeVoting from '@fractal-framework/fractal-contracts/deployments/sepolia/ERC721FreezeVoting.json'; +import FractalModule from '@fractal-framework/fractal-contracts/deployments/sepolia/FractalModule.json'; +import FractalRegistry from '@fractal-framework/fractal-contracts/deployments/sepolia/FractalRegistry.json'; +import KeyValuePairs from '@fractal-framework/fractal-contracts/deployments/sepolia/KeyValuePairs.json'; +import LinearERC20Voting from '@fractal-framework/fractal-contracts/deployments/sepolia/LinearERC20Voting.json'; +import LinearVotingERC721 from '@fractal-framework/fractal-contracts/deployments/sepolia/LinearERC721Voting.json'; +import ModuleProxyFactory from '@fractal-framework/fractal-contracts/deployments/sepolia/ModuleProxyFactory.json'; +import MultisigFreezeGuard from '@fractal-framework/fractal-contracts/deployments/sepolia/MultisigFreezeGuard.json'; +import MultisigFreezeVoting from '@fractal-framework/fractal-contracts/deployments/sepolia/MultisigFreezeVoting.json'; +import VotesERC20 from '@fractal-framework/fractal-contracts/deployments/sepolia/VotesERC20.json'; +import VotesERC20Wrapper from '@fractal-framework/fractal-contracts/deployments/sepolia/VotesERC20Wrapper.json'; +import { + getMultiSendCallOnlyDeployment, + getProxyFactoryDeployment, + getSafeSingletonDeployment, +} from '@safe-global/safe-deployments'; +import { sepolia } from 'wagmi/chains'; +import { GovernanceType } from '../../../types'; +import { NetworkConfig } from '../../../types/network'; + +const CHAIN_ID = 11155111; +const SAFE_VERSION = '1.3.0'; + +export const sepoliaConfig: NetworkConfig = { + safeBaseURL: 'https://safe-transaction-sepolia.safe.global', + etherscanBaseURL: 'https://sepolia.etherscan.io/', + etherscanAPIBaseUrl: 'https://api-sepolia.etherscan.io', + chainId: CHAIN_ID, + name: sepolia.name, + color: 'gold.300', + nativeTokenSymbol: sepolia.nativeCurrency.symbol, + nativeTokenIcon: '/images/coin-icon-eth.svg', + wagmiChain: sepolia, + subgraphChainName: 'sepolia', + contracts: { + fractalAzoriusMasterCopy: Azorius.address, + fractalModuleMasterCopy: FractalModule.address, + fractalRegistry: FractalRegistry.address, + votesERC20MasterCopy: VotesERC20.address, + linearVotingERC721MasterCopy: LinearVotingERC721.address, + claimingMasterCopy: ERC20Claim.address, + azoriusFreezeGuardMasterCopy: AzoriusFreezeGuard.address, + multisigFreezeVotingMasterCopy: MultisigFreezeVoting.address, + erc20FreezeVotingMasterCopy: ERC20FreezeVoting.address, + erc721FreezeVotingMasterCopy: ERC721FreezeVoting.address, + multisigFreezeGuardMasterCopy: MultisigFreezeGuard.address, + safe: getSafeSingletonDeployment({ version: SAFE_VERSION, network: CHAIN_ID.toString() }) + ?.defaultAddress!, + safeFactory: getProxyFactoryDeployment({ + version: SAFE_VERSION, + network: CHAIN_ID.toString(), + })?.defaultAddress!, + zodiacModuleProxyFactory: ModuleProxyFactory.address, + linearVotingMasterCopy: LinearERC20Voting.address, + multisend: getMultiSendCallOnlyDeployment({ + version: SAFE_VERSION, + network: CHAIN_ID.toString(), + })?.defaultAddress!, + votesERC20WrapperMasterCopy: VotesERC20Wrapper.address, + keyValuePairs: KeyValuePairs.address, + }, + staking: {}, + createOptions: [ + GovernanceType.MULTISIG, + GovernanceType.AZORIUS_ERC20, + GovernanceType.AZORIUS_ERC721, + ], +}; From e0a70fe6ba9b4c16c97aab03745c4b841ece25b6 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Tue, 19 Dec 2023 19:03:20 +0100 Subject: [PATCH 17/32] Handle full Snapshot URL --- src/components/ui/badges/Snapshot.tsx | 2 +- src/hooks/DAO/loaders/snapshot/index.ts | 13 ++- .../loaders/snapshot/useSnapshotProposal.ts | 25 ++++-- .../loaders/snapshot/useSnapshotProposals.ts | 79 +++++++++++-------- .../loaders/snapshot/useSnapshotSpaceName.ts | 9 +++ 5 files changed, 79 insertions(+), 49 deletions(-) create mode 100644 src/hooks/DAO/loaders/snapshot/useSnapshotSpaceName.ts diff --git a/src/components/ui/badges/Snapshot.tsx b/src/components/ui/badges/Snapshot.tsx index cb442e0c23..25c2d5f08d 100644 --- a/src/components/ui/badges/Snapshot.tsx +++ b/src/components/ui/badges/Snapshot.tsx @@ -8,7 +8,7 @@ interface Props extends ButtonProps { export default function Snapshot({ snapshotURL, ...rest }: Props) { return ( + ); diff --git a/src/components/pages/DaoDashboard/Info/ParentLink.tsx b/src/components/pages/DaoDashboard/Info/ParentLink.tsx index 81807b8653..0caf350d2e 100644 --- a/src/components/pages/DaoDashboard/Info/ParentLink.tsx +++ b/src/components/pages/DaoDashboard/Info/ParentLink.tsx @@ -1,4 +1,5 @@ import { Link, HStack, Image, Text, LinkProps } from '@chakra-ui/react'; +import NextLink from 'next/link'; import { useTranslation } from 'react-i18next'; import { DAO_ROUTES } from '../../../../constants/routes'; import { useFractal } from '../../../../providers/App/AppProvider'; @@ -22,6 +23,7 @@ export function ParentLink({ ...rest }: LinkProps) { _hover={{ textDecoration: 'none', color: 'gold.500-hover' }} href={DAO_ROUTES.dao.relative(nodeHierarchy.parentAddress)} marginBottom="1rem" + as={NextLink} {...rest} > diff --git a/src/components/ui/cards/DAOInfoCard.tsx b/src/components/ui/cards/DAOInfoCard.tsx index 2cd5897e3b..b1147153dd 100644 --- a/src/components/ui/cards/DAOInfoCard.tsx +++ b/src/components/ui/cards/DAOInfoCard.tsx @@ -1,4 +1,5 @@ import { Box, Flex, Text, Spacer, HStack, FlexProps, Link, Center } from '@chakra-ui/react'; +import NextLink from 'next/link'; import { DAO_ROUTES } from '../../../constants/routes'; import useDisplayName from '../../../hooks/utils/useDisplayName'; import { useFractal } from '../../../providers/App/AppProvider'; @@ -74,6 +75,7 @@ export function DAOInfoCard({ > {childCount && childCount > 0 && ( - + @@ -36,7 +38,7 @@ export function ErrorFallback() { /> - + From 32b74825c891ad5fc2c9c5f232da44e7f67fab81 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Mon, 15 Jan 2024 13:30:06 +0100 Subject: [PATCH 19/32] Change DAO Address for Lizard DAO Metadata --- app/daos/[daoAddress]/layout.tsx | 2 +- src/metadata/lizzardsDAO/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index cd36ac7b44..afe5b2799d 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -2,8 +2,8 @@ import { Button, Center, Text, VStack, ChakraProvider, extendTheme } from '@chakra-ui/react'; import { theme } from '@decent-org/fractal-ui'; -import { ReactNode, useMemo } from 'react'; import { useRouter } from 'next/navigation'; +import { ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useNetwork } from 'wagmi'; import ClientOnly from '../../../src/components/ui/utils/ClientOnly'; diff --git a/src/metadata/lizzardsDAO/index.ts b/src/metadata/lizzardsDAO/index.ts index 6241d36109..db2a286bb4 100644 --- a/src/metadata/lizzardsDAO/index.ts +++ b/src/metadata/lizzardsDAO/index.ts @@ -3,7 +3,7 @@ import logo from './assets/logo.png'; import metaSectionBackground1 from './assets/meta-section-background-1.png'; const LIZZARDS_DAO_METADATA: DAOMetadata = { - address: '0x27feCf4E8A4394B1daC54541414b607f88c451F1', + address: '0x167bE4073f52aD2Aa0D6d6FeddF0F1f79a82B98e', logo: logo.src, headerBackground: 'linear-gradient(269deg, rgba(110, 97, 240, 0.35) 3.2%, rgba(74, 163, 183, 0.35) 51.2%, rgba(101, 211, 138, 0.35) 98.2%), #000', From f882b64b78f484c10072a733a4702d0bf81af85c Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Mon, 15 Jan 2024 16:08:26 +0100 Subject: [PATCH 20/32] Fix proposals reducer --- src/providers/App/governance/reducer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/providers/App/governance/reducer.ts b/src/providers/App/governance/reducer.ts index 55b655267b..47a8d9db05 100644 --- a/src/providers/App/governance/reducer.ts +++ b/src/providers/App/governance/reducer.ts @@ -68,7 +68,7 @@ export const governanceReducer = (state: FractalGovernance, action: FractalGover }; case FractalGovernanceAction.UPDATE_NEW_AZORIUS_ERC20_VOTE: { const { proposalId, voter, support, votesSummary, weight } = action.payload; - const updatedProposals = (proposals as AzoriusProposal[]).map(proposal => { + const updatedProposals = ((proposals || []) as AzoriusProposal[]).map(proposal => { if (proposal.proposalId === proposalId) { const foundVote = proposal.votes.find(vote => vote.voter === voter); const newProposal: AzoriusProposal = { @@ -86,7 +86,7 @@ export const governanceReducer = (state: FractalGovernance, action: FractalGover } case FractalGovernanceAction.UPDATE_NEW_AZORIUS_ERC721_VOTE: { const { proposalId, voter, support, votesSummary, tokenAddresses, tokenIds } = action.payload; - const updatedProposals = (proposals as AzoriusProposal[]).map(proposal => { + const updatedProposals = ((proposals || []) as AzoriusProposal[]).map(proposal => { if (proposal.proposalId === proposalId) { const foundVote = proposal.votes.find(vote => vote.voter === voter); const newProposal: AzoriusProposal = { @@ -110,7 +110,7 @@ export const governanceReducer = (state: FractalGovernance, action: FractalGover if (!proposals) { return state; } - const updatedProposals = (proposals as AzoriusProposal[]).map(proposal => { + const updatedProposals = ((proposals || []) as AzoriusProposal[]).map(proposal => { if (proposal.proposalId === proposalId) { const newProposal: AzoriusProposal = { ...proposal, From 152e2acfb2ec73730f2e94516284a17c907792e5 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Tue, 16 Jan 2024 01:30:47 +0100 Subject: [PATCH 21/32] Fix casting vote on testnet --- .../loaders/snapshot/useSnapshotProposal.ts | 6 +-- src/hooks/DAO/proposal/useCastVote.ts | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index bbdd9904a6..f8cdcbe648 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -113,8 +113,8 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u const { choices, type, privacy } = proposalQueryResult; if (type === 'weighted') { - Object.keys(choices).forEach((choice: string) => { - votesBreakdown[choice] = { + Object.keys(choices).forEach((choice: string, choiceIndex) => { + votesBreakdown[choiceIndex] = { votes: [], total: 0, }; @@ -146,7 +146,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u }; } else { votesBreakdown[voteChoice] = { - total: vote.votingWeight, + total: voteChoices[voteChoice], votes: [vote], }; } diff --git a/src/hooks/DAO/proposal/useCastVote.ts b/src/hooks/DAO/proposal/useCastVote.ts index d077a7e714..8ea9724cba 100644 --- a/src/hooks/DAO/proposal/useCastVote.ts +++ b/src/hooks/DAO/proposal/useCastVote.ts @@ -15,11 +15,9 @@ import { } from '../../../types'; import encryptWithShutter from '../../../utils/shutter'; import { useTransaction } from '../../utils/useTransaction'; +import useSnapshotSpaceName from '../loaders/snapshot/useSnapshotSpaceName'; import useUserERC721VotingTokens from './useUserERC721VotingTokens'; -const hub = 'https://hub.snapshot.org'; -const client = new snapshot.Client712(hub); - const useCastVote = ({ proposal, setPending, @@ -40,7 +38,18 @@ const useCastVote = ({ user: { address }, }, } = useFractal(); + const daoSnapshotSpaceName = useSnapshotSpaceName(); const { data: signer } = useSigner(); + const client = useMemo(() => { + if (daoSnapshotURL) { + const isTestnetSnapshotURL = daoSnapshotURL.includes('testnet'); + const hub = isTestnetSnapshotURL + ? 'https://testnet.seq.snapshot.org' // This is not covered in Snapshot docs, but that's where they're sending request on testnet + : 'https://hub.snapshot.org'; + return new snapshot.Client712(hub); + } + return undefined; + }, [daoSnapshotURL]); const azoriusGovernance = useMemo(() => governance as AzoriusGovernance, [governance]); const { type } = azoriusGovernance; @@ -122,11 +131,24 @@ const useCastVote = ({ const castSnapshotVote = useCallback( async (onSuccess?: () => Promise) => { - if (signer && signer?.provider && address && daoSnapshotURL && extendedSnapshotProposal) { + if ( + signer && + signer?.provider && + address && + daoSnapshotSpaceName && + extendedSnapshotProposal && + client + ) { let toastId; + const mappedSnapshotWeightedChoice: { [choiceKey: number]: number } = {}; + if (extendedSnapshotProposal.type === 'weighted') { + snapshotWeightedChoice.forEach((value, choiceIndex) => { + mappedSnapshotWeightedChoice[choiceIndex + 1] = value; + }); + } const choice = extendedSnapshotProposal.type === 'weighted' - ? snapshotWeightedChoice + ? mappedSnapshotWeightedChoice : (selectedChoice as number) + 1; try { toastId = toast(t('pendingCastVote'), { @@ -142,7 +164,7 @@ const useCastVote = ({ extendedSnapshotProposal.proposalId ); await client.vote(signer.provider as ethers.providers.Web3Provider, address, { - space: daoSnapshotURL, + space: daoSnapshotSpaceName, proposal: extendedSnapshotProposal.proposalId, type: extendedSnapshotProposal.type, privacy: extendedSnapshotProposal.privacy, @@ -151,7 +173,7 @@ const useCastVote = ({ }); } else { await client.vote(signer.provider as ethers.providers.Web3Provider, address, { - space: daoSnapshotURL, + space: daoSnapshotSpaceName, proposal: extendedSnapshotProposal.proposalId, type: extendedSnapshotProposal.type, choice, @@ -167,7 +189,7 @@ const useCastVote = ({ } } catch (e) { toast.dismiss(toastId); - toast.error('failedCastVote'); + toast.error(t('failedCastVote')); logError('Error while casting Snapshot vote', e); } } @@ -175,11 +197,12 @@ const useCastVote = ({ [ signer, address, - daoSnapshotURL, + daoSnapshotSpaceName, extendedSnapshotProposal, t, selectedChoice, snapshotWeightedChoice, + client, ] ); From 882e63e5c52d4267bbc034d47d84ba353f0923b1 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Wed, 17 Jan 2024 14:38:07 +0100 Subject: [PATCH 22/32] Fix votes breakdown --- .../SnapshotProposalVotes.tsx | 2 +- .../loaders/snapshot/useSnapshotProposal.ts | 25 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx index 76e81239b8..bb63523b6a 100644 --- a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx +++ b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx @@ -45,7 +45,7 @@ export default function SnapshotProposalVotes({ proposal }: ISnapshotProposalVot > {choices.map((choice, i) => { const votesBreakdownChoice = - type === 'weighted' ? votesBreakdown[i] : votesBreakdown[choice]; + type === 'weighted' ? votesBreakdown[i + 1] : votesBreakdown[choice]; const votesBreakdownChoiceTotal = votesBreakdownChoice && votesBreakdownChoice?.total ? votesBreakdownChoice?.total diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index f8cdcbe648..f42d265327 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -114,7 +114,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u if (type === 'weighted') { Object.keys(choices).forEach((choice: string, choiceIndex) => { - votesBreakdown[choiceIndex] = { + votesBreakdown[choiceIndex + 1] = { votes: [], total: 0, }; @@ -136,7 +136,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u if (type === 'weighted') { const voteChoices = vote.choice as SnapshotWeightedVotingChoice; if (typeof voteChoices === 'number') { - // Means vote casted for single option, and Snapshot API returns just just number then =/ + // Means vote casted for single option, and Snapshot API returns just number then =/ const voteChoice = voteChoices - 1; const existingChoiceType = votesBreakdown[voteChoice]; if (existingChoiceType) { @@ -146,24 +146,27 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u }; } else { votesBreakdown[voteChoice] = { - total: voteChoices[voteChoice], + total: vote.votingWeight, votes: [vote], }; } } else { + let totalVotingWeightDistributon = 0; + Object.keys(voteChoices).forEach( + (choice: any) => (totalVotingWeightDistributon += voteChoices[choice]) + ); Object.keys(voteChoices).forEach((choiceIndex: any) => { - // In Snapshot API choices are indexed 1-based. The first choice has index 1. - // https://docs.snapshot.org/tools/api#vote - const voteChoice = choices[choiceIndex - 1]; - const existingChoiceType = votesBreakdown[voteChoice]; + const voteChoiceValue = voteChoices[choiceIndex] / totalVotingWeightDistributon; + const existingChoiceType = votesBreakdown[choiceIndex]; + if (existingChoiceType) { - votesBreakdown[voteChoice] = { - total: existingChoiceType.total + vote.votingWeight, + votesBreakdown[choiceIndex] = { + total: existingChoiceType.total + vote.votingWeight * voteChoiceValue, votes: [...existingChoiceType.votes, vote], }; } else { - votesBreakdown[voteChoice] = { - total: vote.votingWeight, + votesBreakdown[choiceIndex] = { + total: vote.votingWeight * voteChoiceValue, votes: [vote], }; } From fd4d5d9fe1b3e5c807368dfa5c876851c2cf576f Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 12:18:56 +0100 Subject: [PATCH 23/32] Filter out choices that don't have weight selected during casting vote and during displaying --- .../SnapshotProposalDetails/SnapshotProposalVoteItem.tsx | 9 ++++++--- .../SnapshotProposalDetails/SnapshotProposalVotes.tsx | 2 +- src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts | 2 +- src/hooks/DAO/proposal/useCastVote.ts | 4 +++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx index 17560334ec..24b81128c8 100644 --- a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx +++ b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVoteItem.tsx @@ -40,11 +40,14 @@ export default function SnapshotProposalVoteItem({ proposal, vote }: ISnapshotPr gap={1} flexWrap="wrap" > - {Object.keys(vote.choice as SnapshotWeightedVotingChoice).map((choice: any) => { + {Object.keys(vote.choice as SnapshotWeightedVotingChoice).map((choiceIdx: any) => { + if (!(vote.choice as SnapshotWeightedVotingChoice)[choiceIdx]) { + return null; + } return ( - + - {proposal.choices[(choice as any as number) - 1]} + {proposal.choices[(choiceIdx as number) - 1]} ); diff --git a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx index bb63523b6a..003e659167 100644 --- a/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx +++ b/src/components/Proposals/SnapshotProposalDetails/SnapshotProposalVotes.tsx @@ -63,7 +63,7 @@ export default function SnapshotProposalVotes({ proposal }: ISnapshotProposalVot {proposal.privacy === 'shutter' && proposal.state !== FractalProposalState.CLOSED ? `? ${strategySymbol}` - : `${votesBreakdownChoiceTotal} ${strategySymbol}`} + : `${votesBreakdownChoiceTotal.toFixed(2)} ${strategySymbol}`} ); diff --git a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts index f42d265327..f1d7f86a01 100644 --- a/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts +++ b/src/hooks/DAO/loaders/snapshot/useSnapshotProposal.ts @@ -80,7 +80,7 @@ export default function useSnapshotProposal(proposal: FractalProposal | null | u const votesQueryResult = await client .query({ query: gql`query SnapshotProposalVotes { - votes(where: {proposal: "${snapshotProposal.snapshotProposalId}"}, first: 100) { + votes(where: {proposal: "${snapshotProposal.snapshotProposalId}"}, first: 500) { id voter vp diff --git a/src/hooks/DAO/proposal/useCastVote.ts b/src/hooks/DAO/proposal/useCastVote.ts index 8ea9724cba..2e6b93e77a 100644 --- a/src/hooks/DAO/proposal/useCastVote.ts +++ b/src/hooks/DAO/proposal/useCastVote.ts @@ -143,7 +143,9 @@ const useCastVote = ({ const mappedSnapshotWeightedChoice: { [choiceKey: number]: number } = {}; if (extendedSnapshotProposal.type === 'weighted') { snapshotWeightedChoice.forEach((value, choiceIndex) => { - mappedSnapshotWeightedChoice[choiceIndex + 1] = value; + if (value > 0) { + mappedSnapshotWeightedChoice[choiceIndex + 1] = value; + } }); } const choice = From c1e70dd892bfe6c142aac18d87255573ee768d58 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 12:45:11 +0100 Subject: [PATCH 24/32] Holy cow! Flashing issue completely fixed --- app/daos/[daoAddress]/layout.tsx | 6 +++--- src/hooks/DAO/loaders/useFractalNode.ts | 8 +++++++- src/hooks/DAO/useDAOController.ts | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index afe5b2799d..af39d70eb4 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -72,7 +72,7 @@ export default function DaoPageLayout({ params: { daoAddress?: string }; }) { const { node } = useFractal(); - const { nodeLoading, reloadingDAO } = useDAOController({ daoAddress }); + const { nodeLoading, reloadingDAO, errorLoading } = useDAOController({ daoAddress }); const daoMetadata = useDAOMetadata(); const { chain } = useNetwork(); const activeTheme = useMemo(() => { @@ -106,7 +106,7 @@ export default function DaoPageLayout({ display = childrenDisplay; } else if (!chain) { // if we're disconnected - if (nodeLoading || reloadingDAO || validSafe) { + if (nodeLoading || reloadingDAO || validSafe || !errorLoading) { display = children; } else { display = ; @@ -116,7 +116,7 @@ export default function DaoPageLayout({ const invalidChain = !supportedChains.map(c => c.chainId).includes(chain.id); if (invalidChain) { display = ; - } else if (nodeLoading || reloadingDAO || validSafe) { + } else if (nodeLoading || reloadingDAO || validSafe || !errorLoading) { display = children; } else { display = ; diff --git a/src/hooks/DAO/loaders/useFractalNode.ts b/src/hooks/DAO/loaders/useFractalNode.ts index b9383cca7d..5bd8cd4b9c 100644 --- a/src/hooks/DAO/loaders/useFractalNode.ts +++ b/src/hooks/DAO/loaders/useFractalNode.ts @@ -20,6 +20,7 @@ export const useFractalNode = ({ daoAddress }: { daoAddress?: string }) => { // tracks the current valid Safe address and chain id; helps prevent unnecessary calls const currentValidSafe = useRef(); const [nodeLoading, setNodeLoading] = useState(true); + const [errorLoading, setErrorLoading] = useState(false); const { action } = useFractal(); const safeAPI = useSafeAPI(); @@ -87,12 +88,14 @@ export const useFractalNode = ({ daoAddress }: { daoAddress?: string }) => { const setDAO = useCallback( async (_chainId: number, _daoAddress: string) => { setNodeLoading(true); + setErrorLoading(false); if (utils.isAddress(_daoAddress) && safeAPI) { try { const safeInfo = await requestWithRetries(fetchSafeInfo, 5); if (!safeInfo) { currentValidSafe.current = undefined; action.resetDAO(); + setErrorLoading(true); } else { currentValidSafe.current = _chainId + _daoAddress; action.dispatch({ @@ -103,16 +106,19 @@ export const useFractalNode = ({ daoAddress }: { daoAddress?: string }) => { type: NodeAction.SET_SAFE_INFO, payload: safeInfo, }); + setErrorLoading(false); } } catch (e) { // network error currentValidSafe.current = undefined; action.resetDAO(); + setErrorLoading(true); } } else { // invalid address currentValidSafe.current = undefined; action.resetDAO(); + setErrorLoading(true); } setNodeLoading(false); }, @@ -128,5 +134,5 @@ export const useFractalNode = ({ daoAddress }: { daoAddress?: string }) => { } }, [daoAddress, setDAO, currentValidSafe, chainId]); - return nodeLoading; + return { nodeLoading, errorLoading }; }; diff --git a/src/hooks/DAO/useDAOController.ts b/src/hooks/DAO/useDAOController.ts index a91af59f21..7735b6937a 100644 --- a/src/hooks/DAO/useDAOController.ts +++ b/src/hooks/DAO/useDAOController.ts @@ -30,7 +30,7 @@ export default function useDAOController({ daoAddress }: { daoAddress?: string } } }, [daoAddress, currentDAOAddress, action]); - const nodeLoading = useFractalNode({ daoAddress: currentDAOAddress }); + const { nodeLoading, errorLoading } = useFractalNode({ daoAddress: currentDAOAddress }); useGovernanceContracts(); useFractalGuardContracts({}); useFractalFreeze({ parentSafeAddress: parentAddress }); @@ -38,5 +38,5 @@ export default function useDAOController({ daoAddress }: { daoAddress?: string } useFractalTreasury(); useERC20Claim(); useSnapshotProposals(); - return { nodeLoading, reloadingDAO }; + return { nodeLoading, reloadingDAO, errorLoading }; } From f488fcd4dd7780bc2b57a977916cc2dae622fe83 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 13:14:05 +0100 Subject: [PATCH 25/32] Disable navigation through SearchDisplay if found safe is currently viewed safe --- .../ui/menus/DAOSearch/SearchDisplay.tsx | 23 +++++++++++++------ src/i18n/locales/en/common.json | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/components/ui/menus/DAOSearch/SearchDisplay.tsx b/src/components/ui/menus/DAOSearch/SearchDisplay.tsx index 0d758cc1a9..e96189f8f9 100644 --- a/src/components/ui/menus/DAOSearch/SearchDisplay.tsx +++ b/src/components/ui/menus/DAOSearch/SearchDisplay.tsx @@ -1,5 +1,6 @@ import { Box, Flex, Text, Button } from '@chakra-ui/react'; import { useRouter } from 'next/navigation'; +import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { DAO_ROUTES } from '../../../../constants/routes'; import useDisplayName from '../../../../hooks/utils/useDisplayName'; @@ -28,8 +29,11 @@ export function SearchDisplay({ closeDrawer, }: ISearchDisplay) { const { t } = useTranslation(['common', 'dashboard']); - const { action } = useFractal(); + const { action, node } = useFractal(); const { push } = useRouter(); + const isCurrentSafe = useMemo(() => { + return !!node && !!node.daoAddress && node.daoAddress === address; + }, [node, address]); if (loading && address) { return ( @@ -49,12 +53,14 @@ export function SearchDisplay({ { - onClickView(); - if (closeDrawer) closeDrawer(); - action.resetDAO(); - push(DAO_ROUTES.dao.relative(address)); + if (!isCurrentSafe) { + onClickView(); + if (closeDrawer) closeDrawer(); + action.resetDAO(); + push(DAO_ROUTES.dao.relative(address)); + } }} - cursor="default" + cursor={isCurrentSafe ? 'not-allowed' : 'default'} justifyContent="space-between" > - {t('labelDAOFound')} + {t(isCurrentSafe ? 'labelCurrentDAO' : 'labelDAOFound')} @@ -74,6 +80,9 @@ export function SearchDisplay({ diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index d59cf73c70..f8c3645e61 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -37,6 +37,7 @@ "home": "Home", "labelViewDAO": "View Safe", "labelDAOFound": "Safe found", + "labelCurrentDAO": "This is Safe you are currently viewing", "labelEtherscan": "View on Etherscan", "errorInvalidENSAddress": "Invalid ENS name or address", "errorInvalidENSName": "Invalid ENS name", From 1887c2a0f80a8e3cc884e4127e61f4c7bc8ee1ff Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 13:14:59 +0100 Subject: [PATCH 26/32] Do not display View Safe button in SearchDisplay if found safe is current safe --- .../ui/menus/DAOSearch/SearchDisplay.tsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/components/ui/menus/DAOSearch/SearchDisplay.tsx b/src/components/ui/menus/DAOSearch/SearchDisplay.tsx index e96189f8f9..cce35469b1 100644 --- a/src/components/ui/menus/DAOSearch/SearchDisplay.tsx +++ b/src/components/ui/menus/DAOSearch/SearchDisplay.tsx @@ -77,15 +77,14 @@ export function SearchDisplay({ - + {!isCurrentSafe && ( + + )} ); } From 45159f4998c9c7fc7cce2990ff3e2c7678f37935 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 14:22:29 +0100 Subject: [PATCH 27/32] Update metadata for ethlizards, add featured ethlizards section on HomePage, add logic to not show it on prod --- app/page.tsx | 25 +++++++++++++++++++++++++ src/i18n/locales/en/home.json | 2 ++ src/metadata/lizzardsDAO/index.ts | 13 +++++++------ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/app/page.tsx b/app/page.tsx index f07e82b9e1..7ba6206c08 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -14,6 +14,7 @@ import ExternalLink from '../src/components/ui/links/ExternalLink'; import ClientOnly from '../src/components/ui/utils/ClientOnly'; import { BASE_ROUTES } from '../src/constants/routes'; import { URL_DOCS } from '../src/constants/url'; +import ethLizardsLogo from '../src/metadata/lizzardsDAO/assets/logo.png'; import { useFractal } from '../src/providers/App/AppProvider'; import { disconnectedChain } from '../src/providers/NetworkConfig/NetworkConfigProvider'; @@ -59,6 +60,12 @@ const FEATURED_DAOS = new Map([ descKey: 'awakeDesc', address: '0x36C19472D4CA942710cA9aF01a03cED4dBc6eC0a', }, + { + iconSrc: ethLizardsLogo.src, + titleKey: 'ethlizardsTitle', + descKey: 'ethlizardsDesc', + address: '0x167bE4073f52aD2Aa0D6d6FeddF0F1f79a82B98e', + }, ], ], [ @@ -76,6 +83,12 @@ const FEATURED_DAOS = new Map([ descKey: 'awakeDesc', address: '0xdD6CeFA62239272f1eDf755ba6471eacb7DF2Fa5', }, + { + iconSrc: ethLizardsLogo.src, + titleKey: 'ethlizardsTitle', + descKey: 'ethlizardsDesc', + address: '0x167bE4073f52aD2Aa0D6d6FeddF0F1f79a82B98e', // TODO: Change to mainnet address once it will be there + }, ], ], [ @@ -93,6 +106,12 @@ const FEATURED_DAOS = new Map([ descKey: 'awakeDesc', address: '0xdD6CeFA62239272f1eDf755ba6471eacb7DF2Fa5', // TODO: Change to Sepolia Address once it will be there }, + { + iconSrc: ethLizardsLogo.src, + titleKey: 'ethlizardsTitle', + descKey: 'ethlizardsDesc', + address: '0x167bE4073f52aD2Aa0D6d6FeddF0F1f79a82B98e', // TODO: Change to Sepolia address once it will be there + }, ], ], ]); @@ -216,6 +235,12 @@ export default function HomePage() { paddingBottom="1.5rem" > {features.map((feature, index) => { + if ( + typeof location !== 'undefined' && + location.pathname === 'app.fractalframework.xyz' + ) { + return null; + } return ( ", "readyCTA": "Ready to start?", "createButton": "+ Start from Scratch", diff --git a/src/metadata/lizzardsDAO/index.ts b/src/metadata/lizzardsDAO/index.ts index db2a286bb4..8f50d2767e 100644 --- a/src/metadata/lizzardsDAO/index.ts +++ b/src/metadata/lizzardsDAO/index.ts @@ -25,13 +25,14 @@ const LIZZARDS_DAO_METADATA: DAOMetadata = { sections: [ { title: 'Description', - content: ' for this proposal or just click on the link to learn more about the proposal', + content: + 'Ethlizards brings together an exceptional mix of avid gamers, visionary builders, and savvy investors, establishing itself as a highly esteemed partner in the GameFi ecosystem.', background: undefined, - link: { - position: 'start', - text: 'Vote here', - url: '/proposals/0xe10c44fceb1b43f74c42bd6efc9316e9ce14109ac8a166e5266fc78499cb4fea', - }, + // link: { + // position: 'start', + // text: 'Vote here', + // url: '/proposals/0xe10c44fceb1b43f74c42bd6efc9316e9ce14109ac8a166e5266fc78499cb4fea', + // }, }, { title: 'Elemental Lizards coming soon', From 6e98bad97d73120f11375c709292ed0bc7957c2e Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 14:31:40 +0100 Subject: [PATCH 28/32] Inject Hotjar script for ethlizards testing --- app/daos/[daoAddress]/layout.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index af39d70eb4..beb30c3182 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -3,6 +3,7 @@ import { Button, Center, Text, VStack, ChakraProvider, extendTheme } from '@chakra-ui/react'; import { theme } from '@decent-org/fractal-ui'; import { useRouter } from 'next/navigation'; +import Script from 'next/script'; import { ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useNetwork } from 'wagmi'; @@ -126,6 +127,21 @@ export default function DaoPageLayout({ return ( {node?.daoName ? `${node.daoName} | ${APP_NAME}` : APP_NAME} + {node && node.daoAddress === '0x167bE4073f52aD2Aa0D6d6FeddF0F1f79a82B98e' && ( + + )} {display} ); From 77f13292741cafabceb1b1fd285277babba8c9e2 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Thu, 18 Jan 2024 15:20:52 +0100 Subject: [PATCH 29/32] Add network switcher --- .../menus/AccountDisplay/MenuItemNetwork.tsx | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/components/ui/menus/AccountDisplay/MenuItemNetwork.tsx b/src/components/ui/menus/AccountDisplay/MenuItemNetwork.tsx index 3311fe8903..8df4e47ff6 100644 --- a/src/components/ui/menus/AccountDisplay/MenuItemNetwork.tsx +++ b/src/components/ui/menus/AccountDisplay/MenuItemNetwork.tsx @@ -1,13 +1,23 @@ -import { Box, Flex, Text } from '@chakra-ui/react'; +import { Box, Flex, Select, Text } from '@chakra-ui/react'; import { useTranslation } from 'react-i18next'; -import { useNetworkConfig } from '../../../../providers/NetworkConfig/NetworkConfigProvider'; +import { useSwitchNetwork } from 'wagmi'; +import { + supportedChains, + useNetworkConfig, +} from '../../../../providers/NetworkConfig/NetworkConfigProvider'; /** * Network display for menu */ export function MenuItemNetwork() { - const { name, color } = useNetworkConfig(); const { t } = useTranslation('menu'); + const { chainId } = useNetworkConfig(); + const { switchNetwork } = useSwitchNetwork(); + + if (!switchNetwork) { + return null; + } + return ( {t('network')} - { + e.preventDefault(); + switchNetwork(Number(e.target.value)); + }} + value={chainId} > - - - {name} - - + {supportedChains.map(chain => ( + + ))} + ); From 2b3ecddc39573c53dea3fa610ff9aa13aa9a52ef Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Mon, 22 Jan 2024 17:41:40 +0100 Subject: [PATCH 30/32] Fix getCanVote --- .../Proposals/ProposalVotes/context/VoteContext.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Proposals/ProposalVotes/context/VoteContext.tsx b/src/components/Proposals/ProposalVotes/context/VoteContext.tsx index 6dced8c80b..bf199e312c 100644 --- a/src/components/Proposals/ProposalVotes/context/VoteContext.tsx +++ b/src/components/Proposals/ProposalVotes/context/VoteContext.tsx @@ -94,7 +94,10 @@ export function VoteContextProvider({ } else if (type === GovernanceType.AZORIUS_ERC20) { newCanVote = ( - await ozLinearVotingContract!.asSigner.getProposalVotingSupply(proposal.proposalId) + await ozLinearVotingContract!.asSigner.getVotingWeight( + user.address, + proposal.proposalId + ) )?.gt(0) && !hasVoted; } else if (type === GovernanceType.AZORIUS_ERC721) { if (refetchUserTokens) { From 7695a428a219521cfff0f7d5c8dee7fdb5d8cb88 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Mon, 22 Jan 2024 17:51:47 +0100 Subject: [PATCH 31/32] Handle Snapshot proposal pending state --- src/components/ui/proposal/useProposalCountdown.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/ui/proposal/useProposalCountdown.tsx b/src/components/ui/proposal/useProposalCountdown.tsx index 9184664997..f43f275ca9 100644 --- a/src/components/ui/proposal/useProposalCountdown.tsx +++ b/src/components/ui/proposal/useProposalCountdown.tsx @@ -146,6 +146,8 @@ export function useProposalCountdown(proposal: FractalProposal) { guardTimelockPeriod = timeLockPeriod.value.toNumber() * 1000 + votingDeadlineMs; } startCountdown(guardTimelockPeriod); + } else if (isSnapshotProposal && proposal.state === FractalProposalState.PENDING) { + startCountdown(snapshotProposal.startTime * 1000); } else if (isSnapshotProposal) { startCountdown(snapshotProposal.endTime * 1000); } From 93453faa4c4d2ebb127a8933cab46755947471c6 Mon Sep 17 00:00:00 2001 From: Kirill Klimenko Date: Mon, 22 Jan 2024 17:54:54 +0100 Subject: [PATCH 32/32] Fix page hard refresh --- app/daos/[daoAddress]/layout.tsx | 4 +--- src/components/ui/utils/ErrorFallback.tsx | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/daos/[daoAddress]/layout.tsx b/app/daos/[daoAddress]/layout.tsx index beb30c3182..d41156d4dc 100644 --- a/app/daos/[daoAddress]/layout.tsx +++ b/app/daos/[daoAddress]/layout.tsx @@ -2,7 +2,6 @@ import { Button, Center, Text, VStack, ChakraProvider, extendTheme } from '@chakra-ui/react'; import { theme } from '@decent-org/fractal-ui'; -import { useRouter } from 'next/navigation'; import Script from 'next/script'; import { ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -20,7 +19,6 @@ import { function InvalidSafe() { const { chain } = useNetwork(); const { t } = useTranslation('common'); - const router = useRouter(); return (
{t('invalidSafe1', { chain: chain ? chain.name : disconnectedChain.name })} {t('invalidSafe2')} - +
); diff --git a/src/components/ui/utils/ErrorFallback.tsx b/src/components/ui/utils/ErrorFallback.tsx index 6abdd45967..bb2d14034e 100644 --- a/src/components/ui/utils/ErrorFallback.tsx +++ b/src/components/ui/utils/ErrorFallback.tsx @@ -1,7 +1,6 @@ import { Link } from '@chakra-ui/next-js'; import { Box, Button, Center, Flex, Text } from '@chakra-ui/react'; import { Alert } from '@decent-org/fractal-ui'; -import { useRouter } from 'next/navigation'; import { Trans, useTranslation } from 'react-i18next'; import { CONTENT_HEIGHT } from '../../../constants/common'; import { URL_DISCORD } from '../../../constants/url'; @@ -9,7 +8,6 @@ import { InfoBox } from '../containers/InfoBox'; export function ErrorFallback() { const { t } = useTranslation(); - const router = useRouter(); return (
@@ -38,7 +36,7 @@ export function ErrorFallback() { /> - +