@@ -12,28 +12,49 @@ import * as i18n from './translations';
1212
1313export * from './helpers' ;
1414
15+ interface ErrorMessage {
16+ title : string ;
17+ description : JSX . Element ;
18+ errorType ?: 'primary' | 'success' | 'warning' | 'danger' ;
19+ }
20+
1521interface CaseCallOutProps {
1622 title : string ;
1723 message ?: string ;
18- messages ?: Array < { title : string ; description : JSX . Element } > ;
24+ messages ?: ErrorMessage [ ] ;
1925}
2026
2127const CaseCallOutComponent = ( { title, message, messages } : CaseCallOutProps ) => {
2228 const [ showCallOut , setShowCallOut ] = useState ( true ) ;
2329 const handleCallOut = useCallback ( ( ) => setShowCallOut ( false ) , [ setShowCallOut ] ) ;
2430
31+ const groupedErrorMessages = ( messages ?? [ ] ) . reduce ( ( acc , currentMessage : ErrorMessage ) => {
32+ const key = currentMessage . errorType == null ? 'primary' : currentMessage . errorType ;
33+ return {
34+ ...acc ,
35+ [ key ] : [ ...( acc [ key ] || [ ] ) , currentMessage ] ,
36+ } ;
37+ } , { } as { [ key in NonNullable < ErrorMessage [ 'errorType' ] > ] : ErrorMessage [ ] } ) ;
38+
2539 return showCallOut ? (
2640 < >
27- < EuiCallOut title = { title } color = "primary" iconType = "gear" data-test-subj = "case-call-out" >
28- { ! isEmpty ( messages ) && (
29- < EuiDescriptionList data-test-subj = "callout-messages" listItems = { messages } />
30- ) }
31- { ! isEmpty ( message ) && < p data-test-subj = "callout-message" > { message } </ p > }
32- < EuiButton data-test-subj = "callout-dismiss" color = "primary" onClick = { handleCallOut } >
33- { i18n . DISMISS_CALLOUT }
34- </ EuiButton >
35- </ EuiCallOut >
36- < EuiSpacer />
41+ { ( Object . keys ( groupedErrorMessages ) as Array < keyof ErrorMessage [ 'errorType' ] > ) . map ( key => (
42+ < React . Fragment key = { key } >
43+ < EuiCallOut title = { title } color = { key } iconType = "gear" data-test-subj = "case-call-out" >
44+ { ! isEmpty ( messages ) && (
45+ < EuiDescriptionList
46+ data-test-subj = "callout-messages"
47+ listItems = { groupedErrorMessages [ key ] }
48+ />
49+ ) }
50+ { ! isEmpty ( message ) && < p data-test-subj = "callout-message" > { message } </ p > }
51+ < EuiButton data-test-subj = "callout-dismiss" color = "primary" onClick = { handleCallOut } >
52+ { i18n . DISMISS_CALLOUT }
53+ </ EuiButton >
54+ </ EuiCallOut >
55+ < EuiSpacer />
56+ </ React . Fragment >
57+ ) ) }
3758 </ >
3859 ) : null ;
3960} ;
0 commit comments