From 99225abbaddfae2fc4702d707f52166871784ae0 Mon Sep 17 00:00:00 2001 From: darth-coder00 <86726556+darth-coder00@users.noreply.github.com> Date: Tue, 19 Apr 2022 02:13:03 +0530 Subject: [PATCH] Fixed #4143: Added JSON-Schema Form missing controls (#4205) --- .../common/FormBuilder/FormBuilder.tsx | 78 ++++++++++++++++++- .../main/resources/ui/src/styles/tailwind.css | 28 +++++++ .../src/main/resources/ui/tailwind.config.js | 6 +- 3 files changed, 109 insertions(+), 3 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/FormBuilder/FormBuilder.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/FormBuilder/FormBuilder.tsx index 1e5b5139356..bb0043f69a0 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/FormBuilder/FormBuilder.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/FormBuilder/FormBuilder.tsx @@ -12,11 +12,16 @@ */ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Form, { FormProps } from '@rjsf/core'; +import Form, { + ArrayFieldTemplateProps, + FormProps, + ObjectFieldTemplateProps, +} from '@rjsf/core'; import classNames from 'classnames'; import { LoadingState } from 'Models'; -import React, { FunctionComponent } from 'react'; +import React, { Fragment, FunctionComponent } from 'react'; import { ConfigData } from '../../../interface/service.interface'; +import SVGIcons, { Icons } from '../../../utils/SvgUtils'; import { Button } from '../../buttons/Button/Button'; import Loader from '../../Loader/Loader'; @@ -26,6 +31,73 @@ interface Props extends FormProps { onCancel?: () => void; } +function ArrayFieldTemplate(props: ArrayFieldTemplateProps) { + return ( + <> + +

{props.schema.description}

+ {props.items.map((element, index) => ( +
+
{element.children}
+ {element.hasRemove && ( + + )} +
+ ))} + {props.canAdd && ( + + )} + + ); +} + +function ObjectFieldTemplate(props: ObjectFieldTemplateProps) { + return ( + + +

{props.description}

+ {props.properties.map((element) => ( +
+ {element.content} +
+ ))} + {props.schema.additionalProperties && ( + + )} +
+ ); +} + const FormBuilder: FunctionComponent = ({ showFormHeader = false, status = 'initial', @@ -49,6 +121,8 @@ const FormBuilder: FunctionComponent = ({ return (