diff --git a/src/app/assessment/components/Question.tsx b/src/app/assessment/components/Question.tsx index 1fd0b88..45451aa 100644 --- a/src/app/assessment/components/Question.tsx +++ b/src/app/assessment/components/Question.tsx @@ -10,6 +10,7 @@ export interface QuestionProps { onChange: (id: string, value: number) => void; isLoading?: boolean; isSuccess?: boolean; + isAnswered?: boolean; explorerButton?: React.ReactNode; } @@ -28,8 +29,9 @@ export default function Question({ text, value, onChange, - isLoading, - isSuccess, + isLoading = false, + isSuccess = false, + isAnswered = false, explorerButton, }: QuestionProps) { // Treat 0 as "no selection" @@ -59,7 +61,7 @@ export default function Question({ htmlFor={`${id}-${t.value}`} className="flex flex-col items-center cursor-pointer" > - {isSuccess && value === t.value ? ( + {(isSuccess && value === t.value) || (isAnswered && value === t.value) ? (
) : isLoading && value === t.value ? ( diff --git a/src/app/assessment/components/web3.tsx b/src/app/assessment/components/web3.tsx index 4f5994b..ddd6ab5 100644 --- a/src/app/assessment/components/web3.tsx +++ b/src/app/assessment/components/web3.tsx @@ -12,10 +12,14 @@ import { useContainerSize } from '@/hooks/useContainerSize'; import { useAccount, useChainId } from 'wagmi'; import { useDepositTriple } from '@/hooks/useDepositTriple'; import { MULTIVAULT_CONTRACT_ADDRESS, BLOCK_EXPLORER_URL } from '@/config/blockchain'; -import { parseUnits } from 'viem'; +import { parseUnits, formatUnits } from 'viem'; import { Abi } from 'viem'; import { multivaultAbi } from '@/lib/abis/multivault'; import { baseSepolia } from 'viem/chains'; +import { flushSync } from "react-dom"; +import { useMultivaultContract } from '@/hooks/useMultivaultContract'; +import { useContractRead } from 'wagmi'; +import { useGetTriplesWithPositionsQuery } from '@0xintuition/graphql'; const ANIM = { duration: 0.3 }; const STORAGE_ANS = "plebs_answers_web3"; @@ -31,6 +35,7 @@ interface TransactionStatus { interface PendingTransaction { questionId: string; tripleId: number; + answer: number; } export default function Web3Assessment() { @@ -44,6 +49,24 @@ export default function Web3Assessment() { onReceipt } = useDepositTriple(MULTIVAULT_CONTRACT_ADDRESS); + // Get minimum deposit amount from contract + const { data: generalConfig } = useContractRead({ + address: MULTIVAULT_CONTRACT_ADDRESS as `0x${string}`, + abi: multivaultAbi as Abi, + functionName: 'generalConfig', + chainId: baseSepolia.id, + }) as { data: [string, string, bigint, bigint, bigint, bigint, bigint, bigint] | undefined }; + + const minDeposit = generalConfig ? formatUnits(generalConfig[3], 18) : '0.001'; + + // Get positions for all triples + const { data: positionsData, isLoading: isLoadingPositions } = useGetTriplesWithPositionsQuery({ + where: { + id: { _in: questions.map(q => q.triple.id) } + }, + address: address?.toLowerCase() as `0x${string}` + }); + const [answers, setAnswers] = useState