From 0b11b9fe3053475012e7a37f8507187cdead6338 Mon Sep 17 00:00:00 2001 From: MrWindlike Date: Fri, 29 Jul 2022 10:22:22 +0800 Subject: [PATCH] feat(RecordWidget): allow use the widget for object --- .../src/components/Form/ArrayTable.tsx | 2 +- .../src/components/Form/RecordEditor.tsx | 44 +++++++++++-------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/packages/editor-sdk/src/components/Form/ArrayTable.tsx b/packages/editor-sdk/src/components/Form/ArrayTable.tsx index bf1769b8..2e58e420 100644 --- a/packages/editor-sdk/src/components/Form/ArrayTable.tsx +++ b/packages/editor-sdk/src/components/Form/ArrayTable.tsx @@ -147,7 +147,7 @@ export const ArrayTable: React.FC = props => { /> )) ) : ( - + No Data diff --git a/packages/editor-sdk/src/components/Form/RecordEditor.tsx b/packages/editor-sdk/src/components/Form/RecordEditor.tsx index 6dde22ce..cb0fa793 100644 --- a/packages/editor-sdk/src/components/Form/RecordEditor.tsx +++ b/packages/editor-sdk/src/components/Form/RecordEditor.tsx @@ -10,6 +10,8 @@ import { ExpressionEditor } from '../Form/ExpressionEditor'; import { WidgetProps } from '../../types/widget'; import { mergeWidgetOptionsIntoSpec } from '../../utils/widget'; import { ExpressionEditorProps } from './ExpressionEditor'; +import { generateDefaultValueFromSpec } from '@sunmao-ui/shared'; +import { JSONSchema7 } from 'json-schema'; const IGNORE_SPEC_TYPES = ['array', 'object']; @@ -60,16 +62,16 @@ const RowItem = (props: RowItemProps) => { }), [] ); - const valueSpec = useMemo(() => spec?.properties?.[rowKey], [spec, rowKey]); + const valueSpec = useMemo( + () => (onlySetValue ? spec?.properties?.[rowKey] : spec?.patternProperties?.['^.*$']), + [spec, rowKey, onlySetValue] + ); const valueSpecWithExpressionOptions = useMemo( () => valueSpec && typeof valueSpec !== 'boolean' - ? { - ...valueSpec, - widgetOptions: { - compactOptions: expressionOptions.compactOptions, - }, - } + ? mergeWidgetOptionsIntoSpec<'core/v1/expression'>(valueSpec, { + compactOptions: expressionOptions.compactOptions, + }) : Type.Any({ widget: 'core/v1/expression', widgetOptions: { @@ -131,15 +133,16 @@ const RowItem = (props: RowItemProps) => { {valueSpec === undefined || typeof valueSpec === 'boolean' || - IGNORE_SPEC_TYPES.includes(String(valueSpec.type)) ? ( - ) : ( = props => { ); const onAddRow = useCallback(() => { - setRows(prev => [...prev, ['', '']]); - }, []); + const propSpec = spec?.patternProperties?.['^.*$']; + + setRows(prev => [ + ...prev, + ['', propSpec ? generateDefaultValueFromSpec(propSpec as JSONSchema7) : ''], + ]); + }, [spec]); const onRemoveRow = useCallback( (i: number) => { const newRows = produce(rows, draft => {