@qoretechnologies/reqraft 0.10.25 → 0.10.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +52 -23
- package/design/COMPACT_ENGINE_REDESIGN.md +156 -0
- package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +353 -0
- package/dist/components/FocusedEditing/index.d.ts +9 -1
- package/dist/components/FocusedEditing/index.d.ts.map +1 -1
- package/dist/components/FocusedEditing/index.js +2 -2
- package/dist/components/FocusedEditing/index.js.map +1 -1
- package/dist/components/composer/Composer.d.ts +108 -0
- package/dist/components/composer/Composer.d.ts.map +1 -0
- package/dist/components/composer/Composer.js +238 -0
- package/dist/components/composer/Composer.js.map +1 -0
- package/dist/components/composer/helpers.d.ts +21 -0
- package/dist/components/composer/helpers.d.ts.map +1 -0
- package/dist/components/composer/helpers.js +75 -0
- package/dist/components/composer/helpers.js.map +1 -0
- package/dist/components/composer/index.d.ts +3 -0
- package/dist/components/composer/index.d.ts.map +1 -0
- package/dist/components/composer/index.js +19 -0
- package/dist/components/composer/index.js.map +1 -0
- package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
- package/dist/components/form/engine/CompactRow.js +307 -110
- package/dist/components/form/engine/CompactRow.js.map +1 -1
- package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
- package/dist/components/form/engine/CompactToolbar.js +123 -106
- package/dist/components/form/engine/CompactToolbar.js.map +1 -1
- package/dist/components/form/engine/FormEngine.d.ts +107 -11
- package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
- package/dist/components/form/engine/FormEngine.js +618 -179
- package/dist/components/form/engine/FormEngine.js.map +1 -1
- package/dist/components/form/engine/compactRowContext.d.ts +9 -0
- package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowContext.js.map +1 -1
- package/dist/components/form/engine/compactRowStyles.d.ts +7 -3
- package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
- package/dist/components/form/engine/compactRowStyles.js +88 -51
- package/dist/components/form/engine/compactRowStyles.js.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.d.ts +1 -0
- package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
- package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
- package/dist/components/form/engine/optionActions.d.ts +28 -0
- package/dist/components/form/engine/optionActions.d.ts.map +1 -0
- package/dist/components/form/engine/optionActions.js +18 -0
- package/dist/components/form/engine/optionActions.js.map +1 -0
- package/dist/components/form/engine/readFirst.d.ts +63 -2
- package/dist/components/form/engine/readFirst.d.ts.map +1 -1
- package/dist/components/form/engine/readFirst.js +121 -6
- package/dist/components/form/engine/readFirst.js.map +1 -1
- package/dist/components/form/engine/rendererTypes.d.ts +35 -0
- package/dist/components/form/engine/rendererTypes.d.ts.map +1 -0
- package/dist/components/form/engine/rendererTypes.js +63 -0
- package/dist/components/form/engine/rendererTypes.js.map +1 -0
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantCalmTable.js +94 -0
- package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -0
- package/dist/components/form/engine/variants/VariantCards.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantCards.js +80 -0
- package/dist/components/form/engine/variants/VariantCards.js.map +1 -0
- package/dist/components/form/engine/variants/VariantFocus.d.ts +7 -0
- package/dist/components/form/engine/variants/VariantFocus.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantFocus.js +138 -0
- package/dist/components/form/engine/variants/VariantFocus.js.map +1 -0
- package/dist/components/form/engine/variants/VariantMinimal.d.ts +6 -0
- package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -0
- package/dist/components/form/engine/variants/VariantMinimal.js +73 -0
- package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -0
- package/dist/components/form/engine/variants/focusDemo.d.ts +13 -0
- package/dist/components/form/engine/variants/focusDemo.d.ts.map +1 -0
- package/dist/components/form/engine/variants/focusDemo.js +139 -0
- package/dist/components/form/engine/variants/focusDemo.js.map +1 -0
- package/dist/components/form/engine/variants/variantModel.d.ts +70 -0
- package/dist/components/form/engine/variants/variantModel.d.ts.map +1 -0
- package/dist/components/form/engine/variants/variantModel.js +133 -0
- package/dist/components/form/engine/variants/variantModel.js.map +1 -0
- package/dist/components/form/engine/variants/variantParts.d.ts +79 -0
- package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -0
- package/dist/components/form/engine/variants/variantParts.js +191 -0
- package/dist/components/form/engine/variants/variantParts.js.map +1 -0
- package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
- package/dist/components/form/expressions/builder/index.js +13 -2
- package/dist/components/form/expressions/builder/index.js.map +1 -1
- package/dist/components/form/expressions/useExpressions.d.ts.map +1 -1
- package/dist/components/form/expressions/useExpressions.js +4 -1
- package/dist/components/form/expressions/useExpressions.js.map +1 -1
- package/dist/components/form/fields/Field.d.ts.map +1 -1
- package/dist/components/form/fields/Field.js +5 -3
- package/dist/components/form/fields/Field.js.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +2 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
- package/dist/components/form/fields/allowed-values/AllowedValues.js +8 -26
- package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.d.ts +3 -0
- package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
- package/dist/components/form/fields/auto/AutoFormField.js +42 -8
- package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
- package/dist/components/form/fields/binary/Binary.d.ts +15 -0
- package/dist/components/form/fields/binary/Binary.d.ts.map +1 -0
- package/dist/components/form/fields/binary/Binary.js +74 -0
- package/dist/components/form/fields/binary/Binary.js.map +1 -0
- package/dist/components/form/fields/boolean/Boolean.js +1 -1
- package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js +5 -4
- package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
- package/dist/components/form/fields/select/Select.d.ts.map +1 -1
- package/dist/components/form/fields/select/Select.js +29 -12
- package/dist/components/form/fields/select/Select.js.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.d.ts +8 -2
- package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
- package/dist/components/form/fields/select/SelectCollection.js +52 -16
- package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
- package/dist/components/form/index.d.ts +2 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +2 -0
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/imageLightbox/ImageLightbox.d.ts +21 -0
- package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -0
- package/dist/components/imageLightbox/ImageLightbox.js +169 -0
- package/dist/components/imageLightbox/ImageLightbox.js.map +1 -0
- package/dist/components/imageLightbox/index.d.ts +2 -0
- package/dist/components/imageLightbox/index.d.ts.map +1 -0
- package/dist/components/imageLightbox/index.js +18 -0
- package/dist/components/imageLightbox/index.js.map +1 -0
- package/dist/components/searchFilterBar/SearchFilterBar.d.ts +33 -0
- package/dist/components/searchFilterBar/SearchFilterBar.d.ts.map +1 -0
- package/dist/components/searchFilterBar/SearchFilterBar.js +76 -0
- package/dist/components/searchFilterBar/SearchFilterBar.js.map +1 -0
- package/dist/components/searchFilterBar/index.d.ts +2 -0
- package/dist/components/searchFilterBar/index.d.ts.map +1 -0
- package/dist/components/searchFilterBar/index.js +18 -0
- package/dist/components/searchFilterBar/index.js.map +1 -0
- package/dist/components/supportTicket/AttachmentChips.d.ts +10 -0
- package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -0
- package/dist/components/supportTicket/AttachmentChips.js +122 -0
- package/dist/components/supportTicket/AttachmentChips.js.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +43 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js +31 -0
- package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -0
- package/dist/components/supportTicket/ReferencePicker.d.ts +87 -0
- package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -0
- package/dist/components/supportTicket/ReferencePicker.js +295 -0
- package/dist/components/supportTicket/ReferencePicker.js.map +1 -0
- package/dist/components/supportTicket/TicketHeader.d.ts +86 -0
- package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketHeader.js +149 -0
- package/dist/components/supportTicket/TicketHeader.js.map +1 -0
- package/dist/components/supportTicket/TicketMetaTags.d.ts +32 -0
- package/dist/components/supportTicket/TicketMetaTags.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketMetaTags.js +21 -0
- package/dist/components/supportTicket/TicketMetaTags.js.map +1 -0
- package/dist/components/supportTicket/TicketReplyBox.d.ts +63 -0
- package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -0
- package/dist/components/supportTicket/TicketReplyBox.js +115 -0
- package/dist/components/supportTicket/TicketReplyBox.js.map +1 -0
- package/dist/components/supportTicket/attachmentAccess.d.ts +37 -0
- package/dist/components/supportTicket/attachmentAccess.d.ts.map +1 -0
- package/dist/components/supportTicket/attachmentAccess.js +132 -0
- package/dist/components/supportTicket/attachmentAccess.js.map +1 -0
- package/dist/components/supportTicket/fileToAttachment.d.ts +9 -0
- package/dist/components/supportTicket/fileToAttachment.d.ts.map +1 -0
- package/dist/components/supportTicket/fileToAttachment.js +28 -0
- package/dist/components/supportTicket/fileToAttachment.js.map +1 -0
- package/dist/components/supportTicket/index.d.ts +11 -0
- package/dist/components/supportTicket/index.d.ts.map +1 -0
- package/dist/components/supportTicket/index.js +27 -0
- package/dist/components/supportTicket/index.js.map +1 -0
- package/dist/components/supportTicket/meta.d.ts +71 -0
- package/dist/components/supportTicket/meta.d.ts.map +1 -0
- package/dist/components/supportTicket/meta.js +115 -0
- package/dist/components/supportTicket/meta.js.map +1 -0
- package/dist/components/supportTicket/ticketModel.d.ts +102 -0
- package/dist/components/supportTicket/ticketModel.d.ts.map +1 -0
- package/dist/components/supportTicket/ticketModel.js +3 -0
- package/dist/components/supportTicket/ticketModel.js.map +1 -0
- package/dist/components/ticketReferences/TicketReferences.d.ts +52 -0
- package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -0
- package/dist/components/ticketReferences/TicketReferences.js +492 -0
- package/dist/components/ticketReferences/TicketReferences.js.map +1 -0
- package/dist/components/ticketReferences/index.d.ts +3 -0
- package/dist/components/ticketReferences/index.d.ts.map +1 -0
- package/dist/components/ticketReferences/index.js +6 -0
- package/dist/components/ticketReferences/index.js.map +1 -0
- package/dist/components/ticketThread/TicketThread.d.ts +57 -0
- package/dist/components/ticketThread/TicketThread.d.ts.map +1 -0
- package/dist/components/ticketThread/TicketThread.js +299 -0
- package/dist/components/ticketThread/TicketThread.js.map +1 -0
- package/dist/components/ticketThread/index.d.ts +3 -0
- package/dist/components/ticketThread/index.d.ts.map +1 -0
- package/dist/components/ticketThread/index.js +7 -0
- package/dist/components/ticketThread/index.js.map +1 -0
- package/dist/helpers/common.d.ts +5 -0
- package/dist/helpers/common.d.ts.map +1 -1
- package/dist/helpers/common.js +20 -1
- package/dist/helpers/common.js.map +1 -1
- package/dist/helpers/scrollbar.d.ts +2 -0
- package/dist/helpers/scrollbar.d.ts.map +1 -0
- package/dist/helpers/scrollbar.js +25 -0
- package/dist/helpers/scrollbar.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/StorageProvider.d.ts +13 -0
- package/dist/providers/StorageProvider.d.ts.map +1 -1
- package/dist/providers/StorageProvider.js +29 -5
- package/dist/providers/StorageProvider.js.map +1 -1
- package/package.json +6 -5
- package/src/components/FocusedEditing/index.tsx +17 -2
- package/src/components/composer/Composer.stories.tsx +238 -0
- package/src/components/composer/Composer.tsx +545 -0
- package/src/components/composer/helpers.ts +74 -0
- package/src/components/composer/index.ts +2 -0
- package/src/components/dpqlEditor/DpqlEditor.stories.tsx +74 -2
- package/src/components/form/engine/CompactRow.tsx +561 -283
- package/src/components/form/engine/CompactToolbar.tsx +216 -182
- package/src/components/form/engine/FormEngine.stories.tsx +1736 -162
- package/src/components/form/engine/FormEngine.tsx +886 -170
- package/src/components/form/engine/FormEngineRemote.stories.tsx +377 -0
- package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +8 -0
- package/src/components/form/engine/compactRowContext.ts +14 -0
- package/src/components/form/engine/compactRowStyles.ts +273 -146
- package/src/components/form/engine/compactToolbarContext.ts +1 -0
- package/src/components/form/engine/optionActions.ts +40 -0
- package/src/components/form/engine/readFirst.ts +169 -10
- package/src/components/form/engine/rendererTypes.ts +55 -0
- package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +159 -0
- package/src/components/form/engine/variants/VariantCalmTable.tsx +242 -0
- package/src/components/form/engine/variants/VariantCards.tsx +212 -0
- package/src/components/form/engine/variants/VariantFocus.tsx +382 -0
- package/src/components/form/engine/variants/VariantMinimal.tsx +170 -0
- package/src/components/form/engine/variants/focusDemo.ts +145 -0
- package/src/components/form/engine/variants/variantModel.ts +216 -0
- package/src/components/form/engine/variants/variantParts.tsx +313 -0
- package/src/components/form/expressions/ExpressionField.stories.tsx +84 -2
- package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +213 -19
- package/src/components/form/expressions/builder/index.tsx +12 -1
- package/src/components/form/expressions/useExpressions.ts +4 -1
- package/src/components/form/fields/Field.stories.tsx +40 -0
- package/src/components/form/fields/Field.tsx +10 -1
- package/src/components/form/fields/allowed-values/AllowedValues.tsx +13 -36
- package/src/components/form/fields/array/ArrayAutoField.stories.tsx +64 -0
- package/src/components/form/fields/auto/AutoFormField.stories.tsx +146 -2
- package/src/components/form/fields/auto/AutoFormField.tsx +42 -1
- package/src/components/form/fields/binary/Binary.stories.tsx +122 -0
- package/src/components/form/fields/binary/Binary.tsx +81 -0
- package/src/components/form/fields/boolean/Boolean.stories.tsx +58 -0
- package/src/components/form/fields/boolean/Boolean.tsx +1 -1
- package/src/components/form/fields/byte-size/ByteSize.stories.tsx +24 -0
- package/src/components/form/fields/color/Color.stories.tsx +30 -0
- package/src/components/form/fields/cron/Cron.stories.tsx +8 -0
- package/src/components/form/fields/date/Date.stories.tsx +22 -0
- package/src/components/form/fields/file/File.stories.tsx +48 -0
- package/src/components/form/fields/long-string/LongString.stories.tsx +24 -0
- package/src/components/form/fields/markdown/Markdown.stories.tsx +8 -0
- package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +14 -10
- package/src/components/form/fields/number/Number.stories.tsx +31 -0
- package/src/components/form/fields/object/Object.stories.tsx +88 -0
- package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +24 -0
- package/src/components/form/fields/rich-text/RichText.stories.tsx +23 -0
- package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +72 -0
- package/src/components/form/fields/select/Select.stories.tsx +108 -0
- package/src/components/form/fields/select/Select.tsx +38 -12
- package/src/components/form/fields/select/SelectCollection.tsx +78 -17
- package/src/components/form/fields/string/String.stories.tsx +16 -0
- package/src/components/form/fields/template/TemplateField.stories.tsx +160 -0
- package/src/components/form/fields/url/Url.stories.tsx +24 -0
- package/src/components/form/index.tsx +2 -0
- package/src/components/imageLightbox/ImageLightbox.stories.tsx +238 -0
- package/src/components/imageLightbox/ImageLightbox.tsx +236 -0
- package/src/components/imageLightbox/index.ts +1 -0
- package/src/components/log/Log.stories.tsx +96 -0
- package/src/components/menu/Menu.stories.tsx +54 -0
- package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +83 -37
- package/src/components/searchFilterBar/SearchFilterBar.tsx +131 -0
- package/src/components/searchFilterBar/index.ts +1 -0
- package/src/components/smartEditor/SmartEditor.stories.tsx +32 -0
- package/src/components/supportTicket/AttachmentChips.stories.tsx +171 -0
- package/src/components/supportTicket/AttachmentChips.tsx +147 -0
- package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +171 -0
- package/src/components/supportTicket/InterfaceReferenceTags.tsx +96 -0
- package/src/components/supportTicket/ReferencePicker.stories.tsx +519 -0
- package/src/components/supportTicket/ReferencePicker.tsx +563 -0
- package/src/components/supportTicket/TicketConversation.stories.tsx +121 -0
- package/src/components/supportTicket/TicketHeader.stories.tsx +183 -0
- package/src/components/supportTicket/TicketHeader.tsx +247 -0
- package/src/components/supportTicket/TicketMetaTags.stories.tsx +103 -0
- package/src/components/supportTicket/TicketMetaTags.tsx +85 -0
- package/src/components/supportTicket/TicketReplyBox.stories.tsx +351 -0
- package/src/components/supportTicket/TicketReplyBox.tsx +146 -0
- package/src/components/supportTicket/attachmentAccess.ts +97 -0
- package/src/components/supportTicket/fileToAttachment.ts +24 -0
- package/src/components/supportTicket/index.ts +10 -0
- package/src/components/supportTicket/meta.ts +185 -0
- package/src/components/supportTicket/ticketModel.ts +131 -0
- package/src/components/ticketReferences/TicketReferences.stories.tsx +315 -0
- package/src/components/ticketReferences/TicketReferences.tsx +886 -0
- package/src/components/ticketReferences/index.ts +2 -0
- package/src/components/ticketThread/TicketThread.stories.tsx +828 -0
- package/src/components/ticketThread/TicketThread.tsx +704 -0
- package/src/components/ticketThread/index.ts +6 -0
- package/src/helpers/common.ts +19 -0
- package/src/helpers/scrollbar.ts +32 -0
- package/src/hooks/useFetch/useFetch.stories.tsx +30 -0
- package/src/hooks/useStorage/useStorage.stories.tsx +82 -0
- package/src/hooks/useWebSocket/useWebsocket.stories.tsx +127 -1
- package/src/index.tsx +8 -1
- package/src/providers/StorageProvider.tsx +30 -4
- package/src/stores/currentUser/currentUser.stories.tsx +49 -0
|
@@ -12,8 +12,8 @@ import { ReqoreCheckbox, ReqoreControlGroup, ReqoreSpan } from '@qoretechnologie
|
|
|
12
12
|
import { IReqoreButtonProps } from '@qoretechnologies/reqore/dist/components/Button';
|
|
13
13
|
import { IQorusAllowedValue, TQorusType } from '@qoretechnologies/ts-toolkit';
|
|
14
14
|
import { size as count, isEqual } from 'lodash';
|
|
15
|
-
import { memo,
|
|
16
|
-
import {
|
|
15
|
+
import { memo, useMemo } from 'react';
|
|
16
|
+
import { getSelectItemShortDescription } from '../select/SelectCollection';
|
|
17
17
|
import { ISelectFormFieldItem, SelectFormField as Select } from '../select/Select';
|
|
18
18
|
|
|
19
19
|
export interface IFieldAllowedValuesProps extends Pick<
|
|
@@ -30,6 +30,7 @@ export interface IFieldAllowedValuesProps extends Pick<
|
|
|
30
30
|
app?: string;
|
|
31
31
|
action?: string;
|
|
32
32
|
showSavedValues?: boolean;
|
|
33
|
+
forceDropdown?: boolean;
|
|
33
34
|
[key: string]: any;
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -57,7 +58,7 @@ export const FieldAllowedValuesCheckGroup = memo(
|
|
|
57
58
|
margin='right'
|
|
58
59
|
key={item.value?.toString()}
|
|
59
60
|
label={item.display_name || JSON.stringify(item.value)}
|
|
60
|
-
tooltip={item
|
|
61
|
+
tooltip={getSelectItemShortDescription(item)}
|
|
61
62
|
disabled={rest.disabled}
|
|
62
63
|
readOnly={rest.readOnly}
|
|
63
64
|
intent={item.value === value ? 'info' : undefined}
|
|
@@ -97,49 +98,23 @@ export const FieldAllowedValues = memo(
|
|
|
97
98
|
allowCreation,
|
|
98
99
|
showSavedValues,
|
|
99
100
|
showDescription,
|
|
101
|
+
forceDropdown,
|
|
100
102
|
size,
|
|
101
103
|
disabled,
|
|
102
104
|
name,
|
|
103
105
|
readOnly,
|
|
104
106
|
}: IFieldAllowedValuesProps) => {
|
|
105
|
-
const [localValue, setLocalValue] = useState(value);
|
|
106
|
-
const [localItems, setLocalItems] = useState<IQorusAllowedValue[]>(items);
|
|
107
|
-
|
|
108
|
-
useEffect(() => {
|
|
109
|
-
setLocalItems(items);
|
|
110
|
-
}, [JSON.stringify(items)]);
|
|
111
|
-
|
|
112
|
-
const handleLocalChange = useCallback((_name: string, value: unknown) => {
|
|
113
|
-
setLocalValue(value);
|
|
114
|
-
}, []);
|
|
115
|
-
|
|
116
|
-
useDebounce(
|
|
117
|
-
() => {
|
|
118
|
-
if (localValue !== value) {
|
|
119
|
-
onChange(name, localValue);
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
200,
|
|
123
|
-
[localValue]
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
useEffect(() => {
|
|
127
|
-
if (value !== localValue) {
|
|
128
|
-
setLocalValue(value);
|
|
129
|
-
}
|
|
130
|
-
}, [value]);
|
|
131
|
-
|
|
132
107
|
const fullItems = useMemo(() => {
|
|
133
108
|
const result = [
|
|
134
109
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
135
|
-
...
|
|
110
|
+
...items.map(({ metadata, value, ...rest }) => ({
|
|
136
111
|
value: value?.value,
|
|
137
112
|
...rest,
|
|
138
113
|
})),
|
|
139
114
|
] as ISelectFormFieldItem[];
|
|
140
115
|
|
|
141
116
|
return result;
|
|
142
|
-
}, [JSON.stringify(
|
|
117
|
+
}, [JSON.stringify(items), type, value, showSavedValues, disabled, readOnly]);
|
|
143
118
|
|
|
144
119
|
const style = useMemo(() => ({ width: '100%' }), []);
|
|
145
120
|
|
|
@@ -153,8 +128,8 @@ export const FieldAllowedValues = memo(
|
|
|
153
128
|
return (
|
|
154
129
|
<FieldAllowedValuesCheckGroup
|
|
155
130
|
items={fullItems}
|
|
156
|
-
onChange={
|
|
157
|
-
value={
|
|
131
|
+
onChange={onChange}
|
|
132
|
+
value={value}
|
|
158
133
|
name={name}
|
|
159
134
|
/>
|
|
160
135
|
);
|
|
@@ -164,10 +139,11 @@ export const FieldAllowedValues = memo(
|
|
|
164
139
|
<Select
|
|
165
140
|
items={fullItems}
|
|
166
141
|
value={value}
|
|
167
|
-
onChange={(value) =>
|
|
142
|
+
onChange={(value) => onChange(name, value)}
|
|
168
143
|
fluid
|
|
169
144
|
fixed={false}
|
|
170
145
|
showDescription={Boolean(showDescription || showDescription === undefined)}
|
|
146
|
+
forceDropdown={forceDropdown}
|
|
171
147
|
style={style}
|
|
172
148
|
size={size}
|
|
173
149
|
disabled={disabled}
|
|
@@ -178,10 +154,11 @@ export const FieldAllowedValues = memo(
|
|
|
178
154
|
return (
|
|
179
155
|
<Select
|
|
180
156
|
items={fullItems}
|
|
181
|
-
onChange={(value) =>
|
|
157
|
+
onChange={(value) => onChange(name, value)}
|
|
182
158
|
fluid
|
|
183
159
|
fixed={false}
|
|
184
160
|
showDescription={false}
|
|
161
|
+
forceDropdown={forceDropdown}
|
|
185
162
|
style={style}
|
|
186
163
|
minimal
|
|
187
164
|
placeholder={'Saved & Suggested Values'}
|
|
@@ -83,6 +83,14 @@ export const CompactEmpty: Story = {
|
|
|
83
83
|
type: 'string',
|
|
84
84
|
value: [],
|
|
85
85
|
},
|
|
86
|
+
parameters: {
|
|
87
|
+
docs: {
|
|
88
|
+
description: {
|
|
89
|
+
story:
|
|
90
|
+
'Renders ArrayAutoField in compact string mode with no items — only the entry input and a disabled confirm button are visible.',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
86
94
|
async play({ canvasElement }) {
|
|
87
95
|
const canvas = within(canvasElement);
|
|
88
96
|
|
|
@@ -102,6 +110,14 @@ export const CompactWithValues: Story = {
|
|
|
102
110
|
type: 'string',
|
|
103
111
|
value: ['hello', 'world'],
|
|
104
112
|
},
|
|
113
|
+
parameters: {
|
|
114
|
+
docs: {
|
|
115
|
+
description: {
|
|
116
|
+
story:
|
|
117
|
+
'Renders ArrayAutoField in compact string mode with two existing items — the values are shown as tags above the entry input.',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
105
121
|
async play({ canvasElement }) {
|
|
106
122
|
const canvas = within(canvasElement);
|
|
107
123
|
|
|
@@ -122,6 +138,14 @@ export const CompactAddItem: Story = {
|
|
|
122
138
|
type: 'string',
|
|
123
139
|
value: ['existing'],
|
|
124
140
|
},
|
|
141
|
+
parameters: {
|
|
142
|
+
docs: {
|
|
143
|
+
description: {
|
|
144
|
+
story:
|
|
145
|
+
'Renders ArrayAutoField in compact string mode with one existing item. Typing into the input and clicking confirm appends the new item and fires onChange with the full list.',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
},
|
|
125
149
|
async play({ args }) {
|
|
126
150
|
await waitFor(
|
|
127
151
|
() => expect(document.querySelectorAll('.array-auto-compact-tag').length).toBe(1),
|
|
@@ -157,6 +181,14 @@ export const CompactEditItem: Story = {
|
|
|
157
181
|
type: 'string',
|
|
158
182
|
value: ['alpha', 'beta'],
|
|
159
183
|
},
|
|
184
|
+
parameters: {
|
|
185
|
+
docs: {
|
|
186
|
+
description: {
|
|
187
|
+
story:
|
|
188
|
+
'Renders ArrayAutoField in compact string mode with two items. Clicking a tag\'s edit action loads its value into the input; editing and confirming replaces the tag in place.',
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
},
|
|
160
192
|
async play({ args }) {
|
|
161
193
|
await waitFor(
|
|
162
194
|
() => expect(document.querySelectorAll('.array-auto-compact-tag').length).toBe(2),
|
|
@@ -199,6 +231,14 @@ export const CompactRemoveItem: Story = {
|
|
|
199
231
|
type: 'string',
|
|
200
232
|
value: ['one', 'two', 'three'],
|
|
201
233
|
},
|
|
234
|
+
parameters: {
|
|
235
|
+
docs: {
|
|
236
|
+
description: {
|
|
237
|
+
story:
|
|
238
|
+
'Renders ArrayAutoField in compact string mode with three items. Clicking the middle tag\'s remove action drops it from the list and fires onChange with the remaining two.',
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
},
|
|
202
242
|
async play({ args }) {
|
|
203
243
|
await waitFor(
|
|
204
244
|
() => expect(document.querySelectorAll('.array-auto-compact-tag').length).toBe(3),
|
|
@@ -230,6 +270,14 @@ export const CompactWithNumbers: Story = {
|
|
|
230
270
|
value: [10, 20, 30],
|
|
231
271
|
renderItem: numberRenderItem,
|
|
232
272
|
},
|
|
273
|
+
parameters: {
|
|
274
|
+
docs: {
|
|
275
|
+
description: {
|
|
276
|
+
story:
|
|
277
|
+
'Renders ArrayAutoField in compact int mode with three numeric items — the tags show 10, 20 and 30 and the entry input uses the Number field.',
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
},
|
|
233
281
|
async play() {
|
|
234
282
|
await waitFor(
|
|
235
283
|
() => expect(document.querySelectorAll('.array-auto-compact-tag').length).toBe(3),
|
|
@@ -244,6 +292,14 @@ export const CompactDisabled: Story = {
|
|
|
244
292
|
value: ['locked'],
|
|
245
293
|
disabled: true,
|
|
246
294
|
},
|
|
295
|
+
parameters: {
|
|
296
|
+
docs: {
|
|
297
|
+
description: {
|
|
298
|
+
story:
|
|
299
|
+
'Renders ArrayAutoField in compact string mode with one item but disabled — the tag is visible without edit/remove actions and no entry input is shown.',
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
},
|
|
247
303
|
async play() {
|
|
248
304
|
await waitFor(
|
|
249
305
|
() => expect(document.querySelectorAll('.array-auto-compact-tag').length).toBe(1),
|
|
@@ -267,6 +323,14 @@ export const ComplexHashItems: Story = {
|
|
|
267
323
|
value: [{ key: 'value' }],
|
|
268
324
|
display_name: 'Hash Items',
|
|
269
325
|
},
|
|
326
|
+
parameters: {
|
|
327
|
+
docs: {
|
|
328
|
+
description: {
|
|
329
|
+
story:
|
|
330
|
+
'Renders ArrayAutoField in hash mode with one hash item — the field switches to the panel-based layout rather than compact tags.',
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
},
|
|
270
334
|
async play() {
|
|
271
335
|
// Should render panel-based UI, not compact tags
|
|
272
336
|
await waitFor(() => expect(document.querySelectorAll('.array-auto-item').length).toBe(1), {
|
|
@@ -57,6 +57,14 @@ const waitForText = async (text: string | RegExp) => {
|
|
|
57
57
|
/** Auto type, no value — the picker is shown and the field area prompts for a type. */
|
|
58
58
|
export const Empty: Story = {
|
|
59
59
|
args: {},
|
|
60
|
+
parameters: {
|
|
61
|
+
docs: {
|
|
62
|
+
description: {
|
|
63
|
+
story:
|
|
64
|
+
'Renders AutoFormField with no value or defaultType — the type picker is shown and the field area prompts the operator to pick a data type.',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
60
68
|
async play({ canvasElement }) {
|
|
61
69
|
const canvas = within(canvasElement);
|
|
62
70
|
// The IDE auto resolves its type in a mount effect — assert asynchronously.
|
|
@@ -71,6 +79,14 @@ export const InferredInteger: Story = {
|
|
|
71
79
|
args: {
|
|
72
80
|
value: 42,
|
|
73
81
|
},
|
|
82
|
+
parameters: {
|
|
83
|
+
docs: {
|
|
84
|
+
description: {
|
|
85
|
+
story:
|
|
86
|
+
'Renders AutoFormField with a pre-existing numeric value of 42 — the type is inferred as int and the numeric input is shown without prompting for a type.',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
74
90
|
async play({ canvasElement }) {
|
|
75
91
|
const canvas = within(canvasElement);
|
|
76
92
|
// Resolved → a concrete field renders (post mount effect) and no prompt.
|
|
@@ -86,6 +102,14 @@ export const InferredText: Story = {
|
|
|
86
102
|
args: {
|
|
87
103
|
value: 'hello world',
|
|
88
104
|
},
|
|
105
|
+
parameters: {
|
|
106
|
+
docs: {
|
|
107
|
+
description: {
|
|
108
|
+
story:
|
|
109
|
+
'Renders AutoFormField with a pre-existing string value — the type is inferred as string and the text field is shown holding "hello world".',
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
89
113
|
async play({ canvasElement }) {
|
|
90
114
|
const canvas = within(canvasElement);
|
|
91
115
|
await expect(await canvas.findByDisplayValue('hello world')).toBeInTheDocument();
|
|
@@ -97,6 +121,14 @@ export const ConcreteString: Story = {
|
|
|
97
121
|
args: {
|
|
98
122
|
defaultType: 'string',
|
|
99
123
|
},
|
|
124
|
+
parameters: {
|
|
125
|
+
docs: {
|
|
126
|
+
description: {
|
|
127
|
+
story:
|
|
128
|
+
'Renders AutoFormField with a concrete defaultType of string — the text field is shown directly, no type picker. Typing "abc" fires onChange with the value and inferred type.',
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
100
132
|
async play({ canvasElement, args }) {
|
|
101
133
|
const canvas = within(canvasElement);
|
|
102
134
|
// string renders the IDE's LongString field — a textarea. The verbatim
|
|
@@ -121,6 +153,14 @@ export const Nullable: Story = {
|
|
|
121
153
|
value: 'some text',
|
|
122
154
|
canBeNull: true,
|
|
123
155
|
},
|
|
156
|
+
parameters: {
|
|
157
|
+
docs: {
|
|
158
|
+
description: {
|
|
159
|
+
story:
|
|
160
|
+
'Renders AutoFormField with canBeNull enabled. Clicking "Set as null" clears the value to null, hides the field editor and flips the toggle to "Unset null".',
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
124
164
|
async play({ canvasElement, args }) {
|
|
125
165
|
const canvas = within(canvasElement);
|
|
126
166
|
|
|
@@ -147,6 +187,14 @@ export const AllowedTypesSubset: Story = {
|
|
|
147
187
|
{ name: 'string', display_name: 'Text' },
|
|
148
188
|
],
|
|
149
189
|
},
|
|
190
|
+
parameters: {
|
|
191
|
+
docs: {
|
|
192
|
+
description: {
|
|
193
|
+
story:
|
|
194
|
+
'Renders AutoFormField with allowedTypes restricted to Integer and Text — the picker badge shows 2 available types instead of the full 14.',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
150
198
|
async play() {
|
|
151
199
|
// The picker badge reflects the restricted list — 2 instead of 14.
|
|
152
200
|
await waitForText('Please select data type');
|
|
@@ -159,6 +207,14 @@ export const NoSoftTypes: Story = {
|
|
|
159
207
|
args: {
|
|
160
208
|
noSoft: true,
|
|
161
209
|
},
|
|
210
|
+
parameters: {
|
|
211
|
+
docs: {
|
|
212
|
+
description: {
|
|
213
|
+
story:
|
|
214
|
+
'Renders AutoFormField with noSoft enabled — the soft* type variants are hidden and the picker badge reads 9 instead of 14.',
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
162
218
|
async play() {
|
|
163
219
|
await waitForText('Please select data type');
|
|
164
220
|
await waitForText('9');
|
|
@@ -170,6 +226,14 @@ export const NoSoftTypes: Story = {
|
|
|
170
226
|
* `auto` renders the picker for free, via FormEngine → TemplateField → auto.
|
|
171
227
|
*/
|
|
172
228
|
export const ViaFormEngine: Story = {
|
|
229
|
+
parameters: {
|
|
230
|
+
docs: {
|
|
231
|
+
description: {
|
|
232
|
+
story:
|
|
233
|
+
'Renders a FormEngine schema whose single option is typed as auto — the engine flows through TemplateField and renders the AutoFormField picker without any extra wiring.',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
},
|
|
173
237
|
render: () => {
|
|
174
238
|
const [val, setVal] = useState<any>({});
|
|
175
239
|
return (
|
|
@@ -190,9 +254,16 @@ export const ViaFormEngine: Story = {
|
|
|
190
254
|
},
|
|
191
255
|
async play({ canvasElement }) {
|
|
192
256
|
const canvas = within(canvasElement);
|
|
193
|
-
|
|
257
|
+
// Generous timeout: findByText defaults to 1s, which flakes under CI load
|
|
258
|
+
// while the engine boots the auto field's type picker (the rest of the suite
|
|
259
|
+
// waits ~10s).
|
|
260
|
+
await expect(
|
|
261
|
+
await canvas.findByText('My Auto Field', undefined, { timeout: 10000 })
|
|
262
|
+
).toBeInTheDocument();
|
|
194
263
|
// The auto field renders its type picker inside the engine-driven form.
|
|
195
|
-
await expect(
|
|
264
|
+
await expect(
|
|
265
|
+
await canvas.findByText('Please select data type', undefined, { timeout: 10000 })
|
|
266
|
+
).toBeInTheDocument();
|
|
196
267
|
},
|
|
197
268
|
};
|
|
198
269
|
|
|
@@ -215,6 +286,14 @@ export const StringWithAllowedValues: Story = {
|
|
|
215
286
|
},
|
|
216
287
|
],
|
|
217
288
|
},
|
|
289
|
+
parameters: {
|
|
290
|
+
docs: {
|
|
291
|
+
description: {
|
|
292
|
+
story:
|
|
293
|
+
'Renders AutoFormField for a string with two allowed values — the operator picks from the constrained list rather than typing freely.',
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
},
|
|
218
297
|
};
|
|
219
298
|
|
|
220
299
|
export const RichText: Story = {
|
|
@@ -224,6 +303,14 @@ export const RichText: Story = {
|
|
|
224
303
|
allowTemplates: true,
|
|
225
304
|
templates: buildTemplates(templates as any),
|
|
226
305
|
},
|
|
306
|
+
parameters: {
|
|
307
|
+
docs: {
|
|
308
|
+
description: {
|
|
309
|
+
story:
|
|
310
|
+
'Renders AutoFormField in richtext mode with templates enabled. Typing appends to the existing value inside the contenteditable editor.',
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
},
|
|
227
314
|
play: async ({ canvasElement }) => {
|
|
228
315
|
await waitFor(() => canvasElement.querySelector('div[contenteditable]'), {
|
|
229
316
|
timeout: 15000,
|
|
@@ -243,6 +330,7 @@ export const RichText: Story = {
|
|
|
243
330
|
export const ConnectionWithAllowedValues: Story = {
|
|
244
331
|
args: {
|
|
245
332
|
defaultType: 'connection',
|
|
333
|
+
forceDropdown: false,
|
|
246
334
|
allowed_values: [
|
|
247
335
|
{
|
|
248
336
|
display_name: 'test',
|
|
@@ -257,6 +345,14 @@ export const ConnectionWithAllowedValues: Story = {
|
|
|
257
345
|
},
|
|
258
346
|
],
|
|
259
347
|
},
|
|
348
|
+
parameters: {
|
|
349
|
+
docs: {
|
|
350
|
+
description: {
|
|
351
|
+
story:
|
|
352
|
+
'Renders AutoFormField for a connection with two allowed values — clicking "Please select" opens the item picker modal titled "Select from items".',
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
},
|
|
260
356
|
play: async () => {
|
|
261
357
|
// connection is a no-compact type → the allowed values render as the
|
|
262
358
|
// select with the item collection (the IDE asserts the same modal title).
|
|
@@ -270,6 +366,14 @@ export const Hash: Story = {
|
|
|
270
366
|
args: {
|
|
271
367
|
value: jsyaml.dump({ key: 'value' }),
|
|
272
368
|
},
|
|
369
|
+
parameters: {
|
|
370
|
+
docs: {
|
|
371
|
+
description: {
|
|
372
|
+
story:
|
|
373
|
+
'Renders AutoFormField with a YAML-serialized hash value — the type is inferred as hash and the object editor is shown holding the parsed data.',
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
},
|
|
273
377
|
};
|
|
274
378
|
|
|
275
379
|
export const File: Story = {
|
|
@@ -281,6 +385,14 @@ export const File: Story = {
|
|
|
281
385
|
size: 1234,
|
|
282
386
|
},
|
|
283
387
|
},
|
|
388
|
+
parameters: {
|
|
389
|
+
docs: {
|
|
390
|
+
description: {
|
|
391
|
+
story:
|
|
392
|
+
'Renders AutoFormField in file mode holding a text-file value — the file field shows the file name in place of the drop zone.',
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
},
|
|
284
396
|
};
|
|
285
397
|
|
|
286
398
|
export const AutoDoesNotChangeTypeBackToAuto: Story = {
|
|
@@ -288,6 +400,14 @@ export const AutoDoesNotChangeTypeBackToAuto: Story = {
|
|
|
288
400
|
defaultType: 'auto',
|
|
289
401
|
value: 'test',
|
|
290
402
|
},
|
|
403
|
+
parameters: {
|
|
404
|
+
docs: {
|
|
405
|
+
description: {
|
|
406
|
+
story:
|
|
407
|
+
'Renders AutoFormField in auto mode with a string value — the inferred type ("string") is shown and the picker still exposes all 14 types so the operator can switch away from auto without the field snapping back.',
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
},
|
|
291
411
|
play: async () => {
|
|
292
412
|
await waitForText('string');
|
|
293
413
|
await waitForText('14');
|
|
@@ -310,6 +430,14 @@ export const ListWithAllowedValues: Story = {
|
|
|
310
430
|
},
|
|
311
431
|
],
|
|
312
432
|
},
|
|
433
|
+
parameters: {
|
|
434
|
+
docs: {
|
|
435
|
+
description: {
|
|
436
|
+
story:
|
|
437
|
+
'Renders AutoFormField in list mode restricted to two allowed list values — the operator picks one of the pre-defined lists rather than composing their own.',
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
},
|
|
313
441
|
};
|
|
314
442
|
|
|
315
443
|
export const ListWithCreatableAllowedValues: Story = {
|
|
@@ -330,6 +458,14 @@ export const ListWithCreatableAllowedValues: Story = {
|
|
|
330
458
|
},
|
|
331
459
|
],
|
|
332
460
|
},
|
|
461
|
+
parameters: {
|
|
462
|
+
docs: {
|
|
463
|
+
description: {
|
|
464
|
+
story:
|
|
465
|
+
'Renders AutoFormField in list mode with two allowed values but with allowed_values_creatable enabled — the operator can pick a canned list or compose a custom one.',
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
},
|
|
333
469
|
};
|
|
334
470
|
|
|
335
471
|
export const ListWithElementType: Story = {
|
|
@@ -337,4 +473,12 @@ export const ListWithElementType: Story = {
|
|
|
337
473
|
defaultType: 'list',
|
|
338
474
|
element_type: 'int',
|
|
339
475
|
},
|
|
476
|
+
parameters: {
|
|
477
|
+
docs: {
|
|
478
|
+
description: {
|
|
479
|
+
story:
|
|
480
|
+
'Renders AutoFormField in list mode with an int element type — new items are added as integers rather than requiring the operator to pick a per-item type.',
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
},
|
|
340
484
|
};
|
|
@@ -71,6 +71,9 @@ export interface IAutoFieldProps
|
|
|
71
71
|
uniqueName?: string;
|
|
72
72
|
|
|
73
73
|
arg_schema?: string | IOptionsSchema;
|
|
74
|
+
/** Render the arg_schema sub-form in compact (read-first) mode, matching the
|
|
75
|
+
* parent engine. */
|
|
76
|
+
compact?: boolean;
|
|
74
77
|
path?: string;
|
|
75
78
|
column?: boolean;
|
|
76
79
|
level?: number;
|
|
@@ -137,6 +140,7 @@ function AutoField<T = any>({
|
|
|
137
140
|
noSoft,
|
|
138
141
|
path,
|
|
139
142
|
arg_schema,
|
|
143
|
+
compact,
|
|
140
144
|
column,
|
|
141
145
|
level = 0,
|
|
142
146
|
canBeNull,
|
|
@@ -150,6 +154,12 @@ function AutoField<T = any>({
|
|
|
150
154
|
showSavedValues,
|
|
151
155
|
uniqueName,
|
|
152
156
|
componentOverrides,
|
|
157
|
+
// qorus#347-followup (scope forwarding): destructure so it does NOT
|
|
158
|
+
// land in `...rest` — otherwise the primitive field renderers spread
|
|
159
|
+
// rest onto DOM nodes and React warns about the unknown attribute.
|
|
160
|
+
// Only the nested arg_schema mount sites re-forward this into their
|
|
161
|
+
// sub-forms explicitly.
|
|
162
|
+
inheritedFromParent,
|
|
153
163
|
...rest
|
|
154
164
|
}: IAutoFieldProps & T) {
|
|
155
165
|
const [currentType, setType] = useState<IQorusType>(defaultInternalType || null);
|
|
@@ -346,7 +356,12 @@ function AutoField<T = any>({
|
|
|
346
356
|
{...rest}
|
|
347
357
|
name={name}
|
|
348
358
|
value={value}
|
|
349
|
-
onChange={(val: any
|
|
359
|
+
onChange={(val: any, emittedType?: IQorusType, emittedIsFunction?: boolean) => {
|
|
360
|
+
const returnType = emittedType || currentType;
|
|
361
|
+
if (onChange && returnType) {
|
|
362
|
+
onChange(name, val, returnType, emittedIsFunction);
|
|
363
|
+
}
|
|
364
|
+
}}
|
|
350
365
|
/>
|
|
351
366
|
);
|
|
352
367
|
}
|
|
@@ -359,6 +374,7 @@ function AutoField<T = any>({
|
|
|
359
374
|
) {
|
|
360
375
|
return (
|
|
361
376
|
<SchemaDefinitionEditor
|
|
377
|
+
{...((rest as any).fieldProps || {})}
|
|
362
378
|
value={
|
|
363
379
|
value === null || value === undefined
|
|
364
380
|
? undefined
|
|
@@ -404,6 +420,7 @@ function AutoField<T = any>({
|
|
|
404
420
|
app={rest.app}
|
|
405
421
|
action={rest.action}
|
|
406
422
|
showDescription={rest.showDescription}
|
|
423
|
+
forceDropdown={rest.forceDropdown}
|
|
407
424
|
allowCreation={rest.allowed_values_creatable}
|
|
408
425
|
showSavedValues={showSavedValues}
|
|
409
426
|
readOnly={rest.readonly}
|
|
@@ -540,6 +557,10 @@ function AutoField<T = any>({
|
|
|
540
557
|
<FormEngine
|
|
541
558
|
wrapperPadding='top'
|
|
542
559
|
flat
|
|
560
|
+
compact={compact}
|
|
561
|
+
// Embedded sub-form: no scroll context of its own, so its toolbar
|
|
562
|
+
// isn't sticky and its header stays transparent (no dark backdrop).
|
|
563
|
+
compactNested
|
|
543
564
|
name={name}
|
|
544
565
|
uniqueName={uniqueName}
|
|
545
566
|
options={finalArgSchema}
|
|
@@ -556,6 +577,20 @@ function AutoField<T = any>({
|
|
|
556
577
|
stringTemplates={rest.templates}
|
|
557
578
|
size={rest.size}
|
|
558
579
|
disabled={rest.disabled}
|
|
580
|
+
// Forward consumer-injected editors into the nested sub-form
|
|
581
|
+
// so its own fields can render host-injected types (e.g. a
|
|
582
|
+
// `code-editor` override for a `body` sub-field inside a
|
|
583
|
+
// list-of-hash row). Was missing pre-qorus#347-followup —
|
|
584
|
+
// catches an existing gap surfaced by the nested inherit_props
|
|
585
|
+
// story.
|
|
586
|
+
componentOverrides={componentOverrides}
|
|
587
|
+
// qorus#347-followup (scope forwarding): thread the accumulated
|
|
588
|
+
// inheritance bag into the nested sub-form so its own fields'
|
|
589
|
+
// `inherit_props` can reach ancestor-scope values (e.g. a
|
|
590
|
+
// service-method row's `body` picking up `language` from the
|
|
591
|
+
// parent service form). The parent FormEngine populates this
|
|
592
|
+
// via TemplateField -> AutoFormField's `rest`.
|
|
593
|
+
inheritedFromParent={inheritedFromParent}
|
|
559
594
|
/>
|
|
560
595
|
);
|
|
561
596
|
}
|
|
@@ -650,6 +685,12 @@ function AutoField<T = any>({
|
|
|
650
685
|
allowed_values_creatable={rest.element_allowed_values_creatable}
|
|
651
686
|
type={effectiveElementType}
|
|
652
687
|
componentOverrides={componentOverrides}
|
|
688
|
+
// qorus#347-followup (scope forwarding): thread the accumulated
|
|
689
|
+
// inheritance bag through the list wrapper so each row's
|
|
690
|
+
// arg_schema sub-form sees it. ArrayAuto forwards this via
|
|
691
|
+
// TemplateField's `rest` into each row's AutoFormField, which
|
|
692
|
+
// hands it to the row's nested FormEngine (case 'hash' above).
|
|
693
|
+
inheritedFromParent={inheritedFromParent}
|
|
653
694
|
onChange={(name, value) => {
|
|
654
695
|
if (!size(value)) {
|
|
655
696
|
return handleChange(name, undefined);
|