@react-typed-forms/schemas 11.15.0 → 11.17.0

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.
@@ -1,6 +1,7 @@
1
- import { ArrayRendererRegistration } from "../renderers";
1
+ import { ArrayRendererRegistration, DataRendererRegistration } from "../renderers";
2
2
  import { ActionRendererProps, ArrayRendererProps } from "../controlRender";
3
3
  import React, { ReactNode } from "react";
4
+ export declare function createDefaultArrayDataRenderer(): DataRendererRegistration;
4
5
  export interface DefaultArrayRendererOptions {
5
6
  className?: string;
6
7
  removableClass?: string;
@@ -1,4 +1,4 @@
1
- import React, { CSSProperties, FC, Key, ReactElement, ReactNode } from "react";
1
+ import React, { FC, Key, ReactElement, ReactNode } from "react";
2
2
  import { Control } from "@react-typed-forms/core";
3
3
  import { AdornmentPlacement, ControlAdornment, ControlDefinition, DataControlDefinition, DisplayData, FieldOption, GroupRenderOptions, RenderOptions, SchemaField, SchemaInterface, SchemaValidator } from "./types";
4
4
  import { ControlDataContext, JsonPath } from "./util";
@@ -121,7 +121,6 @@ export interface DataRendererProps extends ParentRendererProps {
121
121
  required: boolean;
122
122
  options: FieldOption[] | undefined | null;
123
123
  hidden: boolean;
124
- toArrayProps?: () => ArrayRendererProps;
125
124
  }
126
125
  export interface ActionRendererProps {
127
126
  actionId: string;
@@ -178,7 +177,6 @@ export declare function ControlRenderer({ definition, fields, renderer, options,
178
177
  parentPath?: JsonPath[];
179
178
  }): React.JSX.Element;
180
179
  export declare function defaultDataProps({ definition, field, control, formOptions, style, allowedOptions, schemaInterface, ...props }: DataControlProps): DataRendererProps;
181
- export declare function defaultArrayProps(arrayControl: Control<any[] | undefined | null>, field: SchemaField, required: boolean, style: CSSProperties | undefined, className: string | undefined, renderElement: (elemIndex: number) => ReactNode, min: number | undefined | null, max: number | undefined | null): ArrayRendererProps;
182
180
  export interface ChildRendererOptions {
183
181
  elementIndex?: number;
184
182
  dataContext?: ControlDataContext;
@@ -216,6 +214,11 @@ export declare function appendMarkupAt(pos: AdornmentPlacement, markup: ReactNod
216
214
  export declare function wrapMarkupAt(pos: AdornmentPlacement, wrap: (ex: ReactNode) => ReactNode): (layout: RenderedLayout) => void;
217
215
  export declare function renderLayoutParts(props: ControlLayoutProps, renderer: FormRenderer): RenderedLayout;
218
216
  export declare function controlTitle(title: string | undefined | null, field: SchemaField): string;
217
+ export declare function getLengthRestrictions(definition: DataControlDefinition): {
218
+ min: number | null | undefined;
219
+ max: number | null | undefined;
220
+ };
221
+ export declare function createArrayActions(control: Control<any[]>, field: SchemaField, addText?: string | null, removeText?: string | null, noAdd?: boolean | null, noRemove?: boolean | null): Pick<ArrayRendererProps, "addAction" | "removeAction" | "arrayControl">;
219
222
  export declare function applyArrayLengthRestrictions({ arrayControl, min, max, addAction: aa, removeAction: ra, required, }: Pick<ArrayRendererProps, "addAction" | "removeAction" | "arrayControl" | "min" | "max" | "required">, disable?: boolean): Pick<ArrayRendererProps, "addAction" | "removeAction"> & {
220
223
  addDisabled: boolean;
221
224
  removeDisabled: boolean;
package/lib/index.js CHANGED
@@ -95,6 +95,7 @@ exports.DataRenderType = void 0;
95
95
  DataRenderType["Group"] = "Group";
96
96
  DataRenderType["NullToggle"] = "NullToggle";
97
97
  DataRenderType["Jsonata"] = "Jsonata";
98
+ DataRenderType["Array"] = "Array";
98
99
  })(exports.DataRenderType || (exports.DataRenderType = {}));
99
100
  exports.SyncTextType = void 0;
100
101
  (function (SyncTextType) {
@@ -168,6 +169,9 @@ function isTextfieldRenderer(options) {
168
169
  function isDataGroupRenderer(options) {
169
170
  return options.type === exports.DataRenderType.Group;
170
171
  }
172
+ function isArrayRenderer(options) {
173
+ return options.type === exports.DataRenderType.Array;
174
+ }
171
175
 
172
176
  function _arrayLikeToArray(r, a) {
173
177
  (null == a || a > r.length) && (a = r.length);
@@ -1694,7 +1698,7 @@ function ControlRenderer(_ref3) {
1694
1698
  }
1695
1699
  }
1696
1700
  function defaultDataProps(_ref4) {
1697
- var _definition$validator, _allowedOptions$value, _definition$children, _definition$renderOpt2;
1701
+ var _allowedOptions$value, _definition$children, _definition$renderOpt2;
1698
1702
  var definition = _ref4.definition,
1699
1703
  field = _ref4.field,
1700
1704
  control = _ref4.control,
@@ -1704,9 +1708,6 @@ function defaultDataProps(_ref4) {
1704
1708
  _ref4$schemaInterface = _ref4.schemaInterface,
1705
1709
  schemaInterface = _ref4$schemaInterface === void 0 ? defaultSchemaInterface : _ref4$schemaInterface,
1706
1710
  props = _objectWithoutPropertiesLoose(_ref4, _excluded$4);
1707
- var lengthVal = (_definition$validator = definition.validators) == null ? void 0 : _definition$validator.find(function (x) {
1708
- return x.type === exports.ValidatorType.Length;
1709
- });
1710
1711
  var className = cc(definition.styleClass);
1711
1712
  var required = !!definition.required;
1712
1713
  var fieldOptions = schemaInterface.getOptions(field);
@@ -1735,53 +1736,7 @@ function defaultDataProps(_ref4) {
1735
1736
  hidden: !!formOptions.hidden,
1736
1737
  className: className,
1737
1738
  style: style
1738
- }, props, {
1739
- toArrayProps: field.collection && props.elementIndex == null ? function () {
1740
- return defaultArrayProps(control, field, required, style, className, function (elementIndex) {
1741
- var _control$elements$ele, _control$elements;
1742
- return props.renderChild((_control$elements$ele = (_control$elements = control.elements) == null ? void 0 : _control$elements[elementIndex].uniqueId) != null ? _control$elements$ele : elementIndex, {
1743
- type: exports.ControlDefinitionType.Data,
1744
- field: definition.field,
1745
- children: definition.children,
1746
- hideTitle: true
1747
- }, {
1748
- elementIndex: elementIndex,
1749
- dataContext: props.parentContext
1750
- });
1751
- }, lengthVal == null ? void 0 : lengthVal.min, lengthVal == null ? void 0 : lengthVal.max);
1752
- } : undefined
1753
- });
1754
- }
1755
- function defaultArrayProps(arrayControl, field, required, style, className, _renderElement, min, max) {
1756
- var _field$displayName;
1757
- var noun = (_field$displayName = field.displayName) != null ? _field$displayName : field.field;
1758
- return {
1759
- arrayControl: arrayControl,
1760
- required: required,
1761
- addAction: {
1762
- actionId: "add",
1763
- actionText: "Add " + noun,
1764
- onClick: function onClick() {
1765
- return core.addElement(arrayControl, elementValueForField(field));
1766
- }
1767
- },
1768
- removeAction: function removeAction(i) {
1769
- return {
1770
- actionId: "",
1771
- actionText: "Remove",
1772
- onClick: function onClick() {
1773
- return core.removeElement(arrayControl, i);
1774
- }
1775
- };
1776
- },
1777
- renderElement: function renderElement(i) {
1778
- return _renderElement(i);
1779
- },
1780
- className: cc(className),
1781
- style: style,
1782
- min: min,
1783
- max: max
1784
- };
1739
+ }, props);
1785
1740
  }
1786
1741
  function renderControlLayout(props) {
1787
1742
  var c = props.definition,
@@ -1956,6 +1911,39 @@ function renderLayoutParts(props, renderer) {
1956
1911
  function controlTitle(title, field) {
1957
1912
  return title ? title : fieldDisplayName(field);
1958
1913
  }
1914
+ function getLengthRestrictions(definition) {
1915
+ var _definition$validator;
1916
+ var lengthVal = (_definition$validator = definition.validators) == null ? void 0 : _definition$validator.find(function (x) {
1917
+ return x.type === exports.ValidatorType.Length;
1918
+ });
1919
+ return {
1920
+ min: lengthVal == null ? void 0 : lengthVal.min,
1921
+ max: lengthVal == null ? void 0 : lengthVal.max
1922
+ };
1923
+ }
1924
+ function createArrayActions(control, field, addText, removeText, noAdd, noRemove) {
1925
+ var _field$displayName;
1926
+ var noun = (_field$displayName = field.displayName) != null ? _field$displayName : field.field;
1927
+ return {
1928
+ arrayControl: control,
1929
+ addAction: !noAdd ? {
1930
+ actionId: "add",
1931
+ actionText: addText ? addText : "Add " + noun,
1932
+ onClick: function onClick() {
1933
+ return core.addElement(control, elementValueForField(field));
1934
+ }
1935
+ } : undefined,
1936
+ removeAction: !noRemove ? function (i) {
1937
+ return {
1938
+ actionId: "remove",
1939
+ actionText: removeText ? removeText : "Remove",
1940
+ onClick: function onClick() {
1941
+ return core.removeElement(control, i);
1942
+ }
1943
+ };
1944
+ } : undefined
1945
+ };
1946
+ }
1959
1947
  function applyArrayLengthRestrictions(_ref7, disable) {
1960
1948
  var _arrayControl$element, _arrayControl$element2;
1961
1949
  var arrayControl = _ref7.arrayControl,
@@ -2384,10 +2372,50 @@ function createInputConversion(ft) {
2384
2372
  }
2385
2373
  }
2386
2374
 
2375
+ function createDefaultArrayDataRenderer() {
2376
+ return createDataRenderer(function (_ref, renderers) {
2377
+ var definition = _ref.definition,
2378
+ control = _ref.control,
2379
+ required = _ref.required,
2380
+ field = _ref.field,
2381
+ renderChild = _ref.renderChild,
2382
+ parentContext = _ref.parentContext,
2383
+ className = _ref.className,
2384
+ style = _ref.style,
2385
+ renderOptions = _ref.renderOptions;
2386
+ var _ref2 = isArrayRenderer(renderOptions) ? renderOptions : {},
2387
+ addText = _ref2.addText,
2388
+ noAdd = _ref2.noAdd,
2389
+ noRemove = _ref2.noRemove,
2390
+ removeText = _ref2.removeText;
2391
+ var childOptions = isArrayRenderer(renderOptions) ? renderOptions.childOptions : undefined;
2392
+ var arrayProps = _extends({}, createArrayActions(control, field, addText, removeText, noAdd, noRemove), {
2393
+ required: required,
2394
+ renderElement: function renderElement(i) {
2395
+ var _control$elements$i$u, _control$elements;
2396
+ return renderChild((_control$elements$i$u = (_control$elements = control.elements) == null ? void 0 : _control$elements[i].uniqueId) != null ? _control$elements$i$u : i, {
2397
+ type: exports.ControlDefinitionType.Data,
2398
+ field: definition.field,
2399
+ children: definition.children,
2400
+ renderOptions: childOptions != null ? childOptions : {
2401
+ type: exports.DataRenderType.Standard
2402
+ },
2403
+ hideTitle: true
2404
+ }, {
2405
+ elementIndex: i,
2406
+ dataContext: parentContext
2407
+ });
2408
+ },
2409
+ className: cc(className),
2410
+ style: style
2411
+ }, getLengthRestrictions(definition));
2412
+ return renderers.renderArray(arrayProps);
2413
+ });
2414
+ }
2387
2415
  function createDefaultArrayRenderer(options) {
2388
2416
  return {
2389
- render: function render(props, _ref) {
2390
- var renderAction = _ref.renderAction;
2417
+ render: function render(props, _ref3) {
2418
+ var renderAction = _ref3.renderAction;
2391
2419
  return /*#__PURE__*/React__default["default"].createElement(DefaultArrayRenderer, _extends({}, props, options, {
2392
2420
  renderAction: renderAction
2393
2421
  }));
@@ -2840,17 +2868,13 @@ function createDefaultDataRenderer(options) {
2840
2868
  booleanOptions = _optionRenderer$boole.booleanOptions,
2841
2869
  optionRenderer = _optionRenderer$boole.optionRenderer,
2842
2870
  displayOnlyClass = _optionRenderer$boole.displayOnlyClass;
2871
+ var arrayRenderer = createDefaultArrayDataRenderer();
2843
2872
  return createDataRenderer(function (props, renderers) {
2844
- var fieldType = props.field.type;
2873
+ var field = props.field;
2874
+ var fieldType = field.type;
2845
2875
  var renderOptions = props.renderOptions;
2876
+ if (field.collection && props.elementIndex == null) return arrayRenderer.render(props, renderers);
2846
2877
  var renderType = renderOptions.type;
2847
- if (props.toArrayProps && renderType !== exports.DataRenderType.CheckList) {
2848
- return function (p) {
2849
- return _extends({}, p, {
2850
- children: renderers.renderArray(props.toArrayProps())
2851
- });
2852
- };
2853
- }
2854
2878
  if (fieldType === exports.FieldType.Compound) {
2855
2879
  var _ref5;
2856
2880
  var groupOptions = (_ref5 = isDataGroupRenderer(renderOptions) ? renderOptions.groupOptions : undefined) != null ? _ref5 : {
@@ -2950,9 +2974,9 @@ function createDefaultAdornmentRenderer(options) {
2950
2974
  var dynamicHooks = useDynamicHooks({
2951
2975
  value: hook
2952
2976
  });
2953
- var _SetFieldWrapper = React.useCallback(setFieldWrapper, [dynamicHooks]);
2977
+ var SetFieldWrapper = React.useCallback(setFieldWrapper, [dynamicHooks]);
2954
2978
  return wrapLayout(function (x) {
2955
- return /*#__PURE__*/React__default["default"].createElement(_SetFieldWrapper, {
2979
+ return /*#__PURE__*/React__default["default"].createElement(SetFieldWrapper, {
2956
2980
  children: x,
2957
2981
  parentContext: parentContext,
2958
2982
  adornment: adornment
@@ -3239,6 +3263,7 @@ exports.controlTitle = controlTitle;
3239
3263
  exports.createAction = createAction;
3240
3264
  exports.createActionRenderer = createActionRenderer;
3241
3265
  exports.createAdornmentRenderer = createAdornmentRenderer;
3266
+ exports.createArrayActions = createArrayActions;
3242
3267
  exports.createArrayRenderer = createArrayRenderer;
3243
3268
  exports.createButtonActionRenderer = createButtonActionRenderer;
3244
3269
  exports.createCheckListRenderer = createCheckListRenderer;
@@ -3266,7 +3291,6 @@ exports.createVisibilityRenderer = createVisibilityRenderer;
3266
3291
  exports.dataControl = dataControl;
3267
3292
  exports.dateField = dateField;
3268
3293
  exports.dateTimeField = dateTimeField;
3269
- exports.defaultArrayProps = defaultArrayProps;
3270
3294
  exports.defaultCompoundField = defaultCompoundField;
3271
3295
  exports.defaultControlForField = defaultControlForField;
3272
3296
  exports.defaultDataProps = defaultDataProps;
@@ -3299,6 +3323,7 @@ exports.findScalarField = findScalarField;
3299
3323
  exports.getAllReferencedClasses = getAllReferencedClasses;
3300
3324
  exports.getControlData = getControlData;
3301
3325
  exports.getDisplayOnlyOptions = getDisplayOnlyOptions;
3326
+ exports.getLengthRestrictions = getLengthRestrictions;
3302
3327
  exports.getOverrideClass = getOverrideClass;
3303
3328
  exports.getTypeField = getTypeField;
3304
3329
  exports.groupedControl = groupedControl;
@@ -3308,6 +3333,7 @@ exports.htmlDisplayControl = htmlDisplayControl;
3308
3333
  exports.intField = intField;
3309
3334
  exports.isAccordionAdornment = isAccordionAdornment;
3310
3335
  exports.isActionControlsDefinition = isActionControlsDefinition;
3336
+ exports.isArrayRenderer = isArrayRenderer;
3311
3337
  exports.isCompoundField = isCompoundField;
3312
3338
  exports.isControlDisabled = isControlDisabled;
3313
3339
  exports.isControlReadonly = isControlReadonly;