Skip to content

Commit

Permalink
Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Corantin committed Oct 3, 2024
1 parent adb8cd1 commit 72e313f
Show file tree
Hide file tree
Showing 12 changed files with 10,680 additions and 8,526 deletions.
120 changes: 60 additions & 60 deletions apps/web/actions/getProposals.ts
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
import { ProposalMetadata } from "#/subgraph/.graphclient";
import { LightCVStrategy } from "@/types";
import { fetchIpfs } from "@/utils/ipfsUtils";
// import { ProposalMetadata } from "#/subgraph/.graphclient";
// import { LightCVStrategy } from "@/types";
// import { fetchIpfs } from "@/utils/ipfsUtils";

export async function getProposals(strategy: LightCVStrategy) {
try {
const fetchIPFSDataBatch = async function (
proposals: (typeof strategy)["proposals"],
batchSize = 5,
delay = 300,
) {
// Introduce a delay
const sleep = (ms: number) =>
new Promise((resolve) => setTimeout(resolve, ms));
// export async function getProposals(strategy: LightCVStrategy) {
// try {
// const fetchIPFSDataBatch = async function (
// proposals: (typeof strategy)["proposals"],
// batchSize = 5,
// delay = 300,
// ) {
// // Introduce a delay
// const sleep = (ms: number) =>
// new Promise((resolve) => setTimeout(resolve, ms));

// Create proposal chunks
const chunks = Array.from(
{ length: Math.ceil(proposals.length / batchSize) },
(_, i) => proposals.slice(i * batchSize, i * batchSize + batchSize),
);
// // Create proposal chunks
// const chunks = Array.from(
// { length: Math.ceil(proposals.length / batchSize) },
// (_, i) => proposals.slice(i * batchSize, i * batchSize + batchSize),
// );

// Process each chunk
let results: Array<Pick<ProposalMetadata, "title" | "description">> = [];
for (const chunk of chunks) {
chunk.forEach(async (p) => {
if (p.metadata) {
results.push(p.metadata);
} else {
const ipfsRes = await fetchIpfs<(typeof results)[number] | null>(
p.metadataHash,
);
if (ipfsRes) {
results.push(ipfsRes);
}
}
});
await sleep(delay);
}
// // Process each chunk
// let results: Array<Pick<ProposalMetadata, "title" | "description">> = [];
// for (const chunk of chunks) {
// chunk.forEach(async (p) => {
// if (p.metadata) {
// results.push(p.metadata);
// } else {
// const ipfsRes = await fetchIpfs<(typeof results)[number] | null>(
// p.metadataHash,
// );
// if (ipfsRes) {
// results.push(ipfsRes);
// }
// }
// });
// await sleep(delay);
// }

return results;
};
// return results;
// };

const proposalsData = await fetchIPFSDataBatch(strategy.proposals);
const transformedProposals = proposalsData
.map((data, index) => {
const p = strategy.proposals[index];
return {
...p,
voterStakedPointsPct: 0,
metadata: {
title: data.title,
description: data.description,
},
stakedAmount: strategy.proposals[index].stakedAmount,
type: strategy.config?.proposalType as number,
status: strategy.proposals[index].proposalStatus,
createdAt: strategy.proposals[index].createdAt,
};
})
.sort((a, b) => +a.proposalNumber - +b.proposalNumber); // Sort by proposal number ascending
// const proposalsData = await fetchIPFSDataBatch(strategy.proposals);
// const transformedProposals = proposalsData
// .map((data, index) => {
// const p = strategy.proposals[index];
// return {
// ...p,
// voterStakedPointsPct: 0,
// metadata: {
// title: data.title,
// description: data.description,
// },
// stakedAmount: strategy.proposals[index].stakedAmount,
// type: strategy.config?.proposalType as number,
// status: strategy.proposals[index].proposalStatus,
// createdAt: strategy.proposals[index].createdAt,
// };
// })
// .sort((a, b) => +a.proposalNumber - +b.proposalNumber); // Sort by proposal number ascending

return transformedProposals;
} catch (error) {
console.error("Error while getting proposal ipfs metadata", error);
}
}
// return transformedProposals;
// } catch (error) {
// console.error("Error while getting proposal ipfs metadata", error);
// }
// }
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export default function Page({
},
],
});

const strategyObj = data?.cvstrategies?.[0];
const poolTokenAddr = strategyObj?.token as Address;
const { data: poolToken } = useToken({
Expand Down Expand Up @@ -72,17 +73,24 @@ export default function Page({
"poolAmount: " + strategyObj?.poolAmount,
);
}, [strategyObj?.config, strategyObj?.config, strategyObj?.poolAmount]);

const newProposalId = searchParams[QUERY_PARAMS.poolPage.newProposal];

useEffect(() => {
const newProposalId = searchParams[QUERY_PARAMS.poolPage.newPropsoal];
console.log({
newProposalId,
data,
proposals: strategyObj?.proposals.map((c) => c.proposalNumber.toString()),
});
if (
newProposalId &&
data &&
!strategyObj?.proposals.some((c) => c.proposalNumber === newProposalId)
!strategyObj?.proposals.some(
(c) => c.proposalNumber.toString() === newProposalId,
)
) {
refetch();
}
}, [searchParams, strategyObj?.proposals]);
}, [newProposalId, searchParams, strategyObj?.proposals, data]);

const tokenGarden = data?.tokenGarden;

Expand Down
26 changes: 8 additions & 18 deletions apps/web/components/Forms/ProposalForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ type ProposalFormProps = {
proposalType: number;
alloInfo: Pick<Allo, "id" | "chainId" | "tokenNative">;
tokenGarden: Pick<TokenGarden, "symbol" | "decimals">;
tokenAddress: Address;
spendingLimit: number;
spendingLimitPct: number;
poolAmount: number;
Expand Down Expand Up @@ -116,7 +115,6 @@ export const ProposalForm = ({
proposalType,
alloInfo,
tokenGarden,
tokenAddress,
spendingLimit,
spendingLimitPct,
}: ProposalFormProps) => {
Expand Down Expand Up @@ -217,16 +215,16 @@ export const ProposalForm = ({
id: proposalId.toString(), // proposalId is a bigint
chainId,
});
setLoading(false);
if (pathname) {
router.push(
pathname.replace(
"/create-proposal",
`?${QUERY_PARAMS.poolPage.newPropsoal}=${proposalId}`,
),
const newPath = pathname.replace(
"/create-proposal",
`?${QUERY_PARAMS.poolPage.newProposal}=${proposalId}`,
);
console.log({ newPath });
router.push(newPath);
}
},
onSettled: () => setLoading(false),
});

const poolTokenAddr = strategy?.token as Address;
Expand Down Expand Up @@ -265,7 +263,7 @@ export const ProposalForm = ({
poolId,
previewData.beneficiary,
requestedAmount,
tokenAddress,
poolTokenAddr,
metadata,
]);

Expand All @@ -275,19 +273,11 @@ export const ProposalForm = ({
previewData?.beneficiary ||
"0x0000000000000000000000000000000000000000",
requestedAmount,
tokenAddress,
poolTokenAddr,
metadata,
],
]);

console.debug(
poolId,
previewData.beneficiary,
requestedAmount,
tokenAddress,
metadata,
);

return encodedData;
};

Expand Down
2 changes: 1 addition & 1 deletion apps/web/components/PoolCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export function PoolCard({ pool, tokenGarden }: Props) {
const poolType = config?.proposalType as number | undefined;

const isNewPool =
searchParams[QUERY_PARAMS.communityPage.newPool] === pool.poolId;
searchParams[QUERY_PARAMS.communityPage.newPool] === pool.poolId.toString();
return (
<Card
href={`${pathname}/${poolId}`}
Expand Down
40 changes: 25 additions & 15 deletions apps/web/components/ProposalCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,26 @@ import { Hashicon } from "@emeraldpay/hashicon-react";
import { FetchTokenResult } from "@wagmi/core";
import { usePathname } from "next/navigation";
import { formatUnits } from "viem";
import { Allo } from "#/subgraph/.graphclient";
import {
Allo,
CVStrategyConfig,
getPoolDataQuery,
} from "#/subgraph/.graphclient";
import { DisplayNumber } from "./DisplayNumber";
import { ProposalInputItem } from "./Proposals";
import { getProposals } from "@/actions/getProposals";
import { Badge, Card } from "@/components";
import { ConvictionBarChart } from "@/components/Charts/ConvictionBarChart";
import { QUERY_PARAMS } from "@/constants/query-params";
import { useCollectQueryParams } from "@/contexts/collectQueryParams.context";
import { useConvictionRead } from "@/hooks/useConvictionRead";
import { useMetadataIpfsFetch } from "@/hooks/useIpfsFetch";
import { PoolTypes } from "@/types";
import { calculatePercentage } from "@/utils/numbers";
import { prettyTimestamp } from "@/utils/text";

type ProposalCardProps = {
proposalData: NonNullable<Awaited<ReturnType<typeof getProposals>>>[0];
proposalData: getPoolDataQuery["cvstrategies"][number]["proposals"][number];
strategyConfig: Pick<CVStrategyConfig, "proposalType">;
inputData: ProposalInputItem;
stakedFilter: ProposalInputItem;
index: number;
Expand All @@ -32,11 +37,11 @@ type ProposalCardProps = {
alloInfo: Allo;
tokenData: Parameters<typeof useConvictionRead>[0]["tokenData"];
inputHandler: (i: number, value: number) => void;
triggerRenderProposals: () => void;
};

export function ProposalCard({
proposalData,
strategyConfig,
inputData,
stakedFilter,
index,
Expand All @@ -47,20 +52,21 @@ export function ProposalCard({
tokenData,
inputHandler,
}: ProposalCardProps) {
const {
metadata,
id,
proposalNumber,
proposalStatus,
requestedAmount,
type,
} = proposalData;
const { data: metadataResult } = useMetadataIpfsFetch({
hash: proposalData.metadataHash,
enabled: !proposalData.metadata,
});

const metadata = proposalData.metadata ?? metadataResult;

const { id, proposalNumber, proposalStatus, requestedAmount } = proposalData;
const pathname = usePathname();

const searchParams = useCollectQueryParams();
// TODO: ADD border color when new proposal is added
const isNewProposal =
searchParams[QUERY_PARAMS.poolPage.newPropsoal] == proposalNumber;
searchParams[QUERY_PARAMS.poolPage.newProposal] ==
proposalNumber.toString();

const { currentConvictionPct, thresholdPct, totalSupportPct } =
useConvictionRead({
Expand All @@ -81,7 +87,8 @@ export function ProposalCard({
100
).toFixed(2);

const isSignalingType = PoolTypes[type] === "signaling";
const isSignalingType =
PoolTypes[strategyConfig.proposalType] === "signaling";

const supportNeededToPass = (
(thresholdPct ?? 0) - (totalSupportPct ?? 0)
Expand All @@ -100,7 +107,10 @@ export function ProposalCard({
</div>
<div className="overflow-hidden">
<h4 className="truncate first-letter:uppercase sm:max-w-md lg:max-w-lg">
{metadata.title}
{metadata ?
metadata.title
: <div className="[--fallback-b3:#f0f0f0] skeleton w-96 h-7 rounded-md" />
}
</h4>
<div className="flex items-baseline gap-3">
<h6 className="text-sm">ID {proposalNumber}</h6>
Expand Down
Loading

0 comments on commit 72e313f

Please sign in to comment.