import React, { useEffect, useState } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; import { useTranslation } from 'react-i18next'; import { InlineLoading, Tile } from '@carbon/react'; import { type FormSchema, FormEngine } from '@openmrs/esm-form-engine-lib'; import styles from './form-renderer.scss'; interface ErrorFallbackProps { error: Error; } interface FormRendererProps { isLoading: boolean; onSchemaChange?: (schema: FormSchema) => void; schema: FormSchema; } const FormRenderer: React.FC = ({ isLoading, schema }) => { const { t } = useTranslation(); const dummySchema: FormSchema = { encounterType: '', name: 'Test Form', pages: [ { label: 'Test Page', sections: [ { label: 'Test Section', isExpanded: 'true', questions: [ { label: 'Test Question', type: 'obs', questionOptions: { rendering: 'text', concept: 'xxxx', }, id: 'testQuestion', }, ], }, ], }, ], processor: 'EncounterFormProcessor', referencedForms: [], uuid: 'xxx', }; const [schemaToRender, setSchemaToRender] = useState(dummySchema); useEffect(() => { if (schema) { setSchemaToRender(schema); } }, [schema]); if (isLoading) { return (
); } return (
{!schema && (

{t('noSchemaLoaded', 'No schema loaded')}

{t( 'formRendererHelperText', 'Load a form schema in the Schema Editor to the left to see it rendered here by the Form Engine.', )}

)} {schema === schemaToRender && ( )}
); }; function ErrorFallback({ error }: ErrorFallbackProps) { const { t } = useTranslation(); return (

{t('problemLoadingPreview', 'There was a problem loading the form preview')}

{error.message}

{t('fixSchemaAndRender', 'Fix the error in the Schema Editor and click "Render changes" to retry.')}

); } export default FormRenderer;