import React, { ReactElement, useEffect, FormEvent, ChangeEvent } from 'react' import { useStaticQuery, graphql } from 'gatsby' import styles from './FormPublish.module.css' import { useOcean } from '@oceanprotocol/react' import { useFormikContext, Field, Form, FormikContextType } from 'formik' import Input from '../../atoms/Input' import Button from '../../atoms/Button' import { FormContent, FormFieldProps } from '../../../@types/Form' import { MetadataPublishFormDataset } from '../../../@types/MetaData' import stylesIndex from './index.module.css' const query = graphql` query { content: allFile( filter: { relativePath: { eq: "pages/publish/form-dataset.json" } } ) { edges { node { childPublishJson { title data { name placeholder label help type required sortOptions options } warning } } } } } ` export default function FormPublish(): ReactElement { const data = useStaticQuery(query) const content: FormContent = data.content.edges[0].node.childPublishJson const { ocean, account } = useOcean() const { status, setStatus, isValid, setErrors, setTouched, resetForm, initialValues, validateField, setFieldValue }: FormikContextType = useFormikContext() // reset form validation on every mount useEffect(() => { setErrors({}) setTouched({}) // setSubmitting(false) }, [setErrors, setTouched]) // Manually handle change events instead of using `handleChange` from Formik. // Workaround for default `validateOnChange` not kicking in function handleFieldChange( e: ChangeEvent, field: FormFieldProps ) { validateField(field.name) setFieldValue(field.name, e.target.value) } const resetFormAndClearStorage = (e: FormEvent) => { e.preventDefault() resetForm({ values: initialValues, status: 'empty' }) setStatus('empty') } return (
status === 'empty' && setStatus(null)} >

{content.title}

{content.data.map((field: FormFieldProps) => ( ) => handleFieldChange(e, field) } /> ))} ) }