|  |  |  | @ -1,4 +1,4 @@ | 
		
	
		
			
				|  |  |  |  | import React, { useCallback, useEffect } from 'react'; | 
		
	
		
			
				|  |  |  |  | import React, { useCallback, useEffect, useState } from 'react'; | 
		
	
		
			
				|  |  |  |  | import { useSelector } from 'react-redux'; | 
		
	
		
			
				|  |  |  |  | import { | 
		
	
		
			
				|  |  |  |  |   joinOpenGroupV2WithUIEvents, | 
		
	
	
		
			
				
					|  |  |  | @ -9,9 +9,10 @@ import { updateDefaultBase64RoomData } from '../../state/ducks/defaultRooms'; | 
		
	
		
			
				|  |  |  |  | import { StateType } from '../../state/reducer'; | 
		
	
		
			
				|  |  |  |  | import { Avatar, AvatarSize } from '../Avatar'; | 
		
	
		
			
				|  |  |  |  | import { Flex } from '../basic/Flex'; | 
		
	
		
			
				|  |  |  |  | import { PillContainer } from '../basic/PillContainer'; | 
		
	
		
			
				|  |  |  |  | import { PillContainerHoverable, PillTooltipWrapper } from '../basic/PillContainer'; | 
		
	
		
			
				|  |  |  |  | import { H3 } from '../basic/Text'; | 
		
	
		
			
				|  |  |  |  | import { SessionSpinner } from './SessionSpinner'; | 
		
	
		
			
				|  |  |  |  | import styled, { DefaultTheme, useTheme } from "styled-components"; | 
		
	
		
			
				|  |  |  |  | // tslint:disable: no-void-expression
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | export type JoinableRoomProps = { | 
		
	
	
		
			
				
					|  |  |  | @ -62,22 +63,88 @@ const SessionJoinableRoomAvatar = (props: JoinableRoomProps) => { | 
		
	
		
			
				|  |  |  |  |   ); | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | const StyledRoomName = styled(Flex)` | 
		
	
		
			
				|  |  |  |  |   overflow: hidden; | 
		
	
		
			
				|  |  |  |  |   white-space: nowrap; | 
		
	
		
			
				|  |  |  |  |   text-overflow: ellipsis; | 
		
	
		
			
				|  |  |  |  |   padding: 0 10px; | 
		
	
		
			
				|  |  |  |  | `;
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | const StyledToolTip = styled.div<{ theme: DefaultTheme }>` | 
		
	
		
			
				|  |  |  |  |   padding: ${props => props.theme.common.margins.sm}; | 
		
	
		
			
				|  |  |  |  |   background: ${props => props.theme.colors.clickableHovered}; | 
		
	
		
			
				|  |  |  |  |   font-size: ${props => props.theme.common.fonts.xs}; | 
		
	
		
			
				|  |  |  |  |   border: 1px solid ${props => props.theme.colors.pillDividerColor}; | 
		
	
		
			
				|  |  |  |  |   display: inline-block; | 
		
	
		
			
				|  |  |  |  |   position: absolute; | 
		
	
		
			
				|  |  |  |  |   white-space: normal; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   top: 100%; | 
		
	
		
			
				|  |  |  |  |   left: 10%; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   border-radius: 300px; | 
		
	
		
			
				|  |  |  |  |   z-index: 999; | 
		
	
		
			
				|  |  |  |  |   opacity: 1; | 
		
	
		
			
				|  |  |  |  |   animation: fadeIn 0.5s ease-out; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   max-width: 80%; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @keyframes fadeIn { | 
		
	
		
			
				|  |  |  |  |     from { | 
		
	
		
			
				|  |  |  |  |       opacity: 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | `;
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | const SessionJoinableRoomName = (props: JoinableRoomProps) => { | 
		
	
		
			
				|  |  |  |  |   return <Flex padding="0 10px">{props.name}</Flex>; | 
		
	
		
			
				|  |  |  |  |   return <StyledRoomName>{props.name}</StyledRoomName>; | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | const SessionJoinableRoomRow = (props: JoinableRoomProps) => { | 
		
	
		
			
				|  |  |  |  |   const [hoverDelayReached, setHoverDelayReached] = useState(false); | 
		
	
		
			
				|  |  |  |  |   const [isHovering, setIsHovering] = useState(false); | 
		
	
		
			
				|  |  |  |  |   const [delayHandler, setDelayHandler] = useState<null | number>(null); | 
		
	
		
			
				|  |  |  |  |   const theme: DefaultTheme = useTheme(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   const handleMouseEnter = () => { | 
		
	
		
			
				|  |  |  |  |     setIsHovering(true); | 
		
	
		
			
				|  |  |  |  |     setDelayHandler(setTimeout(() => { | 
		
	
		
			
				|  |  |  |  |       setHoverDelayReached(true); | 
		
	
		
			
				|  |  |  |  |     }, 750)) | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   const handleMouseLeave = () => { | 
		
	
		
			
				|  |  |  |  |     setIsHovering(false); | 
		
	
		
			
				|  |  |  |  |     setHoverDelayReached(false); | 
		
	
		
			
				|  |  |  |  |     if (delayHandler) { | 
		
	
		
			
				|  |  |  |  |       clearTimeout(delayHandler); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   const showTooltip = hoverDelayReached && isHovering; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   return ( | 
		
	
		
			
				|  |  |  |  |     <PillContainer | 
		
	
		
			
				|  |  |  |  |       onClick={() => { | 
		
	
		
			
				|  |  |  |  |         props.onClick(props.completeUrl); | 
		
	
		
			
				|  |  |  |  |       }} | 
		
	
		
			
				|  |  |  |  |       margin="5px" | 
		
	
		
			
				|  |  |  |  |       padding="5px" | 
		
	
		
			
				|  |  |  |  |     > | 
		
	
		
			
				|  |  |  |  |       <SessionJoinableRoomAvatar {...props} /> | 
		
	
		
			
				|  |  |  |  |       <SessionJoinableRoomName {...props} /> | 
		
	
		
			
				|  |  |  |  |     </PillContainer> | 
		
	
		
			
				|  |  |  |  |       <PillTooltipWrapper> | 
		
	
		
			
				|  |  |  |  |         <PillContainerHoverable | 
		
	
		
			
				|  |  |  |  |           onClick={() => { | 
		
	
		
			
				|  |  |  |  |             props.onClick(props.completeUrl); | 
		
	
		
			
				|  |  |  |  |           }} | 
		
	
		
			
				|  |  |  |  |           margin="5px" | 
		
	
		
			
				|  |  |  |  |           padding="5px" | 
		
	
		
			
				|  |  |  |  |           onMouseEnter={handleMouseEnter} | 
		
	
		
			
				|  |  |  |  |           onMouseLeave={handleMouseLeave} | 
		
	
		
			
				|  |  |  |  |         > | 
		
	
		
			
				|  |  |  |  |           <SessionJoinableRoomAvatar {...props} /> | 
		
	
		
			
				|  |  |  |  |           <SessionJoinableRoomName {...props} /> | 
		
	
		
			
				|  |  |  |  |         </PillContainerHoverable> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         {showTooltip &&  | 
		
	
		
			
				|  |  |  |  |           <StyledToolTip theme={theme}> | 
		
	
		
			
				|  |  |  |  |             {props.name} | 
		
	
		
			
				|  |  |  |  |           </StyledToolTip> | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       </PillTooltipWrapper> | 
		
	
		
			
				|  |  |  |  |   ); | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |