Skip to content

Not able to render date picker component for MUI #1409

@YashM10

Description

@YashM10

scope: MUI
code:

import FormTemplate from '@data-driven-forms/mui-component-mapper/form-template';
import FormRenderer from '@data-driven-forms/react-form-renderer/form-renderer';
import componentMapper from '@data-driven-forms/mui-component-mapper/component-mapper';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import componentTypes from '@data-driven-forms/react-form-renderer/component-types/component-types';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import { useEffect, useState } from 'react';
import { injectIntl } from 'react-intl';


const DynamicForm = () => {
  const [schema1, setSchema1] = useState<any>({});
  const schema3 = {
    fields: [
      {
        component: componentTypes.TEXT_FIELD,
        name: 'account_name',
        label: 'Account Name',
        FormFieldGridProps: { xs: 4, p: 2 },
      },
      {
        component: componentTypes.SELECT,
        name: 'contract_length',
        label: 'Contract Length',
        FormFieldGridProps: { xs: 4, p: 2 },
        options: [
          {
            label: 'Days',
            value: 'days',
          },
          {
            label: 'Weeks',
            value: 'weeks',
          },
          {
            label: 'Months',
            value: 'months',
          },
          {
            label: 'Years',
            value: 'years',
          },
        ],
        isSearchable: true,
        isClearable: true,
      },
      {
        component: componentTypes.SELECT,
        name: 'billing_frequency',
        label: 'Billing Frequency',
        FormFieldGridProps: { xs: 4, p: 2 },
        options: [
          {
            label: 'Weekly',
            value: 'weekly',
          },
          {
            label: 'Monthly',
            value: 'monthly',
          },
          {
            label: 'Yearly',
            value: 'yearly',
          },
        ],
        isSearchable: true,
        isClearable: true,
      },
      {
        component: componentTypes.SELECT,
        name: 'payment_terms',
        label: 'Payment Terms',
        FormFieldGridProps: { xs: 4, p: 2 },
      },
      {
        component: componentTypes.SELECT,
        name: 'dummy',
        label: 'Payment Terms Dummy',
        FormFieldGridProps: { xs: 4, p: 2 },
      },
      {
        component: componentTypes.DATE_PICKER,
        name: 'contract_start',
        label: 'Contract Start',
        FormFieldGridProps: { xs: 3 },
        isClearable: true,
      },
    ],
  };
  useEffect(() => {
    setSchema1(schema3);
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);
  const schema2 = {
    fields: [
      {
        component: componentTypes.FIELD_ARRAY,
        name: 'new_terms',
        fieldKey: 'field_array',
        title: 'New Terms',
        label: 'New Terms',
        FormFieldGridProps: { xs: 12 },
        itemDefault: {
          name: 'Enter field key',
          label: 'Enter field label',
          component: '',
          initalValue: 'Enter default value',
          options: '',
        },
        fields: [
          {
            component: componentTypes.TEXT_FIELD,
            name: 'name',
            label: 'Key',
            FormFieldGridProps: { xs: 4, p: 2 },
          },
          {
            component: componentTypes.TEXT_FIELD,
            name: 'label',
            label: 'Label',
            FormFieldGridProps: { xs: 4, p: 2 },
          },
          {
            component: componentTypes.SELECT,
            name: 'component',
            label: 'Type',
            FormFieldGridProps: { xs: 4, p: 2 },
            options: [
              {
                label: 'Text Field',
                value: 'text-field',
              },
              {
                label: 'Select',
                value: 'select',
              },
              {
                label: 'Checkbox',
                value: 'checkbox',
              },
              {
                label: 'Radio Button',
                value: 'radio',
              },
              {
                label: 'Date Picker',
                value: 'date-picker',
              },
            ],
            isSearchable: true,
            isClearable: true,
          },
          {
            component: componentTypes.TEXT_FIELD,
            name: 'initialValue',
            label: 'Default Value',
            FormFieldGridProps: { xs: 4, p: 2 },
          },
          {
            component: componentTypes.TEXT_FIELD,
            name: 'options',
            label: 'Options',
            placeholder: 'Please enter comma separated values',
            condition: {
              when: `new_terms[0].component`,
              is: 'select',
            },
            FormFieldGridProps: { xs: 4, p: 2 },
          },
        ],
      },
    ],
  };
  const onSubmit2 = (values: any, form: any) => {
    if (values.new_terms?.length) {
      console.log(values.new_terms[0], form, schema1);
      console.log([...schema1.fields, values.new_terms[0]]);
      const outputData = values.new_terms.map((newTerm: any) => {
        return { ...newTerm, FormFieldGridProps: { xs: 4, p: 2 } };
      });
      setSchema1({
        fields: [...schema1.fields, ...outputData],
      });
      form.reset();
    }
  };
  const onSubmit1 = (values: any) => {
    console.log(values);
  };
  return (
    <LocalizationProvider dateAdapter={AdapterDateFns}>
      {schema1?.fields?.length ? (
        <FormRenderer
          schema={schema1}
          FormTemplate={FormTemplate}
          componentMapper={componentMapper}
          onSubmit={onSubmit1}
        />
      ) : null}

      <br />
      <FormRenderer
        componentMapper={componentMapper}
        schema={schema2}
        FormTemplate={FormTemplate}
        onSubmit={onSubmit2}
      />
    </LocalizationProvider>
  );
};

export default injectIntl(DynamicForm);

error: Can not find utils in context. It looks like you forgot to wrap your component in LocalizationProvider, or pass dateAdapter prop directly.

Metadata

Metadata

Assignees

Labels

Help neededInvestiagePossible bug with unknown causeMUIMUI pull requestbugSomething isn't workingreleased

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions