@@ -42,7 +42,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
4242 const [ namespaceTouched , setisNamespaceTouched ] = useState ( false ) ;
4343 const [ prefix , setPrefix ] = useState ( "" ) ;
4444 const [ prefixTouched , setisPrefixTouched ] = useState ( false ) ;
45- const [ errorServer , setErrorServer ] = useState ( "" ) ; // Uncategorized errors from backend
45+ const [ errorMessage , setErrorMessage ] = useState ( "" ) ; // Uncategorized errors from backend
4646 const [ loading , toggleLoading ] = useState ( false ) ;
4747 const [ colorSelected , setColorSelected ] = useState ( "#EEEFF1" ) ;
4848 const [ colorTouched , setisColorTouched ] = useState ( false ) ;
@@ -67,7 +67,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
6767 setColorSelected ( "#EEEFF1" ) ;
6868 }
6969 setErrorName ( "" ) ;
70- setErrorServer ( "" ) ;
70+ setErrorMessage ( "" ) ;
7171 toggleIsNameDisabled ( true ) ;
7272 toggleLoading ( false ) ;
7373 }
@@ -128,20 +128,31 @@ const EntityTypeModal: React.FC<Props> = (props) => {
128128 } ;
129129 } ) ;
130130
131+ const getErrorMessage = ( ) => {
132+ if ( errorMessage ) {
133+ if ( errorMessage . includes ( "valid absolute URI" ) ) {
134+ return < span data-testid = "namespace-error" > Invalid syntax: Namespace property must be a valid absolute URI. Example: http://example.org/es/gs</ span > ;
135+ } else if ( errorMessage . includes ( "prefix without specifying" ) ) {
136+ return < span data-testid = "namespace-error" > You must define a namespace URI because you defined a prefix.</ span > ;
137+ } else if ( errorMessage . includes ( "reserved pattern" ) ) {
138+ return < span data-testid = "prefix-error" > You cannot use a reserved prefix. Examples: xml, xs, xsi</ span > ;
139+ } else if ( errorMessage . includes ( "must specify a prefix" ) ) {
140+ return < span data-testid = "prefix-error" > You must define a prefix because you defined a namespace URI.</ span > ;
141+ }
142+ }
143+ return errorMessage ;
144+ } ;
145+
131146 // Parse server error message to determine its type
132147 // TODO Server should categorize the error messages it returns so parsing is not needed
133148 const isErrorOfType = ( type : string ) => {
134149 let result = false ;
135- if ( errorServer ) {
136- if ( errorServer . includes ( "type already exists" ) ) {
150+ if ( errorMessage ) {
151+ if ( errorMessage . includes ( "type already exists" ) ) {
137152 result = type === "name" ;
138- } else if ( errorServer . includes ( "valid absolute URI" ) ) {
139- result = type === "namespace" ;
140- } else if ( errorServer . includes ( "prefix without specifying" ) ) {
153+ } else if ( errorMessage . includes ( "valid absolute URI" ) || errorMessage . includes ( "prefix without specifying" ) ) {
141154 result = type === "namespace" ;
142- } else if ( errorServer . includes ( "reserved pattern" ) ) {
143- result = type === "namespacePrefix" ;
144- } else if ( errorServer . includes ( "must specify a prefix" ) ) {
155+ } else if ( errorMessage . includes ( "reserved pattern" ) || errorMessage . includes ( "must specify a prefix" ) ) {
145156 result = type === "namespacePrefix" ;
146157 }
147158 }
@@ -157,7 +168,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
157168 } catch ( error ) {
158169 if ( error . response . status === 400 ) {
159170 if ( error . response . data . hasOwnProperty ( "message" ) ) {
160- setErrorServer ( error [ "response" ] [ "data" ] [ "message" ] ) ;
171+ setErrorMessage ( error [ "response" ] [ "data" ] [ "message" ] ) ;
161172 }
162173 } else {
163174 handleError ( error ) ;
@@ -187,9 +198,9 @@ const EntityTypeModal: React.FC<Props> = (props) => {
187198 } catch ( error ) {
188199 if ( error . response . status === 400 ) {
189200 if ( error . response . data . hasOwnProperty ( "message" ) && error . response . data [ "message" ] === ErrorTooltips . entityErrorServerResp ( name ) ) {
190- setErrorServer ( "name-error" ) ;
201+ setErrorMessage ( "name-error" ) ;
191202 } else {
192- setErrorServer ( error [ "response" ] [ "data" ] [ "message" ] ) ;
203+ setErrorMessage ( error [ "response" ] [ "data" ] [ "message" ] ) ;
193204 }
194205 } else {
195206 handleError ( error ) ;
@@ -213,7 +224,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
213224 } catch ( error ) {
214225 if ( error . response . status === 400 ) {
215226 if ( error . response . data . hasOwnProperty ( "message" ) ) {
216- setErrorServer ( error [ "response" ] [ "data" ] [ "message" ] ) ;
227+ setErrorMessage ( error [ "response" ] [ "data" ] [ "message" ] ) ;
217228 }
218229 } else {
219230 handleError ( error ) ;
@@ -228,7 +239,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
228239
229240 const onOk = ( event ) => {
230241 setErrorName ( "" ) ;
231- setErrorServer ( "" ) ;
242+ setErrorMessage ( "" ) ;
232243 event . preventDefault ( ) ;
233244 if ( props . isEditModal ) {
234245 toggleLoading ( true ) ;
@@ -296,7 +307,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
296307 </ span > }
297308 colon = { false }
298309 labelAlign = "left"
299- validateStatus = { ( errorName || isErrorOfType ( "name" ) ? "error" : "" ) }
310+ validateStatus = { ( isErrorOfType ( "name" ) ? "error" : "" ) }
300311 help = { errorName }
301312 >
302313 { props . isEditModal ? < span > { name } </ span > : < Input
@@ -307,8 +318,8 @@ const EntityTypeModal: React.FC<Props> = (props) => {
307318 onChange = { handleChange }
308319 onBlur = { handleChange }
309320 /> }
310- { errorServer === "name-error" ? < p aria-label = "entity-name-error" className = { styles . errorServer } > An entity type is already using the name < strong > { name } </ strong > . An entity type cannot use the same name as an existing entity type.</ p >
311- : errorServer !== "" ? < p className = { styles . errorServer } > { errorServer } </ p > : null }
321+ { errorMessage === "name-error" ? < p aria-label = "entity-name-error" className = { styles . errorServer } > An entity type is already using the name < strong > { name } </ strong > . An entity type cannot use the same name as an existing entity type.</ p >
322+ : errorMessage !== "" ? < p className = { styles . errorServer } > { errorMessage } </ p > : null }
312323 { props . isEditModal ? null : < MLTooltip title = { ModelingTooltips . nameRegex } >
313324 < Icon type = "question-circle" className = { styles . icon } theme = "filled" />
314325 </ MLTooltip > }
@@ -342,6 +353,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
342353 < Form . Item
343354 style = { { display : "inline-block" } }
344355 validateStatus = { isErrorOfType ( "namespace" ) ? "error" : "" }
356+ help = { getErrorMessage ( ) }
345357 >
346358 < Input
347359 id = "namespace"
@@ -359,6 +371,7 @@ const EntityTypeModal: React.FC<Props> = (props) => {
359371 colon = { false }
360372 style = { { display : "inline-block" } }
361373 validateStatus = { isErrorOfType ( "namespacePrefix" ) ? "error" : "" }
374+ help = { getErrorMessage ( ) }
362375 >
363376 < Input
364377 id = "prefix"
0 commit comments