@@ -114,62 +114,64 @@ enum SelfOpenStatus {
114114
115115export type OperationVisualizationComp < OpT > = FunctionComponent < OperationProps < OpT > > ;
116116
117- export const makeOperationVisualization = < OpT extends unknown > (
118- applicationSpecific : ApplicationSpecificOperationComponents < OpT > ,
119- ) : OperationVisualizationComp < OpT > => ( props ) => {
120- const classes = useOperationStyles ( ) ;
121- const { className, style, operation, tooltipPlacement, ...otherProps } = props ;
122-
123- const [ tooltipContent , setTooltipContent ] = useState < NonNullable < React . ReactNode > > ( "" ) ;
124- const [ selfOpenStatus , setSelfOpenStatus ] = useState < SelfOpenStatus > ( SelfOpenStatus . Closed ) ;
125- const [ hoveredOperation , setHoveredOperation ] = useOperationHoverState ( ) ;
126-
127- useEffect ( ( ) => {
128- if (
129- selfOpenStatus === SelfOpenStatus . Closed &&
130- hoveredOperation !== undefined &&
131- isRelated ( hoveredOperation , operation )
132- ) {
133- setTooltipContent ( renderRelatedOperation ( operation , hoveredOperation ) ) ;
134- } else if ( selfOpenStatus === SelfOpenStatus . Closing && hoveredOperation === undefined ) {
135- setSelfOpenStatus ( SelfOpenStatus . Closed ) ;
136- }
137- } , [ selfOpenStatus , hoveredOperation , operation ] ) ;
138-
139- const onOpen = useCallback ( ( ) => {
140- setSelfOpenStatus ( SelfOpenStatus . Open ) ;
141- setTooltipContent ( renderOperation ( applicationSpecific . renderOperation , operation ) ) ;
142- setHoveredOperation ( operation ) ;
143- } , [ operation , setHoveredOperation ] ) ;
144-
145- const onClose = useCallback ( ( ) => {
146- setSelfOpenStatus ( hoveredOperation ? SelfOpenStatus . Closing : SelfOpenStatus . Closed ) ;
147- setHoveredOperation ( undefined ) ;
148- } , [ hoveredOperation , setHoveredOperation ] ) ;
149-
150- const isRelatedOperationHovered =
151- hoveredOperation !== undefined && isRelated ( operation , hoveredOperation ) ;
152-
153- return (
154- < Tooltip
155- key = { operation . meta . id }
156- arrow = { true }
157- classes = { { tooltip : classes . tooltip } }
158- title = { tooltipContent }
159- open = { selfOpenStatus === SelfOpenStatus . Open || isRelatedOperationHovered }
160- placement = { tooltipPlacement ?? "bottom" }
161- onOpen = { onOpen }
162- onClose = { onClose }
163- >
164- < span
117+ export const makeOperationVisualization =
118+ < OpT extends unknown > (
119+ applicationSpecific : ApplicationSpecificOperationComponents < OpT > ,
120+ ) : OperationVisualizationComp < OpT > =>
121+ ( props ) => {
122+ const classes = useOperationStyles ( ) ;
123+ const { className, style, operation, tooltipPlacement, ...otherProps } = props ;
124+
125+ const [ tooltipContent , setTooltipContent ] = useState < NonNullable < React . ReactNode > > ( "" ) ;
126+ const [ selfOpenStatus , setSelfOpenStatus ] = useState < SelfOpenStatus > ( SelfOpenStatus . Closed ) ;
127+ const [ hoveredOperation , setHoveredOperation ] = useOperationHoverState ( ) ;
128+
129+ useEffect ( ( ) => {
130+ if (
131+ selfOpenStatus === SelfOpenStatus . Closed &&
132+ hoveredOperation !== undefined &&
133+ isRelated ( hoveredOperation , operation )
134+ ) {
135+ setTooltipContent ( renderRelatedOperation ( operation , hoveredOperation ) ) ;
136+ } else if ( selfOpenStatus === SelfOpenStatus . Closing && hoveredOperation === undefined ) {
137+ setSelfOpenStatus ( SelfOpenStatus . Closed ) ;
138+ }
139+ } , [ selfOpenStatus , hoveredOperation , operation ] ) ;
140+
141+ const onOpen = useCallback ( ( ) => {
142+ setSelfOpenStatus ( SelfOpenStatus . Open ) ;
143+ setTooltipContent ( renderOperation ( applicationSpecific . renderOperation , operation ) ) ;
144+ setHoveredOperation ( operation ) ;
145+ } , [ operation , setHoveredOperation ] ) ;
146+
147+ const onClose = useCallback ( ( ) => {
148+ setSelfOpenStatus ( hoveredOperation ? SelfOpenStatus . Closing : SelfOpenStatus . Closed ) ;
149+ setHoveredOperation ( undefined ) ;
150+ } , [ hoveredOperation , setHoveredOperation ] ) ;
151+
152+ const isRelatedOperationHovered =
153+ hoveredOperation !== undefined && isRelated ( operation , hoveredOperation ) ;
154+
155+ return (
156+ < Tooltip
165157 key = { operation . meta . id }
166- className = { clsx ( classes . operation , props . className ) }
167- style = { {
168- background : getClientColor ( operation . meta . author ) ,
169- ...style ,
170- } }
171- { ...otherProps }
172- />
173- </ Tooltip >
174- ) ;
175- } ;
158+ arrow = { true }
159+ classes = { { tooltip : classes . tooltip } }
160+ title = { tooltipContent }
161+ open = { selfOpenStatus === SelfOpenStatus . Open || isRelatedOperationHovered }
162+ placement = { tooltipPlacement ?? "bottom" }
163+ onOpen = { onOpen }
164+ onClose = { onClose }
165+ >
166+ < span
167+ key = { operation . meta . id }
168+ className = { clsx ( classes . operation , props . className ) }
169+ style = { {
170+ background : getClientColor ( operation . meta . author ) ,
171+ ...style ,
172+ } }
173+ { ...otherProps }
174+ />
175+ </ Tooltip >
176+ ) ;
177+ } ;
0 commit comments