@abgov/jsonforms-components 1.47.0 → 1.48.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/index.esm.js +368 -337
- package/package.json +1 -1
- package/src/lib/Controls/FormStepper/FormStepperControl.d.ts +2 -1
- package/src/lib/Controls/FormStepper/RenderStepElements.d.ts +3 -5
- package/src/lib/Controls/FormStepper/context/StepperContext.d.ts +26 -0
- package/src/lib/Controls/FormStepper/context/index.d.ts +3 -0
- package/src/lib/Controls/FormStepper/context/reducer.d.ts +26 -0
- package/src/lib/Controls/FormStepper/context/types.d.ts +27 -0
- package/src/lib/Controls/FormStepper/types.d.ts +2 -0
- package/src/lib/Controls/FormStepper/util/helpers.d.ts +1 -0
- package/src/lib/util/layout.d.ts +3 -1
- package/src/lib/Controls/FormStepper/StepperContext.d.ts +0 -19
package/index.esm.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import * as runtime from 'react/jsx-runtime';
|
|
2
2
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import React, { createContext, useContext, useReducer, useMemo, useEffect, useState, useRef, useCallback } from 'react';
|
|
4
3
|
import { GoAFormItem, GoAInput, GoATextArea, GoACallout, GoAInputDate, GoAInputDateTime, GoAInputTime, GoARadioGroup, GoARadioItem, GoACheckbox, GoAGrid, GoAFormStepper, GoAFormStep, GoAPages, GoAButton, GoAModal, GoAButtonGroup, GoAIconButton, GoAFileUploadInput, GoACircularProgress, GoAContainer, GoATable, GoADropdown, GoADropdownItem, GoADetails, GoASpinner } from '@abgov/react-components';
|
|
5
4
|
import styled from 'styled-components';
|
|
5
|
+
import React, { createContext, useContext, useReducer, useMemo, useEffect, useState, useRef, useCallback } from 'react';
|
|
6
6
|
import axios from 'axios';
|
|
7
7
|
import get$1 from 'lodash/get';
|
|
8
|
-
import { rankWith, isStringControl, and, optionIs, uiTypeIs, isDateControl, isNumberControl, isIntegerControl, isDateTimeControl, isTimeControl, isEnumControl, isBooleanControl, getAjv, isVisible,
|
|
8
|
+
import { rankWith, isStringControl, and, optionIs, uiTypeIs, isDateControl, isNumberControl, isIntegerControl, isDateTimeControl, isTimeControl, isEnumControl, isBooleanControl, getAjv, isVisible, toDataPath, deriveLabelForUISchemaElement, isEnabled, schemaTypeIs, formatIs, createDefaultValue, Paths, or, isObjectArrayControl, isPrimitiveArrayControl, isControl, isScoped, hasType, isCategorization, isLayout } from '@jsonforms/core';
|
|
9
9
|
import { withJsonFormsControlProps, withJsonFormsRendererProps, withJsonFormsEnumProps, withTranslateProps, useJsonForms, JsonFormsDispatch, withJsonFormsLayoutProps, withJsonFormsArrayLayoutProps, withJsonFormsCellProps } from '@jsonforms/react';
|
|
10
|
-
import
|
|
10
|
+
import * as _$b from 'lodash';
|
|
11
|
+
import { isEqual, isObject as isObject$f } from 'lodash';
|
|
11
12
|
import merge from 'lodash/merge';
|
|
12
|
-
import isEmpty
|
|
13
|
+
import isEmpty from 'lodash/isEmpty';
|
|
13
14
|
import range from 'lodash/range';
|
|
14
15
|
import { evaluateSync, compileSync } from '@mdx-js/mdx';
|
|
15
16
|
import Ajv from 'ajv';
|
|
@@ -2787,52 +2788,6 @@ const convertToSentenceCase = input => {
|
|
|
2787
2788
|
return firstWord.concat(newWords).join(' ');
|
|
2788
2789
|
};
|
|
2789
2790
|
|
|
2790
|
-
const StepperContext = /*#__PURE__*/createContext({
|
|
2791
|
-
updateStatus: status => {},
|
|
2792
|
-
// return true because in the default case we don't want the
|
|
2793
|
-
// input controls to take action if it is false.
|
|
2794
|
-
isInitialized: _ => true,
|
|
2795
|
-
stepId: 0
|
|
2796
|
-
});
|
|
2797
|
-
const isEmpty = value => {
|
|
2798
|
-
return value === undefined || value === null || typeof value === 'string' && value.length < 1 || typeof value === 'boolean' && value === false;
|
|
2799
|
-
};
|
|
2800
|
-
const getCompletionStatus = (table, step, isFormChanged = false) => {
|
|
2801
|
-
const nonEmptyCount = getNonEmptyCount(table, step);
|
|
2802
|
-
const requiredCount = getRequiredCount(table, step);
|
|
2803
|
-
if (nonEmptyCount === 0) {
|
|
2804
|
-
if (!isFormChanged) {
|
|
2805
|
-
return undefined;
|
|
2806
|
-
}
|
|
2807
|
-
if (requiredCount === 0) {
|
|
2808
|
-
return 'complete';
|
|
2809
|
-
} else {
|
|
2810
|
-
return 'incomplete';
|
|
2811
|
-
}
|
|
2812
|
-
}
|
|
2813
|
-
const requiredNonEmptyCount = getNonEmptyRequiredCount(table, step);
|
|
2814
|
-
if (requiredNonEmptyCount === requiredCount) {
|
|
2815
|
-
return 'complete';
|
|
2816
|
-
}
|
|
2817
|
-
return 'incomplete';
|
|
2818
|
-
};
|
|
2819
|
-
const getNonEmptyCount = (table, step) => {
|
|
2820
|
-
const nonEmptyStatuses = Object.keys(table).filter(k => {
|
|
2821
|
-
return table[k].step === step && !isEmpty(table[k].value);
|
|
2822
|
-
});
|
|
2823
|
-
return nonEmptyStatuses.length;
|
|
2824
|
-
};
|
|
2825
|
-
const getRequiredCount = (table, step) => {
|
|
2826
|
-
const requiredStatuses = Object.keys(table).filter(k => {
|
|
2827
|
-
return table[k].step === step && table[k].required;
|
|
2828
|
-
});
|
|
2829
|
-
return requiredStatuses.length;
|
|
2830
|
-
};
|
|
2831
|
-
const getNonEmptyRequiredCount = (table, step) => {
|
|
2832
|
-
const requiredNonEmptyStatuses = Object.keys(table).filter(k => table[k].step === step && table[k].required && !isEmpty(table[k].value));
|
|
2833
|
-
return requiredNonEmptyStatuses.length;
|
|
2834
|
-
};
|
|
2835
|
-
|
|
2836
2791
|
const standardizeDate = date => {
|
|
2837
2792
|
try {
|
|
2838
2793
|
const stdDate = new Date(date).toISOString().substring(0, 10);
|
|
@@ -3124,16 +3079,16 @@ const onChangeForNumericControl = props => {
|
|
|
3124
3079
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3125
3080
|
const onChangeForCheckboxData = (data, name, value) => data ? !value ? data === null || data === void 0 ? void 0 : data.filter(item => item !== name) : [...data, name] : [name];
|
|
3126
3081
|
|
|
3127
|
-
let _$
|
|
3128
|
-
_t$
|
|
3082
|
+
let _$a = t => t,
|
|
3083
|
+
_t$a,
|
|
3129
3084
|
_t2$6;
|
|
3130
|
-
styled.div(_t$
|
|
3085
|
+
styled.div(_t$a || (_t$a = _$a`
|
|
3131
3086
|
height: 70vh;
|
|
3132
3087
|
overflow-y: auto;
|
|
3133
3088
|
padding-left: var(--goa-space-2xs);
|
|
3134
3089
|
padding-right: var(--goa-space-2xs);
|
|
3135
3090
|
`));
|
|
3136
|
-
const Visible = styled.div(_t2$6 || (_t2$6 = _$
|
|
3091
|
+
const Visible = styled.div(_t2$6 || (_t2$6 = _$a`
|
|
3137
3092
|
display: ${0};
|
|
3138
3093
|
`), p => p.visible ? 'initial' : 'none');
|
|
3139
3094
|
|
|
@@ -3893,9 +3848,9 @@ const JsonFormRegisterProvider = ({
|
|
|
3893
3848
|
});
|
|
3894
3849
|
};
|
|
3895
3850
|
|
|
3896
|
-
let _$
|
|
3897
|
-
_t$
|
|
3898
|
-
const FormFieldWrapper = styled.div(_t$
|
|
3851
|
+
let _$9 = t => t,
|
|
3852
|
+
_t$9;
|
|
3853
|
+
const FormFieldWrapper = styled.div(_t$9 || (_t$9 = _$9`
|
|
3899
3854
|
margin-bottom: var(--goa-space-l);
|
|
3900
3855
|
`));
|
|
3901
3856
|
|
|
@@ -3917,30 +3872,6 @@ const GoAInputBaseControl = props => {
|
|
|
3917
3872
|
if (modifiedErrors === 'must be equal to one of the allowed values') {
|
|
3918
3873
|
modifiedErrors = '';
|
|
3919
3874
|
}
|
|
3920
|
-
const getStepStatus = (props, value) => {
|
|
3921
|
-
return {
|
|
3922
|
-
id: props.id,
|
|
3923
|
-
value: value,
|
|
3924
|
-
required: props.required || false,
|
|
3925
|
-
type: props.schema.type,
|
|
3926
|
-
step: stepperContext.stepId
|
|
3927
|
-
};
|
|
3928
|
-
};
|
|
3929
|
-
const stepperContext = useContext(StepperContext);
|
|
3930
|
-
const handlerWithStepperUpdate = (path, value) => {
|
|
3931
|
-
stepperContext.updateStatus(getStepStatus(props, value));
|
|
3932
|
-
props.handleChange(path, value);
|
|
3933
|
-
};
|
|
3934
|
-
const modifiedProps = Object.assign(Object.assign({}, props), {
|
|
3935
|
-
handleChange: handlerWithStepperUpdate
|
|
3936
|
-
});
|
|
3937
|
-
useEffect(() => {
|
|
3938
|
-
if (!stepperContext.isInitialized(props.id)) {
|
|
3939
|
-
const status = getStepStatus(props, props.data);
|
|
3940
|
-
stepperContext.updateStatus(status);
|
|
3941
|
-
}
|
|
3942
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3943
|
-
}, []);
|
|
3944
3875
|
return jsx(JsonFormRegisterProvider, {
|
|
3945
3876
|
defaultRegisters: undefined,
|
|
3946
3877
|
children: jsx(Visible, {
|
|
@@ -3952,7 +3883,7 @@ const GoAInputBaseControl = props => {
|
|
|
3952
3883
|
testId: `${isStepperReview === true && 'review-base-'}${path}`,
|
|
3953
3884
|
label: (props === null || props === void 0 ? void 0 : props.noLabel) === true ? '' : labelToUpdate,
|
|
3954
3885
|
helpText: typeof ((_a = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _a === void 0 ? void 0 : _a.help) === 'string' && !isStepperReview ? (_b = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _b === void 0 ? void 0 : _b.help : '',
|
|
3955
|
-
children: jsx(InnerComponent, Object.assign({},
|
|
3886
|
+
children: jsx(InnerComponent, Object.assign({}, props))
|
|
3956
3887
|
})
|
|
3957
3888
|
})
|
|
3958
3889
|
})
|
|
@@ -4169,29 +4100,7 @@ const MultiLineText = props => {
|
|
|
4169
4100
|
const autoCapitalize = ((_e = (_d = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _d === void 0 ? void 0 : _d.componentProps) === null || _e === void 0 ? void 0 : _e.autoCapitalize) === true || ((_f = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _f === void 0 ? void 0 : _f.autoCapitalize) === true;
|
|
4170
4101
|
const readOnly = (_j = (_h = (_g = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _g === void 0 ? void 0 : _g.componentProps) === null || _h === void 0 ? void 0 : _h.readOnly) !== null && _j !== void 0 ? _j : false;
|
|
4171
4102
|
const textAreaName = `${label || path}-text-area` || '';
|
|
4172
|
-
|
|
4173
|
-
useEffect(() => {
|
|
4174
|
-
if (textarea) {
|
|
4175
|
-
textarea.addEventListener('blur', onBlur);
|
|
4176
|
-
}
|
|
4177
|
-
return () => {
|
|
4178
|
-
if (textarea) {
|
|
4179
|
-
textarea.removeEventListener('blur', onBlur);
|
|
4180
|
-
}
|
|
4181
|
-
};
|
|
4182
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
4183
|
-
}, [textarea]);
|
|
4184
|
-
const onBlur = event => {
|
|
4185
|
-
let eventTargetValue = '';
|
|
4186
|
-
if (event.target) {
|
|
4187
|
-
eventTargetValue = event.target.value;
|
|
4188
|
-
}
|
|
4189
|
-
onBlurForTextControl({
|
|
4190
|
-
name: path,
|
|
4191
|
-
controlProps: props,
|
|
4192
|
-
value: autoCapitalize ? eventTargetValue.toUpperCase() : eventTargetValue
|
|
4193
|
-
});
|
|
4194
|
-
};
|
|
4103
|
+
(_k = document.getElementsByName(textAreaName)[0]) !== null && _k !== void 0 ? _k : null;
|
|
4195
4104
|
const txtAreaComponent = jsx(GoATextArea, Object.assign({
|
|
4196
4105
|
error: errorsFormInput.length > 0,
|
|
4197
4106
|
value: textAreaValue,
|
|
@@ -4657,12 +4566,12 @@ const SPACE_KEY = ' ';
|
|
|
4657
4566
|
const ALT_KEY = 'Alt';
|
|
4658
4567
|
const SHIFT_KEY = 'Shift';
|
|
4659
4568
|
|
|
4660
|
-
let _$
|
|
4661
|
-
_t$
|
|
4569
|
+
let _$8 = t => t,
|
|
4570
|
+
_t$8,
|
|
4662
4571
|
_t2$5,
|
|
4663
4572
|
_t3$4,
|
|
4664
4573
|
_t4$3;
|
|
4665
|
-
const GoADropdownTextbox = styled.div(_t$
|
|
4574
|
+
const GoADropdownTextbox = styled.div(_t$8 || (_t$8 = _$8`
|
|
4666
4575
|
border-radius: var(--goa-space-2xs);
|
|
4667
4576
|
box-shadow: ${0};
|
|
4668
4577
|
&:hover {
|
|
@@ -4673,11 +4582,11 @@ const GoADropdownTextbox = styled.div(_t$7 || (_t$7 = _$7`
|
|
|
4673
4582
|
box-shadow: ${0};
|
|
4674
4583
|
}
|
|
4675
4584
|
`), p => p.isOpen ? `0 0 0 3px var(--goa-color-interactive-focus)` : '', p => p.isOpen ? `0 0 0 3px var(--goa-color-interactive-focus) !important` : '');
|
|
4676
|
-
const GoADropdownListContainerWrapper = styled.div(_t2$5 || (_t2$5 = _$
|
|
4585
|
+
const GoADropdownListContainerWrapper = styled.div(_t2$5 || (_t2$5 = _$8`
|
|
4677
4586
|
position: relative;
|
|
4678
4587
|
display: ${0};
|
|
4679
4588
|
`), p => !(p === null || p === void 0 ? void 0 : p.isOpen) && 'none');
|
|
4680
|
-
const GoADropdownListContainer = styled.div(_t3$4 || (_t3$4 = _$
|
|
4589
|
+
const GoADropdownListContainer = styled.div(_t3$4 || (_t3$4 = _$8`
|
|
4681
4590
|
border: solid 1px var(--goa-color-greyscale-200);
|
|
4682
4591
|
border-radius: var(--goa-space-2xs);
|
|
4683
4592
|
background: var(--goa-color-greyscale-white);
|
|
@@ -4701,7 +4610,7 @@ const GoADropdownListContainer = styled.div(_t3$4 || (_t3$4 = _$7`
|
|
|
4701
4610
|
scrollbar-color: #a8a8a8 var(--goa-color-greyscale-100) !important;
|
|
4702
4611
|
}
|
|
4703
4612
|
`), p => p.optionListMaxHeight || '272px');
|
|
4704
|
-
const GoADropdownListOption = styled.div(_t4$3 || (_t4$3 = _$
|
|
4613
|
+
const GoADropdownListOption = styled.div(_t4$3 || (_t4$3 = _$8`
|
|
4705
4614
|
padding: var(--goa-space-2xs) var(--goa-space-s);
|
|
4706
4615
|
text-overflow: ellipsis;
|
|
4707
4616
|
color: ${0} !important;
|
|
@@ -5202,8 +5111,8 @@ const BooleanRadioControl = props => jsx(GoAInputBaseControl, Object.assign({},
|
|
|
5202
5111
|
const GoABooleanRadioControlTester = rankWith(3, and(isBooleanControl, optionIs('radio', true)));
|
|
5203
5112
|
const GoABooleanRadioControl = withJsonFormsControlProps(BooleanRadioControl);
|
|
5204
5113
|
|
|
5205
|
-
let _$
|
|
5206
|
-
_t$
|
|
5114
|
+
let _$7 = t => t,
|
|
5115
|
+
_t$7;
|
|
5207
5116
|
const Checkboxes = ({
|
|
5208
5117
|
children,
|
|
5209
5118
|
orientation,
|
|
@@ -5215,7 +5124,7 @@ const Checkboxes = ({
|
|
|
5215
5124
|
children: children
|
|
5216
5125
|
});
|
|
5217
5126
|
};
|
|
5218
|
-
const CheckBoxGroupDiv = styled.div(_t$
|
|
5127
|
+
const CheckBoxGroupDiv = styled.div(_t$7 || (_t$7 = _$7`
|
|
5219
5128
|
.horizontal {
|
|
5220
5129
|
display: flex;
|
|
5221
5130
|
flex-direction: row;
|
|
@@ -5295,6 +5204,8 @@ const GoInputBaseReview = props => jsx(GoAInputBaseControl, Object.assign({}, pr
|
|
|
5295
5204
|
}));
|
|
5296
5205
|
const GoInputBaseReviewControl = withJsonFormsControlProps(GoInputBaseReview);
|
|
5297
5206
|
|
|
5207
|
+
let _$6 = t => t,
|
|
5208
|
+
_t$6;
|
|
5298
5209
|
const renderLayoutElements = (elements, schema, path, enabled, renderers, cells) => {
|
|
5299
5210
|
return elements.map((child, index) => jsx("div", {
|
|
5300
5211
|
children: jsx(JsonFormsDispatch, {
|
|
@@ -5327,7 +5238,7 @@ const LayoutRenderer = ({
|
|
|
5327
5238
|
visible,
|
|
5328
5239
|
width
|
|
5329
5240
|
}) => {
|
|
5330
|
-
if (isEmpty
|
|
5241
|
+
if (isEmpty(elements)) {
|
|
5331
5242
|
return null;
|
|
5332
5243
|
} else {
|
|
5333
5244
|
if (direction === 'row') {
|
|
@@ -5346,6 +5257,40 @@ const LayoutRenderer = ({
|
|
|
5346
5257
|
}
|
|
5347
5258
|
}
|
|
5348
5259
|
};
|
|
5260
|
+
const ReviewLayoutRenderer = ({
|
|
5261
|
+
elements,
|
|
5262
|
+
schema,
|
|
5263
|
+
path,
|
|
5264
|
+
enabled,
|
|
5265
|
+
direction,
|
|
5266
|
+
renderers,
|
|
5267
|
+
cells,
|
|
5268
|
+
visible,
|
|
5269
|
+
width
|
|
5270
|
+
}) => {
|
|
5271
|
+
if (isEmpty(elements)) {
|
|
5272
|
+
return null;
|
|
5273
|
+
} else {
|
|
5274
|
+
if (direction === 'row') {
|
|
5275
|
+
return jsx(Visible, {
|
|
5276
|
+
visible: visible,
|
|
5277
|
+
children: jsx(ReviewGrid, {
|
|
5278
|
+
children: renderLayoutElements(elements, schema, path, enabled, renderers, cells)
|
|
5279
|
+
})
|
|
5280
|
+
});
|
|
5281
|
+
} else {
|
|
5282
|
+
return jsx(Visible, {
|
|
5283
|
+
visible: visible,
|
|
5284
|
+
children: renderLayoutElements(elements, schema, path, enabled, renderers, cells)
|
|
5285
|
+
});
|
|
5286
|
+
}
|
|
5287
|
+
}
|
|
5288
|
+
};
|
|
5289
|
+
const ReviewGrid = styled.div(_t$6 || (_t$6 = _$6`
|
|
5290
|
+
display: grid;
|
|
5291
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
5292
|
+
gap: 16px;
|
|
5293
|
+
`));
|
|
5349
5294
|
|
|
5350
5295
|
let _$5 = t => t,
|
|
5351
5296
|
_t$5,
|
|
@@ -5565,73 +5510,21 @@ const ContextProviderFactory = () => new ContextProviderClass().setup;
|
|
|
5565
5510
|
const JsonFormContext = /*#__PURE__*/createContext(null);
|
|
5566
5511
|
|
|
5567
5512
|
const RenderStepElements = props => {
|
|
5568
|
-
return (
|
|
5569
|
-
|
|
5570
|
-
|
|
5571
|
-
|
|
5572
|
-
|
|
5573
|
-
|
|
5574
|
-
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
visible: props.visible,
|
|
5582
|
-
enabled: props.enabled && !props.disabledCategoryMap[props.categoryIndex]
|
|
5583
|
-
}, index);
|
|
5584
|
-
})
|
|
5513
|
+
return jsx(Visible, {
|
|
5514
|
+
visible: props.visible,
|
|
5515
|
+
"date-testid": `${props.path}-categories-${props.categoryIndex}`,
|
|
5516
|
+
children: props.category.elements.map((uiSchema, index) => {
|
|
5517
|
+
return jsx(JsonFormsDispatch, {
|
|
5518
|
+
schema: props.schema,
|
|
5519
|
+
uischema: uiSchema,
|
|
5520
|
+
renderers: props.renderers,
|
|
5521
|
+
cells: props.cells,
|
|
5522
|
+
path: props.path,
|
|
5523
|
+
visible: props.visible,
|
|
5524
|
+
enabled: props.enabled
|
|
5525
|
+
}, `${props.path}-category-page-${index}`);
|
|
5585
5526
|
})
|
|
5586
|
-
);
|
|
5587
|
-
};
|
|
5588
|
-
|
|
5589
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5590
|
-
const validateData = (jsonSchema, data, ajv) => {
|
|
5591
|
-
const newSchema = JSON.parse(JSON.stringify(jsonSchema));
|
|
5592
|
-
Object.keys(newSchema.properties || {}).forEach(propertyName => {
|
|
5593
|
-
var _a, _b, _c, _d, _e;
|
|
5594
|
-
const property = newSchema.properties || {};
|
|
5595
|
-
if (((_a = property[propertyName]) === null || _a === void 0 ? void 0 : _a.enum) && ((_b = property[propertyName]) === null || _b === void 0 ? void 0 : _b.enum[0]) === '') {
|
|
5596
|
-
(_c = property[propertyName]) === null || _c === void 0 ? true : delete _c.enum;
|
|
5597
|
-
}
|
|
5598
|
-
if (((_d = property[propertyName]) === null || _d === void 0 ? void 0 : _d.format) === 'file-urn') {
|
|
5599
|
-
delete property[propertyName].format;
|
|
5600
|
-
}
|
|
5601
|
-
if (((_e = property[propertyName]) === null || _e === void 0 ? void 0 : _e.title) === sinTitle && data && data[propertyName] === '') {
|
|
5602
|
-
delete data[propertyName];
|
|
5603
|
-
}
|
|
5604
5527
|
});
|
|
5605
|
-
try {
|
|
5606
|
-
const validate = ajv.compile(newSchema);
|
|
5607
|
-
return validate(data).valueOf();
|
|
5608
|
-
} catch (e) {
|
|
5609
|
-
return false;
|
|
5610
|
-
}
|
|
5611
|
-
};
|
|
5612
|
-
|
|
5613
|
-
/**
|
|
5614
|
-
* Steps can be hidden:
|
|
5615
|
-
* When the user clicks on a step in the stepper function, it returns
|
|
5616
|
-
* a step number relative to all steps. Map to the step number relative
|
|
5617
|
-
* to the visible steps.
|
|
5618
|
-
*/
|
|
5619
|
-
const mapToVisibleStep = (step, allSteps, visibleSteps) => {
|
|
5620
|
-
if (visibleSteps.length < 1) return 0;
|
|
5621
|
-
if (step < 1) return 1;
|
|
5622
|
-
if (allSteps.length !== visibleSteps.length) {
|
|
5623
|
-
const stepIndex = step - 1;
|
|
5624
|
-
if (step > 1 && step <= allSteps.length) {
|
|
5625
|
-
// Check to see if the the step is visible
|
|
5626
|
-
const selectedLabel = allSteps[stepIndex];
|
|
5627
|
-
const selectedIndex = visibleSteps.indexOf(selectedLabel);
|
|
5628
|
-
step = selectedIndex !== -1 ? selectedIndex + 1 : 1;
|
|
5629
|
-
}
|
|
5630
|
-
if (step > allSteps.length) {
|
|
5631
|
-
step = visibleSteps.length;
|
|
5632
|
-
}
|
|
5633
|
-
}
|
|
5634
|
-
return step;
|
|
5635
5528
|
};
|
|
5636
5529
|
|
|
5637
5530
|
var uncurryThis$2 = functionUncurryThisClause;
|
|
@@ -5802,6 +5695,23 @@ const getProperty = (obj, propName) => {
|
|
|
5802
5695
|
}
|
|
5803
5696
|
}
|
|
5804
5697
|
};
|
|
5698
|
+
// eslint-disable-next-line
|
|
5699
|
+
const pickPropertyValues = (obj, property) => {
|
|
5700
|
+
let values = [];
|
|
5701
|
+
Object.keys(obj).forEach(function (key) {
|
|
5702
|
+
if (key === property) {
|
|
5703
|
+
values.push(obj[key]);
|
|
5704
|
+
} else if (_$b.isObject(obj[key])) {
|
|
5705
|
+
values = [...values, ...pickPropertyValues(obj[key], property)];
|
|
5706
|
+
} else if (_$b.isArray(obj[key])) {
|
|
5707
|
+
const nextValues = obj[key].map(function (arrayObj) {
|
|
5708
|
+
return pickPropertyValues(arrayObj, property);
|
|
5709
|
+
});
|
|
5710
|
+
values = [...values, ...nextValues];
|
|
5711
|
+
}
|
|
5712
|
+
});
|
|
5713
|
+
return values;
|
|
5714
|
+
};
|
|
5805
5715
|
|
|
5806
5716
|
const FormStepperReviewer = props => {
|
|
5807
5717
|
var _a, _b, _c;
|
|
@@ -5811,8 +5721,6 @@ const FormStepperReviewer = props => {
|
|
|
5811
5721
|
schema,
|
|
5812
5722
|
ajv,
|
|
5813
5723
|
cells,
|
|
5814
|
-
renderers,
|
|
5815
|
-
visible,
|
|
5816
5724
|
enabled,
|
|
5817
5725
|
navigationFunc
|
|
5818
5726
|
} = props;
|
|
@@ -5830,12 +5738,14 @@ const FormStepperReviewer = props => {
|
|
|
5830
5738
|
children: [jsx(ReviewItemTitle, {
|
|
5831
5739
|
children: categoryLabel
|
|
5832
5740
|
}), navigationFunc && jsx(Anchor, {
|
|
5833
|
-
onClick: () =>
|
|
5741
|
+
onClick: () => {
|
|
5742
|
+
navigationFunc(index);
|
|
5743
|
+
},
|
|
5834
5744
|
"data-testid": testId,
|
|
5835
5745
|
onKeyDown: e => {
|
|
5836
5746
|
if (!readOnly && (e.key === ' ' || e.key === 'Enter')) {
|
|
5837
5747
|
e.preventDefault();
|
|
5838
|
-
navigationFunc(index
|
|
5748
|
+
navigationFunc(index);
|
|
5839
5749
|
}
|
|
5840
5750
|
},
|
|
5841
5751
|
children: readOnly ? 'View' : 'Edit'
|
|
@@ -5888,38 +5798,254 @@ const FormStepperReviewer = props => {
|
|
|
5888
5798
|
};
|
|
5889
5799
|
const FormStepperReviewControl = withAjvProps(withTranslateProps(withJsonFormsLayoutProps(FormStepperReviewer)));
|
|
5890
5800
|
|
|
5801
|
+
const stepperReducer = (state, action) => {
|
|
5802
|
+
const {
|
|
5803
|
+
activeId,
|
|
5804
|
+
categories
|
|
5805
|
+
} = state;
|
|
5806
|
+
const lastId = categories[categories.length - 1].id;
|
|
5807
|
+
switch (action.type) {
|
|
5808
|
+
case 'page/next':
|
|
5809
|
+
{
|
|
5810
|
+
state.activeId += 1;
|
|
5811
|
+
if (activeId === lastId) {
|
|
5812
|
+
state.isOnReview = true;
|
|
5813
|
+
state.hasNextButton = false;
|
|
5814
|
+
state.hasPrevButton = false;
|
|
5815
|
+
} else {
|
|
5816
|
+
state.hasNextButton = true;
|
|
5817
|
+
state.hasPrevButton = true;
|
|
5818
|
+
state.isOnReview = false;
|
|
5819
|
+
}
|
|
5820
|
+
state.categories[activeId].isVisited = true;
|
|
5821
|
+
return Object.assign({}, state);
|
|
5822
|
+
}
|
|
5823
|
+
case 'page/prev':
|
|
5824
|
+
{
|
|
5825
|
+
state.categories[activeId].isVisited = true;
|
|
5826
|
+
if (activeId > 0) {
|
|
5827
|
+
state.activeId -= 1;
|
|
5828
|
+
state.hasPrevButton = state.activeId !== 0;
|
|
5829
|
+
state.hasNextButton = true;
|
|
5830
|
+
state.isOnReview = false;
|
|
5831
|
+
}
|
|
5832
|
+
return Object.assign({}, state);
|
|
5833
|
+
}
|
|
5834
|
+
case 'page/to/index':
|
|
5835
|
+
{
|
|
5836
|
+
const {
|
|
5837
|
+
id
|
|
5838
|
+
} = action.payload;
|
|
5839
|
+
state.activeId = id;
|
|
5840
|
+
if (id > lastId) {
|
|
5841
|
+
state.isOnReview = true;
|
|
5842
|
+
state.hasNextButton = false;
|
|
5843
|
+
state.hasPrevButton = false;
|
|
5844
|
+
return Object.assign({}, state);
|
|
5845
|
+
} else {
|
|
5846
|
+
state.categories[id].isVisited = true;
|
|
5847
|
+
state.hasNextButton = id <= lastId;
|
|
5848
|
+
state.hasPrevButton = id !== 0;
|
|
5849
|
+
state.isOnReview = false;
|
|
5850
|
+
return Object.assign({}, state);
|
|
5851
|
+
}
|
|
5852
|
+
}
|
|
5853
|
+
case 'update/category':
|
|
5854
|
+
{
|
|
5855
|
+
const {
|
|
5856
|
+
id,
|
|
5857
|
+
errors
|
|
5858
|
+
} = action.payload;
|
|
5859
|
+
if (state.isOnReview) {
|
|
5860
|
+
return Object.assign({}, state);
|
|
5861
|
+
}
|
|
5862
|
+
const errorsInCategory = errors.filter(e => categories[id].scopes.map(s => '/' + toDataPath(s)).includes(e.instancePath));
|
|
5863
|
+
state.categories[id].isCompleted = errorsInCategory.filter(e => e.keyword === 'required').length === 0;
|
|
5864
|
+
state.categories[id].isValid = errorsInCategory.length === 0;
|
|
5865
|
+
return Object.assign({}, state);
|
|
5866
|
+
}
|
|
5867
|
+
case 'validate/form':
|
|
5868
|
+
{
|
|
5869
|
+
const {
|
|
5870
|
+
errors
|
|
5871
|
+
} = action.payload;
|
|
5872
|
+
state.isValid = errors.length === 0;
|
|
5873
|
+
return Object.assign({}, state);
|
|
5874
|
+
}
|
|
5875
|
+
}
|
|
5876
|
+
return state;
|
|
5877
|
+
};
|
|
5878
|
+
|
|
5879
|
+
const isErrorPathIncluded = (errorPaths, path) => {
|
|
5880
|
+
return errorPaths.some(ePath => {
|
|
5881
|
+
/**
|
|
5882
|
+
* case A: errorPaths: [name] path: [name]
|
|
5883
|
+
*
|
|
5884
|
+
* case B: errorPath: [name] path: [name.firstName]
|
|
5885
|
+
* */
|
|
5886
|
+
return ePath === path || path.startsWith(ePath + '.');
|
|
5887
|
+
});
|
|
5888
|
+
};
|
|
5889
|
+
const getIncompletePaths = (ajv, scopes) => {
|
|
5890
|
+
var _a;
|
|
5891
|
+
const requiredErrorPaths = (_a = ajv === null || ajv === void 0 ? void 0 : ajv.errors) === null || _a === void 0 ? void 0 : _a.filter(e => e.keyword === 'required').map(e => {
|
|
5892
|
+
var _a;
|
|
5893
|
+
return (_a = e === null || e === void 0 ? void 0 : e.schema) === null || _a === void 0 ? void 0 : _a[0];
|
|
5894
|
+
});
|
|
5895
|
+
const _scopes = scopes.map(scope => toDataPath(scope)).filter(path => requiredErrorPaths && isErrorPathIncluded(requiredErrorPaths, path));
|
|
5896
|
+
return _scopes;
|
|
5897
|
+
};
|
|
5898
|
+
const createStepperContextInitData = props => {
|
|
5899
|
+
var _a;
|
|
5900
|
+
const {
|
|
5901
|
+
uischema,
|
|
5902
|
+
data,
|
|
5903
|
+
schema,
|
|
5904
|
+
ajv,
|
|
5905
|
+
t,
|
|
5906
|
+
visible,
|
|
5907
|
+
path
|
|
5908
|
+
} = props;
|
|
5909
|
+
const categorization = uischema;
|
|
5910
|
+
const valid = ajv.validate(schema, data || {});
|
|
5911
|
+
const categories = (_a = categorization.elements) === null || _a === void 0 ? void 0 : _a.map((c, id) => {
|
|
5912
|
+
const scopes = pickPropertyValues(c, 'scope');
|
|
5913
|
+
const incompletePaths = getIncompletePaths(ajv, pickPropertyValues(c, 'scope'));
|
|
5914
|
+
return {
|
|
5915
|
+
id,
|
|
5916
|
+
label: deriveLabelForUISchemaElement(c, t),
|
|
5917
|
+
scopes,
|
|
5918
|
+
isVisited: id === 0,
|
|
5919
|
+
isCompleted: (incompletePaths === null || incompletePaths === void 0 ? void 0 : incompletePaths.length) === 0,
|
|
5920
|
+
isValid: (incompletePaths === null || incompletePaths === void 0 ? void 0 : incompletePaths.length) === 0,
|
|
5921
|
+
uischema: c,
|
|
5922
|
+
isEnabled: isEnabled(c, data, '', ajv),
|
|
5923
|
+
visible
|
|
5924
|
+
};
|
|
5925
|
+
});
|
|
5926
|
+
const activeId = (props === null || props === void 0 ? void 0 : props.activeId) || 0;
|
|
5927
|
+
return {
|
|
5928
|
+
categories: categories,
|
|
5929
|
+
activeId,
|
|
5930
|
+
hasNextButton: true,
|
|
5931
|
+
hasPrevButton: activeId > 0,
|
|
5932
|
+
path,
|
|
5933
|
+
isOnReview: activeId === (categories === null || categories === void 0 ? void 0 : categories.length),
|
|
5934
|
+
isValid: valid === true
|
|
5935
|
+
};
|
|
5936
|
+
};
|
|
5937
|
+
const JsonFormsStepperContext = /*#__PURE__*/createContext(undefined);
|
|
5938
|
+
const JsonFormsStepperContextProvider = ({
|
|
5939
|
+
children,
|
|
5940
|
+
StepperProps
|
|
5941
|
+
}) => {
|
|
5942
|
+
const ctx = useJsonForms();
|
|
5943
|
+
const [stepperState, dispatch] = useReducer(stepperReducer, createStepperContextInitData(StepperProps));
|
|
5944
|
+
const stepperDispatch = (StepperProps === null || StepperProps === void 0 ? void 0 : StepperProps.customDispatch) || dispatch;
|
|
5945
|
+
const context = useMemo(() => {
|
|
5946
|
+
return {
|
|
5947
|
+
stepperDispatch,
|
|
5948
|
+
selectStepperState: () => {
|
|
5949
|
+
return stepperState;
|
|
5950
|
+
},
|
|
5951
|
+
selectIsDisabled: () => {
|
|
5952
|
+
var _a;
|
|
5953
|
+
return !((_a = stepperState.categories[stepperState.activeId]) === null || _a === void 0 ? void 0 : _a.isEnabled);
|
|
5954
|
+
},
|
|
5955
|
+
selectIsActive: id => {
|
|
5956
|
+
return id === stepperState.activeId;
|
|
5957
|
+
},
|
|
5958
|
+
selectPath: () => {
|
|
5959
|
+
return stepperState.path;
|
|
5960
|
+
},
|
|
5961
|
+
selectCategory: id => {
|
|
5962
|
+
return stepperState.categories[id];
|
|
5963
|
+
},
|
|
5964
|
+
goToPage: (id, updateCategoryId) => {
|
|
5965
|
+
var _a, _b, _c;
|
|
5966
|
+
if (updateCategoryId !== undefined) {
|
|
5967
|
+
stepperDispatch({
|
|
5968
|
+
type: 'update/category',
|
|
5969
|
+
payload: {
|
|
5970
|
+
errors: ((_a = ctx.core) === null || _a === void 0 ? void 0 : _a.errors) || [],
|
|
5971
|
+
id: updateCategoryId
|
|
5972
|
+
}
|
|
5973
|
+
});
|
|
5974
|
+
}
|
|
5975
|
+
if (stepperState.isOnReview !== true) {
|
|
5976
|
+
stepperDispatch({
|
|
5977
|
+
type: 'update/category',
|
|
5978
|
+
payload: {
|
|
5979
|
+
errors: ((_b = ctx.core) === null || _b === void 0 ? void 0 : _b.errors) || [],
|
|
5980
|
+
id: stepperState.activeId
|
|
5981
|
+
}
|
|
5982
|
+
});
|
|
5983
|
+
}
|
|
5984
|
+
stepperDispatch({
|
|
5985
|
+
type: 'validate/form',
|
|
5986
|
+
payload: {
|
|
5987
|
+
errors: (_c = ctx.core) === null || _c === void 0 ? void 0 : _c.errors
|
|
5988
|
+
}
|
|
5989
|
+
});
|
|
5990
|
+
stepperDispatch({
|
|
5991
|
+
type: 'page/to/index',
|
|
5992
|
+
payload: {
|
|
5993
|
+
id
|
|
5994
|
+
}
|
|
5995
|
+
});
|
|
5996
|
+
}
|
|
5997
|
+
};
|
|
5998
|
+
}, [ctx === null || ctx === void 0 ? void 0 : ctx.core, stepperDispatch, stepperState]);
|
|
5999
|
+
return jsx(JsonFormsStepperContext.Provider, {
|
|
6000
|
+
value: context,
|
|
6001
|
+
children: children
|
|
6002
|
+
});
|
|
6003
|
+
};
|
|
6004
|
+
|
|
5891
6005
|
const summaryLabel = 'Summary';
|
|
5892
6006
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5893
6007
|
const FormStepper = props => {
|
|
5894
|
-
|
|
6008
|
+
/**
|
|
6009
|
+
* The path check is to prevent the categorization in categorization case. This scenario is not supported in the current version.
|
|
6010
|
+
* */
|
|
6011
|
+
if (props.path === undefined) {
|
|
6012
|
+
return jsx(FormStepperView, Object.assign({}, props));
|
|
6013
|
+
}
|
|
6014
|
+
return jsx(JsonFormsStepperContextProvider, {
|
|
6015
|
+
StepperProps: Object.assign({}, props),
|
|
6016
|
+
children: jsx(FormStepperView, Object.assign({}, props))
|
|
6017
|
+
});
|
|
6018
|
+
};
|
|
6019
|
+
const FormStepperView = props => {
|
|
6020
|
+
var _a, _b, _c;
|
|
5895
6021
|
const {
|
|
5896
6022
|
uischema,
|
|
5897
6023
|
data,
|
|
5898
6024
|
schema,
|
|
5899
|
-
ajv,
|
|
5900
6025
|
path,
|
|
5901
6026
|
cells,
|
|
5902
6027
|
renderers,
|
|
5903
6028
|
visible,
|
|
5904
|
-
enabled,
|
|
5905
6029
|
t
|
|
5906
6030
|
} = props;
|
|
5907
6031
|
const enumerators = useContext(JsonFormContext);
|
|
6032
|
+
const formStepperCtx = useContext(JsonFormsStepperContext);
|
|
6033
|
+
const {
|
|
6034
|
+
activeId,
|
|
6035
|
+
categories,
|
|
6036
|
+
hasNextButton,
|
|
6037
|
+
hasPrevButton,
|
|
6038
|
+
isOnReview,
|
|
6039
|
+
isValid
|
|
6040
|
+
} = formStepperCtx.selectStepperState();
|
|
6041
|
+
const {
|
|
6042
|
+
selectIsDisabled,
|
|
6043
|
+
goToPage
|
|
6044
|
+
} = formStepperCtx;
|
|
5908
6045
|
const submitFormFunction = enumerators === null || enumerators === void 0 ? void 0 : enumerators.submitFunction.get('submit-form');
|
|
5909
6046
|
const submitForm = submitFormFunction && submitFormFunction();
|
|
5910
|
-
const categorization = uischema;
|
|
5911
|
-
const allCategories = JSON.parse(JSON.stringify(categorization));
|
|
5912
|
-
const componentProps = (_b = (_a = uischema.options) === null || _a === void 0 ? void 0 : _a.componentProps) !== null && _b !== void 0 ? _b : {};
|
|
5913
6047
|
const optionProps = uischema.options || {};
|
|
5914
|
-
const [
|
|
5915
|
-
const [staleCategories, setStaleCategories] = React.useState(categorization.elements);
|
|
5916
|
-
const [isFormValid, setIsFormValid] = React.useState(false);
|
|
5917
|
-
const [showNextBtn, setShowNextBtn] = React.useState(true);
|
|
5918
|
-
const [isOpen, setIsOpen] = React.useState(false);
|
|
5919
|
-
const [categories, setCategories] = React.useState(categorization.elements);
|
|
5920
|
-
const [inputStatuses, setInputStatuses] = React.useState({});
|
|
5921
|
-
const [stepStatuses, setStepStatuses] = React.useState([]);
|
|
5922
|
-
const disabledCategoryMap = categories.map(c => !isEnabled(c, data, '', ajv));
|
|
6048
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
5923
6049
|
const handleSubmit = () => {
|
|
5924
6050
|
if (submitForm) {
|
|
5925
6051
|
submitForm(data);
|
|
@@ -5930,130 +6056,40 @@ const FormStepper = props => {
|
|
|
5930
6056
|
const onCloseModal = () => {
|
|
5931
6057
|
setIsOpen(false);
|
|
5932
6058
|
};
|
|
5933
|
-
|
|
5934
|
-
return categories.map(c => deriveLabelForUISchemaElement(c, t));
|
|
5935
|
-
}, [categories, t]);
|
|
5936
|
-
useEffect(() => {}, [categories.length]);
|
|
5937
|
-
useEffect(() => {
|
|
5938
|
-
const cats = categorization.elements.filter(category => isVisible(category, data, '', ajv));
|
|
5939
|
-
setCategories(cats);
|
|
5940
|
-
}, [categorization, data, ajv]);
|
|
5941
|
-
useEffect(() => {
|
|
5942
|
-
const statuses = Array(categories.length);
|
|
5943
|
-
categories.forEach((_, i) => {
|
|
5944
|
-
statuses[i] = isEmpty$2(stepStatuses[i]) ? getCompletionStatus(inputStatuses, i + 1) : stepStatuses[i];
|
|
5945
|
-
});
|
|
5946
|
-
setStepStatuses(statuses);
|
|
5947
|
-
}, [inputStatuses, categories]);
|
|
5948
|
-
useEffect(() => {
|
|
5949
|
-
const isValid = validateData(schema, data, ajv);
|
|
5950
|
-
setIsFormValid(isValid);
|
|
5951
|
-
}, [ajv, data, schema]);
|
|
5952
|
-
useEffect(() => {
|
|
5953
|
-
// Override the "controlled Navigation", if property is supplied
|
|
5954
|
-
// Default: no controlled nav.
|
|
5955
|
-
setStep((componentProps === null || componentProps === void 0 ? void 0 : componentProps.controlledNav) ? 1 : 0);
|
|
5956
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
5957
|
-
}, []);
|
|
5958
|
-
useEffect(() => {
|
|
5959
|
-
setStaleCategories(categories);
|
|
5960
|
-
}, [categories]);
|
|
5961
|
-
/* istanbul ignore next */
|
|
5962
|
-
if ((categories === null || categories === void 0 ? void 0 : categories.length) < 1) {
|
|
5963
|
-
// eslint-disable-next-line
|
|
5964
|
-
return jsx(Fragment, {});
|
|
5965
|
-
}
|
|
5966
|
-
function nextPage(page, disabled) {
|
|
5967
|
-
const pageStatus = getCompletionStatus(inputStatuses, page, true);
|
|
5968
|
-
const statuses = [...stepStatuses];
|
|
5969
|
-
statuses[page - 1] = pageStatus ? pageStatus : 'incomplete';
|
|
5970
|
-
setStepStatuses(statuses);
|
|
5971
|
-
page++;
|
|
5972
|
-
while (page <= disabled.length && disabled[page - 1]) {
|
|
5973
|
-
/* istanbul ignore next */
|
|
5974
|
-
page++;
|
|
5975
|
-
}
|
|
5976
|
-
setPage(page);
|
|
5977
|
-
}
|
|
5978
|
-
function prevPage(page, disabled) {
|
|
5979
|
-
const pageStatus = getCompletionStatus(inputStatuses, page, true);
|
|
5980
|
-
const statuses = [...stepStatuses];
|
|
5981
|
-
statuses[page - 1] = pageStatus ? pageStatus : 'incomplete';
|
|
5982
|
-
setStepStatuses(statuses);
|
|
5983
|
-
page--;
|
|
5984
|
-
while (page >= 0 && disabled[page - 1]) {
|
|
5985
|
-
/* istanbul ignore next */
|
|
5986
|
-
page--;
|
|
5987
|
-
}
|
|
5988
|
-
setPage(page);
|
|
5989
|
-
}
|
|
5990
|
-
const getAllStatuses = (nextPage, totalVisibleTabs) => {
|
|
5991
|
-
const previouslyActivePage = nextPage - 1;
|
|
5992
|
-
const statuses = [...stepStatuses];
|
|
5993
|
-
for (let currentPage = 1; currentPage <= previouslyActivePage; currentPage++) {
|
|
5994
|
-
const pageStatus = getCompletionStatus(inputStatuses, currentPage, true);
|
|
5995
|
-
statuses[currentPage - 1] = pageStatus ? pageStatus : 'incomplete';
|
|
5996
|
-
}
|
|
5997
|
-
return statuses;
|
|
5998
|
-
};
|
|
5999
|
-
/* istanbul ignore next */
|
|
6000
|
-
function setTab(page) {
|
|
6001
|
-
const categoryLabels = [...allCategories.elements.map(category => category.label), summaryLabel];
|
|
6002
|
-
const visibleLabels = [...visibleCategoryLabels, summaryLabel];
|
|
6003
|
-
const newPage = mapToVisibleStep(page, categoryLabels, visibleLabels);
|
|
6004
|
-
if (Object.keys(inputStatuses).length) {
|
|
6005
|
-
const statuses = getAllStatuses(page, visibleLabels.length);
|
|
6006
|
-
setStepStatuses(statuses);
|
|
6007
|
-
}
|
|
6008
|
-
setPage(newPage);
|
|
6009
|
-
}
|
|
6010
|
-
function setPage(page) {
|
|
6011
|
-
setStep(page);
|
|
6012
|
-
if (page < 1 || page > categories.length + 1) return;
|
|
6013
|
-
setShowNextBtn(categories.length + 1 !== page);
|
|
6014
|
-
}
|
|
6015
|
-
const updateInputStatus = inputStatus => {
|
|
6016
|
-
inputStatuses[inputStatus.id] = inputStatus;
|
|
6017
|
-
setInputStatuses(Object.assign({}, inputStatuses));
|
|
6018
|
-
};
|
|
6019
|
-
const isInputInitialized = inputId => {
|
|
6020
|
-
return inputId in inputStatuses;
|
|
6021
|
-
};
|
|
6022
|
-
const isFormSubmitted = (_c = enumerators === null || enumerators === void 0 ? void 0 : enumerators.isFormSubmitted) !== null && _c !== void 0 ? _c : false;
|
|
6023
|
-
return jsx("div", {
|
|
6059
|
+
return jsxs("div", {
|
|
6024
6060
|
"data-testid": "form-stepper-test-wrapper",
|
|
6025
|
-
children: jsx(
|
|
6061
|
+
children: [jsx("div", {
|
|
6062
|
+
children: ((_a = categories[activeId]) === null || _a === void 0 ? void 0 : _a.isCompleted) && ((_b = categories[activeId]) === null || _b === void 0 ? void 0 : _b.isVisited)
|
|
6063
|
+
}), jsx(Visible, {
|
|
6026
6064
|
visible: visible,
|
|
6027
6065
|
children: jsxs("div", {
|
|
6028
6066
|
id: `${path || `goa`}-form-stepper`,
|
|
6029
6067
|
className: "formStepper",
|
|
6030
|
-
children: [
|
|
6031
|
-
testId: (
|
|
6032
|
-
step: step,
|
|
6068
|
+
children: [jsxs(GoAFormStepper, {
|
|
6069
|
+
testId: `form-stepper-headers-${(_c = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _c === void 0 ? void 0 : _c.testId}` || 'form-stepper-test',
|
|
6033
6070
|
onChange: step => {
|
|
6034
|
-
|
|
6071
|
+
goToPage(step - 1);
|
|
6035
6072
|
},
|
|
6036
|
-
children: [categories === null || categories === void 0 ? void 0 : categories.map((
|
|
6073
|
+
children: [categories === null || categories === void 0 ? void 0 : categories.map((c, index) => {
|
|
6037
6074
|
return jsx(GoAFormStep, {
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
|
|
6075
|
+
"data-testid": `stepper-tab-${index}`,
|
|
6076
|
+
text: `${c.label}`,
|
|
6077
|
+
status: c.isValid ? 'complete' : 'incomplete'
|
|
6078
|
+
}, `stepper-tab-${index}`);
|
|
6041
6079
|
}), jsx(GoAFormStep, {
|
|
6042
6080
|
text: "Review"
|
|
6043
|
-
})]
|
|
6044
|
-
}), jsxs(GoAPages, {
|
|
6045
|
-
current:
|
|
6081
|
+
}, `stepper-tab-review`)]
|
|
6082
|
+
}, "stepper-form-stepper-wrapper"), jsxs(GoAPages, {
|
|
6083
|
+
current: activeId + 1,
|
|
6046
6084
|
mb: "xl",
|
|
6047
6085
|
children: [categories === null || categories === void 0 ? void 0 : categories.map((category, index) => {
|
|
6048
6086
|
const props = {
|
|
6049
|
-
category,
|
|
6050
|
-
categoryIndex:
|
|
6051
|
-
|
|
6052
|
-
|
|
6053
|
-
enabled,
|
|
6054
|
-
visible,
|
|
6087
|
+
category: category.uischema,
|
|
6088
|
+
categoryIndex: category.id,
|
|
6089
|
+
visible: category === null || category === void 0 ? void 0 : category.visible,
|
|
6090
|
+
enabled: category === null || category === void 0 ? void 0 : category.isEnabled,
|
|
6055
6091
|
path,
|
|
6056
|
-
|
|
6092
|
+
schema,
|
|
6057
6093
|
renderers,
|
|
6058
6094
|
cells,
|
|
6059
6095
|
data
|
|
@@ -6063,61 +6099,56 @@ const FormStepper = props => {
|
|
|
6063
6099
|
style: {
|
|
6064
6100
|
marginTop: '1.5rem'
|
|
6065
6101
|
},
|
|
6066
|
-
children: jsx(
|
|
6067
|
-
|
|
6068
|
-
stepId: index + 1,
|
|
6069
|
-
updateStatus: updateInputStatus,
|
|
6070
|
-
isInitialized: isInputInitialized
|
|
6071
|
-
},
|
|
6072
|
-
children: RenderStepElements(props)
|
|
6073
|
-
})
|
|
6074
|
-
}, `${visibleCategoryLabels[index]}`);
|
|
6102
|
+
children: jsx(RenderStepElements, Object.assign({}, props))
|
|
6103
|
+
}, `${category.label}`);
|
|
6075
6104
|
}), jsxs("div", {
|
|
6076
6105
|
"data-testid": "summary_step-content",
|
|
6077
6106
|
children: [jsx(FormStepperSummaryH3, {
|
|
6078
6107
|
children: summaryLabel
|
|
6079
|
-
}), jsx(FormStepperReviewer, Object.assign({
|
|
6080
|
-
navigationFunc:
|
|
6081
|
-
}
|
|
6108
|
+
}), jsx(FormStepperReviewer, Object.assign({}, props, {
|
|
6109
|
+
navigationFunc: goToPage
|
|
6110
|
+
}))]
|
|
6082
6111
|
})]
|
|
6083
|
-
}),
|
|
6112
|
+
}), jsxs(GoAGrid, {
|
|
6084
6113
|
minChildWidth: "100px",
|
|
6085
6114
|
children: [jsx("div", {
|
|
6086
|
-
children:
|
|
6115
|
+
children: hasPrevButton ? jsx(GoAButton, {
|
|
6087
6116
|
type: (optionProps === null || optionProps === void 0 ? void 0 : optionProps.previousButtonType) ? optionProps === null || optionProps === void 0 ? void 0 : optionProps.previousButtonType : 'secondary',
|
|
6088
|
-
disabled:
|
|
6117
|
+
disabled: selectIsDisabled(),
|
|
6089
6118
|
onClick: () => {
|
|
6090
6119
|
const element = document.getElementById(`${path || `goa`}-form-stepper`);
|
|
6091
6120
|
if (element) {
|
|
6092
6121
|
element.scrollIntoView();
|
|
6093
6122
|
}
|
|
6094
|
-
|
|
6123
|
+
goToPage(activeId - 1, activeId);
|
|
6095
6124
|
},
|
|
6096
6125
|
testId: "prev-button",
|
|
6097
6126
|
children: (optionProps === null || optionProps === void 0 ? void 0 : optionProps.previousButtonLabel) ? optionProps === null || optionProps === void 0 ? void 0 : optionProps.previousButtonLabel : 'Previous'
|
|
6098
6127
|
}) : jsx("div", {})
|
|
6099
|
-
}),
|
|
6100
|
-
children:
|
|
6128
|
+
}), hasNextButton && jsx(RightAlignmentDiv, {
|
|
6129
|
+
children: jsx(GoAButton, {
|
|
6101
6130
|
type: (optionProps === null || optionProps === void 0 ? void 0 : optionProps.nextButtonType) ? optionProps === null || optionProps === void 0 ? void 0 : optionProps.nextButtonType : 'primary',
|
|
6102
|
-
disabled:
|
|
6131
|
+
disabled: selectIsDisabled(),
|
|
6103
6132
|
onClick: () => {
|
|
6133
|
+
goToPage(activeId + 1, activeId);
|
|
6104
6134
|
const element = document.getElementById(`${path || `goa`}-form-stepper`);
|
|
6105
6135
|
if (element) {
|
|
6106
6136
|
element.scrollIntoView();
|
|
6107
6137
|
}
|
|
6108
|
-
nextPage(step, disabledCategoryMap);
|
|
6109
6138
|
},
|
|
6110
6139
|
testId: "next-button",
|
|
6111
6140
|
children: (optionProps === null || optionProps === void 0 ? void 0 : optionProps.nextButtonLabel) ? optionProps === null || optionProps === void 0 ? void 0 : optionProps.nextButtonLabel : 'Next'
|
|
6112
|
-
})
|
|
6141
|
+
})
|
|
6142
|
+
}), isOnReview && jsx(RightAlignmentDiv, {
|
|
6143
|
+
children: jsx("div", {
|
|
6113
6144
|
children: jsx(GoAButton, {
|
|
6114
6145
|
type: 'primary',
|
|
6115
6146
|
onClick: handleSubmit,
|
|
6116
|
-
disabled: !
|
|
6147
|
+
disabled: !isValid,
|
|
6117
6148
|
testId: "stepper-submit-btn",
|
|
6118
6149
|
children: "Submit"
|
|
6119
6150
|
})
|
|
6120
|
-
})
|
|
6151
|
+
})
|
|
6121
6152
|
})]
|
|
6122
6153
|
}), jsxs(GoAModal, {
|
|
6123
6154
|
testId: "submit-confirmation",
|
|
@@ -6138,7 +6169,7 @@ const FormStepper = props => {
|
|
|
6138
6169
|
}), "(i.e. no actual form is being submitted)"]
|
|
6139
6170
|
})]
|
|
6140
6171
|
})
|
|
6141
|
-
})
|
|
6172
|
+
})]
|
|
6142
6173
|
});
|
|
6143
6174
|
};
|
|
6144
6175
|
const FormStepperControl = withAjvProps(withTranslateProps(withJsonFormsLayoutProps(FormStepper)));
|
|
@@ -7040,7 +7071,7 @@ const NonEmptyCell$1 = ownProps => {
|
|
|
7040
7071
|
const emptyCellProps = ctxToNonEmptyCellProps$1(ctx, Object.assign(Object.assign({}, ownProps), {
|
|
7041
7072
|
data
|
|
7042
7073
|
}));
|
|
7043
|
-
const isValid = isEmpty
|
|
7074
|
+
const isValid = isEmpty(emptyCellProps.errors);
|
|
7044
7075
|
return jsx(NonEmptyCellComponent$1, Object.assign({}, emptyCellProps, {
|
|
7045
7076
|
handleChange: ownProps === null || ownProps === void 0 ? void 0 : ownProps.handleChange,
|
|
7046
7077
|
isInReview: ownProps === null || ownProps === void 0 ? void 0 : ownProps.isInReview,
|
|
@@ -7504,7 +7535,7 @@ const NonEmptyCellComponent = /*#__PURE__*/React.memo(function NonEmptyCellCompo
|
|
|
7504
7535
|
const NonEmptyCell = ownProps => {
|
|
7505
7536
|
const ctx = useJsonForms();
|
|
7506
7537
|
const emptyCellProps = ctxToNonEmptyCellProps(ctx, ownProps);
|
|
7507
|
-
const isValid = isEmpty
|
|
7538
|
+
const isValid = isEmpty(emptyCellProps.errors);
|
|
7508
7539
|
return jsx(NonEmptyCellComponent, Object.assign({}, emptyCellProps, {
|
|
7509
7540
|
isValid: isValid
|
|
7510
7541
|
}));
|
|
@@ -9163,7 +9194,7 @@ const GoAHorizontalReviewLayoutComponent = ({
|
|
|
9163
9194
|
visible,
|
|
9164
9195
|
width: ((_b = (_a = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _a === void 0 ? void 0 : _a.review) === null || _b === void 0 ? void 0 : _b.width) || '30ch'
|
|
9165
9196
|
};
|
|
9166
|
-
return jsx(
|
|
9197
|
+
return jsx(ReviewLayoutRenderer, Object.assign({}, childProps, {
|
|
9167
9198
|
renderers: renderers,
|
|
9168
9199
|
cells: cells
|
|
9169
9200
|
}));
|
|
@@ -10577,4 +10608,4 @@ const GoARenderers = [...GoABaseRenderers, {
|
|
|
10577
10608
|
}];
|
|
10578
10609
|
const GoACells = [...InputCells];
|
|
10579
10610
|
|
|
10580
|
-
export { ADD_DATALIST_ACTION, ADD_NO_ANONYMOUS_ACTION, ADD_REGISTER_DATA_ACTION, ADD_REGISTER_DATA_ERROR, AddressLookUpControl, AddressLookUpControlReview, AddressLookUpTester, ArrayControl, ArrayControlBase, ArrayControlReview, BooleanComponent, BooleanControl, BooleanRadioComponent, BooleanRadioControl, CategorizationRendererTester, CheckboxGroup, ContextProviderC, ContextProviderClass, ContextProviderFactory, EnumCheckboxControl, EnumRadioControl, EnumSelect, FileUploader, FileUploaderReview, FileUploaderTester, FormStepper, FormStepperControl, FormStepperReviewControl, FormStepperReviewer, FullNameControl, FullNameDobControl, FullNameDobReviewControl, FullNameDobTester, FullNameReviewControl, FullNameTester, GoAArrayControlRenderer, GoAArrayControlReviewRenderer, GoAArrayControlTester, GoABaseInputReviewComponent, GoABaseRenderers, GoABaseReviewRenderers, GoABooleanControl, GoABooleanControlTester, GoABooleanRadioControl, GoABooleanRadioControlTester, GoACells, GoACheckoutGroupControlTester, GoADateControl, GoADateControlTester, GoADateInput, GoADateTimeControl, GoADateTimeControlTester, GoADateTimeInput, GoAEnumCheckboxGroupControl, GoAEnumControl, GoAEnumControlTester, GoAEnumRadioGroupControl, GoAInputBaseControl, GoAInputDateControl, GoAInputDateTimeControl, GoAInputInteger, GoAInputIntegerControl, GoAInputNumberControl, GoAInputText, GoAInputTextControl, GoAInputTimeControl, GoAIntegerControl, GoAIntegerControlTester, GoAListWithDetailsControlRenderer, GoAListWithDetailsTester, GoANumberControl, GoANumberControlTester, GoANumberInput, GoARadioGroupControlTester, GoARenderers, GoAReviewRenderers, GoATextControl, GoATextControlTester, GoATimeControl, GoATimeControlTester, GoATimeInput, GoInputBaseReview, GoInputBaseReviewControl, JsonFormContext, JsonFormRegisterProvider, JsonFormsRegisterContext, ListWithDetailsControl, MultiLineText, MultiLineTextControl, MultiLineTextControlInput, MultiLineTextControlTester, RadioGroup, createDefaultAjv, enumControl, errMalformedDate, formatSin, isAddressLookup, isFullName, isFullNameDoB, registerReducer, resolveRefs, tryResolveRefs };
|
|
10611
|
+
export { ADD_DATALIST_ACTION, ADD_NO_ANONYMOUS_ACTION, ADD_REGISTER_DATA_ACTION, ADD_REGISTER_DATA_ERROR, AddressLookUpControl, AddressLookUpControlReview, AddressLookUpTester, ArrayControl, ArrayControlBase, ArrayControlReview, BooleanComponent, BooleanControl, BooleanRadioComponent, BooleanRadioControl, CategorizationRendererTester, CheckboxGroup, ContextProviderC, ContextProviderClass, ContextProviderFactory, EnumCheckboxControl, EnumRadioControl, EnumSelect, FileUploader, FileUploaderReview, FileUploaderTester, FormStepper, FormStepperControl, FormStepperReviewControl, FormStepperReviewer, FormStepperView, FullNameControl, FullNameDobControl, FullNameDobReviewControl, FullNameDobTester, FullNameReviewControl, FullNameTester, GoAArrayControlRenderer, GoAArrayControlReviewRenderer, GoAArrayControlTester, GoABaseInputReviewComponent, GoABaseRenderers, GoABaseReviewRenderers, GoABooleanControl, GoABooleanControlTester, GoABooleanRadioControl, GoABooleanRadioControlTester, GoACells, GoACheckoutGroupControlTester, GoADateControl, GoADateControlTester, GoADateInput, GoADateTimeControl, GoADateTimeControlTester, GoADateTimeInput, GoAEnumCheckboxGroupControl, GoAEnumControl, GoAEnumControlTester, GoAEnumRadioGroupControl, GoAInputBaseControl, GoAInputDateControl, GoAInputDateTimeControl, GoAInputInteger, GoAInputIntegerControl, GoAInputNumberControl, GoAInputText, GoAInputTextControl, GoAInputTimeControl, GoAIntegerControl, GoAIntegerControlTester, GoAListWithDetailsControlRenderer, GoAListWithDetailsTester, GoANumberControl, GoANumberControlTester, GoANumberInput, GoARadioGroupControlTester, GoARenderers, GoAReviewRenderers, GoATextControl, GoATextControlTester, GoATimeControl, GoATimeControlTester, GoATimeInput, GoInputBaseReview, GoInputBaseReviewControl, JsonFormContext, JsonFormRegisterProvider, JsonFormsRegisterContext, ListWithDetailsControl, MultiLineText, MultiLineTextControl, MultiLineTextControlInput, MultiLineTextControlTester, RadioGroup, createDefaultAjv, enumControl, errMalformedDate, formatSin, isAddressLookup, isFullName, isFullNameDoB, registerReducer, resolveRefs, tryResolveRefs };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abgov/jsonforms-components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.48.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Government of Alberta - React renderers for JSON Forms based on the design system.",
|
|
6
6
|
"repository": "https://github.com/GovAlta/adsp-monorepo",
|
|
@@ -6,6 +6,7 @@ export interface FormStepperOptionProps {
|
|
|
6
6
|
previousButtonLabel?: string;
|
|
7
7
|
previousButtonType?: GoAButtonType;
|
|
8
8
|
}
|
|
9
|
-
export declare const FormStepper: (props: CategorizationStepperLayoutRendererProps) => JSX.Element;
|
|
9
|
+
export declare const FormStepper: (props: CategorizationStepperLayoutRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const FormStepperView: (props: CategorizationStepperLayoutRendererProps) => JSX.Element;
|
|
10
11
|
export declare const FormStepperControl: (props: CategorizationStepperLayoutRendererProps & import("@jsonforms/core").OwnPropsOfLayout) => import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export default FormStepper;
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { JsonFormsCellRendererRegistryEntry, JsonFormsRendererRegistryEntry, JsonSchema } from '@jsonforms/core';
|
|
2
|
+
import { CategorizationElement } from './context/types';
|
|
3
3
|
export interface StepProps {
|
|
4
4
|
category: CategorizationElement;
|
|
5
5
|
categoryIndex: number;
|
|
6
|
-
step: number;
|
|
7
6
|
schema: JsonSchema;
|
|
8
|
-
enabled: boolean;
|
|
9
7
|
visible: boolean;
|
|
8
|
+
enabled: boolean;
|
|
10
9
|
path: string;
|
|
11
|
-
disabledCategoryMap: boolean[];
|
|
12
10
|
renderers: JsonFormsRendererRegistryEntry[] | undefined;
|
|
13
11
|
cells: JsonFormsCellRendererRegistryEntry[] | undefined;
|
|
14
12
|
data: Record<string, unknown>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ReactNode, Dispatch } from 'react';
|
|
2
|
+
import { CategorizationStepperLayoutRendererProps } from '../types';
|
|
3
|
+
import { StepperContextDataType, CategoryState } from './types';
|
|
4
|
+
import Ajv from 'ajv';
|
|
5
|
+
import { JsonFormStepperDispatch } from './reducer';
|
|
6
|
+
export interface JsonFormsStepperContextProviderProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
StepperProps: CategorizationStepperLayoutRendererProps & {
|
|
9
|
+
customDispatch?: Dispatch<any> & {
|
|
10
|
+
activeId?: number;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface JsonFormsStepperContextProps {
|
|
15
|
+
stepperDispatch: JsonFormStepperDispatch;
|
|
16
|
+
selectStepperState: () => StepperContextDataType;
|
|
17
|
+
selectIsDisabled: () => boolean;
|
|
18
|
+
selectIsActive: (id: number) => boolean;
|
|
19
|
+
selectPath: () => string;
|
|
20
|
+
selectCategory: (id: number) => CategoryState;
|
|
21
|
+
goToPage: (id: number, updateCategoryId?: number) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const isErrorPathIncluded: (errorPaths: string[], path: string) => boolean;
|
|
24
|
+
export declare const getIncompletePaths: (ajv: Ajv, scopes: string[]) => string[];
|
|
25
|
+
export declare const JsonFormsStepperContext: import("react").Context<JsonFormsStepperContextProps | undefined>;
|
|
26
|
+
export declare const JsonFormsStepperContextProvider: ({ children, StepperProps, }: JsonFormsStepperContextProviderProps) => JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { StepperContextDataType } from './types';
|
|
2
|
+
import { ErrorObject } from 'ajv';
|
|
3
|
+
import { Dispatch } from 'react';
|
|
4
|
+
export type JsonFormStepperDispatch = Dispatch<StepperAction>;
|
|
5
|
+
export type StepperAction = {
|
|
6
|
+
type: 'page/next';
|
|
7
|
+
} | {
|
|
8
|
+
type: 'page/prev';
|
|
9
|
+
} | {
|
|
10
|
+
type: 'page/to/index';
|
|
11
|
+
payload: {
|
|
12
|
+
id: number;
|
|
13
|
+
};
|
|
14
|
+
} | {
|
|
15
|
+
type: 'update/category';
|
|
16
|
+
payload: {
|
|
17
|
+
errors: ErrorObject[];
|
|
18
|
+
id: number;
|
|
19
|
+
};
|
|
20
|
+
} | {
|
|
21
|
+
type: 'validate/form';
|
|
22
|
+
payload: {
|
|
23
|
+
errors?: ErrorObject[];
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare const stepperReducer: (state: StepperContextDataType, action: StepperAction) => StepperContextDataType;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Categorization, Category } from '@jsonforms/core';
|
|
2
|
+
export interface CategoryInternalState {
|
|
3
|
+
isCompleted?: boolean;
|
|
4
|
+
isVisited?: boolean;
|
|
5
|
+
isValid?: boolean;
|
|
6
|
+
id: number;
|
|
7
|
+
uischema?: CategorizationElement;
|
|
8
|
+
isEnabled?: boolean;
|
|
9
|
+
visible?: boolean;
|
|
10
|
+
path?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CategoryConfig {
|
|
13
|
+
label: string;
|
|
14
|
+
scopes: string[];
|
|
15
|
+
}
|
|
16
|
+
export type CategoryState = CategoryInternalState & CategoryConfig;
|
|
17
|
+
export type CategoriesState = Array<CategoryState>;
|
|
18
|
+
export interface StepperContextDataType {
|
|
19
|
+
categories: CategoriesState;
|
|
20
|
+
activeId: number;
|
|
21
|
+
hasNextButton: boolean;
|
|
22
|
+
hasPrevButton: boolean;
|
|
23
|
+
path: string;
|
|
24
|
+
isOnReview: boolean;
|
|
25
|
+
isValid: boolean;
|
|
26
|
+
}
|
|
27
|
+
export type CategorizationElement = Category | Categorization;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Categorization, Category } from '@jsonforms/core';
|
|
1
2
|
import { StatePropsOfLayout } from '@jsonforms/core';
|
|
2
3
|
import { AjvProps } from '../../util/layout';
|
|
3
4
|
import { TranslateProps } from '@jsonforms/react';
|
|
@@ -10,3 +11,4 @@ export interface FormStepperComponentProps {
|
|
|
10
11
|
controlledNav?: number;
|
|
11
12
|
readOnly?: boolean;
|
|
12
13
|
}
|
|
14
|
+
export type CategorizationElement = Category | Categorization;
|
package/src/lib/util/layout.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentType } from 'react';
|
|
1
|
+
import React, { ComponentType } from 'react';
|
|
2
2
|
import type { UISchemaElement } from '@jsonforms/core';
|
|
3
3
|
import { JsonFormsCellRendererRegistryEntry, JsonFormsRendererRegistryEntry, JsonSchema, OwnPropsOfRenderer } from '@jsonforms/core';
|
|
4
4
|
import Ajv from 'ajv';
|
|
@@ -14,3 +14,5 @@ export interface AjvProps {
|
|
|
14
14
|
}
|
|
15
15
|
export declare const withAjvProps: <P extends object>(Component: ComponentType<AjvProps & P>) => (props: P) => import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
export declare const LayoutRenderer: ({ elements, schema, path, enabled, direction, renderers, cells, visible, width, }: LayoutRendererProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export declare const ReviewLayoutRenderer: ({ elements, schema, path, enabled, direction, renderers, cells, visible, width, }: LayoutRendererProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
export declare const ReviewGrid: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { GoAFormStepStatusType } from '@abgov/react-components-new';
|
|
3
|
-
export type StepInputStatus = {
|
|
4
|
-
id: string;
|
|
5
|
-
value: unknown;
|
|
6
|
-
required: boolean;
|
|
7
|
-
type: string | string[] | undefined;
|
|
8
|
-
step: number;
|
|
9
|
-
};
|
|
10
|
-
export interface StatusTable {
|
|
11
|
-
[key: string]: StepInputStatus;
|
|
12
|
-
}
|
|
13
|
-
export declare const StepperContext: import("react").Context<{
|
|
14
|
-
updateStatus: (status: StepInputStatus) => void;
|
|
15
|
-
isInitialized: (_: string) => boolean;
|
|
16
|
-
stepId: number;
|
|
17
|
-
}>;
|
|
18
|
-
export declare const getCompletionStatus: (table: StatusTable, step: number, isFormChanged?: boolean) => GoAFormStepStatusType | undefined;
|
|
19
|
-
export declare const logRequiredFields: (table: StatusTable, step: number) => void;
|