From 57d7b8e41f850ca39128593406a37aee070d1ab6 Mon Sep 17 00:00:00 2001 From: Yash Goyal Date: Thu, 16 May 2024 19:05:26 +0530 Subject: [PATCH] initial commit --- .../nextjs/app/_components/RegisterButton.tsx | 12 +- packages/nextjs/app/admin/page.tsx | 133 ++++++++-------- .../_components/AddressCodeTab.tsx | 0 .../_components/AddressComponent.tsx | 0 .../_components/AddressLogsTab.tsx | 0 .../_components/AddressStorageTab.tsx | 0 .../_components/BackButton.tsx | 0 .../_components/ContractTabs.tsx | 0 .../_components/PaginationButton.tsx | 0 .../_components/SearchBar.tsx | 0 .../_components/TransactionHash.tsx | 0 .../_components/TransactionsTable.tsx | 0 .../_components/index.tsx | 0 .../address/[address]/page.tsx | 2 +- .../layout.tsx | 0 .../page.tsx | 0 .../transaction/[txHash]/page.tsx | 0 .../app/debug/_components/DebugContracts.tsx | 66 -------- .../_components/contract/ContractInput.tsx | 84 ---------- .../contract/ContractReadMethods.tsx | 43 ----- .../debug/_components/contract/ContractUI.tsx | 104 ------------ .../contract/ContractVariables.tsx | 50 ------ .../contract/ContractWriteMethods.tsx | 49 ------ .../_components/contract/DisplayVariable.tsx | 73 --------- .../contract/InheritanceTooltip.tsx | 14 -- .../contract/ReadOnlyFunctionForm.tsx | 93 ----------- .../app/debug/_components/contract/Tuple.tsx | 44 ------ .../debug/_components/contract/TupleArray.tsx | 139 ---------------- .../debug/_components/contract/TxReceipt.tsx | 48 ------ .../contract/WriteOnlyFunctionForm.tsx | 143 ----------------- .../app/debug/_components/contract/index.tsx | 8 - .../_components/contract/utilsContract.tsx | 149 ------------------ .../_components/contract/utilsDisplay.tsx | 56 ------- packages/nextjs/app/debug/page.tsx | 28 ---- packages/nextjs/app/page.tsx | 96 ++++++++--- packages/nextjs/app/polls/[id]/page.tsx | 10 -- packages/nextjs/app/polls/page.tsx | 54 ------- packages/nextjs/assets/anim.css | 18 +++ packages/nextjs/components/Header.tsx | 7 +- packages/nextjs/components/PollDetail.tsx | 6 +- .../ScaffoldEthAppWithProviders.tsx | 4 - packages/nextjs/public/fai.jpg | Bin 0 -> 115792 bytes 42 files changed, 178 insertions(+), 1355 deletions(-) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/AddressCodeTab.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/AddressComponent.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/AddressLogsTab.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/AddressStorageTab.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/BackButton.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/ContractTabs.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/PaginationButton.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/SearchBar.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/TransactionHash.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/TransactionsTable.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/_components/index.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/address/[address]/page.tsx (96%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/layout.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/page.tsx (100%) rename packages/nextjs/app/{blockexplorer => blockexplorer-testing-only}/transaction/[txHash]/page.tsx (100%) delete mode 100644 packages/nextjs/app/debug/_components/DebugContracts.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ContractInput.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ContractUI.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ContractVariables.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/Tuple.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/TupleArray.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/TxReceipt.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/index.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/utilsContract.tsx delete mode 100644 packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx delete mode 100644 packages/nextjs/app/debug/page.tsx delete mode 100644 packages/nextjs/app/polls/[id]/page.tsx delete mode 100644 packages/nextjs/app/polls/page.tsx create mode 100644 packages/nextjs/assets/anim.css create mode 100644 packages/nextjs/public/fai.jpg diff --git a/packages/nextjs/app/_components/RegisterButton.tsx b/packages/nextjs/app/_components/RegisterButton.tsx index 75f6e4f..7c8c09b 100644 --- a/packages/nextjs/app/_components/RegisterButton.tsx +++ b/packages/nextjs/app/_components/RegisterButton.tsx @@ -22,7 +22,10 @@ export default function RegisterButton() { if (!keypair) { return ( - ); @@ -33,8 +36,11 @@ export default function RegisterButton() { return ( <> (You are not registered yet) - ); diff --git a/packages/nextjs/app/admin/page.tsx b/packages/nextjs/app/admin/page.tsx index c4ff097..6ce5a56 100644 --- a/packages/nextjs/app/admin/page.tsx +++ b/packages/nextjs/app/admin/page.tsx @@ -6,6 +6,7 @@ import { redirect } from "next/navigation"; import CreatePollModal from "./_components/CreatePollModal"; import PollStatusModal from "./_components/PollStatusModal"; import { useAccount } from "wagmi"; +import { Header } from "~~/components/Header"; import Paginator from "~~/components/Paginator"; import { useScaffoldContractRead } from "~~/hooks/scaffold-eth"; import { useFetchPolls } from "~~/hooks/useFetchPolls"; @@ -30,72 +31,78 @@ export default function AdminPage() { }, [address, admin]); return ( -
-
-
Polls
- -
+ <> +
+
+
+
Polls
+ +
- {polls && polls.length !== 0 ? ( - <> - - - - - - - - - - - {polls.map(poll => ( - - - - - + {polls && polls.length !== 0 ? ( + <> +
Poll NameStart TimeEnd TimeStatus
{poll.name}{new Date(Number(poll.startTime) * 1000).toLocaleString()}{new Date(Number(poll.endTime) * 1000).toLocaleString()} - {poll.status == PollStatus.CLOSED ? ( - <> - {poll.status}{" "} - - - ) : poll.status == PollStatus.RESULT_COMPUTED ? ( - <> - {poll.status}{" "} - - (View Results) - - - ) : ( - poll.status - )} -
+ + + + + + - ))} - -
Poll NameStart TimeEnd TimeStatus
- {totalPages > 1 && ( - - )} - - ) : ( -
No polls found
- )} + + + {polls.map(poll => ( + + {poll.name} + {new Date(Number(poll.startTime) * 1000).toLocaleString()} + {new Date(Number(poll.endTime) * 1000).toLocaleString()} + + {poll.status == PollStatus.CLOSED ? ( + <> + {poll.status}{" "} + + + ) : poll.status == PollStatus.RESULT_COMPUTED ? ( + <> + {poll.status}{" "} + + (View Results) + + + ) : ( + poll.status + )} + + + ))} + + + {totalPages > 1 && ( + + )} + + ) : ( +
No polls found
+ )} - + - setSelectedPollForStatusModal(undefined)} - show={Boolean(selectedPollForStatusModal)} - /> -
+ setSelectedPollForStatusModal(undefined)} + show={Boolean(selectedPollForStatusModal)} + /> +
+ ); } diff --git a/packages/nextjs/app/blockexplorer/_components/AddressCodeTab.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/AddressCodeTab.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/AddressCodeTab.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/AddressCodeTab.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/AddressComponent.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/AddressComponent.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/AddressComponent.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/AddressLogsTab.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/AddressLogsTab.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/AddressLogsTab.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/AddressLogsTab.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/AddressStorageTab.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/AddressStorageTab.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/AddressStorageTab.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/AddressStorageTab.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/BackButton.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/BackButton.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/BackButton.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/BackButton.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/ContractTabs.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/ContractTabs.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/ContractTabs.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/PaginationButton.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/PaginationButton.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/PaginationButton.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/PaginationButton.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/SearchBar.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/SearchBar.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/SearchBar.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/SearchBar.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/TransactionHash.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/TransactionHash.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/TransactionHash.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/TransactionHash.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/TransactionsTable.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/TransactionsTable.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/TransactionsTable.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/TransactionsTable.tsx diff --git a/packages/nextjs/app/blockexplorer/_components/index.tsx b/packages/nextjs/app/blockexplorer-testing-only/_components/index.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/_components/index.tsx rename to packages/nextjs/app/blockexplorer-testing-only/_components/index.tsx diff --git a/packages/nextjs/app/blockexplorer/address/[address]/page.tsx b/packages/nextjs/app/blockexplorer-testing-only/address/[address]/page.tsx similarity index 96% rename from packages/nextjs/app/blockexplorer/address/[address]/page.tsx rename to packages/nextjs/app/blockexplorer-testing-only/address/[address]/page.tsx index dda48ba..15f5be9 100644 --- a/packages/nextjs/app/blockexplorer/address/[address]/page.tsx +++ b/packages/nextjs/app/blockexplorer-testing-only/address/[address]/page.tsx @@ -1,7 +1,7 @@ import fs from "fs"; import path from "path"; import { hardhat } from "viem/chains"; -import { AddressComponent } from "~~/app/blockexplorer/_components/AddressComponent"; +import { AddressComponent } from "~~/app/blockexplorer-testing-only/_components/AddressComponent"; import deployedContracts from "~~/contracts/deployedContracts"; import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; diff --git a/packages/nextjs/app/blockexplorer/layout.tsx b/packages/nextjs/app/blockexplorer-testing-only/layout.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/layout.tsx rename to packages/nextjs/app/blockexplorer-testing-only/layout.tsx diff --git a/packages/nextjs/app/blockexplorer/page.tsx b/packages/nextjs/app/blockexplorer-testing-only/page.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/page.tsx rename to packages/nextjs/app/blockexplorer-testing-only/page.tsx diff --git a/packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx b/packages/nextjs/app/blockexplorer-testing-only/transaction/[txHash]/page.tsx similarity index 100% rename from packages/nextjs/app/blockexplorer/transaction/[txHash]/page.tsx rename to packages/nextjs/app/blockexplorer-testing-only/transaction/[txHash]/page.tsx diff --git a/packages/nextjs/app/debug/_components/DebugContracts.tsx b/packages/nextjs/app/debug/_components/DebugContracts.tsx deleted file mode 100644 index 82bc18a..0000000 --- a/packages/nextjs/app/debug/_components/DebugContracts.tsx +++ /dev/null @@ -1,66 +0,0 @@ -"use client"; - -import { useEffect } from "react"; -import { useLocalStorage } from "usehooks-ts"; -import { BarsArrowUpIcon } from "@heroicons/react/20/solid"; -import { ContractUI } from "~~/app/debug/_components/contract"; -import { ContractName } from "~~/utils/scaffold-eth/contract"; -import { getAllContracts } from "~~/utils/scaffold-eth/contractsData"; - -const selectedContractStorageKey = "scaffoldEth2.selectedContract"; -const contractsData = getAllContracts(); -const contractNames = Object.keys(contractsData) as ContractName[]; - -export function DebugContracts() { - const [selectedContract, setSelectedContract] = useLocalStorage( - selectedContractStorageKey, - contractNames[0], - { initializeWithValue: false }, - ); - - useEffect(() => { - if (!contractNames.includes(selectedContract)) { - setSelectedContract(contractNames[0]); - } - }, [selectedContract, setSelectedContract]); - - return ( -
- {contractNames.length === 0 ? ( -

No contracts found!

- ) : ( - <> - {contractNames.length > 1 && ( -
- {contractNames.map(contractName => ( - - ))} -
- )} - {contractNames.map(contractName => ( - - ))} - - )} -
- ); -} diff --git a/packages/nextjs/app/debug/_components/contract/ContractInput.tsx b/packages/nextjs/app/debug/_components/contract/ContractInput.tsx deleted file mode 100644 index 766431e..0000000 --- a/packages/nextjs/app/debug/_components/contract/ContractInput.tsx +++ /dev/null @@ -1,84 +0,0 @@ -"use client"; - -import { Dispatch, SetStateAction } from "react"; -import { Tuple } from "./Tuple"; -import { TupleArray } from "./TupleArray"; -import { AbiParameter } from "abitype"; -import { - AddressInput, - Bytes32Input, - BytesInput, - InputBase, - IntegerInput, - IntegerVariant, -} from "~~/components/scaffold-eth"; -import { AbiParameterTuple } from "~~/utils/scaffold-eth/contract"; - -type ContractInputProps = { - setForm: Dispatch>>; - form: Record | undefined; - stateObjectKey: string; - paramType: AbiParameter; -}; - -/** - * Generic Input component to handle input's based on their function param type - */ -export const ContractInput = ({ setForm, form, stateObjectKey, paramType }: ContractInputProps) => { - const inputProps = { - name: stateObjectKey, - value: form?.[stateObjectKey], - placeholder: paramType.name ? `${paramType.type} ${paramType.name}` : paramType.type, - onChange: (value: any) => { - setForm(form => ({ ...form, [stateObjectKey]: value })); - }, - }; - - const renderInput = () => { - switch (paramType.type) { - case "address": - return ; - case "bytes32": - return ; - case "bytes": - return ; - case "string": - return ; - case "tuple": - return ( - - ); - default: - // Handling 'int' types and 'tuple[]' types - if (paramType.type.includes("int") && !paramType.type.includes("[")) { - return ; - } else if (paramType.type.startsWith("tuple[")) { - return ( - - ); - } else { - return ; - } - } - }; - - return ( -
-
- {paramType.name && {paramType.name}} - {paramType.type} -
- {renderInput()} -
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx b/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx deleted file mode 100644 index f269fa9..0000000 --- a/packages/nextjs/app/debug/_components/contract/ContractReadMethods.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Abi, AbiFunction } from "abitype"; -import { ReadOnlyFunctionForm } from "~~/app/debug/_components/contract"; -import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; - -export const ContractReadMethods = ({ deployedContractData }: { deployedContractData: Contract }) => { - if (!deployedContractData) { - return null; - } - - const functionsToDisplay = ( - ((deployedContractData.abi || []) as Abi).filter(part => part.type === "function") as AbiFunction[] - ) - .filter(fn => { - const isQueryableWithParams = - (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length > 0; - return isQueryableWithParams; - }) - .map(fn => { - return { - fn, - inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], - }; - }) - .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); - - if (!functionsToDisplay.length) { - return <>No read methods; - } - - return ( - <> - {functionsToDisplay.map(({ fn, inheritedFrom }) => ( - - ))} - - ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/ContractUI.tsx b/packages/nextjs/app/debug/_components/contract/ContractUI.tsx deleted file mode 100644 index 31fcc7f..0000000 --- a/packages/nextjs/app/debug/_components/contract/ContractUI.tsx +++ /dev/null @@ -1,104 +0,0 @@ -"use client"; - -// @refresh reset -import { useReducer } from "react"; -import { ContractReadMethods } from "./ContractReadMethods"; -import { ContractVariables } from "./ContractVariables"; -import { ContractWriteMethods } from "./ContractWriteMethods"; -import { Address, Balance } from "~~/components/scaffold-eth"; -import { useDeployedContractInfo, useNetworkColor } from "~~/hooks/scaffold-eth"; -import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; -import { ContractName } from "~~/utils/scaffold-eth/contract"; - -type ContractUIProps = { - contractName: ContractName; - className?: string; -}; - -/** - * UI component to interface with deployed contracts. - **/ -export const ContractUI = ({ contractName, className = "" }: ContractUIProps) => { - const [refreshDisplayVariables, triggerRefreshDisplayVariables] = useReducer(value => !value, false); - const { targetNetwork } = useTargetNetwork(); - const { data: deployedContractData, isLoading: deployedContractLoading } = useDeployedContractInfo(contractName); - const networkColor = useNetworkColor(); - - if (deployedContractLoading) { - return ( -
- -
- ); - } - - if (!deployedContractData) { - return ( -

- {`No contract found by the name of "${contractName}" on chain "${targetNetwork.name}"!`} -

- ); - } - - return ( -
-
-
-
-
-
- {contractName} -
-
- Balance: - -
-
-
- {targetNetwork && ( -

- Network:{" "} - {targetNetwork.name} -

- )} -
-
- -
-
-
-
-
-
-
-

Read

-
-
-
- -
-
-
-
-
-
-
-

Write

-
-
-
- -
-
-
-
-
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/ContractVariables.tsx b/packages/nextjs/app/debug/_components/contract/ContractVariables.tsx deleted file mode 100644 index 9d25782..0000000 --- a/packages/nextjs/app/debug/_components/contract/ContractVariables.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { DisplayVariable } from "./DisplayVariable"; -import { Abi, AbiFunction } from "abitype"; -import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; - -export const ContractVariables = ({ - refreshDisplayVariables, - deployedContractData, -}: { - refreshDisplayVariables: boolean; - deployedContractData: Contract; -}) => { - if (!deployedContractData) { - return null; - } - - const functionsToDisplay = ( - (deployedContractData.abi as Abi).filter(part => part.type === "function") as AbiFunction[] - ) - .filter(fn => { - const isQueryableWithNoParams = - (fn.stateMutability === "view" || fn.stateMutability === "pure") && fn.inputs.length === 0; - return isQueryableWithNoParams; - }) - .map(fn => { - return { - fn, - inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], - }; - }) - .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); - - if (!functionsToDisplay.length) { - return <>No contract variables; - } - - return ( - <> - {functionsToDisplay.map(({ fn, inheritedFrom }) => ( - - ))} - - ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx b/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx deleted file mode 100644 index ee703a6..0000000 --- a/packages/nextjs/app/debug/_components/contract/ContractWriteMethods.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Abi, AbiFunction } from "abitype"; -import { WriteOnlyFunctionForm } from "~~/app/debug/_components/contract"; -import { Contract, ContractName, GenericContract, InheritedFunctions } from "~~/utils/scaffold-eth/contract"; - -export const ContractWriteMethods = ({ - onChange, - deployedContractData, -}: { - onChange: () => void; - deployedContractData: Contract; -}) => { - if (!deployedContractData) { - return null; - } - - const functionsToDisplay = ( - (deployedContractData.abi as Abi).filter(part => part.type === "function") as AbiFunction[] - ) - .filter(fn => { - const isWriteableFunction = fn.stateMutability !== "view" && fn.stateMutability !== "pure"; - return isWriteableFunction; - }) - .map(fn => { - return { - fn, - inheritedFrom: ((deployedContractData as GenericContract)?.inheritedFunctions as InheritedFunctions)?.[fn.name], - }; - }) - .sort((a, b) => (b.inheritedFrom ? b.inheritedFrom.localeCompare(a.inheritedFrom) : 1)); - - if (!functionsToDisplay.length) { - return <>No write methods; - } - - return ( - <> - {functionsToDisplay.map(({ fn, inheritedFrom }, idx) => ( - - ))} - - ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx b/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx deleted file mode 100644 index 805593d..0000000 --- a/packages/nextjs/app/debug/_components/contract/DisplayVariable.tsx +++ /dev/null @@ -1,73 +0,0 @@ -"use client"; - -import { useEffect } from "react"; -import { InheritanceTooltip } from "./InheritanceTooltip"; -import { displayTxResult } from "./utilsDisplay"; -import { Abi, AbiFunction } from "abitype"; -import { Address } from "viem"; -import { useContractRead } from "wagmi"; -import { ArrowPathIcon } from "@heroicons/react/24/outline"; -import { useAnimationConfig } from "~~/hooks/scaffold-eth"; -import { notification } from "~~/utils/scaffold-eth"; - -type DisplayVariableProps = { - contractAddress: Address; - abiFunction: AbiFunction; - refreshDisplayVariables: boolean; - inheritedFrom?: string; - abi: Abi; -}; - -export const DisplayVariable = ({ - contractAddress, - abiFunction, - refreshDisplayVariables, - abi, - inheritedFrom, -}: DisplayVariableProps) => { - const { - data: result, - isFetching, - refetch, - } = useContractRead({ - address: contractAddress, - functionName: abiFunction.name, - abi: abi, - onError: error => { - notification.error(error.message); - }, - }); - - const { showAnimation } = useAnimationConfig(result); - - useEffect(() => { - refetch(); - }, [refetch, refreshDisplayVariables]); - - return ( -
-
-

{abiFunction.name}

- - -
-
-
-
- {displayTxResult(result)} -
-
-
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx b/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx deleted file mode 100644 index 9825520..0000000 --- a/packages/nextjs/app/debug/_components/contract/InheritanceTooltip.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { InformationCircleIcon } from "@heroicons/react/20/solid"; - -export const InheritanceTooltip = ({ inheritedFrom }: { inheritedFrom?: string }) => ( - <> - {inheritedFrom && ( - - - )} - -); diff --git a/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx b/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx deleted file mode 100644 index 91bae12..0000000 --- a/packages/nextjs/app/debug/_components/contract/ReadOnlyFunctionForm.tsx +++ /dev/null @@ -1,93 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { InheritanceTooltip } from "./InheritanceTooltip"; -import { Abi, AbiFunction } from "abitype"; -import { Address } from "viem"; -import { useContractRead } from "wagmi"; -import { - ContractInput, - displayTxResult, - getFunctionInputKey, - getInitialFormState, - getParsedContractFunctionArgs, - transformAbiFunction, -} from "~~/app/debug/_components/contract"; -import { getParsedError, notification } from "~~/utils/scaffold-eth"; - -type ReadOnlyFunctionFormProps = { - contractAddress: Address; - abiFunction: AbiFunction; - inheritedFrom?: string; - abi: Abi; -}; - -export const ReadOnlyFunctionForm = ({ - contractAddress, - abiFunction, - inheritedFrom, - abi, -}: ReadOnlyFunctionFormProps) => { - const [form, setForm] = useState>(() => getInitialFormState(abiFunction)); - const [result, setResult] = useState(); - - const { isFetching, refetch } = useContractRead({ - address: contractAddress, - functionName: abiFunction.name, - abi: abi, - args: getParsedContractFunctionArgs(form), - enabled: false, - onError: (error: any) => { - const parsedErrror = getParsedError(error); - notification.error(parsedErrror); - }, - }); - - const transformedFunction = transformAbiFunction(abiFunction); - const inputElements = transformedFunction.inputs.map((input, inputIndex) => { - const key = getFunctionInputKey(abiFunction.name, input, inputIndex); - return ( - { - setResult(undefined); - setForm(updatedFormValue); - }} - form={form} - stateObjectKey={key} - paramType={input} - /> - ); - }); - - return ( -
-

- {abiFunction.name} - -

- {inputElements} -
-
- {result !== null && result !== undefined && ( -
-

Result:

-
{displayTxResult(result)}
-
- )} -
- -
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/Tuple.tsx b/packages/nextjs/app/debug/_components/contract/Tuple.tsx deleted file mode 100644 index 0e3175d..0000000 --- a/packages/nextjs/app/debug/_components/contract/Tuple.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Dispatch, SetStateAction, useEffect, useState } from "react"; -import { ContractInput } from "./ContractInput"; -import { getFunctionInputKey, getInitalTupleFormState } from "./utilsContract"; -import { replacer } from "~~/utils/scaffold-eth/common"; -import { AbiParameterTuple } from "~~/utils/scaffold-eth/contract"; - -type TupleProps = { - abiTupleParameter: AbiParameterTuple; - setParentForm: Dispatch>>; - parentStateObjectKey: string; - parentForm: Record | undefined; -}; - -export const Tuple = ({ abiTupleParameter, setParentForm, parentStateObjectKey }: TupleProps) => { - const [form, setForm] = useState>(() => getInitalTupleFormState(abiTupleParameter)); - - useEffect(() => { - const values = Object.values(form); - const argsStruct: Record = {}; - abiTupleParameter.components.forEach((component, componentIndex) => { - argsStruct[component.name || `input_${componentIndex}_`] = values[componentIndex]; - }); - - setParentForm(parentForm => ({ ...parentForm, [parentStateObjectKey]: JSON.stringify(argsStruct, replacer) })); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [JSON.stringify(form, replacer)]); - - return ( -
-
- -
-

{abiTupleParameter.internalType}

-
-
- {abiTupleParameter?.components?.map((param, index) => { - const key = getFunctionInputKey(abiTupleParameter.name || "tuple", param, index); - return ; - })} -
-
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/TupleArray.tsx b/packages/nextjs/app/debug/_components/contract/TupleArray.tsx deleted file mode 100644 index 1eb23c2..0000000 --- a/packages/nextjs/app/debug/_components/contract/TupleArray.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { Dispatch, SetStateAction, useEffect, useState } from "react"; -import { ContractInput } from "./ContractInput"; -import { getFunctionInputKey, getInitalTupleArrayFormState } from "./utilsContract"; -import { replacer } from "~~/utils/scaffold-eth/common"; -import { AbiParameterTuple } from "~~/utils/scaffold-eth/contract"; - -type TupleArrayProps = { - abiTupleParameter: AbiParameterTuple & { isVirtual?: true }; - setParentForm: Dispatch>>; - parentStateObjectKey: string; - parentForm: Record | undefined; -}; - -export const TupleArray = ({ abiTupleParameter, setParentForm, parentStateObjectKey }: TupleArrayProps) => { - const [form, setForm] = useState>(() => getInitalTupleArrayFormState(abiTupleParameter)); - const [additionalInputs, setAdditionalInputs] = useState>([ - abiTupleParameter.components, - ]); - - const depth = (abiTupleParameter.type.match(/\[\]/g) || []).length; - - useEffect(() => { - // Extract and group fields based on index prefix - const groupedFields = Object.keys(form).reduce((acc, key) => { - const [indexPrefix, ...restArray] = key.split("_"); - const componentName = restArray.join("_"); - if (!acc[indexPrefix]) { - acc[indexPrefix] = {}; - } - acc[indexPrefix][componentName] = form[key]; - return acc; - }, {} as Record>); - - let argsArray: Array> = []; - - Object.keys(groupedFields).forEach(key => { - const currentKeyValues = Object.values(groupedFields[key]); - - const argsStruct: Record = {}; - abiTupleParameter.components.forEach((component, componentIndex) => { - argsStruct[component.name || `input_${componentIndex}_`] = currentKeyValues[componentIndex]; - }); - - argsArray.push(argsStruct); - }); - - if (depth > 1) { - argsArray = argsArray.map(args => { - return args[abiTupleParameter.components[0].name || "tuple"]; - }); - } - - setParentForm(parentForm => { - return { ...parentForm, [parentStateObjectKey]: JSON.stringify(argsArray, replacer) }; - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [JSON.stringify(form, replacer)]); - - const addInput = () => { - setAdditionalInputs(previousValue => { - const newAdditionalInputs = [...previousValue, abiTupleParameter.components]; - - // Add the new inputs to the form - setForm(form => { - const newForm = { ...form }; - abiTupleParameter.components.forEach((component, componentIndex) => { - const key = getFunctionInputKey( - `${newAdditionalInputs.length - 1}_${abiTupleParameter.name || "tuple"}`, - component, - componentIndex, - ); - newForm[key] = ""; - }); - return newForm; - }); - - return newAdditionalInputs; - }); - }; - - const removeInput = () => { - // Remove the last inputs from the form - setForm(form => { - const newForm = { ...form }; - abiTupleParameter.components.forEach((component, componentIndex) => { - const key = getFunctionInputKey( - `${additionalInputs.length - 1}_${abiTupleParameter.name || "tuple"}`, - component, - componentIndex, - ); - delete newForm[key]; - }); - return newForm; - }); - setAdditionalInputs(inputs => inputs.slice(0, -1)); - }; - - return ( -
-
- -
-

{abiTupleParameter.internalType}

-
-
- {additionalInputs.map((additionalInput, additionalIndex) => ( -
- - {depth > 1 ? `${additionalIndex}` : `tuple[${additionalIndex}]`} - -
- {additionalInput.map((param, index) => { - const key = getFunctionInputKey( - `${additionalIndex}_${abiTupleParameter.name || "tuple"}`, - param, - index, - ); - return ( - - ); - })} -
-
- ))} -
- - {additionalInputs.length > 0 && ( - - )} -
-
-
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx b/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx deleted file mode 100644 index 87e74f5..0000000 --- a/packages/nextjs/app/debug/_components/contract/TxReceipt.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useState } from "react"; -import { CopyToClipboard } from "react-copy-to-clipboard"; -import { TransactionReceipt } from "viem"; -import { CheckCircleIcon, DocumentDuplicateIcon } from "@heroicons/react/24/outline"; -import { displayTxResult } from "~~/app/debug/_components/contract"; - -export const TxReceipt = ( - txResult: string | number | bigint | Record | TransactionReceipt | undefined, -) => { - const [txResultCopied, setTxResultCopied] = useState(false); - - return ( -
-
- {txResultCopied ? ( -
-
- -
- Transaction Receipt -
-
-
{displayTxResult(txResult)}
-
-
-
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx b/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx deleted file mode 100644 index 7d75746..0000000 --- a/packages/nextjs/app/debug/_components/contract/WriteOnlyFunctionForm.tsx +++ /dev/null @@ -1,143 +0,0 @@ -"use client"; - -import { useEffect, useState } from "react"; -import { InheritanceTooltip } from "./InheritanceTooltip"; -import { Abi, AbiFunction } from "abitype"; -import { Address, TransactionReceipt } from "viem"; -import { useContractWrite, useNetwork, useWaitForTransaction } from "wagmi"; -import { - ContractInput, - TxReceipt, - getFunctionInputKey, - getInitialFormState, - getParsedContractFunctionArgs, - transformAbiFunction, -} from "~~/app/debug/_components/contract"; -import { IntegerInput } from "~~/components/scaffold-eth"; -import { useTransactor } from "~~/hooks/scaffold-eth"; -import { useTargetNetwork } from "~~/hooks/scaffold-eth/useTargetNetwork"; - -type WriteOnlyFunctionFormProps = { - abi: Abi; - abiFunction: AbiFunction; - onChange: () => void; - contractAddress: Address; - inheritedFrom?: string; -}; - -export const WriteOnlyFunctionForm = ({ - abi, - abiFunction, - onChange, - contractAddress, - inheritedFrom, -}: WriteOnlyFunctionFormProps) => { - const [form, setForm] = useState>(() => getInitialFormState(abiFunction)); - const [txValue, setTxValue] = useState(""); - const { chain } = useNetwork(); - const writeTxn = useTransactor(); - const { targetNetwork } = useTargetNetwork(); - const writeDisabled = !chain || chain?.id !== targetNetwork.id; - - const { - data: result, - isLoading, - writeAsync, - } = useContractWrite({ - address: contractAddress, - functionName: abiFunction.name, - abi: abi, - args: getParsedContractFunctionArgs(form), - }); - - const handleWrite = async () => { - if (writeAsync) { - try { - const makeWriteWithParams = () => writeAsync({ value: BigInt(txValue) }); - await writeTxn(makeWriteWithParams); - onChange(); - } catch (e: any) { - console.error("⚡️ ~ file: WriteOnlyFunctionForm.tsx:handleWrite ~ error", e); - } - } - }; - - const [displayedTxResult, setDisplayedTxResult] = useState(); - const { data: txResult } = useWaitForTransaction({ - hash: result?.hash, - }); - useEffect(() => { - setDisplayedTxResult(txResult); - }, [txResult]); - - // TODO use `useMemo` to optimize also update in ReadOnlyFunctionForm - const transformedFunction = transformAbiFunction(abiFunction); - const inputs = transformedFunction.inputs.map((input, inputIndex) => { - const key = getFunctionInputKey(abiFunction.name, input, inputIndex); - return ( - { - setDisplayedTxResult(undefined); - setForm(updatedFormValue); - }} - form={form} - stateObjectKey={key} - paramType={input} - /> - ); - }); - const zeroInputs = inputs.length === 0 && abiFunction.stateMutability !== "payable"; - - return ( -
-
-

- {abiFunction.name} - -

- {inputs} - {abiFunction.stateMutability === "payable" ? ( -
-
- payable value - wei -
- { - setDisplayedTxResult(undefined); - setTxValue(updatedTxValue); - }} - placeholder="value (wei)" - /> -
- ) : null} -
- {!zeroInputs && ( -
- {displayedTxResult ? : null} -
- )} -
- -
-
-
- {zeroInputs && txResult ? ( -
- -
- ) : null} -
- ); -}; diff --git a/packages/nextjs/app/debug/_components/contract/index.tsx b/packages/nextjs/app/debug/_components/contract/index.tsx deleted file mode 100644 index 83833d8..0000000 --- a/packages/nextjs/app/debug/_components/contract/index.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export * from "./ContractInput"; -export * from "./ContractUI"; -export * from "./DisplayVariable"; -export * from "./ReadOnlyFunctionForm"; -export * from "./TxReceipt"; -export * from "./utilsContract"; -export * from "./utilsDisplay"; -export * from "./WriteOnlyFunctionForm"; diff --git a/packages/nextjs/app/debug/_components/contract/utilsContract.tsx b/packages/nextjs/app/debug/_components/contract/utilsContract.tsx deleted file mode 100644 index 023efe8..0000000 --- a/packages/nextjs/app/debug/_components/contract/utilsContract.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import { AbiFunction, AbiParameter } from "abitype"; -import { AbiParameterTuple } from "~~/utils/scaffold-eth/contract"; - -/** - * Generates a key based on function metadata - */ -const getFunctionInputKey = (functionName: string, input: AbiParameter, inputIndex: number): string => { - const name = input?.name || `input_${inputIndex}_`; - return functionName + "_" + name + "_" + input.internalType + "_" + input.type; -}; - -const isJsonString = (str: string) => { - try { - JSON.parse(str); - return true; - } catch (e) { - return false; - } -}; - -// Recursive function to deeply parse JSON strings, correctly handling nested arrays and encoded JSON strings -const deepParseValues = (value: any): any => { - if (typeof value === "string") { - if (isJsonString(value)) { - const parsed = JSON.parse(value); - return deepParseValues(parsed); - } else { - // It's a string but not a JSON string, return as is - return value; - } - } else if (Array.isArray(value)) { - // If it's an array, recursively parse each element - return value.map(element => deepParseValues(element)); - } else if (typeof value === "object" && value !== null) { - // If it's an object, recursively parse each value - return Object.entries(value).reduce((acc: any, [key, val]) => { - acc[key] = deepParseValues(val); - return acc; - }, {}); - } - - // Handle boolean values represented as strings - if (value === "true" || value === "1" || value === "0x1" || value === "0x01" || value === "0x0001") { - return true; - } else if (value === "false" || value === "0" || value === "0x0" || value === "0x00" || value === "0x0000") { - return false; - } - - return value; -}; - -/** - * parses form input with array support - */ -const getParsedContractFunctionArgs = (form: Record) => { - return Object.keys(form).map(key => { - const valueOfArg = form[key]; - - // Attempt to deeply parse JSON strings - return deepParseValues(valueOfArg); - }); -}; - -const getInitialFormState = (abiFunction: AbiFunction) => { - const initialForm: Record = {}; - if (!abiFunction.inputs) return initialForm; - abiFunction.inputs.forEach((input, inputIndex) => { - const key = getFunctionInputKey(abiFunction.name, input, inputIndex); - initialForm[key] = ""; - }); - return initialForm; -}; - -const getInitalTupleFormState = (abiTupleParameter: AbiParameterTuple) => { - const initialForm: Record = {}; - if (abiTupleParameter.components.length === 0) return initialForm; - - abiTupleParameter.components.forEach((component, componentIndex) => { - const key = getFunctionInputKey(abiTupleParameter.name || "tuple", component, componentIndex); - initialForm[key] = ""; - }); - return initialForm; -}; - -const getInitalTupleArrayFormState = (abiTupleParameter: AbiParameterTuple) => { - const initialForm: Record = {}; - if (abiTupleParameter.components.length === 0) return initialForm; - abiTupleParameter.components.forEach((component, componentIndex) => { - const key = getFunctionInputKey("0_" + abiTupleParameter.name || "tuple", component, componentIndex); - initialForm[key] = ""; - }); - return initialForm; -}; - -const adjustInput = (input: AbiParameterTuple): AbiParameter => { - if (input.type.startsWith("tuple[")) { - const depth = (input.type.match(/\[\]/g) || []).length; - return { - ...input, - components: transformComponents(input.components, depth, { - internalType: input.internalType || "struct", - name: input.name, - }), - }; - } else if (input.components) { - return { - ...input, - components: input.components.map(value => adjustInput(value as AbiParameterTuple)), - }; - } - return input; -}; - -const transformComponents = ( - components: readonly AbiParameter[], - depth: number, - parentComponentData: { internalType?: string; name?: string }, -): AbiParameter[] => { - // Base case: if depth is 1 or no components, return the original components - if (depth === 1 || !components) { - return [...components]; - } - - // Recursive case: wrap components in an additional tuple layer - const wrappedComponents: AbiParameter = { - internalType: `${parentComponentData.internalType || "struct"}`.replace(/\[\]/g, "") + "[]".repeat(depth - 1), - name: `${parentComponentData.name || "tuple"}`, - type: `tuple${"[]".repeat(depth - 1)}`, - components: transformComponents(components, depth - 1, parentComponentData), - }; - - return [wrappedComponents]; -}; - -const transformAbiFunction = (abiFunction: AbiFunction): AbiFunction => { - return { - ...abiFunction, - inputs: abiFunction.inputs.map(value => adjustInput(value as AbiParameterTuple)), - }; -}; - -export { - getFunctionInputKey, - getInitialFormState, - getParsedContractFunctionArgs, - getInitalTupleFormState, - getInitalTupleArrayFormState, - transformAbiFunction, -}; diff --git a/packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx b/packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx deleted file mode 100644 index f5d2129..0000000 --- a/packages/nextjs/app/debug/_components/contract/utilsDisplay.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ReactElement } from "react"; -import { TransactionBase, TransactionReceipt, formatEther, isAddress } from "viem"; -import { Address } from "~~/components/scaffold-eth"; -import { replacer } from "~~/utils/scaffold-eth/common"; - -type DisplayContent = - | string - | number - | bigint - | Record - | TransactionBase - | TransactionReceipt - | undefined - | unknown; - -export const displayTxResult = ( - displayContent: DisplayContent | DisplayContent[], - asText = false, -): string | ReactElement | number => { - if (displayContent == null) { - return ""; - } - - if (typeof displayContent === "bigint") { - try { - const asNumber = Number(displayContent); - if (asNumber <= Number.MAX_SAFE_INTEGER && asNumber >= Number.MIN_SAFE_INTEGER) { - return asNumber; - } else { - return "Ξ" + formatEther(displayContent); - } - } catch (e) { - return "Ξ" + formatEther(displayContent); - } - } - - if (typeof displayContent === "string" && isAddress(displayContent)) { - return asText ? displayContent :
; - } - - if (Array.isArray(displayContent)) { - const mostReadable = (v: DisplayContent) => - ["number", "boolean"].includes(typeof v) ? v : displayTxResultAsText(v); - const displayable = JSON.stringify(displayContent.map(mostReadable), replacer); - - return asText ? ( - displayable - ) : ( - {displayable.replaceAll(",", ",\n")} - ); - } - - return JSON.stringify(displayContent, replacer, 2); -}; - -const displayTxResultAsText = (displayContent: DisplayContent) => displayTxResult(displayContent, true); diff --git a/packages/nextjs/app/debug/page.tsx b/packages/nextjs/app/debug/page.tsx deleted file mode 100644 index e6fb89f..0000000 --- a/packages/nextjs/app/debug/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { DebugContracts } from "./_components/DebugContracts"; -import type { NextPage } from "next"; -import { getMetadata } from "~~/utils/scaffold-eth/getMetadata"; - -export const metadata = getMetadata({ - title: "Debug Contracts", - description: "Debug your deployed 🏗 Scaffold-ETH 2 contracts in an easy way", -}); - -const Debug: NextPage = () => { - return ( - <> - -
-

Debug Contracts

-

- You can debug & interact with your deployed contracts here. -
Check{" "} - - packages / nextjs / app / debug / page.tsx - {" "} -

-
- - ); -}; - -export default Debug; diff --git a/packages/nextjs/app/page.tsx b/packages/nextjs/app/page.tsx index a28b2a5..c56c590 100644 --- a/packages/nextjs/app/page.tsx +++ b/packages/nextjs/app/page.tsx @@ -1,36 +1,92 @@ "use client"; -import Image from "next/image"; +import { useEffect, useState } from "react"; +import Link from "next/link"; +import "../assets/anim.css"; import RegisterButton from "./_components/RegisterButton"; import type { NextPage } from "next"; -import HeroImage from "~~/assets/private_voting.png"; -import { useAuthUserOnly } from "~~/hooks/useAuthUserOnly"; +import { useAccount, useNetwork } from "wagmi"; +import PollDetail from "~~/components/PollDetail"; +import { RainbowKitCustomConnectButton } from "~~/components/scaffold-eth"; +import { useAuthContext } from "~~/contexts/AuthContext"; +import { useScaffoldContractRead } from "~~/hooks/scaffold-eth"; +import { getTargetNetworks } from "~~/utils/scaffold-eth"; const Home: NextPage = () => { - useAuthUserOnly({ inverted: true }); + const { address } = useAccount(); + const { chain } = useNetwork(); + const chains = getTargetNetworks(); + + const { isRegistered } = useAuthContext(); + + const [usable, setUsable] = useState(false); + + const { data: owner } = useScaffoldContractRead({ contractName: "MACIWrapper", functionName: "owner" }); + const { data: nextPollId } = useScaffoldContractRead({ contractName: "MACIWrapper", functionName: "nextPollId" }); + const currentPollId = nextPollId === undefined || nextPollId == 0n ? undefined : nextPollId - 1n; + + useEffect(() => { + if (!chains) { + return; + } + setUsable(chains.some(c => c.id == chain?.id)); + }, [chain, chains]); return ( <> -
-
-

Private Voting Starter Kit with MACI

- -
-
-

- This starter kit is designed to help you get started with private voting using the Minimal - Anti-Collusion Infrastructure (MACI). -

-
- +
+
+
+

Let's settle the debate

+

once and for all

+
+ + {usable && + (!isRegistered ? ( + + ) : currentPollId !== undefined ? ( + + ) : ( +
+ +

Poll you were looking for was not found

+ ))} + +
+ +
+

Cast your Vote securely and privately

+

+ Welcome to our privacy-focused voting platform. We prioritize your privacy and the security of your vote + with advanced encryption technology. Cast your vote with confidence, knowing your privacy is protected. +

+ + Want to make your own Maci service? Fork me now +
-
- MACI -
+
+ +
+ {owner == address && ( + + Admin Panel + + )}
-
+ ); }; diff --git a/packages/nextjs/app/polls/[id]/page.tsx b/packages/nextjs/app/polls/[id]/page.tsx deleted file mode 100644 index 974cf34..0000000 --- a/packages/nextjs/app/polls/[id]/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -"use client"; - -import { useParams } from "next/navigation"; -import PollDetail from "~~/components/PollDetail"; - -export default function PollDetailPage() { - const { id } = useParams<{ id: string }>(); - - return ; -} diff --git a/packages/nextjs/app/polls/page.tsx b/packages/nextjs/app/polls/page.tsx deleted file mode 100644 index a13fd97..0000000 --- a/packages/nextjs/app/polls/page.tsx +++ /dev/null @@ -1,54 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { useRouter } from "next/navigation"; -import Paginator from "~~/components/Paginator"; -import HoverBorderCard from "~~/components/card/HoverBorderCard"; -import { useFetchPolls } from "~~/hooks/useFetchPolls"; -import { useTotalPages } from "~~/hooks/useTotalPages"; - -export default function Polls() { - const [currentPage, setCurrentPage] = useState(1); - const [limit] = useState(10); - const { totalPolls, polls } = useFetchPolls(currentPage, limit); - const totalPages = useTotalPages(totalPolls, limit); - - console.log(polls); - - const router = useRouter(); - - return ( -
-
-
Polls
-
- {polls !== undefined ? ( - polls.length !== 0 ? ( - <> -
- {polls.map(poll => ( - router.push(`/polls/${poll.id}`)}> -
-
-

- {poll.name} ({poll.status}) -

-

{poll.options.length} Candidates

-
-
-
- ))} -
- {totalPages > 1 && ( - - )} - - ) : ( -
No polls found
- ) - ) : ( -
Loading...
- )} -
- ); -} diff --git a/packages/nextjs/assets/anim.css b/packages/nextjs/assets/anim.css new file mode 100644 index 0000000..c076afb --- /dev/null +++ b/packages/nextjs/assets/anim.css @@ -0,0 +1,18 @@ +@keyframes bounce { + 0% { + scale: 1; + } + 40% { + scale: 1.15; + } + 70% { + scale: 0.9; + } + 100% { + scale: 1; + } +} + +.bounce { + animation: bounce 500ms; +} \ No newline at end of file diff --git a/packages/nextjs/components/Header.tsx b/packages/nextjs/components/Header.tsx index cf76070..46c1451 100644 --- a/packages/nextjs/components/Header.tsx +++ b/packages/nextjs/components/Header.tsx @@ -5,7 +5,7 @@ import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useAccount } from "wagmi"; -import { Bars3Icon, BugAntIcon } from "@heroicons/react/24/outline"; +import { Bars3Icon } from "@heroicons/react/24/outline"; import { FaucetButton, RainbowKitCustomConnectButton } from "~~/components/scaffold-eth"; import { useOutsideClick, useScaffoldContractRead } from "~~/hooks/scaffold-eth"; @@ -20,11 +20,6 @@ export const menuLinks: HeaderMenuLink[] = [ label: "Home", href: "/", }, - { - label: "Debug Contracts", - href: "/debug", - icon: , - }, ]; const adminPageLink: HeaderMenuLink = { diff --git a/packages/nextjs/components/PollDetail.tsx b/packages/nextjs/components/PollDetail.tsx index af81a18..2a72f54 100644 --- a/packages/nextjs/components/PollDetail.tsx +++ b/packages/nextjs/components/PollDetail.tsx @@ -226,7 +226,7 @@ export default function PollDetail({ id }: { id: bigint }) {
-
Vote for {poll?.name}
+
{poll?.name}
{poll?.options.map((candidate, index) => (
@@ -247,9 +247,9 @@ export default function PollDetail({ id }: { id: bigint }) {
)} diff --git a/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx b/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx index 1b10c8f..c7d0d7f 100644 --- a/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx +++ b/packages/nextjs/components/ScaffoldEthAppWithProviders.tsx @@ -5,8 +5,6 @@ import { RainbowKitProvider, darkTheme, lightTheme } from "@rainbow-me/rainbowki import { useTheme } from "next-themes"; import { Toaster } from "react-hot-toast"; import { WagmiConfig } from "wagmi"; -import { Footer } from "~~/components/Footer"; -import { Header } from "~~/components/Header"; import { BlockieAvatar } from "~~/components/scaffold-eth"; import { ProgressBar } from "~~/components/scaffold-eth/ProgressBar"; import AuthContextProvider from "~~/contexts/AuthContext"; @@ -28,9 +26,7 @@ const ScaffoldEthApp = ({ children }: { children: React.ReactNode }) => { return ( <>
-
{children}
-
diff --git a/packages/nextjs/public/fai.jpg b/packages/nextjs/public/fai.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a420488553b27aa821277557def39d97687cc0e GIT binary patch literal 115792 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 z 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 bMPp!#k`&j_+y1+`!GGlqzm}Qi&%yr#XZtpm literal 0 HcmV?d00001