1- import { FlexBox , Icon , PopoverDomRef , ResponsivePopover , Text } from '@ui5/webcomponents-react' ;
1+ import { ButtonDomRef , FlexBox , Icon , ResponsivePopover , Text } from '@ui5/webcomponents-react' ;
22import { timeAgo } from '../../utils/i18n/timeAgo' ;
3- import { MouseEvent , useRef , useState } from 'react' ;
3+ import { RefObject , useRef , useState } from 'react' ;
44import { AnimatedHoverTextButton } from '../Helper/AnimatedHoverTextButton.tsx' ;
55import PopoverPlacement from '@ui5/webcomponents/dist/types/PopoverPlacement.js' ;
6-
6+ import styles from './ResourceStatusCell.module.css' ;
77export interface ResourceStatusCellProps {
88 isOk : boolean ;
99 transitionTime : string ;
@@ -18,19 +18,17 @@ export const ResourceStatusCell = ({
1818 positiveText,
1919 negativeText,
2020} : ResourceStatusCellProps ) => {
21- const popoverRef = useRef < PopoverDomRef > ( null ) ;
22- const [ open , setOpen ] = useState ( false ) ;
21+ const btnRef = useRef < ButtonDomRef > ( null ) ;
22+ const [ popoverIsOpen , setPopoverIsOpen ] = useState ( false ) ;
2323
24- const handleOpenerClick = ( e : MouseEvent < HTMLButtonElement > ) => {
25- if ( popoverRef . current ) {
26- ( popoverRef . current as unknown as { opener : EventTarget | null } ) . opener = e . target ;
27- setOpen ( ( prev ) => ! prev ) ;
28- }
24+ const handleClose = ( ) => {
25+ setPopoverIsOpen ( false ) ;
2926 } ;
3027
3128 return (
3229 < span >
3330 < AnimatedHoverTextButton
31+ ref = { btnRef }
3432 icon = {
3533 < Icon
3634 design = { isOk ? 'Positive' : 'Negative' }
@@ -40,41 +38,26 @@ export const ResourceStatusCell = ({
4038 />
4139 }
4240 text = { isOk ? positiveText : negativeText }
43- onClick = { handleOpenerClick }
4441 />
45- < ResponsivePopover ref = { popoverRef } open = { open } placement = { PopoverPlacement . Bottom } >
46- < Text
47- style = { {
48- maxWidth : '60ch' ,
49- textAlign : 'left' ,
50- lineHeight : '1.5em' ,
51- } }
52- >
53- { message }
54- </ Text >
42+ < ResponsivePopover
43+ opener = { btnRef . current }
44+ open = { popoverIsOpen }
45+ placement = { PopoverPlacement . Bottom }
46+ onClose = { handleClose }
47+ >
48+ < Text className = { styles . message } > { message } </ Text >
5549
56- < FlexBox
57- style = { {
58- borderTop : '1px solid gray' ,
59- paddingTop : '1rem' ,
60- marginTop : '1rem' ,
61- } }
62- justifyContent = { 'Start' }
63- alignItems = { 'Center' }
64- gap = { 12 }
65- >
50+ < FlexBox className = { styles . wrapper } justifyContent = { 'Start' } alignItems = { 'Center' } gap = { 12 } >
6651 < Icon
6752 name = { 'date-time' }
6853 style = { {
6954 color : isOk ? 'var(--sapPositiveTextColor)' : 'var(--sapNegativeTextColor)' ,
7055 } }
56+ design = { isOk ? 'Positive' : 'Negative' }
7157 />
7258 < Text
59+ className = { styles . subheader }
7360 style = { {
74- maxWidth : '60ch' ,
75- textAlign : 'left' ,
76- lineHeight : '1.5em' ,
77- fontWeight : 'bold' ,
7861 color : isOk ? 'var(--sapPositiveTextColor)' : 'var(--sapNegativeTextColor)' ,
7962 } }
8063 >
0 commit comments