@react-typed-forms/schemas 11.12.1 → 11.13.1
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/lib/components/JsonataRenderer.d.ts +12 -0
- package/lib/components/MultilineTextfield.d.ts +4 -0
- package/lib/components/NullToggle.d.ts +1 -0
- package/lib/controlRender.d.ts +2 -0
- package/lib/createDefaultRenderers.d.ts +2 -1
- package/lib/index.js +157 -56
- package/lib/index.js.map +1 -1
- package/lib/tailwind.d.ts +1 -0
- package/lib/types.d.ts +13 -2
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JsonataRenderOptions } from "../types";
|
|
2
|
+
import { ControlDataContext } from "../util";
|
|
3
|
+
import { Control } from "@react-typed-forms/core";
|
|
4
|
+
import React from "react";
|
|
5
|
+
export declare function createJsonataRenderer(className?: string): import("../renderers").DataRendererRegistration;
|
|
6
|
+
export declare function JsonataRenderer({ control, renderOptions: { expression }, readonly, className, dataContext, }: {
|
|
7
|
+
control: Control<any>;
|
|
8
|
+
renderOptions: JsonataRenderOptions;
|
|
9
|
+
className?: string;
|
|
10
|
+
dataContext: ControlDataContext;
|
|
11
|
+
readonly: boolean;
|
|
12
|
+
}): React.JSX.Element;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DataRendererProps } from "../controlRender";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export declare function createMultilineFieldRenderer(className?: string): import("../renderers").DataRendererRegistration;
|
|
4
|
+
export declare function MultilineTextfield({ control, className }: DataRendererProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createNullToggleRenderer(): import("../renderers").DataRendererRegistration;
|
package/lib/controlRender.d.ts
CHANGED
|
@@ -156,6 +156,7 @@ export type CreateDataProps = (controlProps: DataControlProps) => DataRendererPr
|
|
|
156
156
|
export interface ControlRenderOptions extends FormContextOptions {
|
|
157
157
|
useDataHook?: (c: ControlDefinition) => CreateDataProps;
|
|
158
158
|
actionOnClick?: (actionId: string, actionData: any) => () => void;
|
|
159
|
+
customDisplay?: (customId: string, displayProps: DisplayRendererProps) => ReactNode;
|
|
159
160
|
useValidationHook?: (validator: SchemaValidator, ctx: ValidationContext) => void;
|
|
160
161
|
useEvalExpressionHook?: UseEvalExpressionHook;
|
|
161
162
|
clearHidden?: boolean;
|
|
@@ -200,6 +201,7 @@ export interface RenderControlProps {
|
|
|
200
201
|
actionOnClick?: (actionId: string, actionData: any) => () => void;
|
|
201
202
|
schemaInterface?: SchemaInterface;
|
|
202
203
|
designMode?: boolean;
|
|
204
|
+
customDisplay?: (customId: string, displayProps: DisplayRendererProps) => ReactNode;
|
|
203
205
|
}
|
|
204
206
|
export declare function renderControlLayout(props: RenderControlProps): ControlLayoutProps;
|
|
205
207
|
type MarkupKeys = keyof Omit<RenderedLayout, "errorControl" | "style" | "className" | "wrapLayout">;
|
|
@@ -47,6 +47,8 @@ interface DefaultDataRendererOptions {
|
|
|
47
47
|
checkListOptions?: CheckRendererOptions;
|
|
48
48
|
booleanOptions?: FieldOption[];
|
|
49
49
|
optionRenderer?: DataRendererRegistration;
|
|
50
|
+
multilineClass?: string;
|
|
51
|
+
jsonataClass?: string;
|
|
50
52
|
}
|
|
51
53
|
export declare function createDefaultDataRenderer(options?: DefaultDataRendererOptions): DataRendererRegistration;
|
|
52
54
|
export interface DefaultAccordionRendererOptions {
|
|
@@ -70,6 +72,5 @@ interface DefaultLabelRendererOptions {
|
|
|
70
72
|
labelContainer?: (children: ReactElement) => ReactElement;
|
|
71
73
|
}
|
|
72
74
|
export declare function createDefaultLabelRenderer(options?: DefaultLabelRendererOptions): LabelRendererRegistration;
|
|
73
|
-
export declare function createNullToggleRenderer(): DataRendererRegistration;
|
|
74
75
|
export declare function createDefaultRenderers(options?: DefaultRendererOptions): DefaultRenderers;
|
|
75
76
|
export {};
|
package/lib/index.js
CHANGED
|
@@ -91,6 +91,7 @@ exports.DataRenderType = void 0;
|
|
|
91
91
|
DataRenderType["DisplayOnly"] = "DisplayOnly";
|
|
92
92
|
DataRenderType["Group"] = "Group";
|
|
93
93
|
DataRenderType["NullToggle"] = "NullToggle";
|
|
94
|
+
DataRenderType["Jsonata"] = "Jsonata";
|
|
94
95
|
})(exports.DataRenderType || (exports.DataRenderType = {}));
|
|
95
96
|
exports.SyncTextType = void 0;
|
|
96
97
|
(function (SyncTextType) {
|
|
@@ -110,6 +111,7 @@ exports.DisplayDataType = void 0;
|
|
|
110
111
|
DisplayDataType["Text"] = "Text";
|
|
111
112
|
DisplayDataType["Html"] = "Html";
|
|
112
113
|
DisplayDataType["Icon"] = "Icon";
|
|
114
|
+
DisplayDataType["Custom"] = "Custom";
|
|
113
115
|
})(exports.DisplayDataType || (exports.DisplayDataType = {}));
|
|
114
116
|
exports.ValidatorType = void 0;
|
|
115
117
|
(function (ValidatorType) {
|
|
@@ -1586,6 +1588,7 @@ function useControlRenderer(definition, fields, renderer, options) {
|
|
|
1586
1588
|
displayControl: displayControl,
|
|
1587
1589
|
style: customStyle.value,
|
|
1588
1590
|
allowedOptions: allowedOptions,
|
|
1591
|
+
customDisplay: _options.customDisplay,
|
|
1589
1592
|
actionDataControl: actionData,
|
|
1590
1593
|
actionOnClick: _options.actionOnClick,
|
|
1591
1594
|
useChildVisibility: function useChildVisibility(childDef, context) {
|
|
@@ -1771,7 +1774,8 @@ function renderControlLayout(props) {
|
|
|
1771
1774
|
labelText = props.labelText,
|
|
1772
1775
|
parentContext = props.parentContext,
|
|
1773
1776
|
useChildVisibility = props.useChildVisibility,
|
|
1774
|
-
designMode = props.designMode
|
|
1777
|
+
designMode = props.designMode,
|
|
1778
|
+
customDisplay = props.customDisplay;
|
|
1775
1779
|
if (isDataControlDefinition(c)) {
|
|
1776
1780
|
return renderData(c);
|
|
1777
1781
|
}
|
|
@@ -1823,14 +1827,21 @@ function renderControlLayout(props) {
|
|
|
1823
1827
|
}
|
|
1824
1828
|
if (isDisplayControlsDefinition(c)) {
|
|
1825
1829
|
var _c$displayData;
|
|
1830
|
+
var data = (_c$displayData = c.displayData) != null ? _c$displayData : {};
|
|
1831
|
+
var displayProps = {
|
|
1832
|
+
data: data,
|
|
1833
|
+
className: cc(c.styleClass),
|
|
1834
|
+
style: style,
|
|
1835
|
+
display: displayControl,
|
|
1836
|
+
dataContext: dataContext
|
|
1837
|
+
};
|
|
1838
|
+
if (data.type === exports.DisplayDataType.Custom && customDisplay) {
|
|
1839
|
+
return {
|
|
1840
|
+
children: customDisplay(data.customId, displayProps)
|
|
1841
|
+
};
|
|
1842
|
+
}
|
|
1826
1843
|
return {
|
|
1827
|
-
children: renderer.renderDisplay(
|
|
1828
|
-
data: (_c$displayData = c.displayData) != null ? _c$displayData : {},
|
|
1829
|
-
className: cc(c.styleClass),
|
|
1830
|
-
style: style,
|
|
1831
|
-
display: displayControl,
|
|
1832
|
-
dataContext: dataContext
|
|
1833
|
-
})
|
|
1844
|
+
children: renderer.renderDisplay(displayProps)
|
|
1834
1845
|
};
|
|
1835
1846
|
}
|
|
1836
1847
|
return {};
|
|
@@ -2037,7 +2048,8 @@ var defaultTailwindTheme = {
|
|
|
2037
2048
|
},
|
|
2038
2049
|
selectOptions: {
|
|
2039
2050
|
emptyText: "<select>"
|
|
2040
|
-
}
|
|
2051
|
+
},
|
|
2052
|
+
multilineClass: "border p-2 outline-0 whitespace-pre"
|
|
2041
2053
|
},
|
|
2042
2054
|
adornment: {
|
|
2043
2055
|
accordion: {
|
|
@@ -2089,6 +2101,8 @@ function DefaultDisplay(_ref) {
|
|
|
2089
2101
|
__html: display ? (_display$value = display.value) != null ? _display$value : "" : data.html
|
|
2090
2102
|
}
|
|
2091
2103
|
});
|
|
2104
|
+
case exports.DisplayDataType.Custom:
|
|
2105
|
+
return /*#__PURE__*/React__default["default"].createElement("div", null, "Custom display placeholder: ", data.customId);
|
|
2092
2106
|
default:
|
|
2093
2107
|
return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown display type: ", data.type);
|
|
2094
2108
|
}
|
|
@@ -2569,6 +2583,135 @@ function DefaultAccordion(_ref) {
|
|
|
2569
2583
|
}
|
|
2570
2584
|
|
|
2571
2585
|
var _excluded = ["control", "field", "renderOptions"];
|
|
2586
|
+
function createNullToggleRenderer() {
|
|
2587
|
+
return createDataRenderer(function (_ref, renderers) {
|
|
2588
|
+
var _control$meta, _nullControl, _control$meta$_nullCo;
|
|
2589
|
+
var control = _ref.control,
|
|
2590
|
+
field = _ref.field,
|
|
2591
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
2592
|
+
var nullControl = (_control$meta$_nullCo = (_control$meta = control.meta)[_nullControl = "nullControl"]) != null ? _control$meta$_nullCo : _control$meta[_nullControl] = core.newControl(control.current.value != null);
|
|
2593
|
+
return function (layout) {
|
|
2594
|
+
var newLayout = renderers.renderData(_extends({}, props, {
|
|
2595
|
+
control: nullControl,
|
|
2596
|
+
field: _extends({}, field, {
|
|
2597
|
+
type: exports.FieldType.Bool
|
|
2598
|
+
}),
|
|
2599
|
+
renderOptions: {
|
|
2600
|
+
type: exports.DataRenderType.Checkbox
|
|
2601
|
+
}
|
|
2602
|
+
}))(layout);
|
|
2603
|
+
return _extends({}, newLayout, {
|
|
2604
|
+
children: /*#__PURE__*/React__default["default"].createElement(NullWrapper, {
|
|
2605
|
+
control: control,
|
|
2606
|
+
nullControl: nullControl,
|
|
2607
|
+
children: newLayout.children,
|
|
2608
|
+
readonly: props.readonly,
|
|
2609
|
+
defaultValue: props.definition.defaultValue
|
|
2610
|
+
})
|
|
2611
|
+
});
|
|
2612
|
+
};
|
|
2613
|
+
});
|
|
2614
|
+
}
|
|
2615
|
+
function NullWrapper(_ref2) {
|
|
2616
|
+
var children = _ref2.children,
|
|
2617
|
+
nullControl = _ref2.nullControl,
|
|
2618
|
+
control = _ref2.control,
|
|
2619
|
+
defaultValue = _ref2.defaultValue,
|
|
2620
|
+
readonly = _ref2.readonly;
|
|
2621
|
+
core.useControlEffect(function () {
|
|
2622
|
+
return readonly;
|
|
2623
|
+
}, function (r) {
|
|
2624
|
+
return nullControl.disabled = r;
|
|
2625
|
+
}, true);
|
|
2626
|
+
core.useControlEffect(function () {
|
|
2627
|
+
return nullControl.value;
|
|
2628
|
+
}, function (e) {
|
|
2629
|
+
if (e) {
|
|
2630
|
+
var _nullControl$meta$non;
|
|
2631
|
+
control.value = (_nullControl$meta$non = nullControl.meta["nonNullValue"]) != null ? _nullControl$meta$non : defaultValue;
|
|
2632
|
+
} else {
|
|
2633
|
+
nullControl.meta["nonNullValue"] = control.value;
|
|
2634
|
+
control.value = null;
|
|
2635
|
+
}
|
|
2636
|
+
});
|
|
2637
|
+
return children;
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
function createMultilineFieldRenderer(className) {
|
|
2641
|
+
return createDataRenderer(function (p) {
|
|
2642
|
+
return /*#__PURE__*/React__default["default"].createElement(MultilineTextfield, _extends({}, p, {
|
|
2643
|
+
className: rendererClass(p.className, className)
|
|
2644
|
+
}));
|
|
2645
|
+
});
|
|
2646
|
+
}
|
|
2647
|
+
function MultilineTextfield(_ref) {
|
|
2648
|
+
var _effect = core.useComponentTracking();
|
|
2649
|
+
try {
|
|
2650
|
+
var control = _ref.control,
|
|
2651
|
+
className = _ref.className;
|
|
2652
|
+
var codeRef = React.useRef(null);
|
|
2653
|
+
core.useControlEffect(function () {
|
|
2654
|
+
return control.value;
|
|
2655
|
+
}, function (v) {
|
|
2656
|
+
var c = codeRef.current;
|
|
2657
|
+
if (c && c.textContent !== v) {
|
|
2658
|
+
c.textContent = v;
|
|
2659
|
+
}
|
|
2660
|
+
}, true);
|
|
2661
|
+
return /*#__PURE__*/React__default["default"].createElement("code", {
|
|
2662
|
+
contentEditable: !control.disabled,
|
|
2663
|
+
className: className,
|
|
2664
|
+
onInput: function onInput(t) {
|
|
2665
|
+
return control.value = t.currentTarget.textContent;
|
|
2666
|
+
},
|
|
2667
|
+
ref: codeRef
|
|
2668
|
+
});
|
|
2669
|
+
} finally {
|
|
2670
|
+
_effect();
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
|
|
2674
|
+
function createJsonataRenderer(className) {
|
|
2675
|
+
return createDataRenderer(function (p) {
|
|
2676
|
+
return /*#__PURE__*/React__default["default"].createElement(JsonataRenderer, {
|
|
2677
|
+
renderOptions: p.renderOptions,
|
|
2678
|
+
className: rendererClass(p.className, className),
|
|
2679
|
+
dataContext: p.dataContext,
|
|
2680
|
+
control: p.control,
|
|
2681
|
+
readonly: p.readonly
|
|
2682
|
+
});
|
|
2683
|
+
}, {
|
|
2684
|
+
renderType: exports.DataRenderType.Jsonata
|
|
2685
|
+
});
|
|
2686
|
+
}
|
|
2687
|
+
function JsonataRenderer(_ref) {
|
|
2688
|
+
var _effect = core.useComponentTracking();
|
|
2689
|
+
try {
|
|
2690
|
+
var control = _ref.control,
|
|
2691
|
+
expression = _ref.renderOptions.expression,
|
|
2692
|
+
readonly = _ref.readonly,
|
|
2693
|
+
className = _ref.className,
|
|
2694
|
+
dataContext = _ref.dataContext;
|
|
2695
|
+
var rendered = useJsonataExpression(expression, dataContext, function () {
|
|
2696
|
+
return {
|
|
2697
|
+
value: control.value,
|
|
2698
|
+
readonly: readonly,
|
|
2699
|
+
disabled: control.disabled
|
|
2700
|
+
};
|
|
2701
|
+
}, function (v) {
|
|
2702
|
+
return typeof v == null ? "" : typeof v === "object" ? "error: " + JSON.stringify(v) : v.toString();
|
|
2703
|
+
});
|
|
2704
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2705
|
+
className: className,
|
|
2706
|
+
dangerouslySetInnerHTML: {
|
|
2707
|
+
__html: rendered.value
|
|
2708
|
+
}
|
|
2709
|
+
});
|
|
2710
|
+
} finally {
|
|
2711
|
+
_effect();
|
|
2712
|
+
}
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2572
2715
|
function createButtonActionRenderer(actionId, options) {
|
|
2573
2716
|
if (options === void 0) {
|
|
2574
2717
|
options = {};
|
|
@@ -2657,7 +2800,9 @@ function createDefaultDataRenderer(options) {
|
|
|
2657
2800
|
if (options === void 0) {
|
|
2658
2801
|
options = {};
|
|
2659
2802
|
}
|
|
2803
|
+
var jsonataRenderer = createJsonataRenderer(options.jsonataClass);
|
|
2660
2804
|
var nullToggler = createNullToggleRenderer();
|
|
2805
|
+
var multilineRenderer = createMultilineFieldRenderer(options.multilineClass);
|
|
2661
2806
|
var checkboxRenderer = createCheckboxRenderer((_options$checkOptions = options.checkOptions) != null ? _options$checkOptions : options.checkboxOptions);
|
|
2662
2807
|
var selectRenderer = createSelectRenderer(options.selectOptions);
|
|
2663
2808
|
var radioRenderer = createRadioRenderer((_options$radioOptions = options.radioOptions) != null ? _options$radioOptions : options.checkOptions);
|
|
@@ -2725,7 +2870,10 @@ function createDefaultDataRenderer(options) {
|
|
|
2725
2870
|
return radioRenderer.render(props, renderers);
|
|
2726
2871
|
case exports.DataRenderType.Checkbox:
|
|
2727
2872
|
return checkboxRenderer.render(props, renderers);
|
|
2873
|
+
case exports.DataRenderType.Jsonata:
|
|
2874
|
+
return jsonataRenderer.render(props, renderers);
|
|
2728
2875
|
}
|
|
2876
|
+
if (isTextfieldRenderer(renderOptions) && renderOptions.multiline) return multilineRenderer.render(props, renderers);
|
|
2729
2877
|
var placeholder = isTextfieldRenderer(renderOptions) ? renderOptions.placeholder : undefined;
|
|
2730
2878
|
return /*#__PURE__*/React__default["default"].createElement(ControlInput, {
|
|
2731
2879
|
className: rendererClass(props.className, inputClass),
|
|
@@ -2817,52 +2965,6 @@ function createDefaultLabelRenderer(options) {
|
|
|
2817
2965
|
type: "label"
|
|
2818
2966
|
};
|
|
2819
2967
|
}
|
|
2820
|
-
function createNullToggleRenderer() {
|
|
2821
|
-
return createDataRenderer(function (_ref7, renderers) {
|
|
2822
|
-
var _control$meta, _nullControl, _control$meta$_nullCo;
|
|
2823
|
-
var control = _ref7.control,
|
|
2824
|
-
field = _ref7.field,
|
|
2825
|
-
props = _objectWithoutPropertiesLoose(_ref7, _excluded);
|
|
2826
|
-
var nullControl = (_control$meta$_nullCo = (_control$meta = control.meta)[_nullControl = "nullControl"]) != null ? _control$meta$_nullCo : _control$meta[_nullControl] = core.newControl(control.current.value != null);
|
|
2827
|
-
return function (layout) {
|
|
2828
|
-
var newLayout = renderers.renderData(_extends({}, props, {
|
|
2829
|
-
control: nullControl,
|
|
2830
|
-
field: _extends({}, field, {
|
|
2831
|
-
type: exports.FieldType.Bool
|
|
2832
|
-
}),
|
|
2833
|
-
renderOptions: {
|
|
2834
|
-
type: exports.DataRenderType.Checkbox
|
|
2835
|
-
}
|
|
2836
|
-
}))(layout);
|
|
2837
|
-
return _extends({}, newLayout, {
|
|
2838
|
-
children: /*#__PURE__*/React__default["default"].createElement(NullWrapper, {
|
|
2839
|
-
control: control,
|
|
2840
|
-
nullControl: nullControl,
|
|
2841
|
-
children: newLayout.children,
|
|
2842
|
-
defaultValue: props.definition.defaultValue
|
|
2843
|
-
})
|
|
2844
|
-
});
|
|
2845
|
-
};
|
|
2846
|
-
});
|
|
2847
|
-
}
|
|
2848
|
-
function NullWrapper(_ref8) {
|
|
2849
|
-
var children = _ref8.children,
|
|
2850
|
-
nullControl = _ref8.nullControl,
|
|
2851
|
-
control = _ref8.control,
|
|
2852
|
-
defaultValue = _ref8.defaultValue;
|
|
2853
|
-
core.useControlEffect(function () {
|
|
2854
|
-
return nullControl.value;
|
|
2855
|
-
}, function (e) {
|
|
2856
|
-
if (e) {
|
|
2857
|
-
var _nullControl$meta$non;
|
|
2858
|
-
control.value = (_nullControl$meta$non = nullControl.meta["nonNullValue"]) != null ? _nullControl$meta$non : defaultValue;
|
|
2859
|
-
} else {
|
|
2860
|
-
nullControl.meta["nonNullValue"] = control.value;
|
|
2861
|
-
control.value = null;
|
|
2862
|
-
}
|
|
2863
|
-
});
|
|
2864
|
-
return children;
|
|
2865
|
-
}
|
|
2866
2968
|
function createDefaultRenderers(options) {
|
|
2867
2969
|
if (options === void 0) {
|
|
2868
2970
|
options = {};
|
|
@@ -3092,7 +3194,6 @@ exports.createGroupRenderer = createGroupRenderer;
|
|
|
3092
3194
|
exports.createInputConversion = createInputConversion;
|
|
3093
3195
|
exports.createLabelRenderer = createLabelRenderer;
|
|
3094
3196
|
exports.createLayoutRenderer = createLayoutRenderer;
|
|
3095
|
-
exports.createNullToggleRenderer = createNullToggleRenderer;
|
|
3096
3197
|
exports.createRadioRenderer = createRadioRenderer;
|
|
3097
3198
|
exports.createSelectConversion = createSelectConversion;
|
|
3098
3199
|
exports.createSelectRenderer = createSelectRenderer;
|