@react-typed-forms/schemas 11.12.1 → 11.13.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.
- 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 +159 -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) {
|
|
@@ -1145,6 +1147,7 @@ function useJsonataExpression(jExpr, dataContext, bindings, coerce) {
|
|
|
1145
1147
|
return "#$i[" + x + "]";
|
|
1146
1148
|
});
|
|
1147
1149
|
var fullExpr = pathString ? pathString + ".(" + jExpr + ")" : jExpr;
|
|
1150
|
+
console.log(fullExpr);
|
|
1148
1151
|
var compiledExpr = React.useMemo(function () {
|
|
1149
1152
|
try {
|
|
1150
1153
|
return jsonata__default["default"](fullExpr);
|
|
@@ -1586,6 +1589,7 @@ function useControlRenderer(definition, fields, renderer, options) {
|
|
|
1586
1589
|
displayControl: displayControl,
|
|
1587
1590
|
style: customStyle.value,
|
|
1588
1591
|
allowedOptions: allowedOptions,
|
|
1592
|
+
customDisplay: _options.customDisplay,
|
|
1589
1593
|
actionDataControl: actionData,
|
|
1590
1594
|
actionOnClick: _options.actionOnClick,
|
|
1591
1595
|
useChildVisibility: function useChildVisibility(childDef, context) {
|
|
@@ -1771,7 +1775,8 @@ function renderControlLayout(props) {
|
|
|
1771
1775
|
labelText = props.labelText,
|
|
1772
1776
|
parentContext = props.parentContext,
|
|
1773
1777
|
useChildVisibility = props.useChildVisibility,
|
|
1774
|
-
designMode = props.designMode
|
|
1778
|
+
designMode = props.designMode,
|
|
1779
|
+
customDisplay = props.customDisplay;
|
|
1775
1780
|
if (isDataControlDefinition(c)) {
|
|
1776
1781
|
return renderData(c);
|
|
1777
1782
|
}
|
|
@@ -1823,14 +1828,21 @@ function renderControlLayout(props) {
|
|
|
1823
1828
|
}
|
|
1824
1829
|
if (isDisplayControlsDefinition(c)) {
|
|
1825
1830
|
var _c$displayData;
|
|
1831
|
+
var data = (_c$displayData = c.displayData) != null ? _c$displayData : {};
|
|
1832
|
+
var displayProps = {
|
|
1833
|
+
data: data,
|
|
1834
|
+
className: cc(c.styleClass),
|
|
1835
|
+
style: style,
|
|
1836
|
+
display: displayControl,
|
|
1837
|
+
dataContext: dataContext
|
|
1838
|
+
};
|
|
1839
|
+
if (data.type === exports.DisplayDataType.Custom && customDisplay) {
|
|
1840
|
+
return {
|
|
1841
|
+
children: customDisplay(data.customId, displayProps)
|
|
1842
|
+
};
|
|
1843
|
+
}
|
|
1826
1844
|
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
|
-
})
|
|
1845
|
+
children: renderer.renderDisplay(displayProps)
|
|
1834
1846
|
};
|
|
1835
1847
|
}
|
|
1836
1848
|
return {};
|
|
@@ -2037,7 +2049,8 @@ var defaultTailwindTheme = {
|
|
|
2037
2049
|
},
|
|
2038
2050
|
selectOptions: {
|
|
2039
2051
|
emptyText: "<select>"
|
|
2040
|
-
}
|
|
2052
|
+
},
|
|
2053
|
+
multilineClass: "border p-2 outline-0 whitespace-pre"
|
|
2041
2054
|
},
|
|
2042
2055
|
adornment: {
|
|
2043
2056
|
accordion: {
|
|
@@ -2089,6 +2102,8 @@ function DefaultDisplay(_ref) {
|
|
|
2089
2102
|
__html: display ? (_display$value = display.value) != null ? _display$value : "" : data.html
|
|
2090
2103
|
}
|
|
2091
2104
|
});
|
|
2105
|
+
case exports.DisplayDataType.Custom:
|
|
2106
|
+
return /*#__PURE__*/React__default["default"].createElement("div", null, "Custom display placeholder: ", data.customId);
|
|
2092
2107
|
default:
|
|
2093
2108
|
return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown display type: ", data.type);
|
|
2094
2109
|
}
|
|
@@ -2569,6 +2584,136 @@ function DefaultAccordion(_ref) {
|
|
|
2569
2584
|
}
|
|
2570
2585
|
|
|
2571
2586
|
var _excluded = ["control", "field", "renderOptions"];
|
|
2587
|
+
function createNullToggleRenderer() {
|
|
2588
|
+
return createDataRenderer(function (_ref, renderers) {
|
|
2589
|
+
var _control$meta, _nullControl, _control$meta$_nullCo;
|
|
2590
|
+
var control = _ref.control,
|
|
2591
|
+
field = _ref.field,
|
|
2592
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
2593
|
+
var nullControl = (_control$meta$_nullCo = (_control$meta = control.meta)[_nullControl = "nullControl"]) != null ? _control$meta$_nullCo : _control$meta[_nullControl] = core.newControl(control.current.value != null);
|
|
2594
|
+
return function (layout) {
|
|
2595
|
+
var newLayout = renderers.renderData(_extends({}, props, {
|
|
2596
|
+
control: nullControl,
|
|
2597
|
+
field: _extends({}, field, {
|
|
2598
|
+
type: exports.FieldType.Bool
|
|
2599
|
+
}),
|
|
2600
|
+
renderOptions: {
|
|
2601
|
+
type: exports.DataRenderType.Checkbox
|
|
2602
|
+
}
|
|
2603
|
+
}))(layout);
|
|
2604
|
+
return _extends({}, newLayout, {
|
|
2605
|
+
children: /*#__PURE__*/React__default["default"].createElement(NullWrapper, {
|
|
2606
|
+
control: control,
|
|
2607
|
+
nullControl: nullControl,
|
|
2608
|
+
children: newLayout.children,
|
|
2609
|
+
readonly: props.readonly,
|
|
2610
|
+
defaultValue: props.definition.defaultValue
|
|
2611
|
+
})
|
|
2612
|
+
});
|
|
2613
|
+
};
|
|
2614
|
+
});
|
|
2615
|
+
}
|
|
2616
|
+
function NullWrapper(_ref2) {
|
|
2617
|
+
var children = _ref2.children,
|
|
2618
|
+
nullControl = _ref2.nullControl,
|
|
2619
|
+
control = _ref2.control,
|
|
2620
|
+
defaultValue = _ref2.defaultValue,
|
|
2621
|
+
readonly = _ref2.readonly;
|
|
2622
|
+
core.useControlEffect(function () {
|
|
2623
|
+
return readonly;
|
|
2624
|
+
}, function (r) {
|
|
2625
|
+
return nullControl.disabled = r;
|
|
2626
|
+
}, true);
|
|
2627
|
+
core.useControlEffect(function () {
|
|
2628
|
+
return nullControl.value;
|
|
2629
|
+
}, function (e) {
|
|
2630
|
+
if (e) {
|
|
2631
|
+
var _nullControl$meta$non;
|
|
2632
|
+
control.value = (_nullControl$meta$non = nullControl.meta["nonNullValue"]) != null ? _nullControl$meta$non : defaultValue;
|
|
2633
|
+
} else {
|
|
2634
|
+
nullControl.meta["nonNullValue"] = control.value;
|
|
2635
|
+
control.value = null;
|
|
2636
|
+
}
|
|
2637
|
+
});
|
|
2638
|
+
return children;
|
|
2639
|
+
}
|
|
2640
|
+
|
|
2641
|
+
function createMultilineFieldRenderer(className) {
|
|
2642
|
+
return createDataRenderer(function (p) {
|
|
2643
|
+
return /*#__PURE__*/React__default["default"].createElement(MultilineTextfield, _extends({}, p, {
|
|
2644
|
+
className: rendererClass(p.className, className)
|
|
2645
|
+
}));
|
|
2646
|
+
});
|
|
2647
|
+
}
|
|
2648
|
+
function MultilineTextfield(_ref) {
|
|
2649
|
+
var _effect = core.useComponentTracking();
|
|
2650
|
+
try {
|
|
2651
|
+
var control = _ref.control,
|
|
2652
|
+
className = _ref.className;
|
|
2653
|
+
var codeRef = React.useRef(null);
|
|
2654
|
+
core.useControlEffect(function () {
|
|
2655
|
+
return control.value;
|
|
2656
|
+
}, function (v) {
|
|
2657
|
+
var c = codeRef.current;
|
|
2658
|
+
if (c && c.textContent !== v) {
|
|
2659
|
+
c.textContent = v;
|
|
2660
|
+
}
|
|
2661
|
+
}, true);
|
|
2662
|
+
return /*#__PURE__*/React__default["default"].createElement("code", {
|
|
2663
|
+
contentEditable: !control.disabled,
|
|
2664
|
+
className: className,
|
|
2665
|
+
onInput: function onInput(t) {
|
|
2666
|
+
return control.value = t.currentTarget.textContent;
|
|
2667
|
+
},
|
|
2668
|
+
ref: codeRef
|
|
2669
|
+
});
|
|
2670
|
+
} finally {
|
|
2671
|
+
_effect();
|
|
2672
|
+
}
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2675
|
+
function createJsonataRenderer(className) {
|
|
2676
|
+
return createDataRenderer(function (p) {
|
|
2677
|
+
return /*#__PURE__*/React__default["default"].createElement(JsonataRenderer, {
|
|
2678
|
+
renderOptions: p.renderOptions,
|
|
2679
|
+
className: rendererClass(p.className, className),
|
|
2680
|
+
dataContext: p.parentContext,
|
|
2681
|
+
control: p.control,
|
|
2682
|
+
readonly: p.readonly
|
|
2683
|
+
});
|
|
2684
|
+
}, {
|
|
2685
|
+
renderType: exports.DataRenderType.Jsonata
|
|
2686
|
+
});
|
|
2687
|
+
}
|
|
2688
|
+
function JsonataRenderer(_ref) {
|
|
2689
|
+
var _effect = core.useComponentTracking();
|
|
2690
|
+
try {
|
|
2691
|
+
var control = _ref.control,
|
|
2692
|
+
expression = _ref.renderOptions.expression,
|
|
2693
|
+
readonly = _ref.readonly,
|
|
2694
|
+
className = _ref.className,
|
|
2695
|
+
dataContext = _ref.dataContext;
|
|
2696
|
+
var rendered = useJsonataExpression(expression, dataContext, function () {
|
|
2697
|
+
return {
|
|
2698
|
+
value: control.value,
|
|
2699
|
+
readonly: readonly,
|
|
2700
|
+
disabled: control.disabled
|
|
2701
|
+
};
|
|
2702
|
+
}, function (v) {
|
|
2703
|
+
return typeof v === "object" ? "error: " + JSON.stringify(v) : v.toString();
|
|
2704
|
+
});
|
|
2705
|
+
console.log(expression);
|
|
2706
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2707
|
+
className: className,
|
|
2708
|
+
dangerouslySetInnerHTML: {
|
|
2709
|
+
__html: rendered.value
|
|
2710
|
+
}
|
|
2711
|
+
});
|
|
2712
|
+
} finally {
|
|
2713
|
+
_effect();
|
|
2714
|
+
}
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2572
2717
|
function createButtonActionRenderer(actionId, options) {
|
|
2573
2718
|
if (options === void 0) {
|
|
2574
2719
|
options = {};
|
|
@@ -2657,7 +2802,9 @@ function createDefaultDataRenderer(options) {
|
|
|
2657
2802
|
if (options === void 0) {
|
|
2658
2803
|
options = {};
|
|
2659
2804
|
}
|
|
2805
|
+
var jsonataRenderer = createJsonataRenderer(options.jsonataClass);
|
|
2660
2806
|
var nullToggler = createNullToggleRenderer();
|
|
2807
|
+
var multilineRenderer = createMultilineFieldRenderer(options.multilineClass);
|
|
2661
2808
|
var checkboxRenderer = createCheckboxRenderer((_options$checkOptions = options.checkOptions) != null ? _options$checkOptions : options.checkboxOptions);
|
|
2662
2809
|
var selectRenderer = createSelectRenderer(options.selectOptions);
|
|
2663
2810
|
var radioRenderer = createRadioRenderer((_options$radioOptions = options.radioOptions) != null ? _options$radioOptions : options.checkOptions);
|
|
@@ -2725,7 +2872,10 @@ function createDefaultDataRenderer(options) {
|
|
|
2725
2872
|
return radioRenderer.render(props, renderers);
|
|
2726
2873
|
case exports.DataRenderType.Checkbox:
|
|
2727
2874
|
return checkboxRenderer.render(props, renderers);
|
|
2875
|
+
case exports.DataRenderType.Jsonata:
|
|
2876
|
+
return jsonataRenderer.render(props, renderers);
|
|
2728
2877
|
}
|
|
2878
|
+
if (isTextfieldRenderer(renderOptions) && renderOptions.multiline) return multilineRenderer.render(props, renderers);
|
|
2729
2879
|
var placeholder = isTextfieldRenderer(renderOptions) ? renderOptions.placeholder : undefined;
|
|
2730
2880
|
return /*#__PURE__*/React__default["default"].createElement(ControlInput, {
|
|
2731
2881
|
className: rendererClass(props.className, inputClass),
|
|
@@ -2817,52 +2967,6 @@ function createDefaultLabelRenderer(options) {
|
|
|
2817
2967
|
type: "label"
|
|
2818
2968
|
};
|
|
2819
2969
|
}
|
|
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
2970
|
function createDefaultRenderers(options) {
|
|
2867
2971
|
if (options === void 0) {
|
|
2868
2972
|
options = {};
|
|
@@ -3092,7 +3196,6 @@ exports.createGroupRenderer = createGroupRenderer;
|
|
|
3092
3196
|
exports.createInputConversion = createInputConversion;
|
|
3093
3197
|
exports.createLabelRenderer = createLabelRenderer;
|
|
3094
3198
|
exports.createLayoutRenderer = createLayoutRenderer;
|
|
3095
|
-
exports.createNullToggleRenderer = createNullToggleRenderer;
|
|
3096
3199
|
exports.createRadioRenderer = createRadioRenderer;
|
|
3097
3200
|
exports.createSelectConversion = createSelectConversion;
|
|
3098
3201
|
exports.createSelectRenderer = createSelectRenderer;
|