diff --git a/src/components/Fields/Field.tsx b/src/components/Fields/Field.tsx index 2fb5865f..c4449f1c 100644 --- a/src/components/Fields/Field.tsx +++ b/src/components/Fields/Field.tsx @@ -28,79 +28,79 @@ export interface FieldProps extends SchemaOptions { renderDiscriminatorSwitch?: (opts: FieldProps) => JSX.Element; } -@observer -export class Field extends React.Component { - toggle = () => { - if (this.props.field.expanded === undefined && this.props.expandByDefault) { - this.props.field.collapse(); +export const Field = observer((fieldProps: FieldProps) => { + const { + className, + isLast, + field, + expandByDefault, + skipReadOnly, + skipWriteOnly, + showTitle, + level, + } = fieldProps; + const [expanded, setExpanded] = React.useState( + field.expanded === undefined ? expandByDefault : field.expanded, + ); + const toggle = () => { + if (field.expanded === undefined && expandByDefault) { + field.collapse(); } else { - this.props.field.toggle(); + field.toggle(); } + setExpanded(field.expanded); }; - handleKeyPress = e => { + const handleKeyPress = e => { if (e.key === 'Enter') { e.preventDefault(); - this.toggle(); + toggle(); } }; - render() { - const { className, field, isLast, expandByDefault } = this.props; - const { name, deprecated, required, kind } = field; - const withSubSchema = !field.schema.isPrimitive && !field.schema.isCircular; + const { name, deprecated, required, kind } = field; + const withSubSchema = !field.schema.isPrimitive && !field.schema.isCircular; - const expanded = field.expanded === undefined ? expandByDefault : field.expanded; - - const paramName = withSubSchema ? ( - - - - {required && required } - - ) : ( - - + const paramName = withSubSchema ? ( + + + + {required && required } + + ) : ( + + + {name} + {required && required } + + ); - return ( - <> - - {paramName} - - - + return ( + <> + + {paramName} + + + + + {expanded && withSubSchema && ( + + + + + + - {expanded && withSubSchema && ( - - - - - - - - )} - - ); - } -} + )} + + ); +});