From 96ad6036c1a636f2c4414fd979dde4f95b0fc674 Mon Sep 17 00:00:00 2001 From: Ashutosh Kumar Date: Wed, 4 Dec 2024 00:35:29 +0530 Subject: [PATCH] Build Issues Fixed --- .../explorer/components/NetworkSheet.tsx | 1 - .../explorer/components/ProposalsList.tsx | 174 ++++++++++-------- src/modules/explorer/pages/DAOList/index.tsx | 61 +----- .../explorer/pages/Proposals/index.tsx | 2 + .../pages/User/components/UserMovements.tsx | 31 +--- src/modules/explorer/pages/User/index.tsx | 10 +- .../components/ProposalDetailCard.tsx | 9 +- .../explorer/pages/ProposalDetails/index.tsx | 1 + src/services/aci/endpoint.ts | 2 - src/services/aci/index.ts | 4 +- src/services/aci/useArbitratyContractData.ts | 3 +- yarn.lock | 26 ++- 12 files changed, 137 insertions(+), 187 deletions(-) diff --git a/src/modules/explorer/components/NetworkSheet.tsx b/src/modules/explorer/components/NetworkSheet.tsx index 433d9c18..ef4584dc 100644 --- a/src/modules/explorer/components/NetworkSheet.tsx +++ b/src/modules/explorer/components/NetworkSheet.tsx @@ -6,7 +6,6 @@ import { ResponsiveDialog } from "./ResponsiveDialog" import { ColorDot } from "./ChangeNetworkButton" import { ContentContainer } from "./ContentContainer" import { ActionTypes, CreatorContext } from "modules/creator/state" -import { ContentContainer } from "components/ui/Table" const SheetItem = styled(ContentContainer)({ "height": 50, diff --git a/src/modules/explorer/components/ProposalsList.tsx b/src/modules/explorer/components/ProposalsList.tsx index 7fd4e3f9..c9049ff9 100644 --- a/src/modules/explorer/components/ProposalsList.tsx +++ b/src/modules/explorer/components/ProposalsList.tsx @@ -1,12 +1,15 @@ -import { Collapse, Grid, styled, Typography } from "@material-ui/core" +/* eslint-disable react-hooks/exhaustive-deps */ +import React, { useCallback, useEffect, useMemo, useState } from "react" +import { CircularProgress, Collapse, Grid, Typography, styled } from "@material-ui/core" import { ProposalItem } from "modules/explorer/pages/User" -import React, { useState } from "react" import { Link } from "react-router-dom" import { Proposal } from "services/services/dao/mappers/proposal/types" import { ProposalTableRow } from "modules/lite/explorer/components/ProposalTableRow" import { Poll } from "models/Polls" import ReactPaginate from "react-paginate" import "../pages/DAOList/styles.css" +import { Filters } from "../pages/User/components/UserMovements" +import { Order, ProposalType, StatusOption } from "./FiltersUserDialog" const TableContainer = styled(Grid)({ width: "100%" @@ -23,6 +26,11 @@ const ProposalsFooter = styled(Grid)({ minHeight: 34 }) +const LoaderContainer = styled(Grid)({ + paddingTop: 40, + paddingBottom: 40 +}) + interface Props { currentLevel: number proposals: Proposal[] | undefined @@ -30,15 +38,22 @@ interface Props { rightItem?: (proposal: Proposal) => React.ReactElement liteProposals: Poll[] | undefined proposalStyle?: any + showFullList?: boolean + filters: undefined | Filters +} + +interface ProposalObj { + type: string + proposal: Proposal | Poll } export const ProposalsList: React.FC = ({ currentLevel, proposals, - showFooter, - rightItem, liteProposals, - proposalStyle + proposalStyle, + showFullList = true, + filters = undefined }) => { const [currentPage, setCurrentPage] = useState(0) const [offset, setOffset] = useState(0) @@ -48,22 +63,41 @@ export const ProposalsList: React.FC = ({ const [filterOnchain, setFilterOnchain] = useState() const [isLoading, setIsLoading] = useState(false) - const itemsPerPage = 24 - const pageCount = Math.ceil( - proposals && liteProposals - ? proposals.length + liteProposals.length / itemsPerPage - : proposals && liteProposals?.length === undefined - ? proposals.length / itemsPerPage - : proposals?.length === undefined && liteProposals - ? liteProposals.length / itemsPerPage - : 0 - ) + const listOfProposals = useMemo(() => { + const proposalList: { type: string; proposal: Proposal | Poll }[] = [] + proposals?.map(proposal => { + const item = { + type: "lambda", + proposal: proposal + } + proposalList.push(item) + return + }) + liteProposals?.map(proposal => { + const item = { + type: "lite", + proposal: proposal + } + proposalList.push(item) + return + }) + return proposalList + }, [liteProposals, proposals]) + + useEffect(() => { + setFilteredProposals(listOfProposals) + }, []) + + useEffect(() => { + setFilteredProposals(listOfProposals) + }, [showFullList]) + + const pageCount = Math.ceil(filteredProposals ? filteredProposals.length / 4 : 0) // Invoke when user click to request another page. const handlePageClick = (event: { selected: number }) => { - if (proposals) { - const newOffset = (event.selected * itemsPerPage) % proposals.length - setOffset(newOffset) + if (filteredProposals) { + setOffset((event.selected * 4) % filteredProposals.length) setCurrentPage(event.selected) } } @@ -174,66 +208,54 @@ export const ProposalsList: React.FC = ({ return ( - - {proposals && proposals.length && proposals.length > 0 ? ( - - {proposals.slice(offset, offset + itemsPerPage).map((p, i) => ( - - - - {rightItem ? rightItem(p) : null} - - - - ))} + {isLoading ? ( + + + + ) : ( + <> + + {filteredProposals && filteredProposals.length && filteredProposals.length > 0 ? ( + + {filteredProposals.slice(offset, offset + 4).map((p, i) => + p.type === "lambda" ? ( + + + + + + ) : ( +
+ +
+ ) + )} +
+ ) : ( + No proposals found + )}
- ) : null} - {liteProposals && liteProposals.length > 0 - ? liteProposals.slice(offset, offset + itemsPerPage).map((poll, i) => { - return ( -
- -
- ) - }) - : null} - - {showFooter && ( - - - - - View All Proposals - - + {showFullList ? ( + + - - )} -
- - - + ) : null} + + )}
) } diff --git a/src/modules/explorer/pages/DAOList/index.tsx b/src/modules/explorer/pages/DAOList/index.tsx index 65be60ea..0220bc54 100644 --- a/src/modules/explorer/pages/DAOList/index.tsx +++ b/src/modules/explorer/pages/DAOList/index.tsx @@ -114,66 +114,7 @@ const TabsContainer = styled(Grid)(({ theme }) => ({ })) export const DAOList: React.FC = () => { - const { network, account, etherlink } = useTezos() - const { data: daos, isLoading } = useAllDAOs(network) - - const theme = useTheme() - const isMobileSmall = useMediaQuery(theme.breakpoints.down("mobile")) - const myDAOs = useMemo(() => { - if (daos) { - const formattedDAOs = daos - .map(dao => ({ - id: dao.address, - name: dao.name, - symbol: dao.token.symbol, - votingAddresses: dao.ledgers ? dao.ledgers.map(l => l.holder.address) : [], - votingAddressesCount: - dao.dao_type.name === "lite" ? dao.votingAddressesCount : dao.ledgers ? dao.ledgers?.length : 0, - dao_type: { - name: dao.dao_type.name - }, - description: dao.description, - allowPublicAccess: dao.dao_type.name === "lite" ? dao.allowPublicAccess : true - })) - .sort((a, b) => b.votingAddresses.length - a.votingAddresses.length) - - if (searchText) { - return formattedDAOs.filter( - formattedDao => - (formattedDao.name && formattedDao.name.toLowerCase().includes(searchText.toLowerCase())) || - (formattedDao.symbol && formattedDao.symbol.toLowerCase().includes(searchText.toLowerCase())) - ) - } - return formattedDAOs.filter(dao => dao.votingAddresses.includes(account)) - } - - return [] - }, [daos, account, searchText]) - - if (!account) return - - if (isLoading) - return ( - - - - ) - - if (myDAOs.length === 0) return You have not joined any DAO - - return ( - - {myDAOs.map((dao, i) => ( - - - - ))} - - ) -} - -export const DAOList: React.FC = () => { - const { network } = useTezos() + const { network, etherlink, account } = useTezos() const { data: daos, isLoading } = useAllDAOs(network) const theme = useTheme() diff --git a/src/modules/explorer/pages/Proposals/index.tsx b/src/modules/explorer/pages/Proposals/index.tsx index 1de9f47c..312cc18f 100644 --- a/src/modules/explorer/pages/Proposals/index.tsx +++ b/src/modules/explorer/pages/Proposals/index.tsx @@ -280,6 +280,7 @@ export const Proposals: React.FC = () => { currentLevel={cycleInfo.currentLevel} proposals={proposals} liteProposals={undefined} + filters={filters} /> )} {!(proposals && proposals.length > 0) ? ( @@ -302,6 +303,7 @@ export const Proposals: React.FC = () => { currentLevel={cycleInfo.currentLevel} proposals={undefined} liteProposals={polls} + filters={filters} /> )} {!(polls && polls.length > 0) ? ( diff --git a/src/modules/explorer/pages/User/components/UserMovements.tsx b/src/modules/explorer/pages/User/components/UserMovements.tsx index 8cfae137..27d30e07 100644 --- a/src/modules/explorer/pages/User/components/UserMovements.tsx +++ b/src/modules/explorer/pages/User/components/UserMovements.tsx @@ -197,33 +197,6 @@ export const UserMovements: React.FC<{ setFilters(filters) } - const handleChangeTabTransactions = (newValue: number) => { - if (newValue === 0) { - setFilteredTransactions(transfers) - setPageCount(Math.ceil(transfers ? transfers.length / 2 : 0)) - } - if (newValue === 1) { - const newArray = transfers?.filter(item => item.type === "Withdrawal") - setFilteredTransactions(newArray) - setPageCount(Math.ceil(newArray ? newArray.length / 2 : 1)) - } - if (newValue === 2) { - const newArray = transfers?.filter(item => item.type === "Deposit") - setFilteredTransactions(newArray) - setPageCount(Math.ceil(newArray ? newArray.length / 2 : 1)) - } - setSelectedTabTransactions(newValue) - } - - // Invoke when user click to request another page. - const handlePageClick = (event: { selected: number }) => { - if (transfers) { - const newOffset = (event.selected * count) % (filteredTransactions ? filteredTransactions.length : 1) - setOffset(newOffset) - setCurrentPage(event.selected) - } - } - return ( {showActivity ? ( @@ -306,6 +279,8 @@ export const UserMovements: React.FC<{ currentLevel={cycleInfo.currentLevel} proposals={showActivity ? proposalsCreated : proposalsCreated.slice(0, 2)} liteProposals={showActivity ? pollsPosted : pollsPosted?.slice(0, 2)} + showFullList={showActivity} + filters={filters} /> )} {!(proposalsCreated && proposalsCreated.length > 0) && !(pollsPosted && pollsPosted.length > 0) ? ( @@ -328,6 +303,8 @@ export const UserMovements: React.FC<{ currentLevel={cycleInfo.currentLevel} proposals={showActivity ? proposalsVoted : proposalsVoted.slice(0, 2)} liteProposals={showActivity ? votedPolls : votedPolls.slice(0, 2)} + showFullList={showActivity} + filters={filters} /> )} {!(proposalsVoted && proposalsVoted.length > 0) && !(votedPolls && votedPolls.length > 0) ? ( diff --git a/src/modules/explorer/pages/User/index.tsx b/src/modules/explorer/pages/User/index.tsx index 794a256b..6ed47657 100644 --- a/src/modules/explorer/pages/User/index.tsx +++ b/src/modules/explorer/pages/User/index.tsx @@ -15,12 +15,11 @@ import { StatusBadge } from "../../components/StatusBadge" import { ProfileAvatar } from "../../components/styled/ProfileAvatar" import { UserBalances } from "../../components/UserBalances" import { UserProfileName } from "../../components/UserProfileName" -import { usePolls } from "modules/lite/explorer/hooks/usePolls" + import { Delegation } from "./components/DelegationBanner" import { useTokenDelegationSupported } from "services/contracts/token/hooks/useTokenDelegationSupported" import { UserMovements } from "./components/UserMovements" -import { useUserVotes } from "modules/lite/explorer/hooks/useUserVotes" -import { Poll } from "models/Polls" + import { CopyButton } from "modules/explorer/components/CopyButton" const ContentBlockItem = styled(Grid)(({ theme }: { theme: Theme }) => ({ @@ -65,11 +64,6 @@ const TitleText = styled(Typography)({ fontSize: 32 }) -const TitleText = styled(Typography)({ - fontWeight: 600, - fontSize: 32 -}) - export const ProposalItem: React.FC<{ proposal: Proposal | any status: ProposalStatus diff --git a/src/modules/lite/explorer/components/ProposalDetailCard.tsx b/src/modules/lite/explorer/components/ProposalDetailCard.tsx index e5a21646..3ca820ac 100644 --- a/src/modules/lite/explorer/components/ProposalDetailCard.tsx +++ b/src/modules/lite/explorer/components/ProposalDetailCard.tsx @@ -6,6 +6,8 @@ import { CreatorBadge } from "./CreatorBadge" import { FileCopyOutlined } from "@material-ui/icons" import { Poll } from "models/Polls" import dayjs from "dayjs" +import LinkIcon from "assets/img/link.svg" + import { useNotification } from "modules/common/hooks/useNotification" import ReactHtmlParser from "react-html-parser" @@ -219,17 +221,16 @@ export const ProposalDetailCard: React.FC<{ poll: Poll | undefined; daoId: strin - {ReactHtmlParser(poll?.description ? poll?.description : "")} - + {ReactHtmlParser(poll?.description ? poll?.description : "")} - {/* {poll?.externalLink ? ( + {poll?.externalLink ? ( {poll?.externalLink} - ) : null} */} + ) : null} diff --git a/src/modules/lite/explorer/pages/ProposalDetails/index.tsx b/src/modules/lite/explorer/pages/ProposalDetails/index.tsx index 1f8545b1..04f08a7f 100644 --- a/src/modules/lite/explorer/pages/ProposalDetails/index.tsx +++ b/src/modules/lite/explorer/pages/ProposalDetails/index.tsx @@ -22,6 +22,7 @@ import { ArrowBackIosOutlined } from "@material-ui/icons" import { useIsMember } from "../../hooks/useIsMember" import { useHistoryLength } from "modules/explorer/context/HistoryLength" import { getEthSignature } from "services/utils/utils" +import { SmallButton } from "modules/common/SmallButton" const DescriptionText = styled(Typography)({ fontSize: 24, diff --git a/src/services/aci/endpoint.ts b/src/services/aci/endpoint.ts index ec4875b4..d7a83c28 100644 --- a/src/services/aci/endpoint.ts +++ b/src/services/aci/endpoint.ts @@ -157,8 +157,6 @@ function parseSchema(counter: number, token: TokenSchema, init: Record, counter: number, d function parseSchema( counter: number, - token: TokenSchema, + token: TokenSchema | any, init: Record, name?: string ): [token, number] { @@ -439,7 +439,7 @@ function parseSchema( counter ] default: - return assertNever(token) + return assertNever(token.__michelsonType as never) } } function evalTaquitoParam(token: token, tableValue: Record): any { diff --git a/src/services/aci/useArbitratyContractData.ts b/src/services/aci/useArbitratyContractData.ts index a607c742..f2f2ffb8 100644 --- a/src/services/aci/useArbitratyContractData.ts +++ b/src/services/aci/useArbitratyContractData.ts @@ -4,6 +4,7 @@ import { useTezos } from "services/beacon/hooks/useTezos" import mixpanel from "mixpanel-browser" import { Network } from "services/beacon" import { EnvKey, getEnv } from "services/config" +import { TezosToolkit } from "@taquito/taquito" export const useArbitraryContractData = () => { const queryClient = useQueryClient() @@ -26,7 +27,7 @@ export const useArbitraryContractData = () => { let tezosToolkit = tezos if (!account) { - tezosToolkit = await connect() + tezosToolkit = (await connect()) as TezosToolkit } const resp = await fetch(`${getEnv(EnvKey.REACT_APP_LITE_API_URL)}/aci/${contract}`, { diff --git a/yarn.lock b/yarn.lock index ff06d93c..f34ba048 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4214,12 +4214,12 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@^17.0.2": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.25.tgz#e0e5b3571e1069625b3a3da2b279379aa33a0cb5" - integrity sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA== +"@types/react-dom@^18.2.25": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: - "@types/react" "^17" + "@types/react" "*" "@types/react-html-parser@^2.0.2": version "2.0.6" @@ -4269,7 +4269,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17", "@types/react@^17.0.3", "@types/react@~17.0.3": +"@types/react@*", "@types/react@~17.0.3": version "17.0.80" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== @@ -4278,6 +4278,15 @@ "@types/scheduler" "^0.16" csstype "^3.0.2" +"@types/react@^17.0.44": + version "17.0.83" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.83.tgz#b477c56387b74279281149dcf5ba2a1e2216d131" + integrity sha512-l0m4ArKJvmFtR4e8UmKrj1pB4tUgOhJITf+mADyF/p69Ts1YAR/E+G9XEM0mHXKVRa1dQNHseyyDNzeuAXfXQw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "^0.16" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -5462,6 +5471,11 @@ asn1.js@^4.10.1: inherits "^2.0.1" minimalistic-assert "^1.0.0" +assert-never@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.3.0.tgz#c53cf3ad8fcdb67f400a941dea66dac7fe82dd2e" + integrity sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ== + assert@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd"