import * as React from 'react'; import Ajv from 'ajv'; import { useEffect, useState } from 'react'; import { JSONSchemaBridge } from 'uniforms-bridge-json-schema'; import { AutoFields, AutoForm, ErrorsField } from '../../../components/uniforms-frontmatter'; import { ErrorBoundary } from '@sentry/react'; import { DataFormControls } from './DataFormControls'; import useThemeColors from '../../hooks/useThemeColors'; export interface IDataFormProps { schema: any; model: any; onSubmit: (model: any) => void; onClear: () => void; } export const DataForm: React.FunctionComponent = ({ schema, model, onSubmit, onClear }: React.PropsWithChildren) => { const [bridge, setBridge] = useState(null); const { getColors } = useThemeColors(); const ajv = new Ajv({ allErrors: true, useDefaults: true, strict: false, }); const jsonValidator = (schema: object) => { const validator = ajv.compile(schema); return (crntModel: object) => { validator(crntModel); return validator.errors?.length ? { details: validator.errors } : null; }; }; useEffect(() => { const schemaValidator = jsonValidator(schema); const bridge = new JSONSchemaBridge(schema, schemaValidator); setBridge(bridge); }, [schema]); if (!bridge) { return null; } return (
{model ? (

Modify the data

) : (

Add new data

)} form?.reset()} >
); };