'use client' import { useState } from 'react' import { AnimatePresence } from 'framer-motion' import { useMediaQuery } from 'react-responsive' import ProposalStep from '@/components/formsteps/ProposalStep' import { Button, ContractSelectionForm, ContractSimulation, ContractSimulationStatus, ContractsForm, FinalStep, SideBar, SimulationPreview, SuccessMessage, } from '@/components/index' import { initialValues } from '@/config/site' import { useMultiplestepForm } from '@/hooks/useMultiplestepForm' import { tags as Tags } from '@/lib/types/types' import { FormItems } from '@/lib/types/types' import { SimulationConfig } from '@/lib/types/types' import { generateSimulationConfig } from '@/simulation' export default function Dashboard() { const isTabletOrMobile = useMediaQuery({ query: '(max-width: 600px)' }) const [formData, setFormData] = useState(initialValues) const [tags, setTags] = useState([]) // assuming you've already imported the type Tags. const [simulationConfig, setSimulationConfig] = useState(null as any) const [simulationStatus, setSimulationStatus] = useState(false) const setProposalText = (proposal: string) => { setFormData({ ...formData, proposalText: proposal }) } const setProposalTitle = (proposal: string) => { setFormData({ ...formData, proposalTitle: proposal }) } const generateSimulationPreview = () => { const simConfig = generateSimulationConfig({ tags, governanceContract: formData.governanceContract.value, proposalText: formData.proposalText, proposalTitle: formData.proposalTitle, }) setSimulationConfig(simConfig) } const defaultSize = isTabletOrMobile ? { width: '95%', height: '95%' } : { width: '85%', height: '85%' } //if simulationStatus is true, then change step to 3.5 const [errors, setErrors] = useState>({}) const { previousStep, nextStep, currentStepIndex, isFirstStep, isLastStep, steps, goTo, showSuccessMsg } = useMultiplestepForm(4) // console.log("current step oroginal", currentStepIndex); const renderStepContent = () => { switch (currentStepIndex) { case 0: return case 1: return ( ) case 2: return case 3: return simulationStatus ? ( ) : ( ) case 4: return default: return null } } function updateForm(fieldToUpdate: Partial) { const { governanceContract, proposalText, proposalTitle, votesChecked, ethereumChecked, loggedInChecked } = fieldToUpdate console.log(formData) // test if proposal text is empty proposalText?.trim().length === 0 ? setErrors((prevState) => ({ ...prevState, proposalText: 'Please enter a proposal description', })) : null // test if proposal title is empty proposalTitle?.trim().length === 0 ? setErrors((prevState) => ({ ...prevState, proposalTitle: 'Please enter a proposal title', })) : null // test if logged in if (loggedInChecked) { setErrors((prevState) => ({ ...prevState, loggedInChecked: '', })) } else if (!loggedInChecked) { setErrors((prevState) => ({ ...prevState, loggedInChecked: 'Please log in to Ethereum', })) } // test if network is ethereum checked if (ethereumChecked) { setErrors((prevState) => ({ ...prevState, ethereumChecked: '', })) } else if (!ethereumChecked) { setErrors((prevState) => ({ ...prevState, ethereumChecked: 'Please log in to Ethereum', })) } setFormData({ ...formData, ...fieldToUpdate }) } const handleOnSubmit = (e: React.FormEvent) => { e.preventDefault() console.log('🚀 ~ file: page.tsx:242 ~ handleOnSubmit ~ errors:', errors) if (Object.values(errors).some((error) => error)) { return } nextStep() } return ( <> {!showSuccessMsg ? : ''}
{showSuccessMsg ? ( ) : (
{renderStepContent()}
{currentStepIndex === 3 && !simulationStatus && (
)} {(currentStepIndex !== 3 || (currentStepIndex === 3 && simulationStatus)) && ( )}
)}
) }