diff --git a/ts/components/basic/PillContainer.tsx b/ts/components/basic/PillContainer.tsx index ab3a53a72..4509351fe 100644 --- a/ts/components/basic/PillContainer.tsx +++ b/ts/components/basic/PillContainer.tsx @@ -1,7 +1,8 @@ +import { ReactNode } from 'react'; import styled from 'styled-components'; type PillContainerProps = { - children: React.ReactNode; + children: ReactNode; margin?: string; padding?: string; onClick?: () => void; diff --git a/ts/components/basic/SessionInput.tsx b/ts/components/basic/SessionInput.tsx index 09b84b0d4..4cf524251 100644 --- a/ts/components/basic/SessionInput.tsx +++ b/ts/components/basic/SessionInput.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { ChangeEvent, useState } from 'react'; import classNames from 'classnames'; import { Noop } from '../../types/Util'; @@ -78,7 +78,7 @@ export const SessionInput = (props: Props) => { const correctType = forceShow ? 'text' : type; - const updateInputValue = (e: React.ChangeEvent) => { + const updateInputValue = (e: ChangeEvent) => { e.preventDefault(); const val = e.target.value; setInputValue(val); diff --git a/ts/components/basic/Text.tsx b/ts/components/basic/Text.tsx index 527cd9632..f53d54195 100644 --- a/ts/components/basic/Text.tsx +++ b/ts/components/basic/Text.tsx @@ -1,3 +1,4 @@ +import { ReactNode } from 'react'; import styled, { CSSProperties } from 'styled-components'; type TextProps = { @@ -25,9 +26,7 @@ export const Text = (props: TextProps) => { return {props.text}; }; -export const TextWithChildren = ( - props: Omit & { children: React.ReactNode } -) => { +export const TextWithChildren = (props: Omit & { children: ReactNode }) => { return {props.children}; }; diff --git a/ts/components/calling/CallButtons.tsx b/ts/components/calling/CallButtons.tsx index 7411d8ded..93532bd6e 100644 --- a/ts/components/calling/CallButtons.tsx +++ b/ts/components/calling/CallButtons.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { MouseEvent, useEffect, useState } from 'react'; import { contextMenu, Item, Menu } from 'react-contexify'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; @@ -40,7 +40,7 @@ const VideoInputMenu = ({ const showVideoInputMenu = ( currentConnectedCameras: Array, - e: React.MouseEvent + e: MouseEvent ) => { if (currentConnectedCameras.length === 0) { ToastUtils.pushNoCameraFound(); @@ -113,7 +113,7 @@ const AudioInputMenu = ({ const showAudioInputMenu = ( currentConnectedAudioInputs: Array, - e: React.MouseEvent + e: MouseEvent ) => { if (currentConnectedAudioInputs.length === 0) { ToastUtils.pushNoAudioInputFound(); @@ -182,7 +182,7 @@ const AudioOutputMenu = ({ const showAudioOutputMenu = ( currentConnectedAudioOutputs: Array, - e: React.MouseEvent + e: MouseEvent ) => { if (currentConnectedAudioOutputs.length === 0) { ToastUtils.pushNoAudioOutputFound(); diff --git a/ts/components/conversation/ContactName.tsx b/ts/components/conversation/ContactName.tsx index de6101070..687b7f4a7 100644 --- a/ts/components/conversation/ContactName.tsx +++ b/ts/components/conversation/ContactName.tsx @@ -28,7 +28,7 @@ export const ContactName = (props: Props) => { ? { fontWeight: 'bold', } - : {}) as React.CSSProperties; + : {}) as CSSProperties; const textProfile = profileName || name || convoName || window.i18n('anonymous'); return ( diff --git a/ts/components/conversation/SessionConversation.tsx b/ts/components/conversation/SessionConversation.tsx index b014ef0f1..da7fc9f60 100644 --- a/ts/components/conversation/SessionConversation.tsx +++ b/ts/components/conversation/SessionConversation.tsx @@ -4,7 +4,7 @@ import autoBind from 'auto-bind'; import { blobToArrayBuffer } from 'blob-util'; import loadImage from 'blueimp-load-image'; import classNames from 'classnames'; -import { Component, createRef } from 'react'; +import { Component, RefObject, createRef } from 'react'; import styled from 'styled-components'; import { CompositionBox, @@ -104,7 +104,7 @@ const ConvoLoadingSpinner = () => { }; export class SessionConversation extends Component { - private readonly messageContainerRef: React.RefObject; + private readonly messageContainerRef: RefObject; private dragCounter: number; private publicMembersRefreshTimeout?: NodeJS.Timeout; private readonly updateMemberList: () => any; diff --git a/ts/components/conversation/SessionMessagesListContainer.tsx b/ts/components/conversation/SessionMessagesListContainer.tsx index 7bfaff56b..e722dc208 100644 --- a/ts/components/conversation/SessionMessagesListContainer.tsx +++ b/ts/components/conversation/SessionMessagesListContainer.tsx @@ -3,7 +3,7 @@ import { contextMenu } from 'react-contexify'; import { connect } from 'react-redux'; import autoBind from 'auto-bind'; -import { Component, createContext } from 'react'; +import { Component, RefObject, createContext } from 'react'; import styled from 'styled-components'; import { ReduxConversationType, @@ -26,7 +26,7 @@ import { SessionMessagesList } from './SessionMessagesList'; import { TypingBubble } from './TypingBubble'; export type SessionMessageListProps = { - messageContainerRef: React.RefObject; + messageContainerRef: RefObject; }; export const messageContainerDomID = 'messages-container'; diff --git a/ts/components/conversation/message/message-content/MessageContent.tsx b/ts/components/conversation/message/message-content/MessageContent.tsx index c825d0d14..7d6949868 100644 --- a/ts/components/conversation/message/message-content/MessageContent.tsx +++ b/ts/components/conversation/message/message-content/MessageContent.tsx @@ -1,7 +1,14 @@ import classNames from 'classnames'; import { isEmpty } from 'lodash'; import moment from 'moment'; -import { createContext, useCallback, useContext, useLayoutEffect, useState } from 'react'; +import { + MouseEvent, + createContext, + useCallback, + useContext, + useLayoutEffect, + useState, +} from 'react'; import { InView } from 'react-intersection-observer'; import { useSelector } from 'react-redux'; import styled from 'styled-components'; @@ -39,7 +46,7 @@ type Props = { // TODO not too sure what is this doing? It is not preventDefault() // or stopPropagation() so I think this is never cancelling a click event? -function onClickOnMessageInnerContainer(event: React.MouseEvent) { +function onClickOnMessageInnerContainer(event: MouseEvent) { const selection = window.getSelection(); // Text is being selected if (selection && selection.type === 'Range') { diff --git a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx index 68bf5a224..ea364de2f 100644 --- a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx +++ b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { useCallback, useState } from 'react'; +import { MouseEvent, useCallback, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; import { replyToMessage } from '../../../../interactions/conversationInteractions'; @@ -62,7 +62,7 @@ export const MessageContentWithStatuses = (props: Props) => { const multiSelectMode = useSelector(isMessageSelectionMode); const onClickOnMessageOuterContainer = useCallback( - (event: React.MouseEvent) => { + (event: MouseEvent) => { if (multiSelectMode && props?.messageId) { event.preventDefault(); event.stopPropagation(); @@ -72,7 +72,7 @@ export const MessageContentWithStatuses = (props: Props) => { [dispatch, props?.messageId, multiSelectMode] ); - const onDoubleClickReplyToMessage = (e: React.MouseEvent) => { + const onDoubleClickReplyToMessage = (e: MouseEvent) => { const currentSelection = window.getSelection(); const currentSelectionString = currentSelection?.toString() || undefined; diff --git a/ts/components/conversation/message/message-content/MessageQuote.tsx b/ts/components/conversation/message/message-content/MessageQuote.tsx index 5dc2d3285..7d128854c 100644 --- a/ts/components/conversation/message/message-content/MessageQuote.tsx +++ b/ts/components/conversation/message/message-content/MessageQuote.tsx @@ -1,5 +1,6 @@ import { isEmpty, toNumber } from 'lodash'; +import { MouseEvent } from 'react'; import { useSelector } from 'react-redux'; import { Data } from '../../../../data/data'; import { MessageRenderingProps } from '../../../../models/messageType'; @@ -34,7 +35,7 @@ export const MessageQuote = (props: Props) => { quote.referencedMessageNotFound || !quote?.author || !quote.id || !quote.convoId ); - const onQuoteClick = async (event: React.MouseEvent) => { + const onQuoteClick = async (event: MouseEvent) => { event.preventDefault(); event.stopPropagation(); diff --git a/ts/components/conversation/message/message-content/Quote.tsx b/ts/components/conversation/message/message-content/Quote.tsx index d187f8711..0075ce10e 100644 --- a/ts/components/conversation/message/message-content/Quote.tsx +++ b/ts/components/conversation/message/message-content/Quote.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import { noop } from 'lodash'; -import { useState } from 'react'; +import { MouseEvent, useState } from 'react'; import * as MIME from '../../../../types/MIME'; import * as GoogleChrome from '../../../../util/GoogleChrome'; @@ -27,7 +27,7 @@ export type QuotePropsWithoutListener = { }; export type QuotePropsWithListener = QuotePropsWithoutListener & { - onClick?: (e: React.MouseEvent) => void; + onClick?: (e: MouseEvent) => void; }; export interface QuotedAttachmentType { diff --git a/ts/components/conversation/message/message-content/quote/Quote.tsx b/ts/components/conversation/message/message-content/quote/Quote.tsx index 43f07f78a..5181e2e1d 100644 --- a/ts/components/conversation/message/message-content/quote/Quote.tsx +++ b/ts/components/conversation/message/message-content/quote/Quote.tsx @@ -51,7 +51,7 @@ export type QuoteProps = { text?: string; attachment?: QuotedAttachmentType; - onClick?: (e: React.MouseEvent) => void; + onClick?: (e: MouseEvent) => void; }; export interface QuotedAttachmentThumbnailType { diff --git a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx index 550b2033e..1f712b518 100644 --- a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx +++ b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import { isNil, isString, toNumber } from 'lodash'; -import { useCallback, useEffect, useState } from 'react'; +import { MouseEvent, useCallback, useEffect, useState } from 'react'; import { contextMenu } from 'react-contexify'; import { useSelector } from 'react-redux'; import styled, { keyframes } from 'styled-components'; @@ -85,7 +85,7 @@ export const GenericReadableMessage = (props: Props) => { }, [isRightClicked]); const handleContextMenu = useCallback( - (e: React.MouseEvent) => { + (e: MouseEvent) => { // this is quite dirty but considering that we want the context menu of the message to show on click on the attachment // and the context menu save attachment item to save the right attachment I did not find a better way for now. diff --git a/ts/components/conversation/message/message-item/ReadableMessage.tsx b/ts/components/conversation/message/message-item/ReadableMessage.tsx index 6f82ebfd6..a7f3c0084 100644 --- a/ts/components/conversation/message/message-item/ReadableMessage.tsx +++ b/ts/components/conversation/message/message-item/ReadableMessage.tsx @@ -1,7 +1,9 @@ import { debounce, noop } from 'lodash'; import { AriaRole, + MouseEvent, MouseEventHandler, + ReactNode, useCallback, useContext, useLayoutEffect, @@ -31,7 +33,7 @@ import { useSelectedConversationKey } from '../../../../state/selectors/selected import { ScrollToLoadedMessageContext } from '../../SessionMessagesListContainer'; export type ReadableMessageProps = { - children: React.ReactNode; + children: ReactNode; messageId: string; className?: string; receivedAt: number | undefined; @@ -40,7 +42,7 @@ export type ReadableMessageProps = { onDoubleClickCapture?: MouseEventHandler; role?: AriaRole; dataTestId: string; - onContextMenu?: (e: React.MouseEvent) => void; + onContextMenu?: (e: MouseEvent) => void; isControlMessage?: boolean; }; diff --git a/ts/components/dialog/BanOrUnbanUserDialog.tsx b/ts/components/dialog/BanOrUnbanUserDialog.tsx index 3342976e0..00babe4e9 100644 --- a/ts/components/dialog/BanOrUnbanUserDialog.tsx +++ b/ts/components/dialog/BanOrUnbanUserDialog.tsx @@ -1,4 +1,4 @@ -import { useRef, useState } from 'react'; +import { ChangeEvent, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useFocusMount } from '../../hooks/useFocusMount'; @@ -108,7 +108,7 @@ export const BanOrUnBanUserDialog = (props: { const chatName = convo.getNicknameOrRealUsernameOrPlaceholder(); const title = `${isBan ? window.i18n('banUser') : window.i18n('unbanUser')}: ${chatName}`; - const onPubkeyBoxChanges = (e: React.ChangeEvent) => { + const onPubkeyBoxChanges = (e: ChangeEvent) => { setInputBoxValue(e.target.value?.trim() || ''); }; diff --git a/ts/components/icon/DropDownAndToggleButton.tsx b/ts/components/icon/DropDownAndToggleButton.tsx index a441b99fe..d53d0ae3a 100644 --- a/ts/components/icon/DropDownAndToggleButton.tsx +++ b/ts/components/icon/DropDownAndToggleButton.tsx @@ -1,9 +1,10 @@ +import { MouseEvent } from 'react'; import { contextMenu } from 'react-contexify'; import styled from 'styled-components'; type SProps = { - onArrowClick: (e: React.MouseEvent) => void; - onMainButtonClick: (e: React.MouseEvent) => void; + onArrowClick: (e: MouseEvent) => void; + onMainButtonClick: (e: MouseEvent) => void; isMuted?: boolean; isFullScreen?: boolean; iconType: 'microphone' | 'camera' | 'volume'; @@ -85,12 +86,12 @@ const MicrophoneIcon = ( export const DropDownAndToggleButton = (props: SProps) => { const { iconType, isFullScreen = false, onArrowClick, onMainButtonClick, isMuted } = props; - const arrowClickHandler = (e: React.MouseEvent) => { + const arrowClickHandler = (e: MouseEvent) => { e.stopPropagation(); onArrowClick(e); }; - const mainButtonClickHandler = (e: React.MouseEvent) => { + const mainButtonClickHandler = (e: MouseEvent) => { e.stopPropagation(); contextMenu.hideAll(); onMainButtonClick(e); diff --git a/ts/components/leftpane/MessageRequestsBanner.tsx b/ts/components/leftpane/MessageRequestsBanner.tsx index 159340efc..b3ce9b880 100644 --- a/ts/components/leftpane/MessageRequestsBanner.tsx +++ b/ts/components/leftpane/MessageRequestsBanner.tsx @@ -1,3 +1,4 @@ +import { MouseEvent } from 'react'; import { contextMenu } from 'react-contexify'; import { createPortal } from 'react-dom'; import { useSelector } from 'react-redux'; @@ -103,7 +104,7 @@ export const MessageRequestsBanner = (props: { handleOnClick: () => any }) => { }); }; - const openRequests = (e: React.MouseEvent) => { + const openRequests = (e: MouseEvent) => { if (e.button === 0) { handleOnClick(); } diff --git a/ts/components/leftpane/conversation-list-item/ConversationListItem.tsx b/ts/components/leftpane/conversation-list-item/ConversationListItem.tsx index f5d418a9b..241b4b137 100644 --- a/ts/components/leftpane/conversation-list-item/ConversationListItem.tsx +++ b/ts/components/leftpane/conversation-list-item/ConversationListItem.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import { isNil } from 'lodash'; -import { useCallback } from 'react'; +import { MouseEvent, useCallback } from 'react'; import { contextMenu } from 'react-contexify'; import { createPortal } from 'react-dom'; import { useDispatch, useSelector } from 'react-redux'; @@ -85,7 +85,7 @@ const ConversationListItemInner = (props: Props) => { const triggerId = `${key}-ctxmenu`; const openConvo = useCallback( - (e: React.MouseEvent) => { + (e: MouseEvent) => { // mousedown is invoked sooner than onClick, but for both right and left click if (e.button === 0) { void openConversationWithMessages({ conversationKey: conversationId, messageId: null }); diff --git a/ts/components/leftpane/conversation-list-item/HeaderItem.tsx b/ts/components/leftpane/conversation-list-item/HeaderItem.tsx index 6588dc4b8..a34617f5a 100644 --- a/ts/components/leftpane/conversation-list-item/HeaderItem.tsx +++ b/ts/components/leftpane/conversation-list-item/HeaderItem.tsx @@ -1,5 +1,6 @@ import classNames from 'classnames'; +import { MouseEvent } from 'react'; import { useSelector } from 'react-redux'; import styled from 'styled-components'; import { Data } from '../../../data/data'; @@ -114,10 +115,7 @@ const MentionAtSymbol = styled.span` /** * When clicking on the `@` symbol of a conversation, we open the conversation to the first unread message tagging us (with the @pubkey syntax) */ -async function openConvoToLastMention( - e: React.MouseEvent, - conversationId: string -) { +async function openConvoToLastMention(e: MouseEvent, conversationId: string) { e.stopPropagation(); e.preventDefault(); diff --git a/ts/components/lightbox/Lightbox.tsx b/ts/components/lightbox/Lightbox.tsx index 4e2577d0b..f7ab461b3 100644 --- a/ts/components/lightbox/Lightbox.tsx +++ b/ts/components/lightbox/Lightbox.tsx @@ -1,4 +1,4 @@ -import { useRef } from 'react'; +import { CSSProperties, MouseEvent, MutableRefObject, useRef } from 'react'; import { isUndefined } from 'lodash'; import { useDispatch } from 'react-redux'; @@ -46,7 +46,7 @@ const styles = { top: 0, bottom: 0, backgroundColor: 'var(--lightbox-background-color)', - } as React.CSSProperties, + } as CSSProperties, mainContainer: { display: 'flex', flexDirection: 'row', @@ -58,13 +58,13 @@ const styles = { minHeight: 0, overflow: 'hidden', minWidth: 0, - } as React.CSSProperties, + } as CSSProperties, objectContainer: { position: 'relative', flexGrow: 1, display: 'inline-flex', justifyContent: 'center', - } as React.CSSProperties, + } as CSSProperties, objectParentContainer: { flexGrow: 1, textAlign: 'center' as const, @@ -76,7 +76,7 @@ const styles = { maxWidth: '80vw', maxHeight: '80vh', objectFit: 'contain', - } as React.CSSProperties, + } as CSSProperties, caption: { position: 'absolute', bottom: 0, @@ -88,7 +88,7 @@ const styles = { paddingLeft: '3em', paddingRight: '3em', backgroundColor: 'var(--lightbox-caption-background-color)', - } as React.CSSProperties, + } as CSSProperties, controlsOffsetPlaceholder: { width: CONTROLS_WIDTH, marginRight: CONTROLS_SPACING, @@ -101,7 +101,7 @@ const styles = { flexDirection: 'column', marginLeft: CONTROLS_SPACING, justifyContent: 'space-between', - } as React.CSSProperties, + } as CSSProperties, navigationContainer: { flexShrink: 0, display: 'flex', @@ -109,7 +109,7 @@ const styles = { justifyContent: 'center', padding: 10, height: '50px', // force it so the buttons stick to the bottom - } as React.CSSProperties, + } as CSSProperties, saveButton: { marginTop: 10, }, @@ -134,7 +134,7 @@ const StyledIconButton = styled.div` interface IconButtonProps { onClick?: () => void; - style?: React.CSSProperties; + style?: CSSProperties; type: 'save' | 'close' | 'previous' | 'next'; } @@ -186,7 +186,7 @@ const Icon = ({ onClick, url, }: { - onClick?: (event: React.MouseEvent) => void; + onClick?: (event: MouseEvent) => void; url: string; }) => (
; + renderedRef: MutableRefObject; onObjectClick: (event: any) => any; }) => { const { urlToLoad } = useEncryptedFileFetch(objectURL, contentType, false); @@ -280,7 +280,7 @@ export const Lightbox = (props: Props) => { dispatch(showLightBox(undefined)); }; - const onContainerClick = (event: React.MouseEvent) => { + const onContainerClick = (event: MouseEvent) => { if (renderedRef && event.target === renderedRef.current) { return; } diff --git a/ts/components/registration/AccentText.tsx b/ts/components/registration/AccentText.tsx index 8e7920e88..97dc8b6ed 100644 --- a/ts/components/registration/AccentText.tsx +++ b/ts/components/registration/AccentText.tsx @@ -1,4 +1,6 @@ -export const AccentText: React.FC = () => ( +import { FC } from 'react'; + +export const AccentText: FC = () => (
{window.i18n('beginYourSession')}
diff --git a/ts/components/settings/SessionSettingListItem.tsx b/ts/components/settings/SessionSettingListItem.tsx index 5db31b0a5..9c89fafff 100644 --- a/ts/components/settings/SessionSettingListItem.tsx +++ b/ts/components/settings/SessionSettingListItem.tsx @@ -1,5 +1,6 @@ import styled from 'styled-components'; +import { ReactNode } from 'react'; import { Noop } from '../../types/Util'; import { SessionButton, @@ -75,7 +76,7 @@ const StyledSettingItemClickable = styled(StyledSettingItemInline)` export const SettingsTitleAndDescription = (props: { title?: string; description?: string; - childrenDescription?: React.ReactNode; + childrenDescription?: ReactNode; }) => { const { description, childrenDescription, title } = props; return ( @@ -95,8 +96,8 @@ export const SessionSettingsItemWrapper = (props: { inline: boolean; title?: string; description?: string; - children?: React.ReactNode; - childrenDescription?: React.ReactNode; + children?: ReactNode; + childrenDescription?: ReactNode; }) => { const { inline, children, description, title, childrenDescription } = props; const ComponentToRender = inline ? StyledSettingItemInline : StyledSettingItem; @@ -128,7 +129,7 @@ export const SessionToggleWithDescription = (props: { active: boolean; onClickToggle: () => void; confirmationDialogParams?: SessionConfirmDialogProps; - childrenDescription?: React.ReactNode; // if set, those elements will be appended next to description field (only used for typing message settings as of now) + childrenDescription?: ReactNode; // if set, those elements will be appended next to description field (only used for typing message settings as of now) dataTestId?: string; }) => { const { diff --git a/ts/components/settings/SessionSettings.tsx b/ts/components/settings/SessionSettings.tsx index dbd3607ef..e71235639 100644 --- a/ts/components/settings/SessionSettings.tsx +++ b/ts/components/settings/SessionSettings.tsx @@ -3,7 +3,7 @@ import { shell } from 'electron'; import autoBind from 'auto-bind'; import styled from 'styled-components'; -import { Component, createRef } from 'react'; +import { Component, RefObject, createRef } from 'react'; import { SettingsHeader } from './SessionSettingsHeader'; import { SessionIconButton } from '../icon'; @@ -161,7 +161,7 @@ const StyledSettingsList = styled.div` `; export class SessionSettingsView extends Component { - public settingsViewRef: React.RefObject; + public settingsViewRef: RefObject; public constructor(props: any) { super(props); diff --git a/ts/hooks/useFocusMount.ts b/ts/hooks/useFocusMount.ts index 1e05210be..6a5418fce 100644 --- a/ts/hooks/useFocusMount.ts +++ b/ts/hooks/useFocusMount.ts @@ -1,6 +1,7 @@ +import { RefObject } from 'react'; import useMount from 'react-use/lib/useMount'; -export function useFocusMount(ref: React.RefObject, isEditable?: boolean) { +export function useFocusMount(ref: RefObject, isEditable?: boolean) { useMount(() => { if (isEditable) { ref?.current?.focus();