From 8d946da4907908024562af7a788500e002225b72 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Tue, 4 Oct 2022 16:27:15 +1100 Subject: [PATCH] fix: click on toast does not close dialogs --- ts/components/SessionWrapperModal.tsx | 12 +++------- ts/components/basic/SessionToast.tsx | 14 +++++------- ts/components/leftpane/ActionsPanel.tsx | 3 --- ts/components/leftpane/LeftPane.tsx | 2 ++ ts/components/registration/SignInTab.tsx | 28 +++++++++++++++--------- ts/components/registration/SignUpTab.tsx | 15 ++----------- 6 files changed, 31 insertions(+), 43 deletions(-) diff --git a/ts/components/SessionWrapperModal.tsx b/ts/components/SessionWrapperModal.tsx index 6b650900a..d808ad266 100644 --- a/ts/components/SessionWrapperModal.tsx +++ b/ts/components/SessionWrapperModal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react'; +import React, { useRef } from 'react'; import classNames from 'classnames'; import { SessionIconButton } from './icon/'; @@ -63,17 +63,11 @@ export const SessionWrapperModal = (props: SessionWrapperModalType) => { } }; - useEffect(() => { - document.addEventListener('mousedown', handleClick); - - return () => { - document.removeEventListener('mousedown', handleClick); - }; - }, []); - return (
diff --git a/ts/components/basic/SessionToast.tsx b/ts/components/basic/SessionToast.tsx index 3231e3825..61db4b941 100644 --- a/ts/components/basic/SessionToast.tsx +++ b/ts/components/basic/SessionToast.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { Flex } from '../basic/Flex'; import styled from 'styled-components'; -import { noop } from 'lodash'; import { SessionIcon, SessionIconType } from '../icon'; +import { noop } from 'lodash'; export enum SessionToastType { Info = 'info', @@ -44,6 +44,8 @@ const IconDiv = styled.div` padding-inline-end: var(--margins-xs); `; +// tslint:disable: use-simple-attributes + export const SessionToast = (props: Props) => { const { title, description, type, icon } = props; @@ -71,14 +73,10 @@ export const SessionToast = (props: Props) => { } } + const onToastClick = props?.onToastClick || noop; + return ( - // tslint:disable-next-line: use-simple-attributes - + diff --git a/ts/components/leftpane/ActionsPanel.tsx b/ts/components/leftpane/ActionsPanel.tsx index a0cf34f39..ad1f782d2 100644 --- a/ts/components/leftpane/ActionsPanel.tsx +++ b/ts/components/leftpane/ActionsPanel.tsx @@ -39,7 +39,6 @@ import { getSwarmPollingInstance } from '../../session/apis/snode_api'; import { forceRefreshRandomSnodePool } from '../../session/apis/snode_api/snodePool'; import { Avatar, AvatarSize } from '../avatar/Avatar'; import { SessionIconButton } from '../icon'; -import { SessionToastContainer } from '../SessionToastContainer'; import { LeftPaneSectionContainer } from './LeftPaneSectionContainer'; import { ipcRenderer } from 'electron'; import { UserUtils } from '../../session/utils'; @@ -277,8 +276,6 @@ export const ActionsPanel = () => {
- -
diff --git a/ts/components/leftpane/LeftPane.tsx b/ts/components/leftpane/LeftPane.tsx index fdeae0b7c..376719647 100644 --- a/ts/components/leftpane/LeftPane.tsx +++ b/ts/components/leftpane/LeftPane.tsx @@ -12,6 +12,7 @@ import { CallInFullScreenContainer } from '../calling/CallInFullScreenContainer' import { DraggableCallContainer } from '../calling/DraggableCallContainer'; import { IncomingCallDialog } from '../calling/IncomingCallDialog'; import { ModalContainer } from '../dialog/ModalContainer'; +import { SessionToastContainer } from '../SessionToastContainer'; import { ActionsPanel } from './ActionsPanel'; import { LeftPaneMessageSection } from './LeftPaneMessageSection'; import { LeftPaneSettingSection } from './LeftPaneSettingSection'; @@ -71,6 +72,7 @@ export const LeftPane = () => {
+ diff --git a/ts/components/registration/SignInTab.tsx b/ts/components/registration/SignInTab.tsx index ecb40feaf..eec08d732 100644 --- a/ts/components/registration/SignInTab.tsx +++ b/ts/components/registration/SignInTab.tsx @@ -96,6 +96,23 @@ const SignInButtons = (props: { ); }; +export function sanitizeDisplayNameOrToast( + displayName: string, + setDisplayName: (sanitized: string) => void, + setDisplayNameError: (error: string | undefined) => void +) { + try { + const sanitizedName = sanitizeSessionUsername(displayName); + const trimName = sanitizedName.trim(); + setDisplayName(sanitizedName); + setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined); + } catch (e) { + setDisplayName(displayName); + setDisplayNameError(window.i18n('displayNameTooLong')); + ToastUtils.pushToastError('toolong', window.i18n('displayNameTooLong')); + } +} + export const SignInTab = () => { const { setRegistrationPhase, signInMode, setSignInMode } = useContext(RegistrationContext); @@ -149,16 +166,7 @@ export const SignInTab = () => { displayName={displayName} handlePressEnter={continueYourSession} onDisplayNameChanged={(name: string) => { - try { - const sanitizedName = sanitizeSessionUsername(name); - const trimName = sanitizedName.trim(); - setDisplayName(sanitizedName); - setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined); - } catch (e) { - setDisplayName(name); - setDisplayNameError(window.i18n('displayNameTooLong')); - ToastUtils.pushToastError('toolong', window.i18n('displayNameTooLong')); - } + sanitizeDisplayNameOrToast(name, setDisplayName, setDisplayNameError); }} onSeedChanged={(seed: string) => { setRecoveryPhrase(seed); diff --git a/ts/components/registration/SignUpTab.tsx b/ts/components/registration/SignUpTab.tsx index 958f36927..586eb26a7 100644 --- a/ts/components/registration/SignUpTab.tsx +++ b/ts/components/registration/SignUpTab.tsx @@ -1,13 +1,11 @@ import React, { useContext, useEffect, useState } from 'react'; -import { ToastUtils } from '../../session/utils'; -import { sanitizeSessionUsername } from '../../session/utils/String'; import { Flex } from '../basic/Flex'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton'; import { SessionIdEditable } from '../basic/SessionIdEditable'; import { SessionIconButton } from '../icon'; import { RegistrationContext, RegistrationPhase, signUp } from './RegistrationStages'; import { RegistrationUserDetails } from './RegistrationUserDetails'; -import { SignInMode } from './SignInTab'; +import { sanitizeDisplayNameOrToast, SignInMode } from './SignInTab'; import { TermsAndConditions } from './TermsAndConditions'; export enum SignUpMode { @@ -145,16 +143,7 @@ export const SignUpTab = () => { displayName={displayName} handlePressEnter={signUpWithDetails} onDisplayNameChanged={(name: string) => { - try { - const sanitizedName = sanitizeSessionUsername(name); - const trimName = sanitizedName.trim(); - setDisplayName(sanitizedName); - setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined); - } catch (e) { - setDisplayName(name); - setDisplayNameError(window.i18n('displayNameTooLong')); - ToastUtils.pushToastError('toolong', window.i18n('displayNameTooLong')); - } + sanitizeDisplayNameOrToast(name, setDisplayName, setDisplayNameError); }} stealAutoFocus={true} />