Skip to content

Commit 9f79aaf

Browse files
authored
Fix - Autocomplete field not showing validation error (#1912)
1 parent cbfc8f8 commit 9f79aaf

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

geonode_mapstore_client/client/js/components/Autocomplete/Autocomplete.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const IconWithTooltip = tooltip((props) => <div {...props}><FaIcon name="info-ci
2121
const Autocomplete = ({
2222
className,
2323
description,
24+
error,
2425
helpTitleIcon,
2526
id,
2627
labelKey = "label",
@@ -44,7 +45,7 @@ const Autocomplete = ({
4445
};
4546

4647
return (
47-
<div className={`autocomplete${className ? " " + className : ""}`}>
48+
<div className={`autocomplete${className ? " " + className : ""}${!!error ? " " + "has-error" : ""}`}>
4849
<div className="title-container">
4950
<label className="control-label" htmlFor={id}>{title || name}</label>
5051
{helpTitleIcon && !isEmpty(description) && <IconWithTooltip className="help-title" tooltip={description} tooltipPosition={"right"} />}
@@ -56,13 +57,15 @@ const Autocomplete = ({
5657
valueKey={valueKey}
5758
labelKey={labelKey}
5859
/>
60+
{error}
5961
</div>
6062
);
6163
};
6264

6365
Autocomplete.propTypes = {
6466
className: PropTypes.string,
6567
description: PropTypes.string,
68+
error: PropTypes.element,
6669
helpTitleIcon: PropTypes.bool,
6770
id: PropTypes.string.isRequired,
6871
labelKey: PropTypes.string,

geonode_mapstore_client/client/js/plugins/MetadataEditor/components/_fields/SchemaField.jsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88

99
import React from 'react';
1010
import axios from '@mapstore/framework/libs/ajax';
11-
import isString from 'lodash/isString';
11+
import castArray from 'lodash/castArray';
1212
import isEmpty from 'lodash/isEmpty';
13+
import isString from 'lodash/isString';
1314
import Autocomplete from '@js/components/Autocomplete/Autocomplete';
1415
import DefaultSchemaField from '@rjsf/core/lib/components/fields/SchemaField';
1516

@@ -26,6 +27,8 @@ const SchemaField = (props) => {
2627
formData,
2728
idSchema,
2829
name,
30+
hideError,
31+
errorSchema,
2932
uiSchema
3033
} = props;
3134
const autocomplete = uiSchema?.['ui:options']?.['geonode-ui:autocomplete'];
@@ -37,6 +40,19 @@ const SchemaField = (props) => {
3740
const isSingleSelect = schema?.type === 'object' && !isEmpty(schema?.properties);
3841

3942
if (autocomplete && (isMultiSelect || isSingleSelect)) {
43+
const errors = (!hideError ? castArray(errorSchema) : [])
44+
.reduce((acc, errorEntry) => {
45+
if (errorEntry?.__errors) {
46+
acc.push({ messages: errorEntry.__errors });
47+
} else {
48+
Object.keys(errorEntry || {}).forEach((key) => {
49+
if (errorEntry[key]?.__errors) {
50+
acc.push({ key, messages: errorEntry[key].__errors });
51+
}
52+
});
53+
}
54+
return acc;
55+
}, []);
4056
const autocompleteOptions = isString(autocomplete)
4157
? { url: autocomplete }
4258
: autocomplete;
@@ -104,7 +120,18 @@ const SchemaField = (props) => {
104120
})
105121
};
106122
});
107-
}
123+
},
124+
error: isEmpty(errors) ? null : <>
125+
{errors.map((entry, idx) => {
126+
return (
127+
<ul key={idx} className="text-danger">
128+
{castArray(entry.messages).map((message, mIdx) => {
129+
return <li key={mIdx}>{entry.key ? `${entry.key}: ` : ''}{message}</li>;
130+
})}
131+
</ul>
132+
);
133+
})}
134+
</>
108135
};
109136

110137
return <Autocomplete {...autoCompleteProps}/>;

geonode_mapstore_client/client/themes/geonode/less/_metadata.less

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@
1313
.border-color-var(@theme-vars[main-border-color]);
1414
}
1515
}
16-
.gn-metadata-groups .gn-metadata-group > .field-object {
17-
.border-color-var(@theme-vars[main-border-color]);
16+
.gn-metadata-groups {
17+
.gn-metadata-group {
18+
& > .field-object {
19+
.border-color-var(@theme-vars[main-border-color]);
20+
}
21+
.has-error {
22+
label, .help-title, .gn-metadata-form-description {
23+
.color-var(@theme-vars[danger])
24+
}
25+
}
26+
}
1827
}
1928
.gn-metadata-list {
2029
.border-right-color-var(@theme-vars[main-border-color]);

0 commit comments

Comments
 (0)