@abgov/jsonforms-components 2.60.16 → 2.60.17
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
CHANGED
|
@@ -17609,20 +17609,66 @@ const NameInputs = ({
|
|
|
17609
17609
|
handleInputChange,
|
|
17610
17610
|
data,
|
|
17611
17611
|
requiredFields,
|
|
17612
|
-
disabled
|
|
17612
|
+
disabled,
|
|
17613
|
+
errors,
|
|
17614
|
+
onFieldBlur
|
|
17613
17615
|
}) => {
|
|
17614
|
-
var
|
|
17615
|
-
const [
|
|
17616
|
+
var _displayedErrors$firs, _displayedErrors$last;
|
|
17617
|
+
const [internalErrors, setInternalErrors] = useState({});
|
|
17618
|
+
const currentValues = {
|
|
17619
|
+
firstName,
|
|
17620
|
+
middleName: middleName || '',
|
|
17621
|
+
lastName
|
|
17622
|
+
};
|
|
17623
|
+
useEffect(() => {
|
|
17624
|
+
const timeout = window.setTimeout(() => {
|
|
17625
|
+
['firstName', 'middleName', 'lastName'].forEach(field => {
|
|
17626
|
+
var _input$value;
|
|
17627
|
+
const input = document.querySelector(`goa-input[name="${field}"]`);
|
|
17628
|
+
const liveValue = (input == null || (_input$value = input.value) == null ? void 0 : _input$value.trim()) || '';
|
|
17629
|
+
if (liveValue && !currentValues[field]) {
|
|
17630
|
+
handleInputChange(field, liveValue);
|
|
17631
|
+
}
|
|
17632
|
+
});
|
|
17633
|
+
}, 50);
|
|
17634
|
+
return () => window.clearTimeout(timeout);
|
|
17635
|
+
}, [firstName, middleName, lastName, handleInputChange]);
|
|
17636
|
+
useEffect(() => {
|
|
17637
|
+
if (errors) {
|
|
17638
|
+
return;
|
|
17639
|
+
}
|
|
17640
|
+
setInternalErrors(currentErrors => {
|
|
17641
|
+
const nextErrors = Object.assign({}, currentErrors);
|
|
17642
|
+
let hasChanges = false;
|
|
17643
|
+
Object.keys(currentErrors).forEach(name => {
|
|
17644
|
+
const currentValue = (currentValues[name] || '').trim();
|
|
17645
|
+
if (requiredFields != null && requiredFields.includes(name) && currentValue === '') {
|
|
17646
|
+
return;
|
|
17647
|
+
}
|
|
17648
|
+
delete nextErrors[name];
|
|
17649
|
+
hasChanges = true;
|
|
17650
|
+
});
|
|
17651
|
+
return hasChanges ? nextErrors : currentErrors;
|
|
17652
|
+
});
|
|
17653
|
+
}, [errors, firstName, middleName, lastName, requiredFields]);
|
|
17616
17654
|
// eslint-disable-next-line
|
|
17617
17655
|
const handleRequiredFieldBlur = (name, updatedData) => {
|
|
17618
|
-
const err = Object.assign({},
|
|
17619
|
-
if ((!(data != null && data[name]) || (data == null ? void 0 : data[name]) === '') && requiredFields.includes(name) && (true)) {
|
|
17656
|
+
const err = Object.assign({}, internalErrors);
|
|
17657
|
+
if ((!(data != null && data[name]) || (data == null ? void 0 : data[name]) === '') && requiredFields != null && requiredFields.includes(name) && (true)) {
|
|
17620
17658
|
const modifiedName = name === 'firstName' ? 'First name' : name === 'lastName' ? 'Last name' : '';
|
|
17621
17659
|
err[name] = `${modifiedName} is required`;
|
|
17622
17660
|
} else {
|
|
17623
17661
|
err[name] = '';
|
|
17624
17662
|
}
|
|
17625
|
-
|
|
17663
|
+
setInternalErrors(err);
|
|
17664
|
+
};
|
|
17665
|
+
const displayedErrors = errors != null ? errors : internalErrors;
|
|
17666
|
+
const handleBlur = name => {
|
|
17667
|
+
if (onFieldBlur) {
|
|
17668
|
+
onFieldBlur(name);
|
|
17669
|
+
} else {
|
|
17670
|
+
handleRequiredFieldBlur(name);
|
|
17671
|
+
}
|
|
17626
17672
|
};
|
|
17627
17673
|
return jsxs(GoabGrid, {
|
|
17628
17674
|
minChildWidth: "0ch",
|
|
@@ -17633,7 +17679,7 @@ const NameInputs = ({
|
|
|
17633
17679
|
testId: "form-item-first-name",
|
|
17634
17680
|
label: "First name",
|
|
17635
17681
|
requirement: requiredFields != null && requiredFields.includes('firstName') ? 'required' : undefined,
|
|
17636
|
-
error: (
|
|
17682
|
+
error: (_displayedErrors$firs = displayedErrors == null ? void 0 : displayedErrors['firstName']) != null ? _displayedErrors$firs : '',
|
|
17637
17683
|
children: jsx(GoabInput, {
|
|
17638
17684
|
type: "text",
|
|
17639
17685
|
name: "firstName",
|
|
@@ -17643,7 +17689,7 @@ const NameInputs = ({
|
|
|
17643
17689
|
value: firstName || '',
|
|
17644
17690
|
onChange: detail => handleInputChange(detail.name, detail.value),
|
|
17645
17691
|
onBlur: detail => {
|
|
17646
|
-
|
|
17692
|
+
handleBlur(detail.name);
|
|
17647
17693
|
},
|
|
17648
17694
|
width: "100%"
|
|
17649
17695
|
})
|
|
@@ -17665,7 +17711,7 @@ const NameInputs = ({
|
|
|
17665
17711
|
testId: "form-item-last-name",
|
|
17666
17712
|
label: "Last name",
|
|
17667
17713
|
requirement: requiredFields != null && requiredFields.includes('lastName') ? 'required' : undefined,
|
|
17668
|
-
error: (
|
|
17714
|
+
error: (_displayedErrors$last = displayedErrors == null ? void 0 : displayedErrors['lastName']) != null ? _displayedErrors$last : '',
|
|
17669
17715
|
children: jsx(GoabInput, {
|
|
17670
17716
|
type: "text",
|
|
17671
17717
|
name: "lastName",
|
|
@@ -17675,7 +17721,7 @@ const NameInputs = ({
|
|
|
17675
17721
|
value: lastName || '',
|
|
17676
17722
|
onChange: detail => handleInputChange(detail.name, detail.value),
|
|
17677
17723
|
onBlur: detail => {
|
|
17678
|
-
|
|
17724
|
+
handleBlur(detail.name);
|
|
17679
17725
|
},
|
|
17680
17726
|
width: "100%"
|
|
17681
17727
|
})
|
|
@@ -17847,6 +17893,8 @@ handleRequiredFieldBlur) {
|
|
|
17847
17893
|
}, [formData]);
|
|
17848
17894
|
}
|
|
17849
17895
|
|
|
17896
|
+
const AUTOFILL_FIELDS = ['firstName', 'middleName', 'lastName', 'dateOfBirth'];
|
|
17897
|
+
const getRequiredLabel = name => name === 'firstName' ? 'First name' : name === 'lastName' ? 'Last name' : name === 'dateOfBirth' ? 'Date of birth' : name;
|
|
17850
17898
|
const normalizeNameDobData = value => ({
|
|
17851
17899
|
firstName: (value == null ? void 0 : value.firstName) || '',
|
|
17852
17900
|
middleName: (value == null ? void 0 : value.middleName) || '',
|
|
@@ -17854,7 +17902,7 @@ const normalizeNameDobData = value => ({
|
|
|
17854
17902
|
dateOfBirth: (value == null ? void 0 : value.dateOfBirth) || ''
|
|
17855
17903
|
});
|
|
17856
17904
|
const FullNameDobControl = props => {
|
|
17857
|
-
var
|
|
17905
|
+
var _errors$dateOfBirth;
|
|
17858
17906
|
const {
|
|
17859
17907
|
data,
|
|
17860
17908
|
path,
|
|
@@ -17864,7 +17912,7 @@ const FullNameDobControl = props => {
|
|
|
17864
17912
|
visible,
|
|
17865
17913
|
uischema
|
|
17866
17914
|
} = props;
|
|
17867
|
-
const requiredFields = schema.required;
|
|
17915
|
+
const requiredFields = schema.required || [];
|
|
17868
17916
|
const [errors, setErrors] = useState({});
|
|
17869
17917
|
const controlRef = useRef(null);
|
|
17870
17918
|
const formStepperCtx = useContext(JsonFormsStepperContext);
|
|
@@ -17879,9 +17927,9 @@ const FullNameDobControl = props => {
|
|
|
17879
17927
|
};
|
|
17880
17928
|
const [formData, setFormData] = useState(normalizeNameDobData(data));
|
|
17881
17929
|
const updateFormData = updatedData => {
|
|
17882
|
-
|
|
17883
|
-
setFormData(
|
|
17884
|
-
handleChange(path,
|
|
17930
|
+
const nextData = Object.fromEntries(Object.entries(updatedData).filter(([_, value]) => value !== ''));
|
|
17931
|
+
setFormData(nextData);
|
|
17932
|
+
handleChange(path, nextData);
|
|
17885
17933
|
};
|
|
17886
17934
|
useEffect(() => {
|
|
17887
17935
|
const nextData = normalizeNameDobData(data);
|
|
@@ -17899,14 +17947,13 @@ const FullNameDobControl = props => {
|
|
|
17899
17947
|
const err = Object.assign({}, errors);
|
|
17900
17948
|
const liveInputValue = (_ref = (_ref2 = (_updatedData$name = updatedData == null ? void 0 : updatedData[name]) != null ? _updatedData$name : data == null ? void 0 : data[name]) != null ? _ref2 : (_document$querySelect = document.querySelector(`goa-input[name="${name}"]`)) == null ? void 0 : _document$querySelect.value) != null ? _ref : '';
|
|
17901
17949
|
if (requiredFields.includes(name) && liveInputValue.trim() === '') {
|
|
17902
|
-
|
|
17903
|
-
err[name] = `${modifiedName} is required`;
|
|
17950
|
+
err[name] = `${getRequiredLabel(name)} is required`;
|
|
17904
17951
|
} else {
|
|
17905
17952
|
delete err[name];
|
|
17906
17953
|
}
|
|
17907
17954
|
setErrors(err);
|
|
17908
17955
|
};
|
|
17909
|
-
useSyncAutofillFields(
|
|
17956
|
+
useSyncAutofillFields(AUTOFILL_FIELDS, formData, updateFormData, handleRequiredFieldBlur);
|
|
17910
17957
|
useEffect(() => {
|
|
17911
17958
|
var _controlRef$current$q, _controlRef$current, _host$shadowRoot;
|
|
17912
17959
|
const host = (_controlRef$current$q = (_controlRef$current = controlRef.current) == null ? void 0 : _controlRef$current.querySelector('goa-input[type="date"]')) != null ? _controlRef$current$q : null;
|
|
@@ -17947,64 +17994,16 @@ const FullNameDobControl = props => {
|
|
|
17947
17994
|
visible: visible,
|
|
17948
17995
|
children: jsxs("div", {
|
|
17949
17996
|
ref: controlRef,
|
|
17950
|
-
children: [
|
|
17951
|
-
|
|
17952
|
-
|
|
17953
|
-
|
|
17954
|
-
|
|
17955
|
-
|
|
17956
|
-
|
|
17957
|
-
|
|
17958
|
-
|
|
17959
|
-
|
|
17960
|
-
disabled: !enabled,
|
|
17961
|
-
type: "text",
|
|
17962
|
-
name: "firstName",
|
|
17963
|
-
testId: "name-form-first-name",
|
|
17964
|
-
ariaLabel: 'name-form-first-name',
|
|
17965
|
-
value: formData.firstName,
|
|
17966
|
-
onChange: detail => {
|
|
17967
|
-
handleInputChange(detail.name, detail.value);
|
|
17968
|
-
},
|
|
17969
|
-
onBlur: detail => {
|
|
17970
|
-
handleRequiredFieldBlur(detail.name);
|
|
17971
|
-
},
|
|
17972
|
-
width: "100%"
|
|
17973
|
-
})
|
|
17974
|
-
}), jsx(GoabFormItem, {
|
|
17975
|
-
label: "Middle name",
|
|
17976
|
-
requirement: schema != null && (_schema$required2 = schema.required) != null && _schema$required2.includes('middleName') ? 'required' : undefined,
|
|
17977
|
-
children: jsx(GoabInput, {
|
|
17978
|
-
type: "text",
|
|
17979
|
-
name: "middleName",
|
|
17980
|
-
disabled: !enabled,
|
|
17981
|
-
testId: "name-form-middle-name",
|
|
17982
|
-
ariaLabel: 'name-form-middle-name',
|
|
17983
|
-
value: formData.middleName || '',
|
|
17984
|
-
onChange: detail => handleInputChange(detail.name, detail.value),
|
|
17985
|
-
width: "100%"
|
|
17986
|
-
})
|
|
17987
|
-
}), jsx(GoabFormItem, {
|
|
17988
|
-
label: "Last name",
|
|
17989
|
-
requirement: schema != null && (_schema$required3 = schema.required) != null && _schema$required3.includes('lastName') ? 'required' : undefined,
|
|
17990
|
-
error: (_errors$lastName = errors == null ? void 0 : errors['lastName']) != null ? _errors$lastName : '',
|
|
17991
|
-
testId: "form-item-last-name",
|
|
17992
|
-
children: jsx(GoabInput, {
|
|
17993
|
-
type: "text",
|
|
17994
|
-
name: "lastName",
|
|
17995
|
-
disabled: !enabled,
|
|
17996
|
-
testId: "name-form-last-name",
|
|
17997
|
-
ariaLabel: 'name-form-last-name',
|
|
17998
|
-
value: formData.lastName || '',
|
|
17999
|
-
onChange: detail => {
|
|
18000
|
-
handleInputChange(detail.name, detail.value);
|
|
18001
|
-
},
|
|
18002
|
-
onBlur: detail => {
|
|
18003
|
-
handleRequiredFieldBlur(detail.name);
|
|
18004
|
-
},
|
|
18005
|
-
width: "100%"
|
|
18006
|
-
})
|
|
18007
|
-
})]
|
|
17997
|
+
children: [jsx(NameInputs, {
|
|
17998
|
+
firstName: formData.firstName,
|
|
17999
|
+
middleName: formData.middleName,
|
|
18000
|
+
lastName: formData.lastName,
|
|
18001
|
+
handleInputChange: handleInputChange,
|
|
18002
|
+
data: formData,
|
|
18003
|
+
disabled: !enabled,
|
|
18004
|
+
requiredFields: requiredFields,
|
|
18005
|
+
errors: errors,
|
|
18006
|
+
onFieldBlur: handleRequiredFieldBlur
|
|
18008
18007
|
}), jsx(GoabGrid, {
|
|
18009
18008
|
minChildWidth: "0ch",
|
|
18010
18009
|
gap: "s",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abgov/jsonforms-components",
|
|
3
|
-
"version": "2.60.
|
|
3
|
+
"version": "2.60.17",
|
|
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",
|
package/renderer-catalog.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-04-
|
|
4
|
-
"sourceCommit": "
|
|
3
|
+
"generatedAt": "2026-04-29T21:25:28.694Z",
|
|
4
|
+
"sourceCommit": "4a8e24eeb967cbbf32d54077d2a3aa489e565b67",
|
|
5
5
|
"sourcePath": "libs/jsonforms-components/src/index.ts",
|
|
6
6
|
"rendererCount": 33,
|
|
7
7
|
"renderers": [
|
|
@@ -5,8 +5,10 @@ interface NameInputsProps {
|
|
|
5
5
|
lastName: string;
|
|
6
6
|
isStepperReview?: boolean;
|
|
7
7
|
disabled?: boolean;
|
|
8
|
-
data
|
|
9
|
-
requiredFields
|
|
8
|
+
data?: any;
|
|
9
|
+
requiredFields?: string[];
|
|
10
|
+
errors?: Record<string, string>;
|
|
11
|
+
onFieldBlur?: (name: string) => void;
|
|
10
12
|
handleInputChange: (field: string, value: string) => void;
|
|
11
13
|
}
|
|
12
14
|
export declare const NameInputs: React.FC<NameInputsProps>;
|