feat: invite a friend flow done

consolidate help desk buttons into one component
pull/3083/head
William Grant 11 months ago
parent 341fa8b774
commit 2fedce16df

@ -0,0 +1,24 @@
import { shell } from 'electron';
import { SessionIconButton, SessionIconSize } from '../icon';
import { SessionIconButtonProps } from '../icon/SessionIconButton';
export const HelpDeskButton = (
props: Omit<SessionIconButtonProps, 'iconType' | 'iconSize'> & { iconSize?: SessionIconSize }
) => {
return (
<SessionIconButton
aria-label="Help desk link"
{...props}
iconType="question"
iconSize={props.iconSize || 10}
iconPadding={props.iconPadding || '2px'}
padding={props.padding || '0'}
dataTestId="session-link-helpdesk"
onClick={() => {
void shell.openExternal(
'https://sessionapp.zendesk.com/hc/en-us/articles/4439132747033-How-do-Session-ID-usernames-work'
);
}}
/>
);
};

@ -1,5 +1,15 @@
import { CopyToClipboardButton, CopyToClipboardIcon } from './CopyToClipboardButton';
import { HelpDeskButton } from './HelpDeskButton';
import { MenuButton } from './MenuButton'; import { MenuButton } from './MenuButton';
import { PanelButton, PanelButtonGroup } from './PanelButton'; import { PanelButton, PanelButtonGroup } from './PanelButton';
import { PanelIconButton } from './PanelIconButton'; import { PanelIconButton } from './PanelIconButton';
export { MenuButton, PanelButton, PanelButtonGroup, PanelIconButton }; export {
CopyToClipboardButton,
CopyToClipboardIcon,
HelpDeskButton,
MenuButton,
PanelButton,
PanelButtonGroup,
PanelIconButton,
};

@ -192,10 +192,12 @@ export const LeftPaneSectionHeader = () => {
leftOverlayMode !== 'choose-action' && leftOverlayMode !== 'choose-action' &&
leftOverlayMode !== 'message-requests' ? ( leftOverlayMode !== 'message-requests' ? (
<SessionIconButton <SessionIconButton
ariaLabel="Back button"
iconSize="medium" iconSize="medium"
iconType="chevron" iconType="chevron"
iconRotation={90} iconRotation={90}
onClick={returnToActionChooser} onClick={returnToActionChooser}
dataTestId="back-button"
/> />
) : ( ) : (
<SpacerSM /> <SpacerSM />

@ -1,7 +1,6 @@
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
import styled from 'styled-components'; import styled from 'styled-components';
import { shell } from 'electron';
import { useState } from 'react'; import { useState } from 'react';
import { useDispatch } from 'react-redux'; import { useDispatch } from 'react-redux';
import { resetLeftOverlayMode } from '../../../state/ducks/section'; import { resetLeftOverlayMode } from '../../../state/ducks/section';
@ -9,8 +8,9 @@ import { resetLeftOverlayMode } from '../../../state/ducks/section';
import { UserUtils } from '../../../session/utils'; import { UserUtils } from '../../../session/utils';
import { Flex } from '../../basic/Flex'; import { Flex } from '../../basic/Flex';
import { SpacerLG, SpacerMD, SpacerSM } from '../../basic/Text'; import { SpacerLG, SpacerMD, SpacerSM } from '../../basic/Text';
import { HelpDeskButton } from '../../buttons';
import { CopyToClipboardButton } from '../../buttons/CopyToClipboardButton'; import { CopyToClipboardButton } from '../../buttons/CopyToClipboardButton';
import { SessionIcon, SessionIconButton } from '../../icon'; import { SessionIcon } from '../../icon';
import { SessionInput } from '../../inputs'; import { SessionInput } from '../../inputs';
import { StyledLeftPaneOverlay } from './OverlayMessage'; import { StyledLeftPaneOverlay } from './OverlayMessage';
@ -95,7 +95,8 @@ export const OverlayInvite = () => {
editable={false} editable={false}
centerText={true} centerText={true}
isTextArea={true} isTextArea={true}
inputDataTestId="invite-account-id" ariaLabel="Account ID"
inputDataTestId="your-account-id"
/> />
</StyledInputContainer> </StyledInputContainer>
<SpacerMD /> <SpacerMD />
@ -106,7 +107,7 @@ export const OverlayInvite = () => {
copyContent={ourSessionID} copyContent={ourSessionID}
onCopyComplete={() => setIdCopied(true)} onCopyComplete={() => setIdCopied(true)}
hotkey={true} hotkey={true}
dataTestId="invite-account-id-copy" dataTestId="copy-button-account-id"
/> />
</StyledButtonerContainer> </StyledButtonerContainer>
</> </>
@ -120,19 +121,9 @@ export const OverlayInvite = () => {
<SpacerMD /> <SpacerMD />
<StyledHeadingContainer container={true} justifyContent="center" alignItems="center"> <StyledHeadingContainer container={true} justifyContent="center" alignItems="center">
<StyledHeading>{window.i18n('accountIDCopied')}</StyledHeading> <StyledHeading>{window.i18n('accountIDCopied')}</StyledHeading>
<SessionIconButton <HelpDeskButton
aria-label="external link to Session Zendesk article explaing how Account IDs work"
iconType="question"
iconColor={'var(--text-primary-color)'} iconColor={'var(--text-primary-color)'}
iconSize={10} style={{ display: 'inline-flex' }}
iconPadding="2px"
padding={'0'}
dataTestId="session-zendesk-account-ids"
onClick={() => {
void shell.openExternal(
'https://sessionapp.zendesk.com/hc/en-us/articles/4439132747033-How-do-Session-ID-usernames-work'
);
}}
/> />
</StyledHeadingContainer> </StyledHeadingContainer>
<SpacerSM /> <SpacerSM />

@ -2,7 +2,6 @@ import { useState } from 'react';
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
import styled from 'styled-components'; import styled from 'styled-components';
import { shell } from 'electron';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import { useDispatch } from 'react-redux'; import { useDispatch } from 'react-redux';
@ -19,7 +18,7 @@ import { NotFoundError, SnodeResponseError } from '../../../session/utils/errors
import { THEME_GLOBALS } from '../../../themes/globals'; import { THEME_GLOBALS } from '../../../themes/globals';
import { Flex } from '../../basic/Flex'; import { Flex } from '../../basic/Flex';
import { SpacerLG, SpacerMD } from '../../basic/Text'; import { SpacerLG, SpacerMD } from '../../basic/Text';
import { SessionIconButton } from '../../icon'; import { HelpDeskButton } from '../../buttons';
import { SessionInput } from '../../inputs'; import { SessionInput } from '../../inputs';
const StyledDescriptionContainer = styled(motion.div)` const StyledDescriptionContainer = styled(motion.div)`
@ -157,6 +156,7 @@ export const OverlayMessage = () => {
padding={'var(--margins-md)'} padding={'var(--margins-md)'}
> >
<SessionInput <SessionInput
ariaLabel="New conversation input"
autoFocus={true} autoFocus={true}
type="text" type="text"
placeholder={window.i18n('accountIdOrOnsEnter')} placeholder={window.i18n('accountIdOrOnsEnter')}
@ -180,20 +180,7 @@ export const OverlayMessage = () => {
transition={{ duration: THEME_GLOBALS['--default-duration-seconds'] }} transition={{ duration: THEME_GLOBALS['--default-duration-seconds'] }}
> >
<SessionIDDescription>{window.i18n('messageNewDescription')}</SessionIDDescription> <SessionIDDescription>{window.i18n('messageNewDescription')}</SessionIDDescription>
<SessionIconButton <HelpDeskButton style={{ display: 'inline-flex' }} />
aria-label="external link to Session Zendesk article explaing how Account IDs work"
iconType="question"
iconSize={10}
iconPadding="2px"
padding={'0'}
style={{ display: 'inline-flex' }}
dataTestId="session-zendesk-account-ids"
onClick={() => {
void shell.openExternal(
'https://sessionapp.zendesk.com/hc/en-us/articles/4439132747033-How-do-Session-ID-usernames-work'
);
}}
/>
</StyledDescriptionContainer> </StyledDescriptionContainer>
<SpacerLG /> <SpacerLG />
</> </>
@ -201,6 +188,7 @@ export const OverlayMessage = () => {
{!isEmpty(pubkeyOrOns) ? ( {!isEmpty(pubkeyOrOns) ? (
<SessionButton <SessionButton
ariaLabel="Continue"
text={window.i18n('continue')} text={window.i18n('continue')}
disabled={disableNextButton} disabled={disableNextButton}
onClick={handleMessageButtonClick} onClick={handleMessageButtonClick}

@ -69,14 +69,14 @@ export const OverlayChooseAction = () => {
> >
<ActionRow <ActionRow
title={window.i18n('newMessage')} title={window.i18n('newMessage')}
ariaLabel={window.i18n('createConversationNewContact')} ariaLabel={'New message button'}
iconType={'chatBubble'} iconType={'chatBubble'}
onClick={openNewMessage} onClick={openNewMessage}
dataTestId="chooser-new-conversation-button" dataTestId="chooser-new-conversation-button"
/> />
<ActionRow <ActionRow
title={window.i18n('createGroup')} title={window.i18n('createGroup')}
ariaLabel={window.i18n('createConversationNewGroup')} ariaLabel={'Create a group button'}
iconType={'group'} iconType={'group'}
iconSize={36} iconSize={36}
onClick={openCreateGroup} onClick={openCreateGroup}
@ -84,17 +84,17 @@ export const OverlayChooseAction = () => {
/> />
<ActionRow <ActionRow
title={window.i18n('joinOpenGroup')} title={window.i18n('joinOpenGroup')}
ariaLabel={window.i18n('joinACommunity')} ariaLabel={'Join a community button'}
iconType={'communities'} iconType={'communities'}
onClick={openJoinCommunity} onClick={openJoinCommunity}
dataTestId="chooser-new-community" dataTestId="chooser-new-community"
/> />
<ActionRow <ActionRow
title={window.i18n('sessionInviteAFriend')} title={window.i18n('sessionInviteAFriend')}
ariaLabel={window.i18n('sessionInviteAFriend')} ariaLabel={'Invite a friend button'}
iconType={'addUser'} iconType={'addUser'}
onClick={inviteAFriend} onClick={inviteAFriend}
dataTestId="invite-a-friend" dataTestId="chooser-invite-friend"
/> />
</StyledActionRowContainer> </StyledActionRowContainer>
<SpacerSM /> <SpacerSM />

Loading…
Cancel
Save