import React from 'react';
import {
ExtensionManifest,
ContextIdentifierProvider,
} from '@atlaskit/editor-common';
import {
FieldDefinition,
isFieldset,
Parameters,
TabField,
} from '@atlaskit/editor-common/extensions';
import ColorPicker from './Fields/ColorPicker';
import Boolean from './Fields/Boolean';
import CustomSelect from './Fields/CustomSelect';
import Date from './Fields/Date';
import DateRange from './Fields/DateRange';
import Enum from './Fields/Enum';
// eslint-disable-next-line import/no-cycle
import Fieldset from './Fields/Fieldset';
import Number from './Fields/Number';
import String from './Fields/String';
import UnhandledType from './Fields/UnhandledType';
import UserSelect from './Fields/UserSelect';
import Expand from './Fields/Expand';
import TabGroup from './Fields/TabGroup';
import RemovableField from './NestedForms/RemovableField';
import { OnFieldChange } from './types';
import { getSafeParentedName } from './utils';
import { FormErrorBoundary } from './FormErrorBoundary';
export interface FieldComponentProps {
field: FieldDefinition;
parameters: Parameters;
parentName?: string;
extensionManifest: ExtensionManifest;
firstVisibleFieldName?: string;
onFieldChange: OnFieldChange;
}
export function FieldComponent({
field,
parameters,
parentName,
extensionManifest,
firstVisibleFieldName,
onFieldChange,
}: FieldComponentProps) {
const { name, type } = field;
const autoFocus = name === firstVisibleFieldName;
const defaultValue = parameters[name];
const error = parameters.errors?.[name];
const parentedName = getSafeParentedName(name, parentName);
const fieldDefaultValue =
field.type === 'enum' ? field.defaultValue : undefined;
if (name in parameters && !isFieldset(field)) {
field = { ...field, defaultValue };
}
switch (field.type) {
case 'string':
return (