Content-Length: 67719 | pFad | http://github.com/lowcoder-org/lowcoder/pull/1726.diff
thub.com diff --git a/client/packages/lowcoder-design/src/components/Dropdown.tsx b/client/packages/lowcoder-design/src/components/Dropdown.tsx index 5adb4e1869..b2a9d27663 100644 --- a/client/packages/lowcoder-design/src/components/Dropdown.tsx +++ b/client/packages/lowcoder-design/src/components/Dropdown.tsx @@ -18,9 +18,9 @@ export const DropdownContainer = styled.div<{ $placement: ControlPlacement }>` width: ${(props) => props.$placement === "right" ? "calc(100% - 96px)" - : "bottom" - ? "calc(100% - 112px)" - : "calc(100% - 136px"}; + : props.$placement === "bottom" + ? "calc(100% - 112px)" + : "calc(100% - 136px)"}; flex-grow: 1; .ant-select:not(.ant-select-customize-input) .ant-select-selector { @@ -124,8 +124,8 @@ const FlexDiv = styled.div` const LabelWrapper = styled.div<{ $placement: ControlPlacement }>` flex-shrink: 0; - width: ${(props) => (props.$placement === "right" ? "96px" : "bottom" ? "112px" : "136px")}; -`; + width: ${(props) => props.$placement === "right" ? "96px" : props.$placement === "bottom" ? "112px" : "136px"}; + `; export type OptionType = { readonly label: ReactNode; diff --git a/client/packages/lowcoder-design/src/components/form.tsx b/client/packages/lowcoder-design/src/components/form.tsx index ca469d5072..347f2e729b 100644 --- a/client/packages/lowcoder-design/src/components/form.tsx +++ b/client/packages/lowcoder-design/src/components/form.tsx @@ -1,5 +1,5 @@ import { default as Form } from "antd/es/form"; -import { default as AntdFormItem, FormItemProps as AntdFormItemProps } from "antd/es/form/FormItem"; +import { default as AntdFormItem, FormItemProps as AntdFormItemProps} from "antd/es/form/FormItem"; import { default as Input, InputProps } from "antd/es/input"; import { default as TextArea, TextAreaProps } from "antd/es/input/TextArea"; import { default as InputNumber, InputNumberProps } from "antd/es/input-number"; diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json index 86576c3eba..2b5ecdca73 100644 --- a/client/packages/lowcoder/package.json +++ b/client/packages/lowcoder/package.json @@ -24,6 +24,7 @@ "@fortawesome/free-regular-svg-icons": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", "@fortawesome/react-fontawesome": "latest", + "@jsonforms/core": "^3.5.1", "@lottiefiles/dotlottie-react": "^0.13.0", "@manaflair/redux-batch": "^1.0.0", "@rjsf/antd": "^5.24.9", @@ -45,6 +46,7 @@ "coolshapes-react": "lowcoder-org/coolshapes-react", "copy-to-clipboard": "^3.3.3", "core-js": "^3.25.2", + "dayjs": "^1.11.13", "echarts": "^5.4.3", "echarts-for-react": "^3.0.2", "echarts-wordcloud": "^2.1.0", diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx new file mode 100644 index 0000000000..cbdab8a0ff --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx @@ -0,0 +1,689 @@ +import React, { useState, useCallback, useEffect, ReactNode } from "react"; +import { + Form, + Input, + InputNumber, + Switch, + DatePicker, + Select, + Space, + Button, + Slider, + Tabs, + Row, + Col, + Steps, +} from "antd"; +import styled from "styled-components"; +import type { JsonSchema } from "@jsonforms/core"; +import type { JSONSchema7 } from "json-schema"; +import { debounce } from "lodash"; +import dayjs from "dayjs"; +import { trans } from "i18n"; +import type { + JsonFormsUiSchema, + FieldUiSchema, + Layout, + Categorization, + ValidationState, + JsonFormsRendererProps, + Category, + Control +} from "./types"; +import type { SwitchChangeEventHandler } from "antd/es/switch"; +const { TextArea } = Input; + +const Container = styled.div` + .ant-form-item { + margin-bottom: 16px; + } + + .ant-form-item-label { + padding: 0; + font-weight: 600; + } + + .ant-form-item-extra { + min-height: 0px; + } + + .ant-form-item-explain { + line-height: 24px; + } + + .ant-steps { + margin-bottom: 24px; + } + + .stepper-navigation { + margin-top: 24px; + display: flex; + justify-content: space-between; + } +`; + +interface HorizontalLayout { + type: "HorizontalLayout"; + elements: Control[]; +} + +const JsonFormsRenderer: React.FC