import React from 'react'; import styled, { CSSProperties } from 'styled-components'; import { Flex } from '../../basic/Flex'; import { SessionIconButton } from '../../icon'; import { SubtitleStrings, SubtitleStringsType } from './ConversationHeaderTitle'; function loadDataTestId(currentSubtitle: SubtitleStringsType) { if (currentSubtitle === 'disappearingMessages') { return 'disappear-messages-type-and-time'; } else { return 'conversation-header-subtitle'; } } export const StyledSubtitleContainer = styled.div` display: flex; flex-direction: column; align-items: center; justify-content: center; margin: 0 auto; min-width: 230px; div:first-child { span:last-child { margin-bottom: 0; } } `; const StyledSubtitleDot = styled.span<{ active: boolean }>` border-radius: 50%; background-color: ${props => props.active ? 'var(--text-primary-color)' : 'var(--text-secondary-color)'}; height: 5px; width: 5px; margin: 0 2px; `; const SubtitleDotMenu = ({ options, selectedOptionIndex, style, }: { options: Array<string | null>; selectedOptionIndex: number; style: CSSProperties; }) => ( <Flex container={true} alignItems={'center'} style={style}> {options.map((option, index) => { if (!option) { return null; } return ( <StyledSubtitleDot key={`subtitleDotMenu-${index}`} active={selectedOptionIndex === index} /> ); })} </Flex> ); type ConversationHeaderSubtitleProps = { subtitlesArray: Array<SubtitleStringsType>; subtitleStrings: SubtitleStrings; currentSubtitle: SubtitleStringsType; setCurrentSubtitle: (index: SubtitleStringsType) => void; onClickFunction: () => void; showDisappearingMessageIcon: boolean; }; export const ConversationHeaderSubtitle = (props: ConversationHeaderSubtitleProps) => { const { subtitlesArray, subtitleStrings, currentSubtitle, setCurrentSubtitle, onClickFunction, showDisappearingMessageIcon, } = props; const handleTitleCycle = (direction: 1 | -1) => { let newIndex = subtitlesArray.indexOf(currentSubtitle) + direction; if (newIndex > subtitlesArray.length - 1) { newIndex = 0; } if (newIndex < 0) { newIndex = subtitlesArray.length - 1; } if (subtitlesArray[newIndex]) { setCurrentSubtitle(subtitlesArray[newIndex]); } }; return ( <StyledSubtitleContainer> <Flex container={true} flexDirection={'row'} justifyContent={subtitlesArray.length < 2 ? 'center' : 'space-between'} alignItems={'center'} width={'100%'} > <SessionIconButton iconColor={'var(--button-icon-stroke-selected-color)'} iconSize={'small'} iconType="chevron" iconRotation={90} margin={'0 3px 0 0'} onClick={() => { handleTitleCycle(-1); }} isHidden={subtitlesArray.length < 2} tabIndex={0} /> {showDisappearingMessageIcon && ( <SessionIconButton iconColor={'var(--button-icon-stroke-selected-color)'} iconSize={'tiny'} iconType="timer50" margin={'0 var(--margins-xs) 0 0'} /> )} <span role="button" className="module-conversation-header__title-text" onClick={onClickFunction} onKeyPress={(e: any) => { if (e.key === 'Enter') { e.preventDefault(); onClickFunction(); } }} tabIndex={0} data-testid={loadDataTestId(currentSubtitle)} > {subtitleStrings[currentSubtitle]} </span> <SessionIconButton iconColor={'var(--button-icon-stroke-selected-color)'} iconSize={'small'} iconType="chevron" iconRotation={270} margin={'0 0 0 3px'} onClick={() => { handleTitleCycle(1); }} isHidden={subtitlesArray.length < 2} tabIndex={0} /> </Flex> <SubtitleDotMenu options={subtitlesArray} selectedOptionIndex={subtitlesArray.indexOf(currentSubtitle)} style={{ display: subtitlesArray.length < 2 ? 'none' : undefined, margin: '8px 0' }} /> </StyledSubtitleContainer> ); };