import { DynamicJsonfield } from "./components/dynamicComponents/DynamicJsonfield"; import { DynamicBooleanField } from "./components/dynamicComponents/DynamicBooleanField"; import { DynamicDateField } from "./components/dynamicComponents/DynamicDateField"; import { DynamicPredefinedArrayField } from "./components/dynamicComponents/DynamicPredefinedArrayField"; import { DynamicTextfield } from "./components/dynamicComponents/DynamicTextfield"; import React, { ElementType } from "react"; import { FluentPropertyLabel } from "./components/FluentPropertyLabel"; import { FluentFormShimmer } from "./components/list/components/FluentFormShimmer"; import FluentList from "./components/list/FluentList"; import { IFormItemBuilder, IFormItem, IFormListRenderProps, ILoadingProps, IDynamicPropertyComponentConfig, IItemRenderProps, IFormItemPropertyOptions, IFormItemBuilderResult, buildPropertyRenderInfo, ValidationMark, getValidationMarkForProperty, IPropertyTypes, propertyTypes, FormLabel } from "@wiberg/formbuilder"; export const createFluentBuilder = (labelRender?: FormLabel) : IFormItemBuilder => { const id: Readonly = "internal_fluentbuilder"; const DefaultLabelRender: FormLabel = FluentPropertyLabel; const BuilderLabelRender = labelRender ?? DefaultLabelRender; const listComponent = () : ElementType> => FluentList; const loadingSpinnerComponent = () : ElementType | undefined => FluentFormShimmer; const build = >(renderProps: IItemRenderProps, property: string, schema: IFormItemPropertyOptions): IFormItemBuilderResult => { let { item } = renderProps; if (item === null) throw Error("item is null"); if (schema == null) throw Error("schema is null"); let info = buildPropertyRenderInfo(renderProps, schema, property); let validationMark: ValidationMark = getValidationMarkForProperty(renderProps, property); const WrapInLabel = (element: JSX.Element) : JSX.Element => { return (
{ element }
) } const propertyType: IPropertyTypes = propertyTypes; switch (schema.propertyType) { case propertyType.string: return { found: true, element: WrapInLabel() }; case propertyType.number: return { found: true, element: WrapInLabel() }; case propertyType.boolean: return { found: true, element: WrapInLabel() } case propertyType.date: return { found: true, element: WrapInLabel() } case propertyType.json: return { found: true, element: WrapInLabel() }; case propertyType.predefinedArray: return { found: true, element: WrapInLabel() }; default: return { found: false, element: undefined } } }; return { id, build, loadingComponent: loadingSpinnerComponent, listComponent } }