diff --git a/src/actions/moderation.tsx b/src/actions/moderation.tsx index a01d9f4fd..e461fe011 100644 --- a/src/actions/moderation.tsx +++ b/src/actions/moderation.tsx @@ -2,7 +2,6 @@ import alertTriangleIcon from '@tabler/icons/outline/alert-triangle.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import userMinusIcon from '@tabler/icons/outline/user-minus.svg'; import userOffIcon from '@tabler/icons/outline/user-off.svg'; -import React from 'react'; import { defineMessages, IntlShape } from 'react-intl'; import { fetchAccountByUsername } from 'soapbox/actions/accounts'; diff --git a/src/components/__mocks__/react-inlinesvg.tsx b/src/components/__mocks__/react-inlinesvg.tsx index f9a7cd892..7169c13a7 100644 --- a/src/components/__mocks__/react-inlinesvg.tsx +++ b/src/components/__mocks__/react-inlinesvg.tsx @@ -1,4 +1,3 @@ -import React from 'react'; interface IInlineSVG { loader?: JSX.Element; diff --git a/src/components/account-search.tsx b/src/components/account-search.tsx index 9dbac4fbb..673cd5d66 100644 --- a/src/components/account-search.tsx +++ b/src/components/account-search.tsx @@ -1,7 +1,7 @@ import searchIcon from '@tabler/icons/outline/search.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import AutosuggestAccountInput from 'soapbox/components/autosuggest-account-input'; diff --git a/src/components/account.test.tsx b/src/components/account.test.tsx index ea4cf3105..ef1c4cf74 100644 --- a/src/components/account.test.tsx +++ b/src/components/account.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildAccount } from 'soapbox/jest/factory'; diff --git a/src/components/account.tsx b/src/components/account.tsx index 5f2244b43..e19936af1 100644 --- a/src/components/account.tsx +++ b/src/components/account.tsx @@ -1,5 +1,5 @@ import pencilIcon from '@tabler/icons/outline/pencil.svg'; -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/components/animated-number.tsx b/src/components/animated-number.tsx index ea5a82411..4fbe7eff2 100644 --- a/src/components/animated-number.tsx +++ b/src/components/animated-number.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedNumber } from 'react-intl'; import { TransitionMotion, spring } from 'react-motion'; diff --git a/src/components/announcements/announcement-content.tsx b/src/components/announcements/announcement-content.tsx index 07908c9b9..c1f8fb5d9 100644 --- a/src/components/announcements/announcement-content.tsx +++ b/src/components/announcements/announcement-content.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { useHistory } from 'react-router-dom'; import { getTextDirection } from 'soapbox/utils/rtl'; diff --git a/src/components/announcements/announcement.tsx b/src/components/announcements/announcement.tsx index 0bacdd60c..47a4d420e 100644 --- a/src/components/announcements/announcement.tsx +++ b/src/components/announcements/announcement.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedDate } from 'react-intl'; import { Stack, Text } from 'soapbox/components/ui'; diff --git a/src/components/announcements/announcements-panel.tsx b/src/components/announcements/announcements-panel.tsx index 966df4479..5ef896b70 100644 --- a/src/components/announcements/announcements-panel.tsx +++ b/src/components/announcements/announcements-panel.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import ReactSwipeableViews from 'react-swipeable-views'; import { createSelector } from 'reselect'; diff --git a/src/components/announcements/emoji.tsx b/src/components/announcements/emoji.tsx index 1f6f8ed18..862014e13 100644 --- a/src/components/announcements/emoji.tsx +++ b/src/components/announcements/emoji.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import unicodeMapping from 'soapbox/features/emoji/mapping'; import { useSettings } from 'soapbox/hooks'; diff --git a/src/components/announcements/reaction.tsx b/src/components/announcements/reaction.tsx index 2bfdb8120..23a6d1ef6 100644 --- a/src/components/announcements/reaction.tsx +++ b/src/components/announcements/reaction.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { useAnnouncements } from 'soapbox/api/hooks/announcements'; import AnimatedNumber from 'soapbox/components/animated-number'; diff --git a/src/components/announcements/reactions-bar.tsx b/src/components/announcements/reactions-bar.tsx index 694e1ea2f..ea778d408 100644 --- a/src/components/announcements/reactions-bar.tsx +++ b/src/components/announcements/reactions-bar.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { TransitionMotion, spring } from 'react-motion'; import { useAnnouncements } from 'soapbox/api/hooks/announcements'; diff --git a/src/components/attachment-thumbs.tsx b/src/components/attachment-thumbs.tsx index 6ac0c0e30..17fc301dc 100644 --- a/src/components/attachment-thumbs.tsx +++ b/src/components/attachment-thumbs.tsx @@ -1,4 +1,4 @@ -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; import { openModal } from 'soapbox/actions/modals'; import { MediaGallery } from 'soapbox/features/ui/util/async-components'; diff --git a/src/components/authorize-reject-buttons.tsx b/src/components/authorize-reject-buttons.tsx index fcf80d1ef..c06ddb2be 100644 --- a/src/components/authorize-reject-buttons.tsx +++ b/src/components/authorize-reject-buttons.tsx @@ -2,7 +2,7 @@ import playerStopFilledIcon from '@tabler/icons/filled/player-stop.svg'; import checkIcon from '@tabler/icons/outline/check.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { HStack, IconButton, Text } from 'soapbox/components/ui'; diff --git a/src/components/autosuggest-account-input.tsx b/src/components/autosuggest-account-input.tsx index 1b7c05499..843f419bb 100644 --- a/src/components/autosuggest-account-input.tsx +++ b/src/components/autosuggest-account-input.tsx @@ -1,6 +1,6 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import throttle from 'lodash/throttle'; -import React, { useState, useRef, useCallback, useEffect } from 'react'; +import { useState, useRef, useCallback, useEffect } from 'react'; import { accountSearch } from 'soapbox/actions/accounts'; import AutosuggestInput, { AutoSuggestion } from 'soapbox/components/autosuggest-input'; diff --git a/src/components/autosuggest-emoji.test.tsx b/src/components/autosuggest-emoji.test.tsx index e498244de..265866c31 100644 --- a/src/components/autosuggest-emoji.test.tsx +++ b/src/components/autosuggest-emoji.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/autosuggest-emoji.tsx b/src/components/autosuggest-emoji.tsx index 26f507b72..6eaaf4110 100644 --- a/src/components/autosuggest-emoji.tsx +++ b/src/components/autosuggest-emoji.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { isCustomEmoji } from 'soapbox/features/emoji'; import unicodeMapping from 'soapbox/features/emoji/mapping'; diff --git a/src/components/autosuggest-input.tsx b/src/components/autosuggest-input.tsx index 7cf928419..5b9bd6373 100644 --- a/src/components/autosuggest-input.tsx +++ b/src/components/autosuggest-input.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React, { PureComponent } from 'react'; +import { PureComponent } from 'react'; import AutosuggestEmoji from 'soapbox/components/autosuggest-emoji'; import Icon from 'soapbox/components/icon'; diff --git a/src/components/autosuggest-location.tsx b/src/components/autosuggest-location.tsx index c885e05a7..026af6b47 100644 --- a/src/components/autosuggest-location.tsx +++ b/src/components/autosuggest-location.tsx @@ -2,7 +2,6 @@ import buildingCommunityIcon from '@tabler/icons/outline/building-community.svg' import homeIcon from '@tabler/icons/outline/home-2.svg'; import mapPinIcon from '@tabler/icons/outline/map-pin.svg'; import roadIcon from '@tabler/icons/outline/road.svg'; -import React from 'react'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/components/avatar-stack.tsx b/src/components/avatar-stack.tsx index e9193d344..4636e3a5f 100644 --- a/src/components/avatar-stack.tsx +++ b/src/components/avatar-stack.tsx @@ -1,6 +1,5 @@ import clsx from 'clsx'; import { List as ImmutableList, OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React from 'react'; import { Avatar, HStack } from 'soapbox/components/ui'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/components/badge.test.tsx b/src/components/badge.test.tsx index f41cae951..ea858fb34 100644 --- a/src/components/badge.test.tsx +++ b/src/components/badge.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/badge.tsx b/src/components/badge.tsx index e5476ca81..8f9d6112b 100644 --- a/src/components/badge.tsx +++ b/src/components/badge.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { hexToHsl } from 'soapbox/utils/theme'; diff --git a/src/components/big-card.tsx b/src/components/big-card.tsx index b816d047e..06c9459ac 100644 --- a/src/components/big-card.tsx +++ b/src/components/big-card.tsx @@ -1,5 +1,4 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { Card, CardBody, Stack, Text } from 'soapbox/components/ui'; import IconButton from 'soapbox/components/ui/icon-button/icon-button'; diff --git a/src/components/birthday-input.tsx b/src/components/birthday-input.tsx index 0c4700d83..bec19d1f5 100644 --- a/src/components/birthday-input.tsx +++ b/src/components/birthday-input.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useInstance, useFeatures } from 'soapbox/hooks'; diff --git a/src/components/birthday-panel.tsx b/src/components/birthday-panel.tsx index f1f31d94e..dd4da5d42 100644 --- a/src/components/birthday-panel.tsx +++ b/src/components/birthday-panel.tsx @@ -1,5 +1,5 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React, { useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchBirthdayReminders } from 'soapbox/actions/accounts'; @@ -37,7 +37,7 @@ const BirthdayPanel = ({ limit }: IBirthdayPanel) => { }); }; - React.useEffect(() => { + useEffect(() => { handleFetchBirthdayReminders(); return () => { diff --git a/src/components/blurhash.tsx b/src/components/blurhash.tsx index c492b0e05..7cfa6e94c 100644 --- a/src/components/blurhash.tsx +++ b/src/components/blurhash.tsx @@ -1,5 +1,5 @@ import { decode } from 'blurhash'; -import React, { useRef, useEffect } from 'react'; +import { useRef, useEffect, memo } from 'react'; interface IBlurhash { /** Hash to render */ @@ -56,4 +56,4 @@ const Blurhash: React.FC = ({ ); }; -export default React.memo(Blurhash); +export default memo(Blurhash); diff --git a/src/components/copyable-input.tsx b/src/components/copyable-input.tsx index 90089927c..036209db7 100644 --- a/src/components/copyable-input.tsx +++ b/src/components/copyable-input.tsx @@ -1,4 +1,4 @@ -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { Button, HStack, Input } from './ui'; diff --git a/src/components/display-name-inline.tsx b/src/components/display-name-inline.tsx index 0f754fe07..9c6369a86 100644 --- a/src/components/display-name-inline.tsx +++ b/src/components/display-name-inline.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useSoapboxConfig } from 'soapbox/hooks'; diff --git a/src/components/display-name.test.tsx b/src/components/display-name.test.tsx index 60cd35590..cfc10a9ed 100644 --- a/src/components/display-name.test.tsx +++ b/src/components/display-name.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildAccount } from 'soapbox/jest/factory'; diff --git a/src/components/display-name.tsx b/src/components/display-name.tsx index 130e1f0df..a72a32d2d 100644 --- a/src/components/display-name.tsx +++ b/src/components/display-name.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import HoverRefWrapper from 'soapbox/components/hover-ref-wrapper'; import { useSoapboxConfig } from 'soapbox/hooks'; diff --git a/src/components/domain.tsx b/src/components/domain.tsx index 77b71189d..a25a2ed06 100644 --- a/src/components/domain.tsx +++ b/src/components/domain.tsx @@ -1,5 +1,4 @@ import lockOpenIcon from '@tabler/icons/outline/lock-open.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { unblockDomain } from 'soapbox/actions/domain-blocks'; diff --git a/src/components/dropdown-menu/dropdown-menu-item.tsx b/src/components/dropdown-menu/dropdown-menu-item.tsx index e2ac9f333..2db996589 100644 --- a/src/components/dropdown-menu/dropdown-menu-item.tsx +++ b/src/components/dropdown-menu/dropdown-menu-item.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { useHistory } from 'react-router-dom'; import { Counter, Icon } from '../ui'; diff --git a/src/components/dropdown-menu/dropdown-menu.tsx b/src/components/dropdown-menu/dropdown-menu.tsx index 92fecd6c9..59bba080d 100644 --- a/src/components/dropdown-menu/dropdown-menu.tsx +++ b/src/components/dropdown-menu/dropdown-menu.tsx @@ -2,7 +2,7 @@ import { offset, Placement, useFloating, flip, arrow, shift } from '@floating-ui import dotsIcon from '@tabler/icons/outline/dots.svg'; import clsx from 'clsx'; import { supportsPassiveEvents } from 'detect-passive-events'; -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { cloneElement, useEffect, useMemo, useRef, useState } from 'react'; import { useHistory } from 'react-router-dom'; import { closeDropdownMenu as closeDropdownMenuRedux, openDropdownMenu } from 'soapbox/actions/dropdown-menu'; @@ -269,7 +269,7 @@ const DropdownMenu = (props: IDropdownMenu) => { return ( <> {children ? ( - React.cloneElement(children, { + cloneElement(children, { disabled, onClick: handleClick, onKeyPress: handleKeyPress, diff --git a/src/components/emoji-graphic.tsx b/src/components/emoji-graphic.tsx index 59bba2528..02abea12b 100644 --- a/src/components/emoji-graphic.tsx +++ b/src/components/emoji-graphic.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Emoji from 'soapbox/components/ui/emoji/emoji'; diff --git a/src/components/event-preview.tsx b/src/components/event-preview.tsx index 50f06d9ba..f22d80d8a 100644 --- a/src/components/event-preview.tsx +++ b/src/components/event-preview.tsx @@ -1,7 +1,6 @@ import mapPinIcon from '@tabler/icons/outline/map-pin.svg'; import userIcon from '@tabler/icons/outline/user.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import EventActionButton from 'soapbox/features/event/components/event-action-button'; diff --git a/src/components/extended-video-player.tsx b/src/components/extended-video-player.tsx index e0512588c..bbab91384 100644 --- a/src/components/extended-video-player.tsx +++ b/src/components/extended-video-player.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { isIOS } from 'soapbox/is-mobile'; diff --git a/src/components/fork-awesome-icon.tsx b/src/components/fork-awesome-icon.tsx index 09d5c8edb..b4a39a8a7 100644 --- a/src/components/fork-awesome-icon.tsx +++ b/src/components/fork-awesome-icon.tsx @@ -6,7 +6,6 @@ */ import clsx from 'clsx'; -import React from 'react'; export interface IForkAwesomeIcon extends React.HTMLAttributes { id: string; diff --git a/src/components/gdpr-banner.tsx b/src/components/gdpr-banner.tsx index 98cf3ac53..366b43359 100644 --- a/src/components/gdpr-banner.tsx +++ b/src/components/gdpr-banner.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Banner, Button, HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/components/group-card.tsx b/src/components/group-card.tsx index ebcb77161..dc06d7fd8 100644 --- a/src/components/group-card.tsx +++ b/src/components/group-card.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import GroupHeaderImage from 'soapbox/features/group/components/group-header-image'; import GroupMemberCount from 'soapbox/features/group/components/group-member-count'; diff --git a/src/components/groups/group-avatar.tsx b/src/components/groups/group-avatar.tsx index 13b40d237..856c63fa7 100644 --- a/src/components/groups/group-avatar.tsx +++ b/src/components/groups/group-avatar.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { GroupRoles } from 'soapbox/schemas/group-member'; diff --git a/src/components/groups/popover/group-popover.tsx b/src/components/groups/popover/group-popover.tsx index 6079daab6..232a37278 100644 --- a/src/components/groups/popover/group-popover.tsx +++ b/src/components/groups/popover/group-popover.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link, matchPath, useHistory } from 'react-router-dom'; diff --git a/src/components/hashtag-link.tsx b/src/components/hashtag-link.tsx index f0052d9f9..247b3bc34 100644 --- a/src/components/hashtag-link.tsx +++ b/src/components/hashtag-link.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Link from './link'; diff --git a/src/components/hashtag.tsx b/src/components/hashtag.tsx index 690661515..098993c1c 100644 --- a/src/components/hashtag.tsx +++ b/src/components/hashtag.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; diff --git a/src/components/helmet.tsx b/src/components/helmet.tsx index 64b5c3fcf..0412bb6d5 100644 --- a/src/components/helmet.tsx +++ b/src/components/helmet.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useMemo, useEffect } from 'react'; import { Helmet as ReactHelmet } from 'react-helmet'; import { useStatContext } from 'soapbox/contexts/stat-context'; @@ -25,7 +25,7 @@ const Helmet: React.FC = ({ children }) => { const unreadCount = useAppSelector((state) => getNotifTotals(state) + unreadChatsCount); const { demetricator } = useSettings(); - const hasUnreadNotifications = React.useMemo(() => !(unreadCount < 1 || demetricator), [unreadCount, demetricator]); + const hasUnreadNotifications = useMemo(() => !(unreadCount < 1 || demetricator), [unreadCount, demetricator]); const addCounter = (string: string) => { return hasUnreadNotifications ? `(${unreadCount}) ${string}` : string; @@ -39,7 +39,7 @@ const Helmet: React.FC = ({ children }) => { } }; - React.useEffect(() => { + useEffect(() => { updateFaviconBadge(); }, [unreadCount, demetricator]); diff --git a/src/components/hover-ref-wrapper.tsx b/src/components/hover-ref-wrapper.tsx index 8d0aa1ecd..d822d1b0c 100644 --- a/src/components/hover-ref-wrapper.tsx +++ b/src/components/hover-ref-wrapper.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { fetchAccount } from 'soapbox/actions/accounts'; import { diff --git a/src/components/hover-status-wrapper.tsx b/src/components/hover-status-wrapper.tsx index 685dbf3d9..5f6ff4420 100644 --- a/src/components/hover-status-wrapper.tsx +++ b/src/components/hover-status-wrapper.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { useDispatch } from 'react-redux'; import { diff --git a/src/components/icon-button.tsx b/src/components/icon-button.tsx index 4eb0dccca..0cd96dec1 100644 --- a/src/components/icon-button.tsx +++ b/src/components/icon-button.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import Icon from 'soapbox/components/icon'; diff --git a/src/components/icon-with-counter.tsx b/src/components/icon-with-counter.tsx index 5cac95290..4939375ce 100644 --- a/src/components/icon-with-counter.tsx +++ b/src/components/icon-with-counter.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Icon, { IIcon } from 'soapbox/components/icon'; import { Counter } from 'soapbox/components/ui'; diff --git a/src/components/icon.tsx b/src/components/icon.tsx index 1f1536ef9..c5d4638a3 100644 --- a/src/components/icon.tsx +++ b/src/components/icon.tsx @@ -4,7 +4,6 @@ */ import clsx from 'clsx'; -import React from 'react'; import InlineSVG from 'react-inlinesvg'; // eslint-disable-line no-restricted-imports export interface IIcon extends React.HTMLAttributes { diff --git a/src/components/landing-gradient.tsx b/src/components/landing-gradient.tsx index ed27fe214..a1117a9ff 100644 --- a/src/components/landing-gradient.tsx +++ b/src/components/landing-gradient.tsx @@ -1,4 +1,3 @@ -import React from 'react'; /** Fullscreen gradient used as a backdrop to public pages. */ const LandingGradient: React.FC = () => ( diff --git a/src/components/link.tsx b/src/components/link.tsx index 51bb91300..8e9c11be2 100644 --- a/src/components/link.tsx +++ b/src/components/link.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Link as Comp, LinkProps } from 'react-router-dom'; const Link = (props: LinkProps) => ( diff --git a/src/components/list.tsx b/src/components/list.tsx index 5de7b3efa..20d662345 100644 --- a/src/components/list.tsx +++ b/src/components/list.tsx @@ -1,7 +1,7 @@ import checkIcon from '@tabler/icons/outline/check.svg'; import chevronRightIcon from '@tabler/icons/outline/chevron-right.svg'; import clsx from 'clsx'; -import React from 'react'; +import { Children, cloneElement, isValidElement, useCallback } from 'react'; import { Link } from 'react-router-dom'; import { SelectDropdown } from '../features/forms'; @@ -38,12 +38,12 @@ const ListItem: React.FC = ({ label, hint, children, to, onClick, onS const LabelComp = to || onClick || onSelect ? 'span' : 'label'; - const renderChildren = React.useCallback(() => { - return React.Children.map(children, (child) => { - if (React.isValidElement(child)) { + const renderChildren = useCallback(() => { + return Children.map(children, (child) => { + if (isValidElement(child)) { const isSelect = child.type === SelectDropdown || child.type === Select; - return React.cloneElement(child, { + return cloneElement(child, { // @ts-ignore id: domId, className: clsx({ diff --git a/src/components/load-gap.tsx b/src/components/load-gap.tsx index f6a42a341..2be5f19d9 100644 --- a/src/components/load-gap.tsx +++ b/src/components/load-gap.tsx @@ -1,5 +1,4 @@ import dotsIcon from '@tabler/icons/outline/dots.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import Icon from 'soapbox/components/icon'; diff --git a/src/components/load-more.tsx b/src/components/load-more.tsx index c356751b9..359f948df 100644 --- a/src/components/load-more.tsx +++ b/src/components/load-more.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Button } from 'soapbox/components/ui'; diff --git a/src/components/loading-screen.tsx b/src/components/loading-screen.tsx index 3b86fd2e0..2a91e7fe5 100644 --- a/src/components/loading-screen.tsx +++ b/src/components/loading-screen.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LandingGradient from 'soapbox/components/landing-gradient'; import { Spinner } from 'soapbox/components/ui'; diff --git a/src/components/location-search.tsx b/src/components/location-search.tsx index 2eb1b2eb3..2415c91c0 100644 --- a/src/components/location-search.tsx +++ b/src/components/location-search.tsx @@ -3,7 +3,7 @@ import searchIcon from '@tabler/icons/outline/search.svg'; import clsx from 'clsx'; import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import throttle from 'lodash/throttle'; -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { locationSearch } from 'soapbox/actions/events'; diff --git a/src/components/markup.tsx b/src/components/markup.tsx index e20dcb3a2..bdc91700b 100644 --- a/src/components/markup.tsx +++ b/src/components/markup.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { forwardRef } from 'react'; import Text, { IText } from './ui/text/text'; import './markup.css'; @@ -7,7 +7,7 @@ interface IMarkup extends IText { } /** Styles HTML markup returned by the API, such as in account bios and statuses. */ -const Markup = React.forwardRef((props, ref) => { +const Markup = forwardRef((props, ref) => { return ( ); diff --git a/src/components/media-gallery.tsx b/src/components/media-gallery.tsx index 7648850d9..5f6273037 100644 --- a/src/components/media-gallery.tsx +++ b/src/components/media-gallery.tsx @@ -1,7 +1,7 @@ import paperclipIcon from '@tabler/icons/outline/paperclip.svg'; import volumeIcon from '@tabler/icons/outline/volume.svg'; import clsx from 'clsx'; -import React, { useState, useRef, useLayoutEffect, CSSProperties } from 'react'; +import { useState, useRef, useLayoutEffect, CSSProperties } from 'react'; import Blurhash from 'soapbox/components/blurhash'; import StillImage from 'soapbox/components/still-image'; @@ -17,7 +17,7 @@ import SvgIcon from './ui/icon/svg-icon'; import type { List as ImmutableList } from 'immutable'; -// const Gameboy = React.lazy(() => import('./gameboy')); +// const Gameboy = lazy(() => import('./gameboy')); const ATTACHMENT_LIMIT = 4; const MAX_FILENAME_LENGTH = 45; diff --git a/src/components/mention.tsx b/src/components/mention.tsx index 39e892913..ffb024256 100644 --- a/src/components/mention.tsx +++ b/src/components/mention.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Link } from 'react-router-dom'; import { shortenNostr } from 'soapbox/utils/nostr'; diff --git a/src/components/missing-indicator.tsx b/src/components/missing-indicator.tsx index 69bade6c2..7ff67dd23 100644 --- a/src/components/missing-indicator.tsx +++ b/src/components/missing-indicator.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Card, CardBody, Stack, Text } from './ui'; diff --git a/src/components/modal-root.tsx b/src/components/modal-root.tsx index cd4daa142..1b4ab3278 100644 --- a/src/components/modal-root.tsx +++ b/src/components/modal-root.tsx @@ -1,6 +1,6 @@ import trashIcon from '@tabler/icons/outline/trash.svg'; import clsx from 'clsx'; -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/components/navlinks.tsx b/src/components/navlinks.tsx index 448bfff2b..81aa37ad5 100644 --- a/src/components/navlinks.tsx +++ b/src/components/navlinks.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Link } from 'react-router-dom'; import { Text } from 'soapbox/components/ui'; diff --git a/src/components/outline-box.tsx b/src/components/outline-box.tsx index 0f56c21ae..4e599beef 100644 --- a/src/components/outline-box.tsx +++ b/src/components/outline-box.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IOutlineBox extends React.HTMLAttributes { children: React.ReactNode; diff --git a/src/components/pending-items-row.tsx b/src/components/pending-items-row.tsx index 5952a3b9a..5fc0a7637 100644 --- a/src/components/pending-items-row.tsx +++ b/src/components/pending-items-row.tsx @@ -1,7 +1,6 @@ import chevronRightIcon from '@tabler/icons/outline/chevron-right.svg'; import exclamationCircleIcon from '@tabler/icons/outline/exclamation-circle.svg'; import clsx from 'clsx'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/components/polls/poll-footer.test.tsx b/src/components/polls/poll-footer.test.tsx index 5526ed35f..06a4424a5 100644 --- a/src/components/polls/poll-footer.test.tsx +++ b/src/components/polls/poll-footer.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { IntlProvider } from 'react-intl'; import { Provider } from 'react-redux'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/src/components/polls/poll-footer.tsx b/src/components/polls/poll-footer.tsx index 09798f828..827bb8128 100644 --- a/src/components/polls/poll-footer.tsx +++ b/src/components/polls/poll-footer.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchPoll, vote } from 'soapbox/actions/polls'; diff --git a/src/components/polls/poll-option.tsx b/src/components/polls/poll-option.tsx index df711263b..049960750 100644 --- a/src/components/polls/poll-option.tsx +++ b/src/components/polls/poll-option.tsx @@ -1,7 +1,6 @@ import checkIcon from '@tabler/icons/outline/check.svg'; import circleCheckIcon from '@tabler/icons/outline/circle-check.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Motion, presets, spring } from 'react-motion'; diff --git a/src/components/polls/poll.tsx b/src/components/polls/poll.tsx index b7f75424a..add1c349f 100644 --- a/src/components/polls/poll.tsx +++ b/src/components/polls/poll.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/components/preview-card.tsx b/src/components/preview-card.tsx index 2f9a2e436..445678c27 100644 --- a/src/components/preview-card.tsx +++ b/src/components/preview-card.tsx @@ -4,7 +4,7 @@ import playerPlayIcon from '@tabler/icons/outline/player-play.svg'; import zoomInIcon from '@tabler/icons/outline/zoom-in.svg'; import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import Blurhash from 'soapbox/components/blurhash'; import { HStack, Stack, Text, Icon } from 'soapbox/components/ui'; diff --git a/src/components/profile-hover-card.tsx b/src/components/profile-hover-card.tsx index 91232dce6..01039de16 100644 --- a/src/components/profile-hover-card.tsx +++ b/src/components/profile-hover-card.tsx @@ -1,7 +1,7 @@ import { useFloating } from '@floating-ui/react'; import calendarIcon from '@tabler/icons/outline/calendar.svg'; import clsx from 'clsx'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useIntl, FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/components/progress-circle.tsx b/src/components/progress-circle.tsx index 1adb3f46e..b2f78e1c8 100644 --- a/src/components/progress-circle.tsx +++ b/src/components/progress-circle.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IProgressCircle { progress: number; diff --git a/src/components/pull-to-refresh.tsx b/src/components/pull-to-refresh.tsx index 829441b37..45e6fe443 100644 --- a/src/components/pull-to-refresh.tsx +++ b/src/components/pull-to-refresh.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import PTRComponent from 'react-simple-pull-to-refresh'; import { Spinner } from 'soapbox/components/ui'; diff --git a/src/components/pullable.tsx b/src/components/pullable.tsx index e92a76ea2..861863ee5 100644 --- a/src/components/pullable.tsx +++ b/src/components/pullable.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import PullToRefresh from './pull-to-refresh'; diff --git a/src/components/quoted-status-indicator.tsx b/src/components/quoted-status-indicator.tsx index b19693261..b310fd358 100644 --- a/src/components/quoted-status-indicator.tsx +++ b/src/components/quoted-status-indicator.tsx @@ -1,5 +1,5 @@ import quoteIcon from '@tabler/icons/outline/quote.svg'; -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { HStack, Icon, Text } from 'soapbox/components/ui'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/components/quoted-status.test.tsx b/src/components/quoted-status.test.tsx index fb9360b81..6f29e8748 100644 --- a/src/components/quoted-status.test.tsx +++ b/src/components/quoted-status.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen, rootState } from 'soapbox/jest/test-helpers'; diff --git a/src/components/quoted-status.tsx b/src/components/quoted-status.tsx index 569d81503..42a84a238 100644 --- a/src/components/quoted-status.tsx +++ b/src/components/quoted-status.tsx @@ -1,6 +1,6 @@ import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React, { MouseEventHandler, useEffect, useRef, useState } from 'react'; +import { MouseEventHandler, useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/components/radio.tsx b/src/components/radio.tsx index 9c1714e9d..b5e2bee50 100644 --- a/src/components/radio.tsx +++ b/src/components/radio.tsx @@ -1,4 +1,5 @@ -import React from 'react'; + +import { Children, cloneElement } from 'react'; import List, { ListItem } from './list'; @@ -8,8 +9,8 @@ interface IRadioGroup { } const RadioGroup = ({ onChange, children }: IRadioGroup) => { - const childrenWithProps = React.Children.map(children, child => - React.cloneElement(child, { onChange }), + const childrenWithProps = Children.map(children, child => + cloneElement(child, { onChange }), ); return {childrenWithProps}; diff --git a/src/components/relative-timestamp.tsx b/src/components/relative-timestamp.tsx index c9b2780f2..a1ea72123 100644 --- a/src/components/relative-timestamp.tsx +++ b/src/components/relative-timestamp.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { injectIntl, defineMessages, IntlShape, FormatDateOptions } from 'react-intl'; import Text, { IText } from './ui/text/text'; @@ -124,7 +124,7 @@ interface RelativeTimestampState { } /** Displays a timestamp compared to the current time, eg "1m" for one minute ago. */ -class RelativeTimestamp extends React.Component { +class RelativeTimestamp extends Component { _timer: NodeJS.Timeout | undefined; diff --git a/src/components/safe-embed.tsx b/src/components/safe-embed.tsx index 3e2668648..acb93d67c 100644 --- a/src/components/safe-embed.tsx +++ b/src/components/safe-embed.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; interface ISafeEmbed { /** Styles for the outer frame element. */ diff --git a/src/components/scroll-context.tsx b/src/components/scroll-context.tsx index 707ef7e76..f5ffeeb60 100644 --- a/src/components/scroll-context.tsx +++ b/src/components/scroll-context.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; interface IScrollContext { diff --git a/src/components/scroll-top-button.test.tsx b/src/components/scroll-top-button.test.tsx index f7c100cc8..c6cb517ff 100644 --- a/src/components/scroll-top-button.test.tsx +++ b/src/components/scroll-top-button.test.tsx @@ -1,5 +1,4 @@ -import React from 'react'; import { defineMessages } from 'react-intl'; import { describe, expect, it } from 'vitest'; diff --git a/src/components/scroll-top-button.tsx b/src/components/scroll-top-button.tsx index 31b32ceb6..5e564aa2d 100644 --- a/src/components/scroll-top-button.tsx +++ b/src/components/scroll-top-button.tsx @@ -1,6 +1,6 @@ import arrowBarToUpIcon from '@tabler/icons/outline/arrow-bar-to-up.svg'; import throttle from 'lodash/throttle'; -import React, { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { useIntl, MessageDescriptor } from 'react-intl'; import { Icon, Text } from 'soapbox/components/ui'; diff --git a/src/components/scrollable-list.tsx b/src/components/scrollable-list.tsx index 8a352034a..33ccb52ad 100644 --- a/src/components/scrollable-list.tsx +++ b/src/components/scrollable-list.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useEffect, useRef, useMemo, useCallback } from 'react'; +import { useEffect, useRef, useMemo, useCallback, forwardRef } from 'react'; import { useHistory } from 'react-router-dom'; import { Virtuoso, Components, VirtuosoProps, VirtuosoHandle, ListRange, IndexLocationWithAlign } from 'react-virtuoso'; @@ -30,7 +30,7 @@ const Item: Components['Item'] = ({ context, ...rest }) => /** Custom Virtuoso List component for the outer container. */ // Ensure the className winds up here -const List: Components['List'] = React.forwardRef((props, ref) => { +const List: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); @@ -84,7 +84,7 @@ interface IScrollableList extends VirtuosoProps { } /** Legacy ScrollableList with Virtuoso for backwards-compatibility. */ -const ScrollableList = React.forwardRef(({ +const ScrollableList = forwardRef(({ scrollKey, prepend = null, alwaysPrepend, diff --git a/src/components/sentry-feedback-form.tsx b/src/components/sentry-feedback-form.tsx index 292928aaf..07dee7f79 100644 --- a/src/components/sentry-feedback-form.tsx +++ b/src/components/sentry-feedback-form.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Textarea, Form, Button, FormGroup, FormActions, Text } from 'soapbox/components/ui'; diff --git a/src/components/sidebar-menu.tsx b/src/components/sidebar-menu.tsx index 2e4d5bd64..bf2dc3108 100644 --- a/src/components/sidebar-menu.tsx +++ b/src/components/sidebar-menu.tsx @@ -16,9 +16,8 @@ import userPlusIcon from '@tabler/icons/outline/user-plus.svg'; import userIcon from '@tabler/icons/outline/user.svg'; import worldIcon from '@tabler/icons/outline/world.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -/* eslint-disable jsx-a11y/interactive-supports-focus */ import clsx from 'clsx'; -import React, { useCallback } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Link, NavLink } from 'react-router-dom'; @@ -110,9 +109,9 @@ const SidebarMenu: React.FC = (): JSX.Element | null => { const { instance } = useInstance(); const settingsNotifications = useSettingsNotifications(); - const closeButtonRef = React.useRef(null); + const closeButtonRef = useRef(null); - const [switcher, setSwitcher] = React.useState(false); + const [switcher, setSwitcher] = useState(false); const onClose = () => dispatch(closeSidebar()); @@ -147,7 +146,7 @@ const SidebarMenu: React.FC = (): JSX.Element | null => { ); - React.useEffect(() => { + useEffect(() => { dispatch(fetchOwnAccounts()); }, []); diff --git a/src/components/sidebar-navigation-link.tsx b/src/components/sidebar-navigation-link.tsx index e5aca128e..944985704 100644 --- a/src/components/sidebar-navigation-link.tsx +++ b/src/components/sidebar-navigation-link.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import { NavLink, useLocation } from 'react-router-dom'; import { Icon, Text } from './ui'; @@ -22,7 +22,7 @@ interface ISidebarNavigationLink { } /** Desktop sidebar navigation link. */ -const SidebarNavigationLink = React.forwardRef((props: ISidebarNavigationLink, ref: React.ForwardedRef): JSX.Element => { +const SidebarNavigationLink = forwardRef((props: ISidebarNavigationLink, ref: React.ForwardedRef): JSX.Element => { const { icon, activeIcon, text, to = '', count, countMax, onClick } = props; const { pathname } = useLocation(); diff --git a/src/components/sidebar-navigation.tsx b/src/components/sidebar-navigation.tsx index da887902d..68783d639 100644 --- a/src/components/sidebar-navigation.tsx +++ b/src/components/sidebar-navigation.tsx @@ -20,7 +20,6 @@ import settingsIcon from '@tabler/icons/outline/settings.svg'; import userPlusIcon from '@tabler/icons/outline/user-plus.svg'; import userIcon from '@tabler/icons/outline/user.svg'; import worldIcon from '@tabler/icons/outline/world.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/components/site-error-boundary.tsx b/src/components/site-error-boundary.tsx index 3e4712a4c..27b99dd1d 100644 --- a/src/components/site-error-boundary.tsx +++ b/src/components/site-error-boundary.tsx @@ -1,4 +1,4 @@ -import React, { type ErrorInfo, useRef, useState } from 'react'; +import { type ErrorInfo, useRef, useState } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; import { FormattedMessage } from 'react-intl'; diff --git a/src/components/site-logo.tsx b/src/components/site-logo.tsx index cc107b266..9a21043a9 100644 --- a/src/components/site-logo.tsx +++ b/src/components/site-logo.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import soapboxLogoWhiteSrc from 'soapbox/assets/images/soapbox-logo-white.svg'; import soapboxLogoSrc from 'soapbox/assets/images/soapbox-logo.svg'; diff --git a/src/components/status-action-bar.tsx b/src/components/status-action-bar.tsx index 4c2add1be..e80cd1993 100644 --- a/src/components/status-action-bar.tsx +++ b/src/components/status-action-bar.tsx @@ -30,7 +30,6 @@ import thumbUpIcon from '@tabler/icons/outline/thumb-up.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import uploadIcon from '@tabler/icons/outline/upload.svg'; import volume3Icon from '@tabler/icons/outline/volume-3.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory, useRouteMatch } from 'react-router-dom'; diff --git a/src/components/status-action-button.tsx b/src/components/status-action-button.tsx index c435227a7..e175b233f 100644 --- a/src/components/status-action-button.tsx +++ b/src/components/status-action-button.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import { Text, Icon, Emoji } from 'soapbox/components/ui'; import { shortNumberFormat } from 'soapbox/utils/numbers'; @@ -38,7 +38,7 @@ interface IStatusActionButton extends React.ButtonHTMLAttributes((props, ref): JSX.Element => { +const StatusActionButton = forwardRef((props, ref): JSX.Element => { const { icon, className, iconClassName, active, color, filled = false, count = 0, emoji, text, theme = 'default', ...filteredProps } = props; const renderIcon = () => { diff --git a/src/components/status-content.tsx b/src/components/status-content.tsx index 3f7c4011b..24b1ee4d7 100644 --- a/src/components/status-content.tsx +++ b/src/components/status-content.tsx @@ -1,7 +1,7 @@ import chevronRightIcon from '@tabler/icons/outline/chevron-right.svg'; import clsx from 'clsx'; import parse, { Element, type HTMLReactParserOptions, domToReact, type DOMNode } from 'html-react-parser'; -import React, { useState, useRef, useLayoutEffect, useMemo } from 'react'; +import { useState, useRef, useLayoutEffect, useMemo, memo } from 'react'; import { FormattedMessage } from 'react-intl'; import Icon from 'soapbox/components/icon'; @@ -202,4 +202,4 @@ const StatusContent: React.FC = ({ } }; -export default React.memo(StatusContent); +export default memo(StatusContent); diff --git a/src/components/status-hover-card.tsx b/src/components/status-hover-card.tsx index dbf1d8bd2..7daa342f5 100644 --- a/src/components/status-hover-card.tsx +++ b/src/components/status-hover-card.tsx @@ -1,6 +1,6 @@ import { useFloating } from '@floating-ui/react'; import clsx from 'clsx'; -import React, { useEffect, useState, useCallback } from 'react'; +import { useEffect, useState, useCallback } from 'react'; import { useHistory } from 'react-router-dom'; import { diff --git a/src/components/status-list.tsx b/src/components/status-list.tsx index 838997435..769c1cdf5 100644 --- a/src/components/status-list.tsx +++ b/src/components/status-list.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useRef, useCallback } from 'react'; +import { useRef, useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import LoadGap from 'soapbox/components/load-gap'; diff --git a/src/components/status-media.tsx b/src/components/status-media.tsx index 2c96c0078..cc82eed80 100644 --- a/src/components/status-media.tsx +++ b/src/components/status-media.tsx @@ -1,4 +1,4 @@ -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; import { openModal } from 'soapbox/actions/modals'; import AttachmentThumbs from 'soapbox/components/attachment-thumbs'; diff --git a/src/components/status-reaction-wrapper.tsx b/src/components/status-reaction-wrapper.tsx index 4bac8c878..db3109ea4 100644 --- a/src/components/status-reaction-wrapper.tsx +++ b/src/components/status-reaction-wrapper.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from 'react'; +import { useState, useEffect, useRef, cloneElement } from 'react'; import { simpleEmojiReact } from 'soapbox/actions/emoji-reacts'; import { openModal } from 'soapbox/actions/modals'; @@ -100,7 +100,7 @@ const StatusReactionWrapper: React.FC = ({ statusId, chi return (
- {React.cloneElement(children, { + {cloneElement(children, { onClick: handleClick, ref: setReferenceElement, })} diff --git a/src/components/status-reply-mentions.tsx b/src/components/status-reply-mentions.tsx index 75eb8eab4..06df6338c 100644 --- a/src/components/status-reply-mentions.tsx +++ b/src/components/status-reply-mentions.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedList, FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/components/status.test.tsx b/src/components/status.test.tsx index 2cbd80ad1..e78d805f4 100644 --- a/src/components/status.test.tsx +++ b/src/components/status.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildAccount } from 'soapbox/jest/factory'; diff --git a/src/components/status.tsx b/src/components/status.tsx index 016153563..577bdd2f9 100644 --- a/src/components/status.tsx +++ b/src/components/status.tsx @@ -2,7 +2,7 @@ import circlesIcon from '@tabler/icons/outline/circles.svg'; import pinnedIcon from '@tabler/icons/outline/pinned.svg'; import repeatIcon from '@tabler/icons/outline/repeat.svg'; import clsx from 'clsx'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/components/statuses/sensitive-content-overlay.test.tsx b/src/components/statuses/sensitive-content-overlay.test.tsx index a9caff8df..7c3d6a35f 100644 --- a/src/components/statuses/sensitive-content-overlay.test.tsx +++ b/src/components/statuses/sensitive-content-overlay.test.tsx @@ -1,6 +1,5 @@ import { Map as ImmutableMap } from 'immutable'; -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { fireEvent, render, rootState, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/statuses/sensitive-content-overlay.tsx b/src/components/statuses/sensitive-content-overlay.tsx index 3c71a5cd2..d1aedcf67 100644 --- a/src/components/statuses/sensitive-content-overlay.tsx +++ b/src/components/statuses/sensitive-content-overlay.tsx @@ -4,7 +4,7 @@ import eyeIcon from '@tabler/icons/outline/eye.svg'; import headsetIcon from '@tabler/icons/outline/headset.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import clsx from 'clsx'; -import React, { useEffect, useMemo, useState } from 'react'; +import { forwardRef, useEffect, useMemo, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; @@ -37,7 +37,7 @@ interface ISensitiveContentOverlay { visible?: boolean; } -const SensitiveContentOverlay = React.forwardRef((props, ref) => { +const SensitiveContentOverlay = forwardRef((props, ref) => { const { onToggleVisibility, status } = props; const { account } = useOwnAccount(); diff --git a/src/components/statuses/status-info.tsx b/src/components/statuses/status-info.tsx index b97513177..ffeafcecb 100644 --- a/src/components/statuses/status-info.tsx +++ b/src/components/statuses/status-info.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Text } from '../ui'; diff --git a/src/components/still-image.tsx b/src/components/still-image.tsx index 191d2831e..3f788de12 100644 --- a/src/components/still-image.tsx +++ b/src/components/still-image.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { useSettings } from 'soapbox/hooks'; diff --git a/src/components/thumb-navigation-link.tsx b/src/components/thumb-navigation-link.tsx index f824392e5..e395d5884 100644 --- a/src/components/thumb-navigation-link.tsx +++ b/src/components/thumb-navigation-link.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { NavLink, useLocation } from 'react-router-dom'; import IconWithCounter from 'soapbox/components/icon-with-counter'; diff --git a/src/components/thumb-navigation.tsx b/src/components/thumb-navigation.tsx index 35008843c..21f4805f2 100644 --- a/src/components/thumb-navigation.tsx +++ b/src/components/thumb-navigation.tsx @@ -9,7 +9,6 @@ import homeIcon from '@tabler/icons/outline/home.svg'; import mailIcon from '@tabler/icons/outline/mail.svg'; import messagesIcon from '@tabler/icons/outline/messages.svg'; import searchIcon from '@tabler/icons/outline/search.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import ThumbNavigationLink from 'soapbox/components/thumb-navigation-link'; diff --git a/src/components/tombstone.tsx b/src/components/tombstone.tsx index faaa84ee0..b11142b94 100644 --- a/src/components/tombstone.tsx +++ b/src/components/tombstone.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Text } from 'soapbox/components/ui'; diff --git a/src/components/translate-button.tsx b/src/components/translate-button.tsx index 86a996807..71b425d32 100644 --- a/src/components/translate-button.tsx +++ b/src/components/translate-button.tsx @@ -1,5 +1,4 @@ import languageIcon from '@tabler/icons/outline/language.svg'; -import React from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import { translateStatus, undoStatusTranslation } from 'soapbox/actions/statuses'; diff --git a/src/components/ui/accordion/accordion.tsx b/src/components/ui/accordion/accordion.tsx index 577bf1234..ca301a813 100644 --- a/src/components/ui/accordion/accordion.tsx +++ b/src/components/ui/accordion/accordion.tsx @@ -2,7 +2,6 @@ import chevronDownIcon from '@tabler/icons/outline/chevron-down.svg'; import chevronUpIcon from '@tabler/icons/outline/chevron-up.svg'; import dotsVerticalIcon from '@tabler/icons/outline/dots-vertical.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import DropdownMenu from 'soapbox/components/dropdown-menu'; diff --git a/src/components/ui/avatar/avatar.test.tsx b/src/components/ui/avatar/avatar.test.tsx index 907c97914..1bd9fb519 100644 --- a/src/components/ui/avatar/avatar.test.tsx +++ b/src/components/ui/avatar/avatar.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/avatar/avatar.tsx b/src/components/ui/avatar/avatar.tsx index 99627b5b2..7bdd0a52e 100644 --- a/src/components/ui/avatar/avatar.tsx +++ b/src/components/ui/avatar/avatar.tsx @@ -1,6 +1,6 @@ import photoOffIcon from '@tabler/icons/outline/photo-off.svg'; import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useMemo, useState } from 'react'; import StillImage, { IStillImage } from 'soapbox/components/still-image'; @@ -21,7 +21,7 @@ const Avatar = (props: IAvatar) => { const handleLoadFailure = () => setIsAvatarMissing(true); - const style: React.CSSProperties = React.useMemo(() => ({ + const style: React.CSSProperties = useMemo(() => ({ width: size, height: size, }), [size]); diff --git a/src/components/ui/banner/banner.tsx b/src/components/ui/banner/banner.tsx index c0d489fe8..f809a6bc8 100644 --- a/src/components/ui/banner/banner.tsx +++ b/src/components/ui/banner/banner.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IBanner { theme: 'frosted' | 'opaque'; diff --git a/src/components/ui/button/button.test.tsx b/src/components/ui/button/button.test.tsx index b3ddddf2b..a28e1da05 100644 --- a/src/components/ui/button/button.test.tsx +++ b/src/components/ui/button/button.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { fireEvent, render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/button/button.tsx b/src/components/ui/button/button.tsx index 43c3fd740..09061ee3d 100644 --- a/src/components/ui/button/button.tsx +++ b/src/components/ui/button/button.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef, useCallback } from 'react'; import { Link } from 'react-router-dom'; import Icon from '../icon/icon'; @@ -36,7 +36,7 @@ interface IButton { } /** Customizable button element with various themes. */ -const Button = React.forwardRef((props, ref): JSX.Element => { +const Button = forwardRef((props, ref): JSX.Element => { const { block = false, children, @@ -69,7 +69,7 @@ const Button = React.forwardRef((props, ref): JSX.El return ; }; - const handleClick: React.MouseEventHandler = React.useCallback((event) => { + const handleClick: React.MouseEventHandler = useCallback((event) => { if (onClick && !disabled) { onClick(event); } diff --git a/src/components/ui/card/card.test.tsx b/src/components/ui/card/card.test.tsx index 9a1e74db4..a7b4609af 100644 --- a/src/components/ui/card/card.test.tsx +++ b/src/components/ui/card/card.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/card/card.tsx b/src/components/ui/card/card.tsx index 31887948e..e7a811c80 100644 --- a/src/components/ui/card/card.tsx +++ b/src/components/ui/card/card.tsx @@ -1,6 +1,6 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; @@ -34,7 +34,7 @@ interface ICard { } /** An opaque backdrop to hold a collection of related elements. */ -const Card = React.forwardRef(({ children, variant = 'default', size = 'md', className, ...filteredProps }, ref): JSX.Element => ( +const Card = forwardRef(({ children, variant = 'default', size = 'md', className, ...filteredProps }, ref): JSX.Element => (
, 'disabled' | 'id' | 'name' | 'onChange' | 'checked' | 'required'> { } /** A pretty checkbox input. */ -const Checkbox = React.forwardRef((props, ref) => { +const Checkbox = forwardRef((props, ref) => { return ( ((props, ref): JSX.Element => { +const Column = forwardRef((props, ref): JSX.Element => { const { backHref, children, label, transparent = false, withHeader = true, className, bodyClassName, action, size } = props; const soapboxConfig = useSoapboxConfig(); const [isScrolled, setIsScrolled] = useState(false); diff --git a/src/components/ui/counter/counter.tsx b/src/components/ui/counter/counter.tsx index 8f350f675..0f7edca8d 100644 --- a/src/components/ui/counter/counter.tsx +++ b/src/components/ui/counter/counter.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { shortNumberFormat } from 'soapbox/utils/numbers'; diff --git a/src/components/ui/datepicker/datepicker.test.tsx b/src/components/ui/datepicker/datepicker.test.tsx index c75e6eb9f..745f226b2 100644 --- a/src/components/ui/datepicker/datepicker.test.tsx +++ b/src/components/ui/datepicker/datepicker.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { queryAllByRole, render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/datepicker/datepicker.tsx b/src/components/ui/datepicker/datepicker.tsx index ea9775bd4..b6e36a20c 100644 --- a/src/components/ui/datepicker/datepicker.tsx +++ b/src/components/ui/datepicker/datepicker.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import Select from '../select/select'; diff --git a/src/components/ui/datetime/datetime.tsx b/src/components/ui/datetime/datetime.tsx index bdf676840..ba24044b1 100644 --- a/src/components/ui/datetime/datetime.tsx +++ b/src/components/ui/datetime/datetime.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Input from '../input/input'; diff --git a/src/components/ui/divider/divider.test.tsx b/src/components/ui/divider/divider.test.tsx index fbff2c46a..62e827749 100644 --- a/src/components/ui/divider/divider.test.tsx +++ b/src/components/ui/divider/divider.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/divider/divider.tsx b/src/components/ui/divider/divider.tsx index 821f55fd6..f3f55c4fb 100644 --- a/src/components/ui/divider/divider.tsx +++ b/src/components/ui/divider/divider.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Text from '../text/text'; diff --git a/src/components/ui/emoji-selector/emoji-selector.tsx b/src/components/ui/emoji-selector/emoji-selector.tsx index 1ba4ee14f..e14ef4010 100644 --- a/src/components/ui/emoji-selector/emoji-selector.tsx +++ b/src/components/ui/emoji-selector/emoji-selector.tsx @@ -1,7 +1,7 @@ import { shift, useFloating, Placement, offset, OffsetOptions } from '@floating-ui/react'; import dotsIcon from '@tabler/icons/outline/dots.svg'; import clsx from 'clsx'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import EmojiComponent from 'soapbox/components/ui/emoji/emoji'; import HStack from 'soapbox/components/ui/hstack/hstack'; diff --git a/src/components/ui/emoji/emoji.test.tsx b/src/components/ui/emoji/emoji.test.tsx index 0cacea982..aaab7e1bf 100644 --- a/src/components/ui/emoji/emoji.test.tsx +++ b/src/components/ui/emoji/emoji.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/emoji/emoji.tsx b/src/components/ui/emoji/emoji.tsx index 68c82fb03..1b0967510 100644 --- a/src/components/ui/emoji/emoji.tsx +++ b/src/components/ui/emoji/emoji.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { removeVS16s, toCodePoints } from 'soapbox/utils/emoji'; import { joinPublicPath } from 'soapbox/utils/static'; diff --git a/src/components/ui/file-input/file-input.tsx b/src/components/ui/file-input/file-input.tsx index 2a08a934e..44ec21384 100644 --- a/src/components/ui/file-input/file-input.tsx +++ b/src/components/ui/file-input/file-input.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef } from 'react'; +import { forwardRef } from 'react'; interface IFileInput extends Pick, 'onChange' | 'required' | 'disabled' | 'name' | 'accept'> { } diff --git a/src/components/ui/form-actions/form-actions.test.tsx b/src/components/ui/form-actions/form-actions.test.tsx index ea5dadbc6..925e02006 100644 --- a/src/components/ui/form-actions/form-actions.test.tsx +++ b/src/components/ui/form-actions/form-actions.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/form-actions/form-actions.tsx b/src/components/ui/form-actions/form-actions.tsx index e74361c35..d92a89719 100644 --- a/src/components/ui/form-actions/form-actions.tsx +++ b/src/components/ui/form-actions/form-actions.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import HStack from '../hstack/hstack'; diff --git a/src/components/ui/form-group/form-group.test.tsx b/src/components/ui/form-group/form-group.test.tsx index d6d4114ad..5fe0e2fa4 100644 --- a/src/components/ui/form-group/form-group.test.tsx +++ b/src/components/ui/form-group/form-group.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/form-group/form-group.tsx b/src/components/ui/form-group/form-group.tsx index 430851371..023f15036 100644 --- a/src/components/ui/form-group/form-group.tsx +++ b/src/components/ui/form-group/form-group.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { Children, cloneElement, isValidElement, useMemo } from 'react'; import Checkbox from '../checkbox/checkbox'; import HStack from '../hstack/hstack'; @@ -21,12 +21,12 @@ interface IFormGroup { const FormGroup: React.FC = (props) => { const { children, errors = [], labelText, labelTitle, hintText } = props; const formFieldId: string = useMemo(() => `field-${crypto.randomUUID()}`, []); - const inputChildren = React.Children.toArray(children); + const inputChildren = Children.toArray(children); const hasError = errors?.length > 0; let firstChild; - if (React.isValidElement(inputChildren[0])) { - firstChild = React.cloneElement( + if (isValidElement(inputChildren[0])) { + firstChild = cloneElement( inputChildren[0], // @ts-ignore { id: formFieldId }, diff --git a/src/components/ui/form/form.test.tsx b/src/components/ui/form/form.test.tsx index de693f195..3f603961d 100644 --- a/src/components/ui/form/form.test.tsx +++ b/src/components/ui/form/form.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { fireEvent, render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/form/form.tsx b/src/components/ui/form/form.tsx index b23b44b38..ec175d8a6 100644 --- a/src/components/ui/form/form.tsx +++ b/src/components/ui/form/form.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useCallback } from 'react'; interface IForm { /** Form submission event handler. */ @@ -11,7 +11,7 @@ interface IForm { /** Form element with custom styles. */ const Form: React.FC = ({ onSubmit, children, ...filteredProps }) => { - const handleSubmit: React.FormEventHandler = React.useCallback((event) => { + const handleSubmit: React.FormEventHandler = useCallback((event) => { event.preventDefault(); if (onSubmit) { diff --git a/src/components/ui/hstack/hstack.tsx b/src/components/ui/hstack/hstack.tsx index eb435cbae..ea1fe7b0f 100644 --- a/src/components/ui/hstack/hstack.tsx +++ b/src/components/ui/hstack/hstack.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { forwardRef } from 'react'; +import { forwardRef } from 'react'; const justifyContentOptions = { between: 'justify-between', diff --git a/src/components/ui/icon-button/icon-button.tsx b/src/components/ui/icon-button/icon-button.tsx index 001a3ee0e..57e798356 100644 --- a/src/components/ui/icon-button/icon-button.tsx +++ b/src/components/ui/icon-button/icon-button.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import SvgIcon from '../icon/svg-icon'; import Text from '../text/text'; @@ -18,7 +18,7 @@ interface IIconButton extends React.ButtonHTMLAttributes { } /** A clickable icon. */ -const IconButton = React.forwardRef((props: IIconButton, ref: React.ForwardedRef): JSX.Element => { +const IconButton = forwardRef((props: IIconButton, ref: React.ForwardedRef): JSX.Element => { const { src, className, iconClassName, text, theme = 'seamless', ...filteredProps } = props; return ( diff --git a/src/components/ui/icon/icon.tsx b/src/components/ui/icon/icon.tsx index eaa4e9f0a..71455c37d 100644 --- a/src/components/ui/icon/icon.tsx +++ b/src/components/ui/icon/icon.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import Counter from '../counter/counter'; diff --git a/src/components/ui/icon/svg-icon.test.tsx b/src/components/ui/icon/svg-icon.test.tsx index c238d4010..f226a7b6e 100644 --- a/src/components/ui/icon/svg-icon.test.tsx +++ b/src/components/ui/icon/svg-icon.test.tsx @@ -1,6 +1,5 @@ import IconCode from '@tabler/icons/outline/code.svg'; -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/icon/svg-icon.tsx b/src/components/ui/icon/svg-icon.tsx index dcd93e113..4d3695fed 100644 --- a/src/components/ui/icon/svg-icon.tsx +++ b/src/components/ui/icon/svg-icon.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import InlineSVG, { Props as InlineSVGProps } from 'react-inlinesvg'; // eslint-disable-line no-restricted-imports interface ISvgIcon extends InlineSVGProps { diff --git a/src/components/ui/input/input.tsx b/src/components/ui/input/input.tsx index 42ca99388..6ee646fff 100644 --- a/src/components/ui/input/input.tsx +++ b/src/components/ui/input/input.tsx @@ -1,7 +1,7 @@ import eyeOffIcon from '@tabler/icons/outline/eye-off.svg'; import eyeIcon from '@tabler/icons/outline/eye.svg'; import clsx from 'clsx'; -import React from 'react'; +import React, { forwardRef, useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useLocale } from 'soapbox/hooks'; @@ -47,18 +47,18 @@ interface IInput extends Pick, 'maxL } /** Form input element. */ -const Input = React.forwardRef( +const Input = forwardRef( (props, ref) => { const intl = useIntl(); const locale = useLocale(); const { type = 'text', icon, className, outerClassName, append, prepend, theme = 'normal', ...filteredProps } = props; - const [revealed, setRevealed] = React.useState(false); + const [revealed, setRevealed] = useState(false); const isPassword = type === 'password'; - const togglePassword = React.useCallback(() => { + const togglePassword = useCallback(() => { setRevealed((prev) => !prev); }, []); diff --git a/src/components/ui/language-dropdown/language-dropdown.tsx b/src/components/ui/language-dropdown/language-dropdown.tsx index 756ada8b6..a5046f696 100644 --- a/src/components/ui/language-dropdown/language-dropdown.tsx +++ b/src/components/ui/language-dropdown/language-dropdown.tsx @@ -1,5 +1,4 @@ import worldIcon from '@tabler/icons/outline/world.svg'; -import React from 'react'; import { openDropdownMenu } from 'soapbox/actions/dropdown-menu'; import DropdownMenu, { MenuItem } from 'soapbox/components/dropdown-menu'; diff --git a/src/components/ui/layout/layout.tsx b/src/components/ui/layout/layout.tsx index e3d9575c3..31e123af2 100644 --- a/src/components/ui/layout/layout.tsx +++ b/src/components/ui/layout/layout.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; import StickyBox from 'react-sticky-box'; interface ISidebar { diff --git a/src/components/ui/menu/menu.tsx b/src/components/ui/menu/menu.tsx index 78dc5db0f..3f03935e4 100644 --- a/src/components/ui/menu/menu.tsx +++ b/src/components/ui/menu/menu.tsx @@ -9,7 +9,6 @@ import { } from '@reach/menu-button'; import { positionDefault, positionRight } from '@reach/popover'; import clsx from 'clsx'; -import React from 'react'; import './menu.css'; diff --git a/src/components/ui/modal/modal.test.tsx b/src/components/ui/modal/modal.test.tsx index 51895d8ce..b7bf31762 100644 --- a/src/components/ui/modal/modal.test.tsx +++ b/src/components/ui/modal/modal.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/ui/modal/modal.tsx b/src/components/ui/modal/modal.tsx index 6d516fc91..9ee860535 100644 --- a/src/components/ui/modal/modal.tsx +++ b/src/components/ui/modal/modal.tsx @@ -1,7 +1,7 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React from 'react'; +import { forwardRef, useEffect, useRef } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import Button from '../button/button'; @@ -70,7 +70,7 @@ interface IModal { } /** Displays a modal dialog box. */ -const Modal = React.forwardRef(({ +const Modal = forwardRef(({ cancelAction, cancelText, children, @@ -93,9 +93,9 @@ const Modal = React.forwardRef(({ onBack, }, ref) => { const intl = useIntl(); - const buttonRef = React.useRef(null); + const buttonRef = useRef(null); - React.useEffect(() => { + useEffect(() => { if (buttonRef?.current && !skipFocus) { buttonRef.current.focus(); } diff --git a/src/components/ui/popover/popover.tsx b/src/components/ui/popover/popover.tsx index 86085be5d..18d3d8010 100644 --- a/src/components/ui/popover/popover.tsx +++ b/src/components/ui/popover/popover.tsx @@ -11,7 +11,7 @@ import { useTransitionStyles, } from '@floating-ui/react'; import clsx from 'clsx'; -import React, { useRef, useState } from 'react'; +import { cloneElement, useRef, useState } from 'react'; import Portal from '../portal/portal'; @@ -78,7 +78,7 @@ const Popover: React.FC = (props) => { return ( <> - {React.cloneElement(children, { + {cloneElement(children, { ref: refs.setReference, ...getReferenceProps(), className: clsx(children.props.className, referenceElementClassName), diff --git a/src/components/ui/portal/portal.tsx b/src/components/ui/portal/portal.tsx index 9d9ae73e7..6dda9d3b3 100644 --- a/src/components/ui/portal/portal.tsx +++ b/src/components/ui/portal/portal.tsx @@ -1,4 +1,4 @@ -import React, { useLayoutEffect, useState } from 'react'; +import { useLayoutEffect, useState } from 'react'; import ReactDOM from 'react-dom'; interface IPortal { diff --git a/src/components/ui/progress-bar/progress-bar.tsx b/src/components/ui/progress-bar/progress-bar.tsx index 4fffe7937..41ca380ee 100644 --- a/src/components/ui/progress-bar/progress-bar.tsx +++ b/src/components/ui/progress-bar/progress-bar.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { spring } from 'react-motion'; import Motion from 'soapbox/features/ui/util/optional-motion'; diff --git a/src/components/ui/radio-button/radio-button.tsx b/src/components/ui/radio-button/radio-button.tsx index c03ca5d52..ef385a4cc 100644 --- a/src/components/ui/radio-button/radio-button.tsx +++ b/src/components/ui/radio-button/radio-button.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import HStack from '../hstack/hstack'; diff --git a/src/components/ui/select/select.tsx b/src/components/ui/select/select.tsx index 1c14fe9ae..46c4d241e 100644 --- a/src/components/ui/select/select.tsx +++ b/src/components/ui/select/select.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; interface ISelect extends React.SelectHTMLAttributes { children: Iterable; @@ -7,7 +7,7 @@ interface ISelect extends React.SelectHTMLAttributes { } /** Multiple-select dropdown. */ -const Select = React.forwardRef((props, ref) => { +const Select = forwardRef((props, ref) => { const { children, className, full = true, ...filteredProps } = props; return ( diff --git a/src/components/ui/slider/slider.tsx b/src/components/ui/slider/slider.tsx index d97e69322..8aed7ebcc 100644 --- a/src/components/ui/slider/slider.tsx +++ b/src/components/ui/slider/slider.tsx @@ -1,5 +1,5 @@ import throttle from 'lodash/throttle'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; type Point = { x: number; y: number }; diff --git a/src/components/ui/spinner/spinner.tsx b/src/components/ui/spinner/spinner.tsx index 23341ba76..31de33512 100644 --- a/src/components/ui/spinner/spinner.tsx +++ b/src/components/ui/spinner/spinner.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import Stack from '../stack/stack'; diff --git a/src/components/ui/stack/stack.tsx b/src/components/ui/stack/stack.tsx index 8a4370b04..8db4def0b 100644 --- a/src/components/ui/stack/stack.tsx +++ b/src/components/ui/stack/stack.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; const spaces = { 0: 'space-y-0', @@ -43,7 +43,7 @@ interface IStack extends React.HTMLAttributes { } /** Vertical stack of child elements. */ -const Stack = React.forwardRef((props, ref: React.LegacyRef | undefined) => { +const Stack = forwardRef((props, ref: React.LegacyRef | undefined) => { const { space, alignItems, justifyContent, className, grow, element = 'div', ...filteredProps } = props; const Elem = element as 'div'; diff --git a/src/components/ui/streamfield/streamfield.tsx b/src/components/ui/streamfield/streamfield.tsx index 6ad51f9e2..af7ae100c 100644 --- a/src/components/ui/streamfield/streamfield.tsx +++ b/src/components/ui/streamfield/streamfield.tsx @@ -1,5 +1,4 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import Button from '../button/button'; diff --git a/src/components/ui/tabs/tabs.tsx b/src/components/ui/tabs/tabs.tsx index 3d435183e..a1f63ddde 100644 --- a/src/components/ui/tabs/tabs.tsx +++ b/src/components/ui/tabs/tabs.tsx @@ -6,7 +6,7 @@ import { useTabsContext, } from '@reach/tabs'; import clsx from 'clsx'; -import React from 'react'; +import { createContext, useContext, useLayoutEffect, useRef, useState } from 'react'; import { useHistory } from 'react-router-dom'; import Counter from '../counter/counter'; @@ -14,7 +14,7 @@ import Counter from '../counter/counter'; import './tabs.css'; const HORIZONTAL_PADDING = 8; -const AnimatedContext = React.createContext(null); +const AnimatedContext = createContext(null); interface IAnimatedInterface { /** Callback when a tab is chosen. */ @@ -26,8 +26,8 @@ interface IAnimatedInterface { /** Tabs with a sliding active state. */ const AnimatedTabs: React.FC = ({ children, ...rest }) => { - const [activeRect, setActiveRect] = React.useState(null); - const ref = React.useRef(); + const [activeRect, setActiveRect] = useState(null); + const ref = useRef(); const rect = useRect(ref); // @ts-ignore @@ -81,14 +81,14 @@ const AnimatedTab: React.FC = ({ index, ...props }) => { const isSelected: boolean = selectedIndex === index; // measure the size of our element, only listen to rect if active - const ref = React.useRef(); + const ref = useRef(); const rect = useRect(ref, { observe: isSelected }); // get the style changing function from context - const setActiveRect = React.useContext(AnimatedContext); + const setActiveRect = useContext(AnimatedContext); // callup to set styles whenever we're active - React.useLayoutEffect(() => { + useLayoutEffect(() => { if (isSelected) { // @ts-ignore setActiveRect(rect); diff --git a/src/components/ui/tag-input/tag-input.tsx b/src/components/ui/tag-input/tag-input.tsx index 8a4629b1f..db8404bbb 100644 --- a/src/components/ui/tag-input/tag-input.tsx +++ b/src/components/ui/tag-input/tag-input.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import HStack from '../hstack/hstack'; diff --git a/src/components/ui/tag-input/tag.tsx b/src/components/ui/tag-input/tag.tsx index 4ca668fef..1cbcf4302 100644 --- a/src/components/ui/tag-input/tag.tsx +++ b/src/components/ui/tag-input/tag.tsx @@ -1,5 +1,4 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import IconButton from '../icon-button/icon-button'; import Text from '../text/text'; diff --git a/src/components/ui/text/text.tsx b/src/components/ui/text/text.tsx index f5957f879..1e31c90f4 100644 --- a/src/components/ui/text/text.tsx +++ b/src/components/ui/text/text.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; const themes = { default: 'text-gray-900 dark:text-gray-100', @@ -86,7 +86,7 @@ interface IText extends Pick, 'danger } /** UI-friendly text container with dark mode support. */ -const Text = React.forwardRef( +const Text = forwardRef( (props, ref) => { const { align, diff --git a/src/components/ui/textarea/textarea.tsx b/src/components/ui/textarea/textarea.tsx index 0ba036a08..5e2c8d0c2 100644 --- a/src/components/ui/textarea/textarea.tsx +++ b/src/components/ui/textarea/textarea.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useState } from 'react'; +import { forwardRef, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useLocale } from 'soapbox/hooks'; @@ -40,7 +40,7 @@ interface ITextarea extends Pick, 'id' | 'name' | 'checked' | 'onChange' | 'required' | 'disabled'> { size?: 'sm' | 'md'; diff --git a/src/components/ui/tooltip/tooltip.tsx b/src/components/ui/tooltip/tooltip.tsx index 08d270c5d..cce1728a2 100644 --- a/src/components/ui/tooltip/tooltip.tsx +++ b/src/components/ui/tooltip/tooltip.tsx @@ -8,7 +8,7 @@ import { useInteractions, useTransitionStyles, } from '@floating-ui/react'; -import React, { useRef, useState } from 'react'; +import { cloneElement, useRef, useState } from 'react'; interface ITooltip { /** Element to display the tooltip around. */ @@ -63,7 +63,7 @@ const Tooltip: React.FC = (props) => { return ( <> - {React.cloneElement(children, { + {cloneElement(children, { ref: refs.setReference, ...getReferenceProps(), })} diff --git a/src/components/ui/widget/widget.tsx b/src/components/ui/widget/widget.tsx index 446312c16..0bc3d87bb 100644 --- a/src/components/ui/widget/widget.tsx +++ b/src/components/ui/widget/widget.tsx @@ -1,5 +1,4 @@ import arrowRightIcon from '@tabler/icons/outline/arrow-right.svg'; -import React from 'react'; import HStack from 'soapbox/components/ui/hstack/hstack'; import IconButton from 'soapbox/components/ui/icon-button/icon-button'; diff --git a/src/components/upload-progress.tsx b/src/components/upload-progress.tsx index e2f44fc64..a20adc502 100644 --- a/src/components/upload-progress.tsx +++ b/src/components/upload-progress.tsx @@ -1,5 +1,4 @@ import cloudUploadIcon from '@tabler/icons/outline/cloud-upload.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { HStack, Icon, ProgressBar, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/components/upload.tsx b/src/components/upload.tsx index 441ca66f9..b4b781e7b 100644 --- a/src/components/upload.tsx +++ b/src/components/upload.tsx @@ -10,7 +10,7 @@ import xIcon from '@tabler/icons/outline/x.svg'; import zoomInIcon from '@tabler/icons/outline/zoom-in.svg'; import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { spring } from 'react-motion'; diff --git a/src/components/validation-checkmark.test.tsx b/src/components/validation-checkmark.test.tsx index eb1f3ec4b..ab9c27638 100644 --- a/src/components/validation-checkmark.test.tsx +++ b/src/components/validation-checkmark.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/components/validation-checkmark.tsx b/src/components/validation-checkmark.tsx index 2a4acd144..01f5ac754 100644 --- a/src/components/validation-checkmark.tsx +++ b/src/components/validation-checkmark.tsx @@ -1,7 +1,6 @@ import checkIcon from '@tabler/icons/outline/check.svg'; import pointIcon from '@tabler/icons/outline/point.svg'; import clsx from 'clsx'; -import React from 'react'; import { HStack, Icon, Text } from 'soapbox/components/ui'; diff --git a/src/components/verification-badge.tsx b/src/components/verification-badge.tsx index 108f1e9c7..7c2c28500 100644 --- a/src/components/verification-badge.tsx +++ b/src/components/verification-badge.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import verifiedIcon from 'soapbox/assets/icons/verified.svg'; diff --git a/src/containers/account-container.tsx b/src/containers/account-container.tsx index 31500b739..5fc6b038e 100644 --- a/src/containers/account-container.tsx +++ b/src/containers/account-container.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useAccount } from 'soapbox/api/hooks'; import Account, { IAccount } from 'soapbox/components/account'; diff --git a/src/containers/status-container.tsx b/src/containers/status-container.tsx index b29310f25..7afb8e41b 100644 --- a/src/containers/status-container.tsx +++ b/src/containers/status-container.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import Status, { IStatus } from 'soapbox/components/status'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/contexts/chat-context.tsx b/src/contexts/chat-context.tsx index 14354549e..1e4d78213 100644 --- a/src/contexts/chat-context.tsx +++ b/src/contexts/chat-context.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; +import { createContext, useContext, useEffect, useMemo, useState } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import { toggleMainWindow } from 'soapbox/actions/chats'; diff --git a/src/contexts/nostr-context.tsx b/src/contexts/nostr-context.tsx index b83c4b950..5366cd35f 100644 --- a/src/contexts/nostr-context.tsx +++ b/src/contexts/nostr-context.tsx @@ -1,5 +1,5 @@ import { NRelay1 } from '@nostrify/nostrify'; -import React, { createContext, useContext, useState, useEffect } from 'react'; +import { createContext, useContext, useState, useEffect } from 'react'; import { useInstance } from 'soapbox/hooks/useInstance'; diff --git a/src/contexts/stat-context.tsx b/src/contexts/stat-context.tsx index ad86d8a6f..3c53bbb53 100644 --- a/src/contexts/stat-context.tsx +++ b/src/contexts/stat-context.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useContext, useMemo, useState } from 'react'; +import { createContext, useContext, useMemo, useState } from 'react'; type IStatContext = { unreadChatsCount: number; diff --git a/src/features/about/index.tsx b/src/features/about/index.tsx index 04bfb7176..43efac7e9 100644 --- a/src/features/about/index.tsx +++ b/src/features/about/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useParams } from 'react-router-dom'; diff --git a/src/features/account-gallery/components/media-item.tsx b/src/features/account-gallery/components/media-item.tsx index 0dc5a7ea2..70c913b8f 100644 --- a/src/features/account-gallery/components/media-item.tsx +++ b/src/features/account-gallery/components/media-item.tsx @@ -1,7 +1,7 @@ import eyeOffIcon from '@tabler/icons/outline/eye-off.svg'; import volumeIcon from '@tabler/icons/outline/volume.svg'; import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import Blurhash from 'soapbox/components/blurhash'; import StillImage from 'soapbox/components/still-image'; diff --git a/src/features/account-gallery/index.tsx b/src/features/account-gallery/index.tsx index a899d8d17..0c7d0e58e 100644 --- a/src/features/account-gallery/index.tsx +++ b/src/features/account-gallery/index.tsx @@ -1,5 +1,5 @@ import { List as ImmutableList } from 'immutable'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { useParams } from 'react-router-dom'; diff --git a/src/features/account-timeline/components/moved-note.tsx b/src/features/account-timeline/components/moved-note.tsx index dbef926ed..993a111ef 100644 --- a/src/features/account-timeline/components/moved-note.tsx +++ b/src/features/account-timeline/components/moved-note.tsx @@ -1,5 +1,4 @@ import briefcaseIcon from '@tabler/icons/outline/briefcase.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import Account from 'soapbox/components/account'; diff --git a/src/features/account-timeline/index.tsx b/src/features/account-timeline/index.tsx index e363f7a7c..3f50f9f3d 100644 --- a/src/features/account-timeline/index.tsx +++ b/src/features/account-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/account/components/header.tsx b/src/features/account/components/header.tsx index 0b215ccc9..1c160e280 100644 --- a/src/features/account/components/header.tsx +++ b/src/features/account/components/header.tsx @@ -22,7 +22,6 @@ import { useMutation } from '@tanstack/react-query'; import { AxiosError } from 'axios'; import { List as ImmutableList } from 'immutable'; import { nip19 } from 'nostr-tools'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/admin/announcements.tsx b/src/features/admin/announcements.tsx index edffda136..12a9408fc 100644 --- a/src/features/admin/announcements.tsx +++ b/src/features/admin/announcements.tsx @@ -1,5 +1,4 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; -import React from 'react'; import { FormattedDate, FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/admin/components/admin-tabs.tsx b/src/features/admin/components/admin-tabs.tsx index debba46a0..ff4a2f364 100644 --- a/src/features/admin/components/admin-tabs.tsx +++ b/src/features/admin/components/admin-tabs.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { useRouteMatch } from 'react-router-dom'; diff --git a/src/features/admin/components/dashcounter.tsx b/src/features/admin/components/dashcounter.tsx index 4006e1d2d..59707fb0f 100644 --- a/src/features/admin/components/dashcounter.tsx +++ b/src/features/admin/components/dashcounter.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedNumber } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/admin/components/latest-accounts-panel.tsx b/src/features/admin/components/latest-accounts-panel.tsx index adb16495e..a63ef3008 100644 --- a/src/features/admin/components/latest-accounts-panel.tsx +++ b/src/features/admin/components/latest-accounts-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/admin/components/registration-mode-picker.tsx b/src/features/admin/components/registration-mode-picker.tsx index 8cd6959bf..55609e979 100644 --- a/src/features/admin/components/registration-mode-picker.tsx +++ b/src/features/admin/components/registration-mode-picker.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { updateConfig } from 'soapbox/actions/admin'; diff --git a/src/features/admin/components/report-status.tsx b/src/features/admin/components/report-status.tsx index 2a158f10e..251febe41 100644 --- a/src/features/admin/components/report-status.tsx +++ b/src/features/admin/components/report-status.tsx @@ -1,7 +1,6 @@ import dotsVerticalIcon from '@tabler/icons/outline/dots-vertical.svg'; import pencilIcon from '@tabler/icons/outline/pencil.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { deleteStatusModal } from 'soapbox/actions/moderation'; diff --git a/src/features/admin/components/report.tsx b/src/features/admin/components/report.tsx index cf3eaa000..86c7cea2c 100644 --- a/src/features/admin/components/report.tsx +++ b/src/features/admin/components/report.tsx @@ -1,7 +1,7 @@ import dotsVerticalIcon from '@tabler/icons/outline/dots-vertical.svg'; import hourglassEmptyIcon from '@tabler/icons/outline/hourglass-empty.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; -import React, { useCallback, useState } from 'react'; +import { useCallback, useState } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/admin/components/unapproved-account.tsx b/src/features/admin/components/unapproved-account.tsx index 9bc42c1cf..7ceacd73d 100644 --- a/src/features/admin/components/unapproved-account.tsx +++ b/src/features/admin/components/unapproved-account.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { approveUser, rejectUser } from 'soapbox/actions/admin'; import { useAccount } from 'soapbox/api/hooks'; diff --git a/src/features/admin/domains.tsx b/src/features/admin/domains.tsx index 32b4614be..1f1dd724c 100644 --- a/src/features/admin/domains.tsx +++ b/src/features/admin/domains.tsx @@ -1,5 +1,5 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/admin/index.tsx b/src/features/admin/index.tsx index c8286b393..77dabcd9a 100644 --- a/src/features/admin/index.tsx +++ b/src/features/admin/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Switch, Route } from 'react-router-dom'; diff --git a/src/features/admin/manage-zap-split.tsx b/src/features/admin/manage-zap-split.tsx index dcb78a968..1c7bdcfc5 100644 --- a/src/features/admin/manage-zap-split.tsx +++ b/src/features/admin/manage-zap-split.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import Account from 'soapbox/components/account'; diff --git a/src/features/admin/moderation-log.tsx b/src/features/admin/moderation-log.tsx index 57a80f83f..0fc82ed0b 100644 --- a/src/features/admin/moderation-log.tsx +++ b/src/features/admin/moderation-log.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedDate, useIntl } from 'react-intl'; import { useModerationLog } from 'soapbox/api/hooks/admin'; diff --git a/src/features/admin/nostr-relays.tsx b/src/features/admin/nostr-relays.tsx index 40c7d719e..b182e9711 100644 --- a/src/features/admin/nostr-relays.tsx +++ b/src/features/admin/nostr-relays.tsx @@ -1,5 +1,5 @@ import { useMutation } from '@tanstack/react-query'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Button, Column, Form, FormActions, Stack } from 'soapbox/components/ui'; diff --git a/src/features/admin/relays.tsx b/src/features/admin/relays.tsx index 1f028c4ea..ff25be118 100644 --- a/src/features/admin/relays.tsx +++ b/src/features/admin/relays.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useRelays } from 'soapbox/api/hooks/admin'; diff --git a/src/features/admin/rules.tsx b/src/features/admin/rules.tsx index cec214c65..42352ed62 100644 --- a/src/features/admin/rules.tsx +++ b/src/features/admin/rules.tsx @@ -1,5 +1,4 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/admin/tabs/awaiting-approval.tsx b/src/features/admin/tabs/awaiting-approval.tsx index 9ae07441a..e8ed05e2c 100644 --- a/src/features/admin/tabs/awaiting-approval.tsx +++ b/src/features/admin/tabs/awaiting-approval.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchUsers } from 'soapbox/actions/admin'; diff --git a/src/features/admin/tabs/dashboard.tsx b/src/features/admin/tabs/dashboard.tsx index 4d68b589e..d577c0797 100644 --- a/src/features/admin/tabs/dashboard.tsx +++ b/src/features/admin/tabs/dashboard.tsx @@ -1,6 +1,5 @@ import downloadIcon from '@tabler/icons/outline/download.svg'; import externalLinkIcon from '@tabler/icons/outline/external-link.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { getSubscribersCsv, getUnsubscribersCsv, getCombinedCsv } from 'soapbox/actions/email-list'; diff --git a/src/features/admin/tabs/reports.tsx b/src/features/admin/tabs/reports.tsx index 99ed6be91..c8de1aa09 100644 --- a/src/features/admin/tabs/reports.tsx +++ b/src/features/admin/tabs/reports.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchReports } from 'soapbox/actions/admin'; diff --git a/src/features/admin/user-index.tsx b/src/features/admin/user-index.tsx index a80f3298d..7d525285b 100644 --- a/src/features/admin/user-index.tsx +++ b/src/features/admin/user-index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useAdminAccounts } from 'soapbox/api/hooks/admin/useAdminAccounts'; diff --git a/src/features/aliases/components/account.tsx b/src/features/aliases/components/account.tsx index 2e20bf0ac..b372cc362 100644 --- a/src/features/aliases/components/account.tsx +++ b/src/features/aliases/components/account.tsx @@ -1,5 +1,4 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { addToAliases } from 'soapbox/actions/aliases'; diff --git a/src/features/aliases/components/search.tsx b/src/features/aliases/components/search.tsx index 85a843abd..807e8729b 100644 --- a/src/features/aliases/components/search.tsx +++ b/src/features/aliases/components/search.tsx @@ -1,6 +1,5 @@ import backspaceIcon from '@tabler/icons/outline/backspace.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchAliasesSuggestions, clearAliasesSuggestions, changeAliasesSuggestions } from 'soapbox/actions/aliases'; diff --git a/src/features/aliases/index.tsx b/src/features/aliases/index.tsx index 01d3c0806..a814e3da5 100644 --- a/src/features/aliases/index.tsx +++ b/src/features/aliases/index.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchAliases, removeFromAliases } from 'soapbox/actions/aliases'; diff --git a/src/features/audio/index.tsx b/src/features/audio/index.tsx index 39effef8d..1aa239ab0 100644 --- a/src/features/audio/index.tsx +++ b/src/features/audio/index.tsx @@ -6,7 +6,7 @@ import volumeIcon from '@tabler/icons/outline/volume.svg'; import clsx from 'clsx'; import debounce from 'lodash/debounce'; import throttle from 'lodash/throttle'; -import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'; +import { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import SvgIcon from 'soapbox/components/ui/icon/svg-icon'; diff --git a/src/features/auth-login/components/captcha.test.tsx b/src/features/auth-login/components/captcha.test.tsx index a9123cbae..a97b29e8c 100644 --- a/src/features/auth-login/components/captcha.test.tsx +++ b/src/features/auth-login/components/captcha.test.tsx @@ -1,6 +1,5 @@ import { Map as ImmutableMap } from 'immutable'; -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/auth-login/components/captcha.tsx b/src/features/auth-login/components/captcha.tsx index 47ac55066..c393731c3 100644 --- a/src/features/auth-login/components/captcha.tsx +++ b/src/features/auth-login/components/captcha.tsx @@ -1,5 +1,5 @@ import { Map as ImmutableMap } from 'immutable'; -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { fetchCaptcha } from 'soapbox/actions/auth'; diff --git a/src/features/auth-login/components/consumer-button.tsx b/src/features/auth-login/components/consumer-button.tsx index 3218d6434..2eebaf9c4 100644 --- a/src/features/auth-login/components/consumer-button.tsx +++ b/src/features/auth-login/components/consumer-button.tsx @@ -5,7 +5,6 @@ import brandSlackIcon from '@tabler/icons/outline/brand-slack.svg'; import brandTwitterIcon from '@tabler/icons/outline/brand-twitter.svg'; import brandWindowsIcon from '@tabler/icons/outline/brand-windows.svg'; import keyIcon from '@tabler/icons/outline/key.svg'; -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { prepareRequest } from 'soapbox/actions/consumer-auth'; diff --git a/src/features/auth-login/components/consumers-list.tsx b/src/features/auth-login/components/consumers-list.tsx index 52f898ad5..d22f1aa4f 100644 --- a/src/features/auth-login/components/consumers-list.tsx +++ b/src/features/auth-login/components/consumers-list.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Card, HStack, Text } from 'soapbox/components/ui'; diff --git a/src/features/auth-login/components/login-form.test.tsx b/src/features/auth-login/components/login-form.test.tsx index 716dae153..49f94cbfc 100644 --- a/src/features/auth-login/components/login-form.test.tsx +++ b/src/features/auth-login/components/login-form.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { fireEvent, render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/auth-login/components/login-form.tsx b/src/features/auth-login/components/login-form.tsx index 21e353d31..6a72e345e 100644 --- a/src/features/auth-login/components/login-form.tsx +++ b/src/features/auth-login/components/login-form.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/auth-login/components/login-page.test.tsx b/src/features/auth-login/components/login-page.test.tsx index cd2b7c19c..b8f646a7a 100644 --- a/src/features/auth-login/components/login-page.test.tsx +++ b/src/features/auth-login/components/login-page.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/auth-login/components/login-page.tsx b/src/features/auth-login/components/login-page.tsx index 50dc1ac83..800c4848e 100644 --- a/src/features/auth-login/components/login-page.tsx +++ b/src/features/auth-login/components/login-page.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/auth-login/components/logout.tsx b/src/features/auth-login/components/logout.tsx index 6f70e0bdd..0508c7572 100644 --- a/src/features/auth-login/components/logout.tsx +++ b/src/features/auth-login/components/logout.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useDispatch } from 'react-redux'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/auth-login/components/otp-auth-form.test.tsx b/src/features/auth-login/components/otp-auth-form.test.tsx index a07454099..91e868ca3 100644 --- a/src/features/auth-login/components/otp-auth-form.test.tsx +++ b/src/features/auth-login/components/otp-auth-form.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/auth-login/components/otp-auth-form.tsx b/src/features/auth-login/components/otp-auth-form.tsx index f988a93fe..08aad366c 100644 --- a/src/features/auth-login/components/otp-auth-form.tsx +++ b/src/features/auth-login/components/otp-auth-form.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/auth-login/components/password-reset-confirm.test.tsx b/src/features/auth-login/components/password-reset-confirm.test.tsx index e566eff39..7000174c9 100644 --- a/src/features/auth-login/components/password-reset-confirm.test.tsx +++ b/src/features/auth-login/components/password-reset-confirm.test.tsx @@ -1,5 +1,4 @@ -import React from 'react'; import { Route, Switch } from 'react-router-dom'; import { describe, expect, it } from 'vitest'; diff --git a/src/features/auth-login/components/password-reset-confirm.tsx b/src/features/auth-login/components/password-reset-confirm.tsx index c079b418d..0c2473389 100644 --- a/src/features/auth-login/components/password-reset-confirm.tsx +++ b/src/features/auth-login/components/password-reset-confirm.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useCallback, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; @@ -25,12 +25,12 @@ const PasswordResetConfirm = () => { const intl = useIntl(); const dispatch = useAppDispatch(); - const [password, setPassword] = React.useState(''); - const [status, setStatus] = React.useState(Statuses.IDLE); + const [password, setPassword] = useState(''); + const [status, setStatus] = useState(Statuses.IDLE); const isLoading = status === Statuses.LOADING; - const handleSubmit: React.FormEventHandler = React.useCallback((event) => { + const handleSubmit: React.FormEventHandler = useCallback((event) => { event.preventDefault(); setStatus(Statuses.LOADING); @@ -39,7 +39,7 @@ const PasswordResetConfirm = () => { .catch(() => setStatus(Statuses.FAIL)); }, [password]); - const onChange: React.ChangeEventHandler = React.useCallback((event) => { + const onChange: React.ChangeEventHandler = useCallback((event) => { setPassword(event.target.value); }, []); diff --git a/src/features/auth-login/components/password-reset.tsx b/src/features/auth-login/components/password-reset.tsx index 8812c5b73..6d5487ceb 100644 --- a/src/features/auth-login/components/password-reset.tsx +++ b/src/features/auth-login/components/password-reset.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/auth-login/components/registration-form.tsx b/src/features/auth-login/components/registration-form.tsx index 43d5e895c..48854d279 100644 --- a/src/features/auth-login/components/registration-form.tsx +++ b/src/features/auth-login/components/registration-form.tsx @@ -3,7 +3,7 @@ import checkIcon from '@tabler/icons/outline/check.svg'; import axios from 'axios'; import { Map as ImmutableMap } from 'immutable'; import debounce from 'lodash/debounce'; -import React, { useState, useRef, useCallback } from 'react'; +import { useState, useRef, useCallback } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/features/auth-login/components/registration-page.tsx b/src/features/auth-login/components/registration-page.tsx index 6cedc1159..0401ebf10 100644 --- a/src/features/auth-login/components/registration-page.tsx +++ b/src/features/auth-login/components/registration-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/auth-token-list/index.tsx b/src/features/auth-token-list/index.tsx index 21cad4ccd..24b4c6867 100644 --- a/src/features/auth-token-list/index.tsx +++ b/src/features/auth-token-list/index.tsx @@ -1,5 +1,5 @@ import alertTriangleIcon from '@tabler/icons/outline/alert-triangle.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedDate, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/backups/index.tsx b/src/features/backups/index.tsx index 6c9d97f92..3274851a5 100644 --- a/src/features/backups/index.tsx +++ b/src/features/backups/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedDate, defineMessages, useIntl } from 'react-intl'; import { fetchBackups, createBackup } from 'soapbox/actions/backups'; diff --git a/src/features/birthdays/account.tsx b/src/features/birthdays/account.tsx index 1cfcd4e4d..78c6f40fe 100644 --- a/src/features/birthdays/account.tsx +++ b/src/features/birthdays/account.tsx @@ -1,5 +1,4 @@ import balloonIcon from '@tabler/icons/outline/balloon.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useAccount } from 'soapbox/api/hooks'; diff --git a/src/features/blocks/index.tsx b/src/features/blocks/index.tsx index f5bedf96c..c62112924 100644 --- a/src/features/blocks/index.tsx +++ b/src/features/blocks/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useBlocks } from 'soapbox/api/hooks'; diff --git a/src/features/bookmark-folders/components/new-folder-form.tsx b/src/features/bookmark-folders/components/new-folder-form.tsx index badd6006f..5f4fb4ec5 100644 --- a/src/features/bookmark-folders/components/new-folder-form.tsx +++ b/src/features/bookmark-folders/components/new-folder-form.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useCreateBookmarkFolder } from 'soapbox/api/hooks'; diff --git a/src/features/bookmark-folders/index.tsx b/src/features/bookmark-folders/index.tsx index e4f87046f..591485c09 100644 --- a/src/features/bookmark-folders/index.tsx +++ b/src/features/bookmark-folders/index.tsx @@ -1,6 +1,5 @@ import bookmarksIcon from '@tabler/icons/outline/bookmarks.svg'; import folderIcon from '@tabler/icons/outline/folder.svg'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/bookmarks/index.tsx b/src/features/bookmarks/index.tsx index 3921dad63..a2452434d 100644 --- a/src/features/bookmarks/index.tsx +++ b/src/features/bookmarks/index.tsx @@ -3,7 +3,7 @@ import editIcon from '@tabler/icons/outline/edit.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; -import React from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; @@ -57,7 +57,7 @@ const Bookmarks: React.FC = ({ params }) => { const isLoading = useAppSelector((state) => state.status_lists.get(bookmarksKey)?.isLoading === true); const hasMore = useAppSelector((state) => !!state.status_lists.get(bookmarksKey)?.next); - React.useEffect(() => { + useEffect(() => { dispatch(fetchBookmarkedStatuses(folderId)); }, [folderId]); diff --git a/src/features/chats/components/chat-composer.tsx b/src/features/chats/components/chat-composer.tsx index 1228836c5..11e3bdf6c 100644 --- a/src/features/chats/components/chat-composer.tsx +++ b/src/features/chats/components/chat-composer.tsx @@ -1,5 +1,5 @@ import sendIcon from '@tabler/icons/outline/send.svg'; -import React, { useState } from 'react'; +import { forwardRef, useState } from 'react'; import { defineMessages, IntlShape, useIntl } from 'react-intl'; import { unblockAccount } from 'soapbox/actions/accounts'; @@ -53,7 +53,7 @@ interface IChatComposer extends Pick(({ +const ChatComposer = forwardRef(({ onKeyDown, onChange, value, diff --git a/src/features/chats/components/chat-list-item.test.tsx b/src/features/chats/components/chat-list-item.test.tsx index 817b3b1ec..d419dc9d0 100644 --- a/src/features/chats/components/chat-list-item.test.tsx +++ b/src/features/chats/components/chat-list-item.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/chats/components/chat-list-item.tsx b/src/features/chats/components/chat-list-item.tsx index ff642e95e..1195522bb 100644 --- a/src/features/chats/components/chat-list-item.tsx +++ b/src/features/chats/components/chat-list-item.tsx @@ -1,6 +1,6 @@ import dotsIcon from '@tabler/icons/outline/dots.svg'; import logoutIcon from '@tabler/icons/outline/logout.svg'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-list.tsx b/src/features/chats/components/chat-list.tsx index 0c353e940..90a59141e 100644 --- a/src/features/chats/components/chat-list.tsx +++ b/src/features/chats/components/chat-list.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { Virtuoso } from 'react-virtuoso'; import { fetchChats } from 'soapbox/actions/chats'; diff --git a/src/features/chats/components/chat-message-list-intro.tsx b/src/features/chats/components/chat-message-list-intro.tsx index a4e84f37e..36047b8ab 100644 --- a/src/features/chats/components/chat-message-list-intro.tsx +++ b/src/features/chats/components/chat-message-list-intro.tsx @@ -1,6 +1,5 @@ import clockIcon from '@tabler/icons/outline/clock.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-message-list.test.tsx b/src/features/chats/components/chat-message-list.test.tsx index 0a9da18c9..8e3f0ec0a 100644 --- a/src/features/chats/components/chat-message-list.test.tsx +++ b/src/features/chats/components/chat-message-list.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { VirtuosoMockContext } from 'react-virtuoso'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/src/features/chats/components/chat-message-list.tsx b/src/features/chats/components/chat-message-list.tsx index 8d4e02f1d..376510459 100644 --- a/src/features/chats/components/chat-message-list.tsx +++ b/src/features/chats/components/chat-message-list.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'; +import { useState, useEffect, useRef, useCallback, useMemo, forwardRef } from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { Components, Virtuoso, VirtuosoHandle } from 'react-virtuoso'; @@ -41,12 +41,12 @@ const timeChange = (prev: ChatMessageEntity, curr: ChatMessageEntity): TimeForma const START_INDEX = 10000; -const List: Components['List'] = React.forwardRef((props, ref) => { +const List: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); -const Scroller: Components['Scroller'] = React.forwardRef((props, ref) => { +const Scroller: Components['Scroller'] = forwardRef((props, ref) => { const { style, context, ...rest } = props; return ( diff --git a/src/features/chats/components/chat-message-reaction-wrapper/chat-message-reaction-wrapper.tsx b/src/features/chats/components/chat-message-reaction-wrapper/chat-message-reaction-wrapper.tsx index 6e604ff09..e7575707d 100644 --- a/src/features/chats/components/chat-message-reaction-wrapper/chat-message-reaction-wrapper.tsx +++ b/src/features/chats/components/chat-message-reaction-wrapper/chat-message-reaction-wrapper.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect, cloneElement } from 'react'; import { Portal } from 'soapbox/components/ui'; import EmojiSelector from 'soapbox/components/ui/emoji-selector/emoji-selector'; @@ -31,8 +31,8 @@ function ChatMessageReactionWrapper(props: IChatMessageReactionWrapper) { }, [isOpen]); return ( - - {React.cloneElement(children, { + <> + {cloneElement(children, { ref: setReferenceElement, onClick: onToggleVisibility, })} @@ -49,7 +49,7 @@ function ChatMessageReactionWrapper(props: IChatMessageReactionWrapper) { /> )} - + ); } diff --git a/src/features/chats/components/chat-message-reaction.test.tsx b/src/features/chats/components/chat-message-reaction.test.tsx index 9c625c1b7..9868a932d 100644 --- a/src/features/chats/components/chat-message-reaction.test.tsx +++ b/src/features/chats/components/chat-message-reaction.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/chats/components/chat-message-reaction.tsx b/src/features/chats/components/chat-message-reaction.tsx index 3b054bd50..3f4e4d033 100644 --- a/src/features/chats/components/chat-message-reaction.tsx +++ b/src/features/chats/components/chat-message-reaction.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { Text } from 'soapbox/components/ui'; import emojify from 'soapbox/features/emoji'; diff --git a/src/features/chats/components/chat-message.tsx b/src/features/chats/components/chat-message.tsx index 218e7bc42..af9932baf 100644 --- a/src/features/chats/components/chat-message.tsx +++ b/src/features/chats/components/chat-message.tsx @@ -8,7 +8,7 @@ import { useMutation } from '@tanstack/react-query'; import clsx from 'clsx'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; import escape from 'lodash/escape'; -import React, { useMemo, useState } from 'react'; +import { useMemo, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/chats/components/chat-page/chat-page.tsx b/src/features/chats/components/chat-page/chat-page.tsx index bb20afa80..d629d92a0 100644 --- a/src/features/chats/components/chat-page/chat-page.tsx +++ b/src/features/chats/components/chat-page/chat-page.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'; +import { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { matchPath, Route, Switch, useHistory } from 'react-router-dom'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-page/components/blankslate-empty.tsx b/src/features/chats/components/chat-page/components/blankslate-empty.tsx index 18f177f24..e75704e1b 100644 --- a/src/features/chats/components/chat-page/components/blankslate-empty.tsx +++ b/src/features/chats/components/chat-page/components/blankslate-empty.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/blankslate-with-chats.tsx b/src/features/chats/components/chat-page/components/blankslate-with-chats.tsx index 956672a19..c6a7c5507 100644 --- a/src/features/chats/components/chat-page/components/blankslate-with-chats.tsx +++ b/src/features/chats/components/chat-page/components/blankslate-with-chats.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/chat-page-main.tsx b/src/features/chats/components/chat-page/components/chat-page-main.tsx index 530eec265..e5417cc81 100644 --- a/src/features/chats/components/chat-page/components/chat-page-main.tsx +++ b/src/features/chats/components/chat-page/components/chat-page-main.tsx @@ -2,7 +2,7 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import banIcon from '@tabler/icons/outline/ban.svg'; import infoCircleIcon from '@tabler/icons/outline/info-circle.svg'; import logoutIcon from '@tabler/icons/outline/logout.svg'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link, useHistory, useParams } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/chat-page-new.tsx b/src/features/chats/components/chat-page/components/chat-page-new.tsx index 3b3e879ed..5857b5346 100644 --- a/src/features/chats/components/chat-page/components/chat-page-new.tsx +++ b/src/features/chats/components/chat-page/components/chat-page-new.tsx @@ -1,5 +1,4 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/chat-page-settings.tsx b/src/features/chats/components/chat-page/components/chat-page-settings.tsx index 099e8c8ce..5f848b8cc 100644 --- a/src/features/chats/components/chat-page/components/chat-page-settings.tsx +++ b/src/features/chats/components/chat-page/components/chat-page-settings.tsx @@ -1,5 +1,5 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/chat-page-sidebar.tsx b/src/features/chats/components/chat-page/components/chat-page-sidebar.tsx index 65db6b536..d0c8b621f 100644 --- a/src/features/chats/components/chat-page/components/chat-page-sidebar.tsx +++ b/src/features/chats/components/chat-page/components/chat-page-sidebar.tsx @@ -1,6 +1,6 @@ import editIcon from '@tabler/icons/outline/edit.svg'; import settingsIcon from '@tabler/icons/outline/settings.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-page/components/welcome.tsx b/src/features/chats/components/chat-page/components/welcome.tsx index f78de0e32..12bf5f968 100644 --- a/src/features/chats/components/chat-page/components/welcome.tsx +++ b/src/features/chats/components/chat-page/components/welcome.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import List, { ListItem } from 'soapbox/components/list'; diff --git a/src/features/chats/components/chat-pane-header.test.tsx b/src/features/chats/components/chat-pane-header.test.tsx index 0a328b2d5..53d34cb9a 100644 --- a/src/features/chats/components/chat-pane-header.test.tsx +++ b/src/features/chats/components/chat-pane-header.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/chats/components/chat-pane/blankslate.tsx b/src/features/chats/components/chat-pane/blankslate.tsx index d718ff376..a28b24ce1 100644 --- a/src/features/chats/components/chat-pane/blankslate.tsx +++ b/src/features/chats/components/chat-pane/blankslate.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Button, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-pane/chat-pane.test.tsx b/src/features/chats/components/chat-pane/chat-pane.test.tsx index 72bab50ee..c28cd76f6 100644 --- a/src/features/chats/components/chat-pane/chat-pane.test.tsx +++ b/src/features/chats/components/chat-pane/chat-pane.test.tsx @@ -1,5 +1,4 @@ -import React from 'react'; import { VirtuosoMockContext } from 'react-virtuoso'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/src/features/chats/components/chat-pane/chat-pane.tsx b/src/features/chats/components/chat-pane/chat-pane.tsx index 031b0becd..75f767086 100644 --- a/src/features/chats/components/chat-pane/chat-pane.tsx +++ b/src/features/chats/components/chat-pane/chat-pane.tsx @@ -1,5 +1,5 @@ import editIcon from '@tabler/icons/outline/edit.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-pending-upload.tsx b/src/features/chats/components/chat-pending-upload.tsx index 63cbd173f..220e0fe9a 100644 --- a/src/features/chats/components/chat-pending-upload.tsx +++ b/src/features/chats/components/chat-pending-upload.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { ProgressBar } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-search-input.tsx b/src/features/chats/components/chat-search-input.tsx index 6737d9783..22786e81b 100644 --- a/src/features/chats/components/chat-search-input.tsx +++ b/src/features/chats/components/chat-search-input.tsx @@ -1,6 +1,5 @@ import searchIcon from '@tabler/icons/outline/search.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Icon, Input } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-search/blankslate.tsx b/src/features/chats/components/chat-search/blankslate.tsx index f4ffd748b..a86d7610c 100644 --- a/src/features/chats/components/chat-search/blankslate.tsx +++ b/src/features/chats/components/chat-search/blankslate.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-search/chat-search.test.tsx b/src/features/chats/components/chat-search/chat-search.test.tsx index de9a1c0d0..b1618c93a 100644 --- a/src/features/chats/components/chat-search/chat-search.test.tsx +++ b/src/features/chats/components/chat-search/chat-search.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { VirtuosoMockContext } from 'react-virtuoso'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/src/features/chats/components/chat-search/chat-search.tsx b/src/features/chats/components/chat-search/chat-search.tsx index 4b1af584c..aa69eb85c 100644 --- a/src/features/chats/components/chat-search/chat-search.tsx +++ b/src/features/chats/components/chat-search/chat-search.tsx @@ -2,7 +2,7 @@ import searchIcon from '@tabler/icons/outline/search.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import { useMutation } from '@tanstack/react-query'; import { AxiosError } from 'axios'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-search/empty-results-blankslate.tsx b/src/features/chats/components/chat-search/empty-results-blankslate.tsx index 4a890f699..25176ecc6 100644 --- a/src/features/chats/components/chat-search/empty-results-blankslate.tsx +++ b/src/features/chats/components/chat-search/empty-results-blankslate.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-search/results.tsx b/src/features/chats/components/chat-search/results.tsx index 91a6fdb95..70ce4e0f2 100644 --- a/src/features/chats/components/chat-search/results.tsx +++ b/src/features/chats/components/chat-search/results.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useCallback, useState } from 'react'; +import { useCallback, useState } from 'react'; import { Virtuoso } from 'react-virtuoso'; import { Avatar, HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-textarea.tsx b/src/features/chats/components/chat-textarea.tsx index a8269b0c0..50c95947b 100644 --- a/src/features/chats/components/chat-textarea.tsx +++ b/src/features/chats/components/chat-textarea.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { forwardRef } from 'react'; import { HStack, Textarea } from 'soapbox/components/ui'; import { Attachment } from 'soapbox/types/entities'; @@ -14,7 +14,7 @@ interface IChatTextarea extends React.ComponentProps { } /** Custom textarea for chats. */ -const ChatTextarea: React.FC = React.forwardRef(({ +const ChatTextarea: React.FC = forwardRef(({ attachments, onDeleteAttachment, uploadCount = 0, diff --git a/src/features/chats/components/chat-upload-preview.tsx b/src/features/chats/components/chat-upload-preview.tsx index ce04f5861..cef73e79b 100644 --- a/src/features/chats/components/chat-upload-preview.tsx +++ b/src/features/chats/components/chat-upload-preview.tsx @@ -1,5 +1,4 @@ import paperclipIcon from '@tabler/icons/outline/paperclip.svg'; -import React from 'react'; import { Icon } from 'soapbox/components/ui'; import { MIMETYPE_ICONS } from 'soapbox/components/upload'; diff --git a/src/features/chats/components/chat-upload.tsx b/src/features/chats/components/chat-upload.tsx index 1963cd800..f1c9bddcd 100644 --- a/src/features/chats/components/chat-upload.tsx +++ b/src/features/chats/components/chat-upload.tsx @@ -1,7 +1,6 @@ import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React from 'react'; import { openModal } from 'soapbox/actions/modals'; import Blurhash from 'soapbox/components/blurhash'; diff --git a/src/features/chats/components/chat-widget.test.tsx b/src/features/chats/components/chat-widget.test.tsx index cc3b02e5d..5bda994ee 100644 --- a/src/features/chats/components/chat-widget.test.tsx +++ b/src/features/chats/components/chat-widget.test.tsx @@ -1,5 +1,4 @@ -import React from 'react'; import { Route, Switch } from 'react-router-dom'; import { describe, expect, it } from 'vitest'; diff --git a/src/features/chats/components/chat-widget/chat-pane-header.tsx b/src/features/chats/components/chat-widget/chat-pane-header.tsx index 76130c690..587af09f2 100644 --- a/src/features/chats/components/chat-widget/chat-pane-header.tsx +++ b/src/features/chats/components/chat-widget/chat-pane-header.tsx @@ -1,6 +1,6 @@ import chevronDownIcon from '@tabler/icons/outline/chevron-down.svg'; import chevronUpIcon from '@tabler/icons/outline/chevron-up.svg'; -import React, { HTMLAttributes } from 'react'; +import { HTMLAttributes } from 'react'; import { HStack, IconButton, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat-widget/chat-settings.tsx b/src/features/chats/components/chat-widget/chat-settings.tsx index 40a4d6f74..0d28d8391 100644 --- a/src/features/chats/components/chat-widget/chat-settings.tsx +++ b/src/features/chats/components/chat-widget/chat-settings.tsx @@ -1,7 +1,6 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import banIcon from '@tabler/icons/outline/ban.svg'; import logoutIcon from '@tabler/icons/outline/logout.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { blockAccount, unblockAccount } from 'soapbox/actions/accounts'; diff --git a/src/features/chats/components/chat-widget/chat-widget.tsx b/src/features/chats/components/chat-widget/chat-widget.tsx index 05b9fb255..7a4c31050 100644 --- a/src/features/chats/components/chat-widget/chat-widget.tsx +++ b/src/features/chats/components/chat-widget/chat-widget.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useHistory } from 'react-router-dom'; import { ChatProvider } from 'soapbox/contexts/chat-context'; diff --git a/src/features/chats/components/chat-widget/chat-window.tsx b/src/features/chats/components/chat-widget/chat-window.tsx index cd3f6c931..5e072a79c 100644 --- a/src/features/chats/components/chat-widget/chat-window.tsx +++ b/src/features/chats/components/chat-widget/chat-window.tsx @@ -1,7 +1,7 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import editIcon from '@tabler/icons/outline/edit.svg'; import infoCircleIcon from '@tabler/icons/outline/info-circle.svg'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/chats/components/chat-widget/headers/chat-search-header.tsx b/src/features/chats/components/chat-widget/headers/chat-search-header.tsx index cf76a6442..655d41e78 100644 --- a/src/features/chats/components/chat-widget/headers/chat-search-header.tsx +++ b/src/features/chats/components/chat-widget/headers/chat-search-header.tsx @@ -1,5 +1,4 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { HStack, Icon, Text } from 'soapbox/components/ui'; diff --git a/src/features/chats/components/chat.tsx b/src/features/chats/components/chat.tsx index e7ef9c68d..82a78a8ec 100644 --- a/src/features/chats/components/chat.tsx +++ b/src/features/chats/components/chat.tsx @@ -1,6 +1,6 @@ import { AxiosError } from 'axios'; import clsx from 'clsx'; -import React, { MutableRefObject, useEffect, useState } from 'react'; +import { MutableRefObject, useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { uploadMedia } from 'soapbox/actions/media'; diff --git a/src/features/chats/components/ui/pane.tsx b/src/features/chats/components/ui/pane.tsx index db9fc9666..b09cc8704 100644 --- a/src/features/chats/components/ui/pane.tsx +++ b/src/features/chats/components/ui/pane.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IPane { /** Whether the pane is open or minimized. */ diff --git a/src/features/chats/index.tsx b/src/features/chats/index.tsx index c54bab37b..e44d5695c 100644 --- a/src/features/chats/index.tsx +++ b/src/features/chats/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { ChatProvider } from 'soapbox/contexts/chat-context'; diff --git a/src/features/community-timeline/index.tsx b/src/features/community-timeline/index.tsx index 69dab59ac..111990237 100644 --- a/src/features/community-timeline/index.tsx +++ b/src/features/community-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { expandCommunityTimeline } from 'soapbox/actions/timelines'; diff --git a/src/features/compose/components/autosuggest-account.tsx b/src/features/compose/components/autosuggest-account.tsx index d3b3a295f..1b3d2c3bd 100644 --- a/src/features/compose/components/autosuggest-account.tsx +++ b/src/features/compose/components/autosuggest-account.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useAccount } from 'soapbox/api/hooks'; import Account from 'soapbox/components/account'; diff --git a/src/features/compose/components/compose-form-button.tsx b/src/features/compose/components/compose-form-button.tsx index 3002f2e1e..fd552107c 100644 --- a/src/features/compose/components/compose-form-button.tsx +++ b/src/features/compose/components/compose-form-button.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { IconButton } from 'soapbox/components/ui'; diff --git a/src/features/compose/components/compose-form.tsx b/src/features/compose/components/compose-form.tsx index af8218509..8cba0f713 100644 --- a/src/features/compose/components/compose-form.tsx +++ b/src/features/compose/components/compose-form.tsx @@ -2,7 +2,7 @@ import lockIcon from '@tabler/icons/outline/lock.svg'; import mailIcon from '@tabler/icons/outline/mail.svg'; import clsx from 'clsx'; import { CLEAR_EDITOR_COMMAND, TextNode, type LexicalEditor, $getRoot } from 'lexical'; -import React, { Suspense, useCallback, useEffect, useRef, useState } from 'react'; +import { Suspense, useCallback, useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import { length } from 'stringz'; diff --git a/src/features/compose/components/markdown-button.tsx b/src/features/compose/components/markdown-button.tsx index 62e3621b7..13fcfebda 100644 --- a/src/features/compose/components/markdown-button.tsx +++ b/src/features/compose/components/markdown-button.tsx @@ -1,5 +1,4 @@ import markdownIcon from '@tabler/icons/outline/markdown.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeComposeContentType } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/poll-button.tsx b/src/features/compose/components/poll-button.tsx index 0ef868a10..81463a0de 100644 --- a/src/features/compose/components/poll-button.tsx +++ b/src/features/compose/components/poll-button.tsx @@ -1,5 +1,4 @@ import chartBarIcon from '@tabler/icons/outline/chart-bar.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { addPoll, removePoll } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/polls/duration-selector.test.tsx b/src/features/compose/components/polls/duration-selector.test.tsx index 02cab0f7e..b221ade24 100644 --- a/src/features/compose/components/polls/duration-selector.test.tsx +++ b/src/features/compose/components/polls/duration-selector.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/compose/components/polls/duration-selector.tsx b/src/features/compose/components/polls/duration-selector.tsx index 72b5de8bd..5b35daa83 100644 --- a/src/features/compose/components/polls/duration-selector.tsx +++ b/src/features/compose/components/polls/duration-selector.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Select } from 'soapbox/components/ui'; diff --git a/src/features/compose/components/polls/poll-form.tsx b/src/features/compose/components/polls/poll-form.tsx index e28fac52f..2877e4071 100644 --- a/src/features/compose/components/polls/poll-form.tsx +++ b/src/features/compose/components/polls/poll-form.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { addPollOption, changePollOption, changePollSettings, clearComposeSuggestions, fetchComposeSuggestions, removePoll, removePollOption, selectComposeSuggestion } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/privacy-dropdown.tsx b/src/features/compose/components/privacy-dropdown.tsx index 0063ad65b..8f31f08d5 100644 --- a/src/features/compose/components/privacy-dropdown.tsx +++ b/src/features/compose/components/privacy-dropdown.tsx @@ -4,7 +4,7 @@ import mailIcon from '@tabler/icons/outline/mail.svg'; import worldIcon from '@tabler/icons/outline/world.svg'; import clsx from 'clsx'; import { supportsPassiveEvents } from 'detect-passive-events'; -import React, { useState, useRef, useEffect } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { spring } from 'react-motion'; // @ts-ignore diff --git a/src/features/compose/components/reply-group-indicator.tsx b/src/features/compose/components/reply-group-indicator.tsx index 2554ee67f..b3764f50f 100644 --- a/src/features/compose/components/reply-group-indicator.tsx +++ b/src/features/compose/components/reply-group-indicator.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import Link from 'soapbox/components/link'; diff --git a/src/features/compose/components/reply-indicator.tsx b/src/features/compose/components/reply-indicator.tsx index 694ace5cb..840ca5f79 100644 --- a/src/features/compose/components/reply-indicator.tsx +++ b/src/features/compose/components/reply-indicator.tsx @@ -1,6 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React from 'react'; import AttachmentThumbs from 'soapbox/components/attachment-thumbs'; import Markup from 'soapbox/components/markup'; diff --git a/src/features/compose/components/reply-mentions.tsx b/src/features/compose/components/reply-mentions.tsx index eb96b4b44..60f3e293c 100644 --- a/src/features/compose/components/reply-mentions.tsx +++ b/src/features/compose/components/reply-mentions.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { FormattedList, FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/compose/components/schedule-button.tsx b/src/features/compose/components/schedule-button.tsx index 65ebce9a7..c43a85b24 100644 --- a/src/features/compose/components/schedule-button.tsx +++ b/src/features/compose/components/schedule-button.tsx @@ -1,5 +1,4 @@ import calendarStatsIcon from '@tabler/icons/outline/calendar-stats.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { addSchedule, removeSchedule } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/schedule-form.tsx b/src/features/compose/components/schedule-form.tsx index 2c5acfeca..9a8dc4808 100644 --- a/src/features/compose/components/schedule-form.tsx +++ b/src/features/compose/components/schedule-form.tsx @@ -1,5 +1,4 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { setSchedule, removeSchedule } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/search-results.tsx b/src/features/compose/components/search-results.tsx index a6cc2df1a..19ed7f0ae 100644 --- a/src/features/compose/components/search-results.tsx +++ b/src/features/compose/components/search-results.tsx @@ -1,6 +1,6 @@ import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { expandSearch, setFilter, setSearchAccount } from 'soapbox/actions/search'; diff --git a/src/features/compose/components/search-zap-split.tsx b/src/features/compose/components/search-zap-split.tsx index d1efcf706..892b4262f 100644 --- a/src/features/compose/components/search-zap-split.tsx +++ b/src/features/compose/components/search-zap-split.tsx @@ -1,7 +1,7 @@ import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/compose/components/search.tsx b/src/features/compose/components/search.tsx index 8c48c15b6..b1d79a4a2 100644 --- a/src/features/compose/components/search.tsx +++ b/src/features/compose/components/search.tsx @@ -2,7 +2,7 @@ import searchIcon from '@tabler/icons/outline/search.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/compose/components/spoiler-button.tsx b/src/features/compose/components/spoiler-button.tsx index 38eca8177..7f23a578d 100644 --- a/src/features/compose/components/spoiler-button.tsx +++ b/src/features/compose/components/spoiler-button.tsx @@ -1,5 +1,4 @@ import alertTriangleIcon from '@tabler/icons/outline/alert-triangle.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeComposeSpoilerness } from 'soapbox/actions/compose'; diff --git a/src/features/compose/components/spoiler-input.tsx b/src/features/compose/components/spoiler-input.tsx index 183f58812..e9e79173a 100644 --- a/src/features/compose/components/spoiler-input.tsx +++ b/src/features/compose/components/spoiler-input.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeComposeSpoilerness, changeComposeSpoilerText } from 'soapbox/actions/compose'; @@ -18,7 +18,7 @@ interface ISpoilerInput extends Pick(({ +const SpoilerInput = forwardRef(({ composeId, onSuggestionsFetchRequested, onSuggestionsClearRequested, diff --git a/src/features/compose/components/text-character-counter.tsx b/src/features/compose/components/text-character-counter.tsx index fc7ddc989..7f1b6e13a 100644 --- a/src/features/compose/components/text-character-counter.tsx +++ b/src/features/compose/components/text-character-counter.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { length } from 'stringz'; interface ITextCharacterCounter { diff --git a/src/features/compose/components/upload-button.tsx b/src/features/compose/components/upload-button.tsx index a2fb80c67..68ea472fd 100644 --- a/src/features/compose/components/upload-button.tsx +++ b/src/features/compose/components/upload-button.tsx @@ -1,6 +1,6 @@ import paperclipIcon from '@tabler/icons/outline/paperclip.svg'; import photoIcon from '@tabler/icons/outline/photo.svg'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { defineMessages, IntlShape, useIntl } from 'react-intl'; import { IconButton } from 'soapbox/components/ui'; diff --git a/src/features/compose/components/upload-form.tsx b/src/features/compose/components/upload-form.tsx index ac6ea3d8d..424e9aaac 100644 --- a/src/features/compose/components/upload-form.tsx +++ b/src/features/compose/components/upload-form.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useCallback, useRef } from 'react'; +import { useCallback, useRef } from 'react'; import { changeMediaOrder } from 'soapbox/actions/compose'; import { HStack } from 'soapbox/components/ui'; diff --git a/src/features/compose/components/upload-progress.tsx b/src/features/compose/components/upload-progress.tsx index a3b9c0758..8652e64bb 100644 --- a/src/features/compose/components/upload-progress.tsx +++ b/src/features/compose/components/upload-progress.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import UploadProgress from 'soapbox/components/upload-progress'; import { useCompose } from 'soapbox/hooks'; diff --git a/src/features/compose/components/upload.tsx b/src/features/compose/components/upload.tsx index 9d3a588e2..fa834fd8e 100644 --- a/src/features/compose/components/upload.tsx +++ b/src/features/compose/components/upload.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { undoUploadCompose, changeUploadCompose } from 'soapbox/actions/compose'; import Upload from 'soapbox/components/upload'; diff --git a/src/features/compose/components/visual-character-counter.tsx b/src/features/compose/components/visual-character-counter.tsx index 647b3e8c3..b056d235e 100644 --- a/src/features/compose/components/visual-character-counter.tsx +++ b/src/features/compose/components/visual-character-counter.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { length } from 'stringz'; diff --git a/src/features/compose/components/warning.tsx b/src/features/compose/components/warning.tsx index 28f7edf64..15185e263 100644 --- a/src/features/compose/components/warning.tsx +++ b/src/features/compose/components/warning.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { spring } from 'react-motion'; import Motion from '../../ui/util/optional-motion'; diff --git a/src/features/compose/containers/quoted-status-container.tsx b/src/features/compose/containers/quoted-status-container.tsx index 5383aaf18..56d341e9d 100644 --- a/src/features/compose/containers/quoted-status-container.tsx +++ b/src/features/compose/containers/quoted-status-container.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { cancelQuoteCompose } from 'soapbox/actions/compose'; import QuotedStatus from 'soapbox/components/quoted-status'; diff --git a/src/features/compose/containers/warning-container.tsx b/src/features/compose/containers/warning-container.tsx index 8ebfd5f8f..bbfc199cb 100644 --- a/src/features/compose/containers/warning-container.tsx +++ b/src/features/compose/containers/warning-container.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/compose/editor/index.tsx b/src/features/compose/editor/index.tsx index eeb6c1f02..eccf8f8c6 100644 --- a/src/features/compose/editor/index.tsx +++ b/src/features/compose/editor/index.tsx @@ -15,7 +15,7 @@ import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'; import { PlainTextPlugin } from '@lexical/react/LexicalPlainTextPlugin'; import clsx from 'clsx'; import { $createParagraphNode, $createTextNode, $getRoot, type LexicalEditor } from 'lexical'; -import React, { useMemo, useState } from 'react'; +import { forwardRef, useMemo, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useAppDispatch } from 'soapbox/hooks'; @@ -68,7 +68,7 @@ const theme: InitialConfigType['theme'] = { }, }; -const ComposeEditor = React.forwardRef(({ +const ComposeEditor = forwardRef(({ className, placeholderClassName, composeId, diff --git a/src/features/compose/editor/nodes/emoji-node.tsx b/src/features/compose/editor/nodes/emoji-node.tsx index d773a063c..81a39a05c 100644 --- a/src/features/compose/editor/nodes/emoji-node.tsx +++ b/src/features/compose/editor/nodes/emoji-node.tsx @@ -1,5 +1,4 @@ import { $applyNodeReplacement, DecoratorNode } from 'lexical'; -import React from 'react'; import { Emoji as Component } from 'soapbox/components/ui'; import { isNativeEmoji, type Emoji } from 'soapbox/features/emoji'; diff --git a/src/features/compose/editor/nodes/mention-node.tsx b/src/features/compose/editor/nodes/mention-node.tsx index 7ea8646ae..7ebe49644 100644 --- a/src/features/compose/editor/nodes/mention-node.tsx +++ b/src/features/compose/editor/nodes/mention-node.tsx @@ -5,7 +5,6 @@ */ import { $applyNodeReplacement, DecoratorNode } from 'lexical'; -import React from 'react'; import Mention from 'soapbox/components/mention'; diff --git a/src/features/compose/editor/plugins/autosuggest-plugin.tsx b/src/features/compose/editor/plugins/autosuggest-plugin.tsx index 834d04721..ca4e4cf8b 100644 --- a/src/features/compose/editor/plugins/autosuggest-plugin.tsx +++ b/src/features/compose/editor/plugins/autosuggest-plugin.tsx @@ -22,9 +22,10 @@ import { RangeSelection, TextNode, } from 'lexical'; -import React, { +import { MutableRefObject, ReactPortal, + startTransition, useCallback, useEffect, useRef, @@ -101,14 +102,6 @@ const isSelectionOnEntityBoundary = ( }); }; -const startTransition = (callback: () => void) => { - if (React.startTransition) { - React.startTransition(callback); - } else { - callback(); - } -}; - // Got from https://stackoverflow.com/a/42543908/2013580 const getScrollParent = ( element: HTMLElement, diff --git a/src/features/compose/editor/plugins/ref-plugin.tsx b/src/features/compose/editor/plugins/ref-plugin.tsx index b13cea3e1..e91fbc93b 100644 --- a/src/features/compose/editor/plugins/ref-plugin.tsx +++ b/src/features/compose/editor/plugins/ref-plugin.tsx @@ -1,9 +1,9 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; import { LexicalEditor } from 'lexical'; -import React, { useEffect } from 'react'; +import { forwardRef, useEffect } from 'react'; /** Set the ref to the current Lexical editor instance. */ -const RefPlugin = React.forwardRef((_props, ref) => { +const RefPlugin = forwardRef((_props, ref) => { const [editor] = useLexicalComposerContext(); useEffect(() => { diff --git a/src/features/conversations/components/conversation.tsx b/src/features/conversations/components/conversation.tsx index 20cbf4d98..eb390a305 100644 --- a/src/features/conversations/components/conversation.tsx +++ b/src/features/conversations/components/conversation.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useHistory } from 'react-router-dom'; import { markConversationRead } from 'soapbox/actions/conversations'; diff --git a/src/features/conversations/components/conversations-list.tsx b/src/features/conversations/components/conversations-list.tsx index 65c2ef3e1..6fd74bf7e 100644 --- a/src/features/conversations/components/conversations-list.tsx +++ b/src/features/conversations/components/conversations-list.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { expandConversations } from 'soapbox/actions/conversations'; diff --git a/src/features/conversations/index.tsx b/src/features/conversations/index.tsx index 1f6774ab9..1bd0f2074 100644 --- a/src/features/conversations/index.tsx +++ b/src/features/conversations/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { directComposeById } from 'soapbox/actions/compose'; diff --git a/src/features/crypto-donate/components/crypto-address.tsx b/src/features/crypto-donate/components/crypto-address.tsx index fa6f4c0ba..860110936 100644 --- a/src/features/crypto-donate/components/crypto-address.tsx +++ b/src/features/crypto-donate/components/crypto-address.tsx @@ -1,6 +1,5 @@ import externalLinkIcon from '@tabler/icons/outline/external-link.svg'; import qrcodeIcon from '@tabler/icons/outline/qrcode.svg'; -import React from 'react'; import { openModal } from 'soapbox/actions/modals'; import CopyableInput from 'soapbox/components/copyable-input'; diff --git a/src/features/crypto-donate/components/crypto-donate-panel.tsx b/src/features/crypto-donate/components/crypto-donate-panel.tsx index b61a7bad1..0c0df631e 100644 --- a/src/features/crypto-donate/components/crypto-donate-panel.tsx +++ b/src/features/crypto-donate/components/crypto-donate-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/crypto-donate/components/crypto-icon.tsx b/src/features/crypto-donate/components/crypto-icon.tsx index f135c3bc3..b2e646bbe 100644 --- a/src/features/crypto-donate/components/crypto-icon.tsx +++ b/src/features/crypto-donate/components/crypto-icon.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import genericIcon from 'soapbox/assets/cryptocurrency/generic.svg'; diff --git a/src/features/crypto-donate/components/detailed-crypto-address.tsx b/src/features/crypto-donate/components/detailed-crypto-address.tsx index 29d70ae07..476def29d 100644 --- a/src/features/crypto-donate/components/detailed-crypto-address.tsx +++ b/src/features/crypto-donate/components/detailed-crypto-address.tsx @@ -1,6 +1,5 @@ import externalLinkIcon from '@tabler/icons/outline/external-link.svg'; import { QRCodeCanvas as QRCode } from 'qrcode.react'; -import React from 'react'; import CopyableInput from 'soapbox/components/copyable-input'; import Icon from 'soapbox/components/icon'; diff --git a/src/features/crypto-donate/components/lightning-address.tsx b/src/features/crypto-donate/components/lightning-address.tsx index aa52d61f3..2f73793a4 100644 --- a/src/features/crypto-donate/components/lightning-address.tsx +++ b/src/features/crypto-donate/components/lightning-address.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import CopyableInput from 'soapbox/components/copyable-input'; diff --git a/src/features/crypto-donate/components/site-wallet.tsx b/src/features/crypto-donate/components/site-wallet.tsx index 0494ecf46..e8d7bc6d9 100644 --- a/src/features/crypto-donate/components/site-wallet.tsx +++ b/src/features/crypto-donate/components/site-wallet.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Stack } from 'soapbox/components/ui'; import { useSoapboxConfig } from 'soapbox/hooks'; diff --git a/src/features/crypto-donate/index.tsx b/src/features/crypto-donate/index.tsx index cb3fa1f7e..980f7dd31 100644 --- a/src/features/crypto-donate/index.tsx +++ b/src/features/crypto-donate/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Accordion, Column, Stack } from 'soapbox/components/ui'; diff --git a/src/features/delete-account/index.tsx b/src/features/delete-account/index.tsx index aaeecc789..6a32b5175 100644 --- a/src/features/delete-account/index.tsx +++ b/src/features/delete-account/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { deleteAccount } from 'soapbox/actions/security'; @@ -21,16 +21,16 @@ const DeleteAccount = () => { const dispatch = useAppDispatch(); const features = useFeatures(); - const [password, setPassword] = React.useState(''); - const [isLoading, setLoading] = React.useState(false); + const [password, setPassword] = useState(''); + const [isLoading, setLoading] = useState(false); - const handleInputChange = React.useCallback((event: React.ChangeEvent) => { + const handleInputChange = useCallback((event: React.ChangeEvent) => { event.persist(); setPassword(event.target.value); }, []); - const handleSubmit = React.useCallback(() => { + const handleSubmit = useCallback(() => { setLoading(true); dispatch(deleteAccount(password)).then(() => { setPassword(''); diff --git a/src/features/developers/apps/create.tsx b/src/features/developers/apps/create.tsx index 24e1de995..bf69a7f7c 100644 --- a/src/features/developers/apps/create.tsx +++ b/src/features/developers/apps/create.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { createApp } from 'soapbox/actions/apps'; diff --git a/src/features/developers/components/indicator.tsx b/src/features/developers/components/indicator.tsx index b4d3a2a06..70a5ce62d 100644 --- a/src/features/developers/components/indicator.tsx +++ b/src/features/developers/components/indicator.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IIndicator { state?: 'active' | 'pending' | 'error' | 'inactive'; diff --git a/src/features/developers/developers-challenge.tsx b/src/features/developers/developers-challenge.tsx index cc379975e..520fbdccc 100644 --- a/src/features/developers/developers-challenge.tsx +++ b/src/features/developers/developers-challenge.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { changeSettingImmediate } from 'soapbox/actions/settings'; diff --git a/src/features/developers/developers-menu.tsx b/src/features/developers/developers-menu.tsx index 37b0718d9..083511e78 100644 --- a/src/features/developers/developers-menu.tsx +++ b/src/features/developers/developers-menu.tsx @@ -6,7 +6,6 @@ import moodSadIcon from '@tabler/icons/outline/mood-sad.svg'; import refreshIcon from '@tabler/icons/outline/refresh.svg'; import scriptIcon from '@tabler/icons/outline/script.svg'; import urgentIcon from '@tabler/icons/outline/urgent.svg'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/features/developers/index.tsx b/src/features/developers/index.tsx index 378207e46..6ac4104a4 100644 --- a/src/features/developers/index.tsx +++ b/src/features/developers/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { getSettings } from 'soapbox/actions/settings'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/features/developers/service-worker-info.tsx b/src/features/developers/service-worker-info.tsx index 7b786e95f..b173dc541 100644 --- a/src/features/developers/service-worker-info.tsx +++ b/src/features/developers/service-worker-info.tsx @@ -1,5 +1,5 @@ import externalLinkIcon from '@tabler/icons/outline/external-link.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import List, { ListItem } from 'soapbox/components/list'; diff --git a/src/features/developers/settings-store.tsx b/src/features/developers/settings-store.tsx index 828ee8d42..b924b359f 100644 --- a/src/features/developers/settings-store.tsx +++ b/src/features/developers/settings-store.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; diff --git a/src/features/direct-timeline/index.tsx b/src/features/direct-timeline/index.tsx index ba8ba1cb0..68458e267 100644 --- a/src/features/direct-timeline/index.tsx +++ b/src/features/direct-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { directComposeById } from 'soapbox/actions/compose'; diff --git a/src/features/directory/components/account-card.tsx b/src/features/directory/components/account-card.tsx index 3e28821b1..00cb0f629 100644 --- a/src/features/directory/components/account-card.tsx +++ b/src/features/directory/components/account-card.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { getSettings } from 'soapbox/actions/settings'; diff --git a/src/features/directory/index.tsx b/src/features/directory/index.tsx index 1af516140..f99de51d8 100644 --- a/src/features/directory/index.tsx +++ b/src/features/directory/index.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useLocation } from 'react-router-dom'; diff --git a/src/features/domain-blocks/index.tsx b/src/features/domain-blocks/index.tsx index cf8978ad9..350318465 100644 --- a/src/features/domain-blocks/index.tsx +++ b/src/features/domain-blocks/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { fetchDomainBlocks, expandDomainBlocks } from 'soapbox/actions/domain-blocks'; @@ -24,7 +24,7 @@ const DomainBlocks: React.FC = () => { const domains = useAppSelector((state) => state.domain_lists.blocks.items); const hasMore = useAppSelector((state) => !!state.domain_lists.blocks.next); - React.useEffect(() => { + useEffect(() => { dispatch(fetchDomainBlocks()); }, []); diff --git a/src/features/edit-email/index.tsx b/src/features/edit-email/index.tsx index 70d511ce1..257f29be0 100644 --- a/src/features/edit-email/index.tsx +++ b/src/features/edit-email/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeEmail } from 'soapbox/actions/security'; @@ -23,18 +23,18 @@ const EditEmail = () => { const intl = useIntl(); const dispatch = useAppDispatch(); - const [state, setState] = React.useState(initialState); - const [isLoading, setLoading] = React.useState(false); + const [state, setState] = useState(initialState); + const [isLoading, setLoading] = useState(false); const { email, password } = state; - const handleInputChange: React.ChangeEventHandler = React.useCallback((event) => { + const handleInputChange: React.ChangeEventHandler = useCallback((event) => { event.persist(); setState((prevState) => ({ ...prevState, [event.target.name]: event.target.value })); }, []); - const handleSubmit = React.useCallback(() => { + const handleSubmit = useCallback(() => { setLoading(true); dispatch(changeEmail(email, password)).then(() => { setState(initialState); diff --git a/src/features/edit-identity/index.tsx b/src/features/edit-identity/index.tsx index 3e27f5c2f..be9f4d1b8 100644 --- a/src/features/edit-identity/index.tsx +++ b/src/features/edit-identity/index.tsx @@ -1,6 +1,6 @@ import atIcon from '@tabler/icons/outline/at.svg'; import { useMutation, useQuery } from '@tanstack/react-query'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; diff --git a/src/features/edit-password/index.tsx b/src/features/edit-password/index.tsx index 7761f77a2..c35074ec5 100644 --- a/src/features/edit-password/index.tsx +++ b/src/features/edit-password/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changePassword } from 'soapbox/actions/security'; @@ -23,20 +23,20 @@ const EditPassword = () => { const intl = useIntl(); const dispatch = useAppDispatch(); - const [state, setState] = React.useState(initialState); - const [isLoading, setLoading] = React.useState(false); + const [state, setState] = useState(initialState); + const [isLoading, setLoading] = useState(false); const { currentPassword, newPassword, newPasswordConfirmation } = state; const resetState = () => setState(initialState); - const handleInputChange: React.ChangeEventHandler = React.useCallback((event) => { + const handleInputChange: React.ChangeEventHandler = useCallback((event) => { event.persist(); setState((prevState) => ({ ...prevState, [event.target.name]: event.target.value })); }, []); - const handleSubmit = React.useCallback(() => { + const handleSubmit = useCallback(() => { setLoading(true); dispatch(changePassword(currentPassword, newPassword, newPasswordConfirmation)).then(() => { resetState(); diff --git a/src/features/edit-profile/components/avatar-picker.tsx b/src/features/edit-profile/components/avatar-picker.tsx index 18d5d6ffa..10f272bc1 100644 --- a/src/features/edit-profile/components/avatar-picker.tsx +++ b/src/features/edit-profile/components/avatar-picker.tsx @@ -1,6 +1,6 @@ import cameraPlusIcon from '@tabler/icons/outline/camera-plus.svg'; import clsx from 'clsx'; -import React, { useRef } from 'react'; +import { forwardRef, useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { Avatar, Icon, HStack } from 'soapbox/components/ui'; @@ -14,7 +14,7 @@ interface IMediaInput { disabled?: boolean; } -const AvatarPicker = React.forwardRef(({ className, src, onChange, accept, disabled }, ref) => { +const AvatarPicker = forwardRef(({ className, src, onChange, accept, disabled }, ref) => { const picker = useRef(null); const { isDragging, isDraggedOver } = useDraggedFiles(picker, (files) => { diff --git a/src/features/edit-profile/components/header-picker.tsx b/src/features/edit-profile/components/header-picker.tsx index 88a8b2069..1fc3ab601 100644 --- a/src/features/edit-profile/components/header-picker.tsx +++ b/src/features/edit-profile/components/header-picker.tsx @@ -1,7 +1,7 @@ import photoPlusIcon from '@tabler/icons/outline/photo-plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React, { useRef } from 'react'; +import { forwardRef, useRef } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { HStack, Icon, IconButton, Text } from 'soapbox/components/ui'; @@ -19,7 +19,7 @@ interface IMediaInput { disabled?: boolean; } -const HeaderPicker = React.forwardRef(({ src, onChange, onClear, accept, disabled }, ref) => { +const HeaderPicker = forwardRef(({ src, onChange, onClear, accept, disabled }, ref) => { const intl = useIntl(); const picker = useRef(null); diff --git a/src/features/edit-profile/index.tsx b/src/features/edit-profile/index.tsx index f5268196a..9bb139783 100644 --- a/src/features/edit-profile/index.tsx +++ b/src/features/edit-profile/index.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { updateNotificationSettings } from 'soapbox/actions/accounts'; diff --git a/src/features/email-confirmation/index.tsx b/src/features/email-confirmation/index.tsx index 3088e5b41..68cbec1f6 100644 --- a/src/features/email-confirmation/index.tsx +++ b/src/features/email-confirmation/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; @@ -24,9 +24,9 @@ const EmailConfirmation = () => { const intl = useIntl(); const dispatch = useAppDispatch(); - const [status, setStatus] = React.useState(Statuses.IDLE); + const [status, setStatus] = useState(Statuses.IDLE); - React.useEffect(() => { + useEffect(() => { if (token) { dispatch(confirmChangedEmail(token)) .then(() => { @@ -39,14 +39,7 @@ const EmailConfirmation = () => { if (error.response.data.error) { const message = buildErrorMessage(error.response.data.error); - - toast.error( - message, - // intl.formatMessage({ - // id: 'email_confirmation.fail', - // defaultMessage, - // }), - ); + toast.error(message); } }); } diff --git a/src/features/embedded-status/index.tsx b/src/features/embedded-status/index.tsx index ed97170cf..066e2bdd5 100644 --- a/src/features/embedded-status/index.tsx +++ b/src/features/embedded-status/index.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; import { fetchStatus } from 'soapbox/actions/statuses'; diff --git a/src/features/emoji/components/emoji-picker-dropdown.tsx b/src/features/emoji/components/emoji-picker-dropdown.tsx index f3167f61b..7a0d634d6 100644 --- a/src/features/emoji/components/emoji-picker-dropdown.tsx +++ b/src/features/emoji/components/emoji-picker-dropdown.tsx @@ -1,5 +1,5 @@ import { Map as ImmutableMap } from 'immutable'; -import React, { useEffect, useState, useLayoutEffect, Suspense } from 'react'; +import { useEffect, useState, useLayoutEffect, Suspense } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { createSelector } from 'reselect'; diff --git a/src/features/emoji/components/emoji-picker.tsx b/src/features/emoji/components/emoji-picker.tsx index cb34ed2f1..adb680792 100644 --- a/src/features/emoji/components/emoji-picker.tsx +++ b/src/features/emoji/components/emoji-picker.tsx @@ -1,6 +1,6 @@ import spriteSheet from 'emoji-datasource/img/twitter/sheets/32.png'; import { Picker as EmojiPicker } from 'emoji-mart'; -import React, { useRef, useEffect } from 'react'; +import { useRef, useEffect } from 'react'; import { joinPublicPath } from 'soapbox/utils/static'; diff --git a/src/features/emoji/containers/emoji-picker-dropdown-container.tsx b/src/features/emoji/containers/emoji-picker-dropdown-container.tsx index b38f332f7..1206d6fbd 100644 --- a/src/features/emoji/containers/emoji-picker-dropdown-container.tsx +++ b/src/features/emoji/containers/emoji-picker-dropdown-container.tsx @@ -1,7 +1,7 @@ import { useFloating, shift } from '@floating-ui/react'; import moodHappyIcon from '@tabler/icons/outline/mood-happy.svg'; import clsx from 'clsx'; -import React, { KeyboardEvent, useState } from 'react'; +import { KeyboardEvent, useState } from 'react'; import { createPortal } from 'react-dom'; import { defineMessages, useIntl } from 'react-intl'; diff --git a/src/features/event/components/event-action-button.tsx b/src/features/event/components/event-action-button.tsx index 7dcb6a7b7..f205d19a4 100644 --- a/src/features/event/components/event-action-button.tsx +++ b/src/features/event/components/event-action-button.tsx @@ -1,6 +1,5 @@ import banIcon from '@tabler/icons/outline/ban.svg'; import checkIcon from '@tabler/icons/outline/check.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { joinEvent, leaveEvent } from 'soapbox/actions/events'; diff --git a/src/features/event/components/event-date.tsx b/src/features/event/components/event-date.tsx index e657bf4de..952a74425 100644 --- a/src/features/event/components/event-date.tsx +++ b/src/features/event/components/event-date.tsx @@ -1,5 +1,4 @@ import calendarIcon from '@tabler/icons/outline/calendar.svg'; -import React from 'react'; import { FormattedDate } from 'react-intl'; import Icon from 'soapbox/components/icon'; diff --git a/src/features/event/components/event-header.tsx b/src/features/event/components/event-header.tsx index 624fe727d..cbe475a68 100644 --- a/src/features/event/components/event-header.tsx +++ b/src/features/event/components/event-header.tsx @@ -22,7 +22,6 @@ import repeatIcon from '@tabler/icons/outline/repeat.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import usersIcon from '@tabler/icons/outline/users.svg'; import { List as ImmutableList } from 'immutable'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/features/event/event-discussion.tsx b/src/features/event/event-discussion.tsx index cd11b1916..b9481ab28 100644 --- a/src/features/event/event-discussion.tsx +++ b/src/features/event/event-discussion.tsx @@ -1,6 +1,6 @@ import { List as ImmutableList, OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { eventDiscussionCompose } from 'soapbox/actions/compose'; diff --git a/src/features/event/event-information.tsx b/src/features/event/event-information.tsx index bcb13c9e4..d10fe92d7 100644 --- a/src/features/event/event-information.tsx +++ b/src/features/event/event-information.tsx @@ -1,7 +1,7 @@ import calendarIcon from '@tabler/icons/outline/calendar.svg'; import linkIcon from '@tabler/icons/outline/link.svg'; import mapPinIcon from '@tabler/icons/outline/map-pin.svg'; -import React, { useCallback, useEffect, useState } from 'react'; +import { Fragment, useCallback, useEffect, useState } from 'react'; import { FormattedDate, FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; @@ -64,16 +64,16 @@ const EventInformation: React.FC = ({ params }) => { if (!event.location) return null; const text = [ - + {event.location.get('name')} - , + , ]; if (event.location.get('street')?.trim()) { text.push ( - +
{event.location.get('street')} -
, + , ); } @@ -81,21 +81,21 @@ const EventInformation: React.FC = ({ params }) => { if (address) { text.push( - +
{address} -
, + , ); } if (tileServer && event.location.get('latitude')) { text.push( - +
-
, + , ); } diff --git a/src/features/events/components/event-carousel.tsx b/src/features/events/components/event-carousel.tsx index f22619651..670a56ca1 100644 --- a/src/features/events/components/event-carousel.tsx +++ b/src/features/events/components/event-carousel.tsx @@ -1,6 +1,6 @@ import chevronLeftIcon from '@tabler/icons/outline/chevron-left.svg'; import chevronRightIcon from '@tabler/icons/outline/chevron-right.svg'; -import React, { useCallback, useState } from 'react'; +import { useCallback, useState } from 'react'; import { Link } from 'react-router-dom'; import ReactSwipeableViews from 'react-swipeable-views'; diff --git a/src/features/events/index.tsx b/src/features/events/index.tsx index 831712ccf..44cd1642b 100644 --- a/src/features/events/index.tsx +++ b/src/features/events/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchJoinedEvents, fetchRecentEvents } from 'soapbox/actions/events'; diff --git a/src/features/export-data/components/csv-exporter.tsx b/src/features/export-data/components/csv-exporter.tsx index 4210c0a33..b748f3239 100644 --- a/src/features/export-data/components/csv-exporter.tsx +++ b/src/features/export-data/components/csv-exporter.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { MessageDescriptor, useIntl } from 'react-intl'; import { Button, Form, FormActions, Text } from 'soapbox/components/ui'; diff --git a/src/features/export-data/index.tsx b/src/features/export-data/index.tsx index 27273c339..38432dbd5 100644 --- a/src/features/export-data/index.tsx +++ b/src/features/export-data/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { diff --git a/src/features/external-login/components/external-login-form.tsx b/src/features/external-login/components/external-login-form.tsx index 570666679..ef3a49f17 100644 --- a/src/features/external-login/components/external-login-form.tsx +++ b/src/features/external-login/components/external-login-form.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { externalLogin, loginWithCode } from 'soapbox/actions/external-auth'; diff --git a/src/features/external-login/index.tsx b/src/features/external-login/index.tsx index 507797f9a..9220bce39 100644 --- a/src/features/external-login/index.tsx +++ b/src/features/external-login/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { BigCard } from 'soapbox/components/big-card'; diff --git a/src/features/favourited-statuses/index.tsx b/src/features/favourited-statuses/index.tsx index a9a2aa0a1..316c4f38d 100644 --- a/src/features/favourited-statuses/index.tsx +++ b/src/features/favourited-statuses/index.tsx @@ -1,6 +1,6 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchAccount, fetchAccountByUsername } from 'soapbox/actions/accounts'; diff --git a/src/features/federation-restrictions/components/instance-restrictions.tsx b/src/features/federation-restrictions/components/instance-restrictions.tsx index f0f38dc58..c77b8de85 100644 --- a/src/features/federation-restrictions/components/instance-restrictions.tsx +++ b/src/features/federation-restrictions/components/instance-restrictions.tsx @@ -5,7 +5,6 @@ import photoOffIcon from '@tabler/icons/outline/photo-off.svg'; import shieldCheckIcon from '@tabler/icons/outline/shield-check.svg'; import shieldLockIcon from '@tabler/icons/outline/shield-lock.svg'; import shieldXIcon from '@tabler/icons/outline/shield-x.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import Icon from 'soapbox/components/icon'; diff --git a/src/features/federation-restrictions/components/restricted-instance.tsx b/src/features/federation-restrictions/components/restricted-instance.tsx index 4835371f0..9ac14c1a7 100644 --- a/src/features/federation-restrictions/components/restricted-instance.tsx +++ b/src/features/federation-restrictions/components/restricted-instance.tsx @@ -1,7 +1,7 @@ import caretDownIcon from '@tabler/icons/outline/caret-down.svg'; import caretRightIcon from '@tabler/icons/outline/caret-right.svg'; import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import Icon from 'soapbox/components/icon'; import { useAppSelector } from 'soapbox/hooks'; diff --git a/src/features/federation-restrictions/index.tsx b/src/features/federation-restrictions/index.tsx index 0d980e1cd..ed51dbee9 100644 --- a/src/features/federation-restrictions/index.tsx +++ b/src/features/federation-restrictions/index.tsx @@ -1,4 +1,4 @@ -import React, { useState, useCallback } from 'react'; +import { useState, useCallback } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import ScrollableList from 'soapbox/components/scrollable-list'; diff --git a/src/features/feed-suggestions/feed-suggestions.tsx b/src/features/feed-suggestions/feed-suggestions.tsx index 44179f338..43e4f2e64 100644 --- a/src/features/feed-suggestions/feed-suggestions.tsx +++ b/src/features/feed-suggestions/feed-suggestions.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/filters/edit-filter.tsx b/src/features/filters/edit-filter.tsx index 3501542ac..162fcde91 100644 --- a/src/features/filters/edit-filter.tsx +++ b/src/features/filters/edit-filter.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/filters/index.tsx b/src/features/filters/index.tsx index 52e647cef..674877a01 100644 --- a/src/features/filters/index.tsx +++ b/src/features/filters/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/follow-recommendations/index.tsx b/src/features/follow-recommendations/index.tsx index 703e23101..aec2b6fb4 100644 --- a/src/features/follow-recommendations/index.tsx +++ b/src/features/follow-recommendations/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchSuggestions } from 'soapbox/actions/suggestions'; diff --git a/src/features/follow-requests/components/account-authorize.tsx b/src/features/follow-requests/components/account-authorize.tsx index 5abb8671a..01dc3ff71 100644 --- a/src/features/follow-requests/components/account-authorize.tsx +++ b/src/features/follow-requests/components/account-authorize.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { authorizeFollowRequest, rejectFollowRequest } from 'soapbox/actions/accounts'; import { useAccount } from 'soapbox/api/hooks'; diff --git a/src/features/follow-requests/index.tsx b/src/features/follow-requests/index.tsx index f89681a01..fe3b40f7d 100644 --- a/src/features/follow-requests/index.tsx +++ b/src/features/follow-requests/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { fetchFollowRequests, expandFollowRequests } from 'soapbox/actions/accounts'; @@ -24,7 +24,7 @@ const FollowRequests: React.FC = () => { const accountIds = useAppSelector((state) => state.user_lists.follow_requests.items); const hasMore = useAppSelector((state) => !!state.user_lists.follow_requests.next); - React.useEffect(() => { + useEffect(() => { dispatch(fetchFollowRequests()); }, []); diff --git a/src/features/followed-tags/index.tsx b/src/features/followed-tags/index.tsx index 6745f5fc0..2cb1c4bfb 100644 --- a/src/features/followed-tags/index.tsx +++ b/src/features/followed-tags/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { fetchFollowedHashtags, expandFollowedHashtags } from 'soapbox/actions/tags'; diff --git a/src/features/followers/index.tsx b/src/features/followers/index.tsx index 8847beb11..b3a721eb2 100644 --- a/src/features/followers/index.tsx +++ b/src/features/followers/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useAccountLookup, useFollowers } from 'soapbox/api/hooks'; diff --git a/src/features/following/index.tsx b/src/features/following/index.tsx index f5c4c3475..088618f16 100644 --- a/src/features/following/index.tsx +++ b/src/features/following/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useAccountLookup, useFollowing } from 'soapbox/api/hooks'; diff --git a/src/features/forms/index.tsx b/src/features/forms/index.tsx index d7f3cff9c..4efa3d8c6 100644 --- a/src/features/forms/index.tsx +++ b/src/features/forms/index.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useState } from 'react'; +import { Children, useState } from 'react'; import { Select } from '../../components/ui'; @@ -37,7 +37,7 @@ interface ILabelInputContainer { export const LabelInputContainer: React.FC = ({ label, hint, children }) => { const [id] = useState(crypto.randomUUID()); - const childrenWithProps = React.Children.map(children, child => ( + const childrenWithProps = Children.map(children, child => ( // @ts-ignore: not sure how to get the right type here React.cloneElement(child, { id: id, key: id }) )); diff --git a/src/features/generic-not-found/index.tsx b/src/features/generic-not-found/index.tsx index 0ec9241e3..174e9f3e1 100644 --- a/src/features/generic-not-found/index.tsx +++ b/src/features/generic-not-found/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import MissingIndicator from '../../components/missing-indicator'; diff --git a/src/features/group/components/group-action-button.test.tsx b/src/features/group/components/group-action-button.test.tsx index da82deffd..55a95ce53 100644 --- a/src/features/group/components/group-action-button.test.tsx +++ b/src/features/group/components/group-action-button.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-action-button.tsx b/src/features/group/components/group-action-button.tsx index e19e3563f..733de9809 100644 --- a/src/features/group/components/group-action-button.tsx +++ b/src/features/group/components/group-action-button.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchGroupRelationshipsSuccess } from 'soapbox/actions/groups'; diff --git a/src/features/group/components/group-header-image.tsx b/src/features/group/components/group-header-image.tsx index 273c2ef8e..6449a0de8 100644 --- a/src/features/group/components/group-header-image.tsx +++ b/src/features/group/components/group-header-image.tsx @@ -1,6 +1,6 @@ import photoOffIcon from '@tabler/icons/outline/photo-off.svg'; import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Icon } from 'soapbox/components/ui'; diff --git a/src/features/group/components/group-header.test.tsx b/src/features/group/components/group-header.test.tsx index 10cc51741..31325e78d 100644 --- a/src/features/group/components/group-header.test.tsx +++ b/src/features/group/components/group-header.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildGroup } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-header.tsx b/src/features/group/components/group-header.tsx index 5d28a9939..ff4808ad7 100644 --- a/src/features/group/components/group-header.tsx +++ b/src/features/group/components/group-header.tsx @@ -1,6 +1,6 @@ import photoOffIcon from '@tabler/icons/outline/photo-off.svg'; import { List as ImmutableList } from 'immutable'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/group/components/group-member-count.test.tsx b/src/features/group/components/group-member-count.test.tsx index afae751ee..470b92b8c 100644 --- a/src/features/group/components/group-member-count.test.tsx +++ b/src/features/group/components/group-member-count.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { buildGroup } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-member-count.tsx b/src/features/group/components/group-member-count.tsx index 134210f9f..5e638d33f 100644 --- a/src/features/group/components/group-member-count.tsx +++ b/src/features/group/components/group-member-count.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/group/components/group-member-list-item.test.tsx b/src/features/group/components/group-member-list-item.test.tsx index 923b54c64..f36e6f107 100644 --- a/src/features/group/components/group-member-list-item.test.tsx +++ b/src/features/group/components/group-member-list-item.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { __stub } from 'soapbox/api'; diff --git a/src/features/group/components/group-member-list-item.tsx b/src/features/group/components/group-member-list-item.tsx index 5e3ec2637..c2513545c 100644 --- a/src/features/group/components/group-member-list-item.tsx +++ b/src/features/group/components/group-member-list-item.tsx @@ -2,7 +2,7 @@ import banIcon from '@tabler/icons/outline/ban.svg'; import briefcaseIcon from '@tabler/icons/outline/briefcase.svg'; import userMinusIcon from '@tabler/icons/outline/user-minus.svg'; import clsx from 'clsx'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { groupKick } from 'soapbox/actions/groups'; diff --git a/src/features/group/components/group-options-button.test.tsx b/src/features/group/components/group-options-button.test.tsx index 030696671..250f47072 100644 --- a/src/features/group/components/group-options-button.test.tsx +++ b/src/features/group/components/group-options-button.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-options-button.tsx b/src/features/group/components/group-options-button.tsx index 64b25ef21..e712fb79a 100644 --- a/src/features/group/components/group-options-button.tsx +++ b/src/features/group/components/group-options-button.tsx @@ -3,7 +3,7 @@ import flagIcon from '@tabler/icons/outline/flag.svg'; import logoutIcon from '@tabler/icons/outline/logout.svg'; import shareIcon from '@tabler/icons/outline/share.svg'; import volume3Icon from '@tabler/icons/outline/volume-3.svg'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/group/components/group-privacy.test.tsx b/src/features/group/components/group-privacy.test.tsx index 15c803c11..51f52ebf9 100644 --- a/src/features/group/components/group-privacy.test.tsx +++ b/src/features/group/components/group-privacy.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { buildGroup } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-privacy.tsx b/src/features/group/components/group-privacy.tsx index c5ea61761..505cecb63 100644 --- a/src/features/group/components/group-privacy.tsx +++ b/src/features/group/components/group-privacy.tsx @@ -1,6 +1,5 @@ import lockIcon from '@tabler/icons/outline/lock.svg'; import worldIcon from '@tabler/icons/outline/world.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { HStack, Icon, Popover, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/group/components/group-relationship.test.tsx b/src/features/group/components/group-relationship.test.tsx index 2ec43e4a3..7ccab7728 100644 --- a/src/features/group/components/group-relationship.test.tsx +++ b/src/features/group/components/group-relationship.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-relationship.tsx b/src/features/group/components/group-relationship.tsx index 69a6a957c..22d728828 100644 --- a/src/features/group/components/group-relationship.tsx +++ b/src/features/group/components/group-relationship.tsx @@ -1,6 +1,5 @@ import gavelIcon from '@tabler/icons/outline/gavel.svg'; import usersIcon from '@tabler/icons/outline/users.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { HStack, Icon, Text } from 'soapbox/components/ui'; diff --git a/src/features/group/components/group-tag-list-item.test.tsx b/src/features/group/components/group-tag-list-item.test.tsx index 0e44f1e20..9d4b9bf77 100644 --- a/src/features/group/components/group-tag-list-item.test.tsx +++ b/src/features/group/components/group-tag-list-item.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildGroup, buildGroupTag, buildGroupRelationship } from 'soapbox/jest/factory'; diff --git a/src/features/group/components/group-tag-list-item.tsx b/src/features/group/components/group-tag-list-item.tsx index 572e995a5..4be20de10 100644 --- a/src/features/group/components/group-tag-list-item.tsx +++ b/src/features/group/components/group-tag-list-item.tsx @@ -2,7 +2,6 @@ import pinFilledIcon from '@tabler/icons/filled/pin.svg'; import eyeOffIcon from '@tabler/icons/outline/eye-off.svg'; import eyeIcon from '@tabler/icons/outline/eye.svg'; import pinIcon from '@tabler/icons/outline/pin.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/group/components/group-tags-field.tsx b/src/features/group/components/group-tags-field.tsx index 1a9f3118e..e08d649b4 100644 --- a/src/features/group/components/group-tags-field.tsx +++ b/src/features/group/components/group-tags-field.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Input, Streamfield } from 'soapbox/components/ui'; diff --git a/src/features/group/edit-group.tsx b/src/features/group/edit-group.tsx index 4b5fa5062..4353514d4 100644 --- a/src/features/group/edit-group.tsx +++ b/src/features/group/edit-group.tsx @@ -1,5 +1,5 @@ import lockIcon from '@tabler/icons/outline/lock.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useGroup, useGroupTags, useUpdateGroup } from 'soapbox/api/hooks'; diff --git a/src/features/group/group-blocked-members.tsx b/src/features/group/group-blocked-members.tsx index 28b25d344..836e950b0 100644 --- a/src/features/group/group-blocked-members.tsx +++ b/src/features/group/group-blocked-members.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { fetchGroupBlocks, groupUnblock } from 'soapbox/actions/groups'; diff --git a/src/features/group/group-gallery.tsx b/src/features/group/group-gallery.tsx index a2fd17532..5e46e62e0 100644 --- a/src/features/group/group-gallery.tsx +++ b/src/features/group/group-gallery.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/group/group-members.tsx b/src/features/group/group-members.tsx index 0d08d82e8..ce16a63a2 100644 --- a/src/features/group/group-members.tsx +++ b/src/features/group/group-members.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { useGroup, useGroupMembers, useGroupMembershipRequests } from 'soapbox/api/hooks'; import { PendingItemsRow } from 'soapbox/components/pending-items-row'; diff --git a/src/features/group/group-membership-requests.tsx b/src/features/group/group-membership-requests.tsx index 4eb23b166..a7a28bee2 100644 --- a/src/features/group/group-membership-requests.tsx +++ b/src/features/group/group-membership-requests.tsx @@ -1,5 +1,5 @@ import { AxiosError } from 'axios'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useGroup, useGroupMembers, useGroupMembershipRequests } from 'soapbox/api/hooks'; diff --git a/src/features/group/group-tag-timeline.tsx b/src/features/group/group-tag-timeline.tsx index b5caee49d..2b83c412d 100644 --- a/src/features/group/group-tag-timeline.tsx +++ b/src/features/group/group-tag-timeline.tsx @@ -1,5 +1,5 @@ import message2Icon from '@tabler/icons/outline/message-2.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { expandGroupTimelineFromTag } from 'soapbox/actions/timelines'; diff --git a/src/features/group/group-tags.tsx b/src/features/group/group-tags.tsx index f519fbecb..0e2d43779 100644 --- a/src/features/group/group-tags.tsx +++ b/src/features/group/group-tags.tsx @@ -1,5 +1,4 @@ import hashIcon from '@tabler/icons/outline/hash.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useGroup, useGroupTags } from 'soapbox/api/hooks'; diff --git a/src/features/group/group-timeline.tsx b/src/features/group/group-timeline.tsx index 418f9db62..f6db85840 100644 --- a/src/features/group/group-timeline.tsx +++ b/src/features/group/group-timeline.tsx @@ -1,6 +1,6 @@ import message2Icon from '@tabler/icons/outline/message-2.svg'; import clsx from 'clsx'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/group/manage-group.tsx b/src/features/group/manage-group.tsx index 8dafe252e..eadb1c2c9 100644 --- a/src/features/group/manage-group.tsx +++ b/src/features/group/manage-group.tsx @@ -1,5 +1,4 @@ import trashIcon from '@tabler/icons/outline/trash.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/groups/components/discover/group-grid-item.test.tsx b/src/features/groups/components/discover/group-grid-item.test.tsx index 3c69468b5..89ef54324 100644 --- a/src/features/groups/components/discover/group-grid-item.test.tsx +++ b/src/features/groups/components/discover/group-grid-item.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildGroup } from 'soapbox/jest/factory'; diff --git a/src/features/groups/components/discover/group-grid-item.tsx b/src/features/groups/components/discover/group-grid-item.tsx index 1d0250ebb..8091058eb 100644 --- a/src/features/groups/components/discover/group-grid-item.tsx +++ b/src/features/groups/components/discover/group-grid-item.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef } from 'react'; +import { forwardRef } from 'react'; import { Link } from 'react-router-dom'; import GroupAvatar from 'soapbox/components/groups/group-avatar'; diff --git a/src/features/groups/components/discover/group-list-item.test.tsx b/src/features/groups/components/discover/group-list-item.test.tsx index 36a77021c..3e6b78ef6 100644 --- a/src/features/groups/components/discover/group-list-item.test.tsx +++ b/src/features/groups/components/discover/group-list-item.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildGroup } from 'soapbox/jest/factory'; diff --git a/src/features/groups/components/discover/group-list-item.tsx b/src/features/groups/components/discover/group-list-item.tsx index 0b3c56057..fb3da6e7a 100644 --- a/src/features/groups/components/discover/group-list-item.tsx +++ b/src/features/groups/components/discover/group-list-item.tsx @@ -1,6 +1,5 @@ import lockIcon from '@tabler/icons/outline/lock.svg'; import worldIcon from '@tabler/icons/outline/world.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/groups/components/discover/layout-buttons.test.tsx b/src/features/groups/components/discover/layout-buttons.test.tsx index 8c8f4d98a..2a980c804 100644 --- a/src/features/groups/components/discover/layout-buttons.test.tsx +++ b/src/features/groups/components/discover/layout-buttons.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { render, screen, within } from 'soapbox/jest/test-helpers'; diff --git a/src/features/groups/components/discover/layout-buttons.tsx b/src/features/groups/components/discover/layout-buttons.tsx index dd206975b..7ab6b9cc2 100644 --- a/src/features/groups/components/discover/layout-buttons.tsx +++ b/src/features/groups/components/discover/layout-buttons.tsx @@ -1,7 +1,6 @@ import layoutGridIcon from '@tabler/icons/outline/layout-grid.svg'; import layoutListIcon from '@tabler/icons/outline/layout-list.svg'; import clsx from 'clsx'; -import React from 'react'; import { HStack, Icon } from 'soapbox/components/ui'; diff --git a/src/features/groups/components/discover/popular-groups.tsx b/src/features/groups/components/discover/popular-groups.tsx index 83426f553..a590cacd1 100644 --- a/src/features/groups/components/discover/popular-groups.tsx +++ b/src/features/groups/components/discover/popular-groups.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { usePopularGroups } from 'soapbox/api/hooks'; diff --git a/src/features/groups/components/discover/popular-tags.tsx b/src/features/groups/components/discover/popular-tags.tsx index 75ff36628..bbeacb822 100644 --- a/src/features/groups/components/discover/popular-tags.tsx +++ b/src/features/groups/components/discover/popular-tags.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { usePopularTags } from 'soapbox/api/hooks'; diff --git a/src/features/groups/components/discover/search/blankslate.test.tsx b/src/features/groups/components/discover/search/blankslate.test.tsx index fa116d1c4..4d2a637b1 100644 --- a/src/features/groups/components/discover/search/blankslate.test.tsx +++ b/src/features/groups/components/discover/search/blankslate.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/features/groups/components/discover/search/blankslate.tsx b/src/features/groups/components/discover/search/blankslate.tsx index 7d63b8c27..5ad85291d 100644 --- a/src/features/groups/components/discover/search/blankslate.tsx +++ b/src/features/groups/components/discover/search/blankslate.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/groups/components/discover/search/recent-searches.tsx b/src/features/groups/components/discover/search/recent-searches.tsx index eb5712baf..0215e8e8c 100644 --- a/src/features/groups/components/discover/search/recent-searches.tsx +++ b/src/features/groups/components/discover/search/recent-searches.tsx @@ -1,5 +1,5 @@ import searchIcon from '@tabler/icons/outline/search.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Virtuoso } from 'react-virtuoso'; diff --git a/src/features/groups/components/discover/search/results.test.tsx b/src/features/groups/components/discover/search/results.test.tsx index ac9e30715..d808d83a0 100644 --- a/src/features/groups/components/discover/search/results.test.tsx +++ b/src/features/groups/components/discover/search/results.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { VirtuosoGridMockContext, VirtuosoMockContext } from 'react-virtuoso'; import { describe, expect, it, vi } from 'vitest'; diff --git a/src/features/groups/components/discover/search/results.tsx b/src/features/groups/components/discover/search/results.tsx index 3a01ea16f..63d1dc265 100644 --- a/src/features/groups/components/discover/search/results.tsx +++ b/src/features/groups/components/discover/search/results.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useCallback, useState } from 'react'; +import { forwardRef, useCallback, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { Components, Virtuoso, VirtuosoGrid } from 'react-virtuoso'; @@ -16,7 +16,7 @@ interface Props { groupSearchResult: ReturnType; } -const GridList: Components['List'] = React.forwardRef((props, ref) => { +const GridList: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); diff --git a/src/features/groups/components/discover/search/search.test.tsx b/src/features/groups/components/discover/search/search.test.tsx index c5b1f9710..5eb14ac2e 100644 --- a/src/features/groups/components/discover/search/search.test.tsx +++ b/src/features/groups/components/discover/search/search.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { __stub } from 'soapbox/api'; diff --git a/src/features/groups/components/discover/search/search.tsx b/src/features/groups/components/discover/search/search.tsx index 2d414d0c5..b54df185f 100644 --- a/src/features/groups/components/discover/search/search.tsx +++ b/src/features/groups/components/discover/search/search.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useGroupSearch } from 'soapbox/api/hooks'; diff --git a/src/features/groups/components/discover/suggested-groups.tsx b/src/features/groups/components/discover/suggested-groups.tsx index 5d73cc3f0..0bab240b0 100644 --- a/src/features/groups/components/discover/suggested-groups.tsx +++ b/src/features/groups/components/discover/suggested-groups.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useSuggestedGroups } from 'soapbox/api/hooks'; diff --git a/src/features/groups/components/discover/tag-list-item.test.tsx b/src/features/groups/components/discover/tag-list-item.test.tsx index 77dff981a..f70308d9d 100644 --- a/src/features/groups/components/discover/tag-list-item.test.tsx +++ b/src/features/groups/components/discover/tag-list-item.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildGroupTag } from 'soapbox/jest/factory'; diff --git a/src/features/groups/components/discover/tag-list-item.tsx b/src/features/groups/components/discover/tag-list-item.tsx index f0e472dac..937c58d42 100644 --- a/src/features/groups/components/discover/tag-list-item.tsx +++ b/src/features/groups/components/discover/tag-list-item.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/groups/components/group-link-preview.tsx b/src/features/groups/components/group-link-preview.tsx index 6a7645bc9..54e547fb9 100644 --- a/src/features/groups/components/group-link-preview.tsx +++ b/src/features/groups/components/group-link-preview.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Avatar, Button, CardTitle, Stack } from 'soapbox/components/ui'; diff --git a/src/features/groups/components/pending-groups-row.tsx b/src/features/groups/components/pending-groups-row.tsx index 101da43bc..094aad2aa 100644 --- a/src/features/groups/components/pending-groups-row.tsx +++ b/src/features/groups/components/pending-groups-row.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { usePendingGroups } from 'soapbox/api/hooks'; import { PendingItemsRow } from 'soapbox/components/pending-items-row'; diff --git a/src/features/groups/components/tab-bar.tsx b/src/features/groups/components/tab-bar.tsx index 4d358db9c..016b5ed98 100644 --- a/src/features/groups/components/tab-bar.tsx +++ b/src/features/groups/components/tab-bar.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { useHistory } from 'react-router-dom'; import { Tabs } from 'soapbox/components/ui'; diff --git a/src/features/groups/discover.test.tsx b/src/features/groups/discover.test.tsx index 836f44c53..1b7dc251b 100644 --- a/src/features/groups/discover.test.tsx +++ b/src/features/groups/discover.test.tsx @@ -1,6 +1,5 @@ import userEvent from '@testing-library/user-event'; -import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { buildAccount } from 'soapbox/jest/factory'; diff --git a/src/features/groups/discover.tsx b/src/features/groups/discover.tsx index 062dcdd12..5978db775 100644 --- a/src/features/groups/discover.tsx +++ b/src/features/groups/discover.tsx @@ -1,7 +1,7 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; import searchIcon from '@tabler/icons/outline/search.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { HStack, Icon, IconButton, Input, Stack } from 'soapbox/components/ui'; diff --git a/src/features/groups/index.tsx b/src/features/groups/index.tsx index 16eed2fc1..dd1c6219d 100644 --- a/src/features/groups/index.tsx +++ b/src/features/groups/index.tsx @@ -1,5 +1,5 @@ import circlesIcon from '@tabler/icons/outline/circles.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/groups/pending-requests.tsx b/src/features/groups/pending-requests.tsx index 34a5a56e0..95969f5ea 100644 --- a/src/features/groups/pending-requests.tsx +++ b/src/features/groups/pending-requests.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/groups/popular.tsx b/src/features/groups/popular.tsx index a2c464d79..24f9d7091 100644 --- a/src/features/groups/popular.tsx +++ b/src/features/groups/popular.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useCallback, useState } from 'react'; +import { forwardRef, useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Components, Virtuoso, VirtuosoGrid } from 'react-virtuoso'; @@ -16,7 +16,7 @@ const messages = defineMessages({ label: { id: 'groups.popular.label', defaultMessage: 'Suggested Groups' }, }); -const GridList: Components['List'] = React.forwardRef((props, ref) => { +const GridList: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); diff --git a/src/features/groups/suggested.tsx b/src/features/groups/suggested.tsx index 8a3e570e0..8b313ab3c 100644 --- a/src/features/groups/suggested.tsx +++ b/src/features/groups/suggested.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useCallback, useState } from 'react'; +import { forwardRef, useCallback, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Components, Virtuoso, VirtuosoGrid } from 'react-virtuoso'; @@ -16,7 +16,7 @@ const messages = defineMessages({ label: { id: 'groups.suggested.label', defaultMessage: 'Suggested Groups' }, }); -const GridList: Components['List'] = React.forwardRef((props, ref) => { +const GridList: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); diff --git a/src/features/groups/tag.tsx b/src/features/groups/tag.tsx index 181753d50..c7a5a9fa4 100644 --- a/src/features/groups/tag.tsx +++ b/src/features/groups/tag.tsx @@ -1,7 +1,7 @@ import layoutGridIcon from '@tabler/icons/outline/layout-grid.svg'; import layoutListIcon from '@tabler/icons/outline/layout-list.svg'; import clsx from 'clsx'; -import React, { useCallback, useState } from 'react'; +import { forwardRef, useCallback, useState } from 'react'; import { Components, Virtuoso, VirtuosoGrid } from 'react-virtuoso'; import { useGroupTag, useGroupsFromTag } from 'soapbox/api/hooks'; @@ -17,7 +17,7 @@ enum Layout { GRID = 'GRID' } -const GridList: Components['List'] = React.forwardRef((props, ref) => { +const GridList: Components['List'] = forwardRef((props, ref) => { const { context, ...rest } = props; return
; }); diff --git a/src/features/groups/tags.tsx b/src/features/groups/tags.tsx index aa37a514b..c1a58b389 100644 --- a/src/features/groups/tags.tsx +++ b/src/features/groups/tags.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Virtuoso } from 'react-virtuoso'; diff --git a/src/features/hashtag-timeline/index.tsx b/src/features/hashtag-timeline/index.tsx index 0a39bdfeb..b7384c501 100644 --- a/src/features/hashtag-timeline/index.tsx +++ b/src/features/hashtag-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchHashtag, followHashtag, unfollowHashtag } from 'soapbox/actions/tags'; diff --git a/src/features/home-timeline/index.tsx b/src/features/home-timeline/index.tsx index 607c72b09..686c69708 100644 --- a/src/features/home-timeline/index.tsx +++ b/src/features/home-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/import-data/components/csv-importer.tsx b/src/features/import-data/components/csv-importer.tsx index 77661233f..c8675b6c6 100644 --- a/src/features/import-data/components/csv-importer.tsx +++ b/src/features/import-data/components/csv-importer.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { MessageDescriptor, useIntl } from 'react-intl'; import { Button, FileInput, Form, FormActions, FormGroup, Text } from 'soapbox/components/ui'; diff --git a/src/features/import-data/index.tsx b/src/features/import-data/index.tsx index 812fb20fb..2294faebf 100644 --- a/src/features/import-data/index.tsx +++ b/src/features/import-data/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { diff --git a/src/features/intentional-error/index.tsx b/src/features/intentional-error/index.tsx index fc0eca529..52208ab48 100644 --- a/src/features/intentional-error/index.tsx +++ b/src/features/intentional-error/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; /** * IntentionalError: diff --git a/src/features/landing-timeline/components/logo-text.tsx b/src/features/landing-timeline/components/logo-text.tsx index 1cae1112c..cfc52e174 100644 --- a/src/features/landing-timeline/components/logo-text.tsx +++ b/src/features/landing-timeline/components/logo-text.tsx @@ -1,4 +1,3 @@ -import React from 'react'; interface ILogoText extends Pick, 'dir'> { children: React.ReactNode; diff --git a/src/features/landing-timeline/components/site-banner.tsx b/src/features/landing-timeline/components/site-banner.tsx index 11a652158..d88542d4a 100644 --- a/src/features/landing-timeline/components/site-banner.tsx +++ b/src/features/landing-timeline/components/site-banner.tsx @@ -1,5 +1,4 @@ import DOMPurify from 'isomorphic-dompurify'; -import React from 'react'; import Markup from 'soapbox/components/markup'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/landing-timeline/index.tsx b/src/features/landing-timeline/index.tsx index 1869568ba..a99ff43ba 100644 --- a/src/features/landing-timeline/index.tsx +++ b/src/features/landing-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { expandCommunityTimeline } from 'soapbox/actions/timelines'; diff --git a/src/features/list-adder/components/list.tsx b/src/features/list-adder/components/list.tsx index d638858b1..fe134c84d 100644 --- a/src/features/list-adder/components/list.tsx +++ b/src/features/list-adder/components/list.tsx @@ -1,7 +1,6 @@ import listIcon from '@tabler/icons/outline/list.svg'; import plusIcon from '@tabler/icons/outline/plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { removeFromListAdder, addToListAdder } from 'soapbox/actions/lists'; diff --git a/src/features/list-adder/index.tsx b/src/features/list-adder/index.tsx index 555ad2724..d26c594cd 100644 --- a/src/features/list-adder/index.tsx +++ b/src/features/list-adder/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { createSelector } from 'reselect'; diff --git a/src/features/list-editor/components/account.tsx b/src/features/list-editor/components/account.tsx index 9ee274f95..9e422122f 100644 --- a/src/features/list-editor/components/account.tsx +++ b/src/features/list-editor/components/account.tsx @@ -1,6 +1,5 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { removeFromListEditor, addToListEditor } from 'soapbox/actions/lists'; diff --git a/src/features/list-editor/components/edit-list-form.tsx b/src/features/list-editor/components/edit-list-form.tsx index e41db67de..2f8c34d0a 100644 --- a/src/features/list-editor/components/edit-list-form.tsx +++ b/src/features/list-editor/components/edit-list-form.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeListEditorTitle, submitListEditor } from 'soapbox/actions/lists'; diff --git a/src/features/list-editor/components/search.tsx b/src/features/list-editor/components/search.tsx index 5b67a96de..e01b1adb8 100644 --- a/src/features/list-editor/components/search.tsx +++ b/src/features/list-editor/components/search.tsx @@ -1,6 +1,5 @@ import backspaceIcon from '@tabler/icons/outline/backspace.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from 'soapbox/actions/lists'; diff --git a/src/features/list-editor/index.tsx b/src/features/list-editor/index.tsx index a1fd5f43c..4be764b5a 100644 --- a/src/features/list-editor/index.tsx +++ b/src/features/list-editor/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { setupListEditor, resetListEditor } from 'soapbox/actions/lists'; diff --git a/src/features/list-timeline/index.tsx b/src/features/list-timeline/index.tsx index 19974e6ad..8b445f95e 100644 --- a/src/features/list-timeline/index.tsx +++ b/src/features/list-timeline/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useParams } from 'react-router-dom'; diff --git a/src/features/lists/components/new-list-form.tsx b/src/features/lists/components/new-list-form.tsx index 275117016..51053393e 100644 --- a/src/features/lists/components/new-list-form.tsx +++ b/src/features/lists/components/new-list-form.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeListEditorTitle, submitListEditor } from 'soapbox/actions/lists'; diff --git a/src/features/lists/index.tsx b/src/features/lists/index.tsx index 00ea5022f..88303ab24 100644 --- a/src/features/lists/index.tsx +++ b/src/features/lists/index.tsx @@ -1,7 +1,7 @@ import listIcon from '@tabler/icons/outline/list.svg'; import pencilIcon from '@tabler/icons/outline/pencil.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; import { createSelector } from 'reselect'; diff --git a/src/features/migration/index.tsx b/src/features/migration/index.tsx index 6d19d172f..fa67f0a57 100644 --- a/src/features/migration/index.tsx +++ b/src/features/migration/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/mutes/components/group-list-item.tsx b/src/features/mutes/components/group-list-item.tsx index 2e839678c..d40245d6c 100644 --- a/src/features/mutes/components/group-list-item.tsx +++ b/src/features/mutes/components/group-list-item.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useUnmuteGroup } from 'soapbox/api/hooks'; diff --git a/src/features/mutes/index.tsx b/src/features/mutes/index.tsx index c7c25bf35..af1972cdc 100644 --- a/src/features/mutes/index.tsx +++ b/src/features/mutes/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { useMutes, useGroupMutes } from 'soapbox/api/hooks'; diff --git a/src/features/new-status/index.tsx b/src/features/new-status/index.tsx index e5b4aacd2..a02baee8d 100644 --- a/src/features/new-status/index.tsx +++ b/src/features/new-status/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/nostr-relays/components/relay-editor.tsx b/src/features/nostr-relays/components/relay-editor.tsx index 14618046f..c4fc562e6 100644 --- a/src/features/nostr-relays/components/relay-editor.tsx +++ b/src/features/nostr-relays/components/relay-editor.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { HStack, Input, Select } from 'soapbox/components/ui'; diff --git a/src/features/nostr-relays/index.tsx b/src/features/nostr-relays/index.tsx index 6b64adbaa..19171f638 100644 --- a/src/features/nostr-relays/index.tsx +++ b/src/features/nostr-relays/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Button, Column, Form, FormActions, Stack } from 'soapbox/components/ui'; diff --git a/src/features/nostr/Bech32Redirect.tsx b/src/features/nostr/Bech32Redirect.tsx index 4c9fdb16b..6e60c1950 100644 --- a/src/features/nostr/Bech32Redirect.tsx +++ b/src/features/nostr/Bech32Redirect.tsx @@ -1,5 +1,4 @@ import { nip19 } from 'nostr-tools'; -import React from 'react'; import { Redirect } from 'react-router-dom'; import MissingIndicator from 'soapbox/components/missing-indicator'; diff --git a/src/features/nostr/nostr-bunker-login.tsx b/src/features/nostr/nostr-bunker-login.tsx index c4f2350ab..e8cd6c126 100644 --- a/src/features/nostr/nostr-bunker-login.tsx +++ b/src/features/nostr/nostr-bunker-login.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; @@ -11,8 +11,8 @@ export const NostrBunkerLogin: React.FC = () => { const history = useHistory(); const dispatch = useAppDispatch(); - const [uri, setUri] = React.useState(''); - const [loading, setLoading] = React.useState(false); + const [uri, setUri] = useState(''); + const [loading, setLoading] = useState(false); const onSubmit = async () => { const url = new URL(uri); diff --git a/src/features/notifications/components/filter-bar.tsx b/src/features/notifications/components/filter-bar.tsx index 8be2fe895..ce9003d92 100644 --- a/src/features/notifications/components/filter-bar.tsx +++ b/src/features/notifications/components/filter-bar.tsx @@ -5,7 +5,6 @@ import heartIcon from '@tabler/icons/outline/heart.svg'; import moodSmileIcon from '@tabler/icons/outline/mood-smile.svg'; import repeatIcon from '@tabler/icons/outline/repeat.svg'; import userPlusIcon from '@tabler/icons/outline/user-plus.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { setFilter } from 'soapbox/actions/notifications'; diff --git a/src/features/notifications/components/notification.test.tsx b/src/features/notifications/components/notification.test.tsx index 4d9a4ceaf..331046258 100644 --- a/src/features/notifications/components/notification.test.tsx +++ b/src/features/notifications/components/notification.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { updateNotifications } from 'soapbox/actions/notifications'; diff --git a/src/features/notifications/components/notification.tsx b/src/features/notifications/components/notification.tsx index c6e9586fe..9f3deb31a 100644 --- a/src/features/notifications/components/notification.tsx +++ b/src/features/notifications/components/notification.tsx @@ -12,7 +12,7 @@ import pencilIcon from '@tabler/icons/outline/pencil.svg'; import repeatIcon from '@tabler/icons/outline/repeat.svg'; import userCheckIcon from '@tabler/icons/outline/user-check.svg'; import userPlusIcon from '@tabler/icons/outline/user-plus.svg'; -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { defineMessages, useIntl, IntlShape, MessageDescriptor, defineMessage, FormattedMessage } from 'react-intl'; import { Link, useHistory } from 'react-router-dom'; diff --git a/src/features/notifications/components/setting-toggle.tsx b/src/features/notifications/components/setting-toggle.tsx index 0e5054839..1150d64d9 100644 --- a/src/features/notifications/components/setting-toggle.tsx +++ b/src/features/notifications/components/setting-toggle.tsx @@ -1,5 +1,4 @@ import get from 'lodash/get'; -import React from 'react'; import { Toggle } from 'soapbox/components/ui'; import { Settings } from 'soapbox/schemas/soapbox/settings'; diff --git a/src/features/notifications/index.tsx b/src/features/notifications/index.tsx index abfa780f3..52cecda6e 100644 --- a/src/features/notifications/index.tsx +++ b/src/features/notifications/index.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect, useRef } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { createSelector } from 'reselect'; diff --git a/src/features/pinned-statuses/index.tsx b/src/features/pinned-statuses/index.tsx index e027f2bdf..8be4b26f6 100644 --- a/src/features/pinned-statuses/index.tsx +++ b/src/features/pinned-statuses/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useParams } from 'react-router-dom'; diff --git a/src/features/placeholder/components/placeholder-account.tsx b/src/features/placeholder/components/placeholder-account.tsx index c887903fd..776e0de67 100644 --- a/src/features/placeholder/components/placeholder-account.tsx +++ b/src/features/placeholder/components/placeholder-account.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { memo } from 'react'; import { HStack } from 'soapbox/components/ui'; @@ -18,4 +18,4 @@ const PlaceholderAccount: React.FC = () => ( ); -export default React.memo(PlaceholderAccount); +export default memo(PlaceholderAccount); diff --git a/src/features/placeholder/components/placeholder-avatar.tsx b/src/features/placeholder/components/placeholder-avatar.tsx index a246aa98e..b41a2d672 100644 --- a/src/features/placeholder/components/placeholder-avatar.tsx +++ b/src/features/placeholder/components/placeholder-avatar.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { useMemo } from 'react'; import { Stack } from 'soapbox/components/ui'; @@ -11,7 +11,7 @@ interface IPlaceholderAvatar { /** Fake avatar to display while data is loading. */ const PlaceholderAvatar: React.FC = ({ size, withText = false, className }) => { - const style = React.useMemo(() => { + const style = useMemo(() => { if (!size) { return {}; } diff --git a/src/features/placeholder/components/placeholder-card.tsx b/src/features/placeholder/components/placeholder-card.tsx index 9b88d8429..8a9f49c60 100644 --- a/src/features/placeholder/components/placeholder-card.tsx +++ b/src/features/placeholder/components/placeholder-card.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { memo } from 'react'; import { randomIntFromInterval, generateText } from '../utils'; @@ -19,4 +19,4 @@ const PlaceholderCard: React.FC = () => (
); -export default React.memo(PlaceholderCard); +export default memo(PlaceholderCard); diff --git a/src/features/placeholder/components/placeholder-chat-message.tsx b/src/features/placeholder/components/placeholder-chat-message.tsx index c11431be9..8a1e06a8d 100644 --- a/src/features/placeholder/components/placeholder-chat-message.tsx +++ b/src/features/placeholder/components/placeholder-chat-message.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-chat.tsx b/src/features/placeholder/components/placeholder-chat.tsx index 67149b9da..a6474b5ba 100644 --- a/src/features/placeholder/components/placeholder-chat.tsx +++ b/src/features/placeholder/components/placeholder-chat.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Stack } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-display-name.tsx b/src/features/placeholder/components/placeholder-display-name.tsx index 88731af8c..b0e8dd4c1 100644 --- a/src/features/placeholder/components/placeholder-display-name.tsx +++ b/src/features/placeholder/components/placeholder-display-name.tsx @@ -1,4 +1,5 @@ -import React from 'react'; + +import { memo } from 'react'; import { randomIntFromInterval, generateText } from '../utils'; @@ -21,4 +22,4 @@ const PlaceholderDisplayName: React.FC = ({ minLength, ); }; -export default React.memo(PlaceholderDisplayName); +export default memo(PlaceholderDisplayName); diff --git a/src/features/placeholder/components/placeholder-event-header.tsx b/src/features/placeholder/components/placeholder-event-header.tsx index c01272944..e0182866b 100644 --- a/src/features/placeholder/components/placeholder-event-header.tsx +++ b/src/features/placeholder/components/placeholder-event-header.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-event-preview.tsx b/src/features/placeholder/components/placeholder-event-preview.tsx index 09ae4e9ca..d789bcc4e 100644 --- a/src/features/placeholder/components/placeholder-event-preview.tsx +++ b/src/features/placeholder/components/placeholder-event-preview.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-group-card.tsx b/src/features/placeholder/components/placeholder-group-card.tsx index b000a9d10..eb19f8b28 100644 --- a/src/features/placeholder/components/placeholder-group-card.tsx +++ b/src/features/placeholder/components/placeholder-group-card.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-group-discover.tsx b/src/features/placeholder/components/placeholder-group-discover.tsx index 21e01f737..3311c3ac5 100644 --- a/src/features/placeholder/components/placeholder-group-discover.tsx +++ b/src/features/placeholder/components/placeholder-group-discover.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-group-search.tsx b/src/features/placeholder/components/placeholder-group-search.tsx index 1eb939acc..db2d9578c 100644 --- a/src/features/placeholder/components/placeholder-group-search.tsx +++ b/src/features/placeholder/components/placeholder-group-search.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-hashtag.tsx b/src/features/placeholder/components/placeholder-hashtag.tsx index 8830b1e90..10b11247f 100644 --- a/src/features/placeholder/components/placeholder-hashtag.tsx +++ b/src/features/placeholder/components/placeholder-hashtag.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { generateText, randomIntFromInterval } from '../utils'; diff --git a/src/features/placeholder/components/placeholder-material-status.tsx b/src/features/placeholder/components/placeholder-material-status.tsx index e3b289d70..ad8bc5703 100644 --- a/src/features/placeholder/components/placeholder-material-status.tsx +++ b/src/features/placeholder/components/placeholder-material-status.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import PlaceholderStatus from './placeholder-status'; diff --git a/src/features/placeholder/components/placeholder-media-gallery.tsx b/src/features/placeholder/components/placeholder-media-gallery.tsx index 247260d05..2f91c1497 100644 --- a/src/features/placeholder/components/placeholder-media-gallery.tsx +++ b/src/features/placeholder/components/placeholder-media-gallery.tsx @@ -1,5 +1,5 @@ import { List as ImmutableList, Record as ImmutableRecord } from 'immutable'; -import React, { useState } from 'react'; +import { useState } from 'react'; import type { Attachment as AttachmentEntity } from 'soapbox/types/entities'; diff --git a/src/features/placeholder/components/placeholder-notification.tsx b/src/features/placeholder/components/placeholder-notification.tsx index 5b96f8e00..6e216f481 100644 --- a/src/features/placeholder/components/placeholder-notification.tsx +++ b/src/features/placeholder/components/placeholder-notification.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { memo } from 'react'; import { HStack } from 'soapbox/components/ui'; @@ -33,4 +33,4 @@ const PlaceholderNotification = () => (
); -export default React.memo(PlaceholderNotification); +export default memo(PlaceholderNotification); diff --git a/src/features/placeholder/components/placeholder-sidebar-suggestions.tsx b/src/features/placeholder/components/placeholder-sidebar-suggestions.tsx index 5e53b7e78..81b286c47 100644 --- a/src/features/placeholder/components/placeholder-sidebar-suggestions.tsx +++ b/src/features/placeholder/components/placeholder-sidebar-suggestions.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Stack } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-sidebar-trends.tsx b/src/features/placeholder/components/placeholder-sidebar-trends.tsx index 44e728284..c5eb13fde 100644 --- a/src/features/placeholder/components/placeholder-sidebar-trends.tsx +++ b/src/features/placeholder/components/placeholder-sidebar-trends.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/placeholder/components/placeholder-status-content.tsx b/src/features/placeholder/components/placeholder-status-content.tsx index 5b785ba93..b3e4abbd7 100644 --- a/src/features/placeholder/components/placeholder-status-content.tsx +++ b/src/features/placeholder/components/placeholder-status-content.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { randomIntFromInterval, generateText } from '../utils'; diff --git a/src/features/placeholder/components/placeholder-status.tsx b/src/features/placeholder/components/placeholder-status.tsx index c6d7221ad..05674e8c4 100644 --- a/src/features/placeholder/components/placeholder-status.tsx +++ b/src/features/placeholder/components/placeholder-status.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { memo } from 'react'; import { HStack } from 'soapbox/components/ui'; @@ -40,4 +40,4 @@ const PlaceholderStatus: React.FC = ({ variant }) => (
); -export default React.memo(PlaceholderStatus); +export default memo(PlaceholderStatus); diff --git a/src/features/preferences/index.tsx b/src/features/preferences/index.tsx index aa15adde3..9d5e54720 100644 --- a/src/features/preferences/index.tsx +++ b/src/features/preferences/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useMemo } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { changeSetting } from 'soapbox/actions/settings'; @@ -101,19 +101,19 @@ const Preferences = () => { dispatch(changeSetting(key, checked, { showAlert: true })); }; - const displayMediaOptions = React.useMemo(() => ({ + const displayMediaOptions = useMemo(() => ({ default: intl.formatMessage(messages.displayPostsDefault), hide_all: intl.formatMessage(messages.displayPostsHideAll), show_all: intl.formatMessage(messages.displayPostsShowAll), }), []); - const defaultPrivacyOptions = React.useMemo(() => ({ + const defaultPrivacyOptions = useMemo(() => ({ public: intl.formatMessage(messages.privacy_public), unlisted: intl.formatMessage(messages.privacy_unlisted), private: intl.formatMessage(messages.privacy_followers_only), }), []); - const defaultContentTypeOptions = React.useMemo(() => ({ + const defaultContentTypeOptions = useMemo(() => ({ 'text/plain': intl.formatMessage(messages.content_type_plaintext), 'text/markdown': intl.formatMessage(messages.content_type_markdown), }), []); diff --git a/src/features/public-timeline/index.tsx b/src/features/public-timeline/index.tsx index 67566b7be..121d724f7 100644 --- a/src/features/public-timeline/index.tsx +++ b/src/features/public-timeline/index.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/quotes/index.tsx b/src/features/quotes/index.tsx index 42745bdbb..ae2e305a8 100644 --- a/src/features/quotes/index.tsx +++ b/src/features/quotes/index.tsx @@ -1,6 +1,6 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; -import React from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useParams } from 'react-router-dom'; @@ -28,7 +28,7 @@ const Quotes: React.FC = () => { const isLoading = useAppSelector((state) => state.status_lists.getIn([`quotes:${statusId}`, 'isLoading'], true)); const hasMore = useAppSelector((state) => !!state.status_lists.getIn([`quotes:${statusId}`, 'next'])); - React.useEffect(() => { + useEffect(() => { dispatch(fetchStatusQuotes(statusId)); }, [statusId]); diff --git a/src/features/register-invite/index.tsx b/src/features/register-invite/index.tsx index 00a73dabc..8cc8022d6 100644 --- a/src/features/register-invite/index.tsx +++ b/src/features/register-invite/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useParams } from 'react-router-dom'; diff --git a/src/features/remote-timeline/components/pinned-hosts-picker.tsx b/src/features/remote-timeline/components/pinned-hosts-picker.tsx index 208cd30c5..f06d67553 100644 --- a/src/features/remote-timeline/components/pinned-hosts-picker.tsx +++ b/src/features/remote-timeline/components/pinned-hosts-picker.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Button, HStack } from 'soapbox/components/ui'; import { useSettings } from 'soapbox/hooks'; diff --git a/src/features/remote-timeline/index.tsx b/src/features/remote-timeline/index.tsx index ea50a7624..2e1e88f0b 100644 --- a/src/features/remote-timeline/index.tsx +++ b/src/features/remote-timeline/index.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/reply-mentions/account.tsx b/src/features/reply-mentions/account.tsx index e8fa12983..a72451068 100644 --- a/src/features/reply-mentions/account.tsx +++ b/src/features/reply-mentions/account.tsx @@ -1,6 +1,6 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchAccount } from 'soapbox/actions/accounts'; diff --git a/src/features/report/components/status-check-box.tsx b/src/features/report/components/status-check-box.tsx index 96df936a2..fa936d6bb 100644 --- a/src/features/report/components/status-check-box.tsx +++ b/src/features/report/components/status-check-box.tsx @@ -1,5 +1,5 @@ import noop from 'lodash/noop'; -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; import { toggleStatusReport } from 'soapbox/actions/reports'; import StatusContent from 'soapbox/components/status-content'; diff --git a/src/features/scheduled-statuses/components/scheduled-status-action-bar.tsx b/src/features/scheduled-statuses/components/scheduled-status-action-bar.tsx index 32f2e7b83..226df40c5 100644 --- a/src/features/scheduled-statuses/components/scheduled-status-action-bar.tsx +++ b/src/features/scheduled-statuses/components/scheduled-status-action-bar.tsx @@ -1,5 +1,4 @@ import calendarStatsIcon from '@tabler/icons/outline/calendar-stats.svg'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/scheduled-statuses/components/scheduled-status.tsx b/src/features/scheduled-statuses/components/scheduled-status.tsx index 6e71f7cbe..d2f55159e 100644 --- a/src/features/scheduled-statuses/components/scheduled-status.tsx +++ b/src/features/scheduled-statuses/components/scheduled-status.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import Account from 'soapbox/components/account'; import AttachmentThumbs from 'soapbox/components/attachment-thumbs'; diff --git a/src/features/scheduled-statuses/index.tsx b/src/features/scheduled-statuses/index.tsx index 0a9b3dcae..aeffd43a2 100644 --- a/src/features/scheduled-statuses/index.tsx +++ b/src/features/scheduled-statuses/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchScheduledStatuses, expandScheduledStatuses } from 'soapbox/actions/scheduled-statuses'; diff --git a/src/features/search/index.tsx b/src/features/search/index.tsx index 97e5a37ca..2febda8df 100644 --- a/src/features/search/index.tsx +++ b/src/features/search/index.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Column } from 'soapbox/components/ui'; diff --git a/src/features/security/mfa-form.tsx b/src/features/security/mfa-form.tsx index 346617da8..7cde12f30 100644 --- a/src/features/security/mfa-form.tsx +++ b/src/features/security/mfa-form.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { fetchMfa } from 'soapbox/actions/mfa'; diff --git a/src/features/security/mfa/disable-otp-form.tsx b/src/features/security/mfa/disable-otp-form.tsx index 8a867fa88..2dc2bae41 100644 --- a/src/features/security/mfa/disable-otp-form.tsx +++ b/src/features/security/mfa/disable-otp-form.tsx @@ -1,4 +1,4 @@ -import React, { useState, useCallback } from 'react'; +import { useState, useCallback } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/security/mfa/enable-otp-form.tsx b/src/features/security/mfa/enable-otp-form.tsx index 7999ace94..bbfa51953 100644 --- a/src/features/security/mfa/enable-otp-form.tsx +++ b/src/features/security/mfa/enable-otp-form.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/security/mfa/otp-confirm-form.tsx b/src/features/security/mfa/otp-confirm-form.tsx index 1f1d670c4..1ef86aa5f 100644 --- a/src/features/security/mfa/otp-confirm-form.tsx +++ b/src/features/security/mfa/otp-confirm-form.tsx @@ -1,5 +1,5 @@ import { QRCodeCanvas as QRCode } from 'qrcode.react'; -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useIntl, FormattedMessage, defineMessages } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/server-info/index.tsx b/src/features/server-info/index.tsx index f180b77fb..4dcb2abc1 100644 --- a/src/features/server-info/index.tsx +++ b/src/features/server-info/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Column, Divider, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/settings/components/messages-settings.tsx b/src/features/settings/components/messages-settings.tsx index 2e7293542..e504e0a23 100644 --- a/src/features/settings/components/messages-settings.tsx +++ b/src/features/settings/components/messages-settings.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import List, { ListItem } from 'soapbox/components/list'; diff --git a/src/features/settings/index.tsx b/src/features/settings/index.tsx index 45f095f7c..6aac5b92a 100644 --- a/src/features/settings/index.tsx +++ b/src/features/settings/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { fetchMfa } from 'soapbox/actions/mfa'; diff --git a/src/features/share/index.tsx b/src/features/share/index.tsx index fdb5caa3d..0b91f1cc8 100644 --- a/src/features/share/index.tsx +++ b/src/features/share/index.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Redirect, useLocation } from 'react-router-dom'; import { openComposeWithText } from 'soapbox/actions/compose'; diff --git a/src/features/soapbox-config/components/color-picker.tsx b/src/features/soapbox-config/components/color-picker.tsx index 518fb872c..418b877dc 100644 --- a/src/features/soapbox-config/components/color-picker.tsx +++ b/src/features/soapbox-config/components/color-picker.tsx @@ -1,5 +1,5 @@ import { supportsPassiveEvents } from 'detect-passive-events'; -import React, { useEffect, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { SketchPicker, ColorChangeHandler } from 'react-color'; import { isMobile } from 'soapbox/is-mobile'; diff --git a/src/features/soapbox-config/components/color-with-picker.tsx b/src/features/soapbox-config/components/color-with-picker.tsx index 732df47f6..35b1564e2 100644 --- a/src/features/soapbox-config/components/color-with-picker.tsx +++ b/src/features/soapbox-config/components/color-with-picker.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef } from 'react'; +import { useState, useRef } from 'react'; // @ts-ignore: TODO: upgrade react-overlays. v3.1 and above have TS definitions import Overlay from 'react-overlays/lib/Overlay'; diff --git a/src/features/soapbox-config/components/crypto-address-input.tsx b/src/features/soapbox-config/components/crypto-address-input.tsx index 08cea6bbf..680e1f8bd 100644 --- a/src/features/soapbox-config/components/crypto-address-input.tsx +++ b/src/features/soapbox-config/components/crypto-address-input.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { HStack, Input } from 'soapbox/components/ui'; diff --git a/src/features/soapbox-config/components/footer-link-input.tsx b/src/features/soapbox-config/components/footer-link-input.tsx index ff0085d6b..2f06728b3 100644 --- a/src/features/soapbox-config/components/footer-link-input.tsx +++ b/src/features/soapbox-config/components/footer-link-input.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { HStack, Input } from 'soapbox/components/ui'; diff --git a/src/features/soapbox-config/components/icon-picker-dropdown.tsx b/src/features/soapbox-config/components/icon-picker-dropdown.tsx index 4e1cc9093..0b4a1800d 100644 --- a/src/features/soapbox-config/components/icon-picker-dropdown.tsx +++ b/src/features/soapbox-config/components/icon-picker-dropdown.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; // @ts-ignore import Overlay from 'react-overlays/lib/Overlay'; diff --git a/src/features/soapbox-config/components/icon-picker-menu.tsx b/src/features/soapbox-config/components/icon-picker-menu.tsx index 35c67ed1b..a8078adb7 100644 --- a/src/features/soapbox-config/components/icon-picker-menu.tsx +++ b/src/features/soapbox-config/components/icon-picker-menu.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { supportsPassiveEvents } from 'detect-passive-events'; -import React, { useCallback, useEffect, useRef } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Text } from 'soapbox/components/ui'; diff --git a/src/features/soapbox-config/components/icon-picker.tsx b/src/features/soapbox-config/components/icon-picker.tsx index 226d935e0..8feac9472 100644 --- a/src/features/soapbox-config/components/icon-picker.tsx +++ b/src/features/soapbox-config/components/icon-picker.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import IconPickerDropdown from './icon-picker-dropdown'; diff --git a/src/features/soapbox-config/components/promo-panel-input.tsx b/src/features/soapbox-config/components/promo-panel-input.tsx index 0dd530c39..2f60cf28a 100644 --- a/src/features/soapbox-config/components/promo-panel-input.tsx +++ b/src/features/soapbox-config/components/promo-panel-input.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { HStack, Input } from 'soapbox/components/ui'; diff --git a/src/features/soapbox-config/components/site-preview.tsx b/src/features/soapbox-config/components/site-preview.tsx index 4d1944cda..73e29b99b 100644 --- a/src/features/soapbox-config/components/site-preview.tsx +++ b/src/features/soapbox-config/components/site-preview.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { FormattedMessage } from 'react-intl'; import { defaultSettings } from 'soapbox/actions/settings'; diff --git a/src/features/soapbox-config/index.tsx b/src/features/soapbox-config/index.tsx index ffe91e123..1650ec68b 100644 --- a/src/features/soapbox-config/index.tsx +++ b/src/features/soapbox-config/index.tsx @@ -1,5 +1,5 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; -import React, { useState, useEffect, useMemo } from 'react'; +import { useState, useEffect, useMemo } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { updateSoapboxConfig } from 'soapbox/actions/admin'; diff --git a/src/features/status/components/detailed-status.tsx b/src/features/status/components/detailed-status.tsx index 33272eff7..7ef1fdcf6 100644 --- a/src/features/status/components/detailed-status.tsx +++ b/src/features/status/components/detailed-status.tsx @@ -1,7 +1,7 @@ import circlesIcon from '@tabler/icons/outline/circles.svg'; import lockIcon from '@tabler/icons/outline/lock.svg'; import mailIcon from '@tabler/icons/outline/mail.svg'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { FormattedDate, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/status/components/status-interaction-bar.tsx b/src/features/status/components/status-interaction-bar.tsx index cb877271f..5811cffff 100644 --- a/src/features/status/components/status-interaction-bar.tsx +++ b/src/features/status/components/status-interaction-bar.tsx @@ -1,5 +1,4 @@ -import clsx from 'clsx';import React from 'react'; -import { FormattedMessage } from 'react-intl'; +import clsx from 'clsx';import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/status/components/thread-login-cta.tsx b/src/features/status/components/thread-login-cta.tsx index e8758f72c..f6413030c 100644 --- a/src/features/status/components/thread-login-cta.tsx +++ b/src/features/status/components/thread-login-cta.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Card, CardTitle, Text, Stack, Button } from 'soapbox/components/ui'; diff --git a/src/features/status/components/thread-status.tsx b/src/features/status/components/thread-status.tsx index 0951ab689..350d60176 100644 --- a/src/features/status/components/thread-status.tsx +++ b/src/features/status/components/thread-status.tsx @@ -1,6 +1,5 @@ import clsx from 'clsx'; import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React from 'react'; import StatusContainer from 'soapbox/containers/status-container'; import PlaceholderStatus from 'soapbox/features/placeholder/components/placeholder-status'; diff --git a/src/features/status/components/thread.tsx b/src/features/status/components/thread.tsx index b6a7c4514..4af75af80 100644 --- a/src/features/status/components/thread.tsx +++ b/src/features/status/components/thread.tsx @@ -1,7 +1,7 @@ import { createSelector } from '@reduxjs/toolkit'; import clsx from 'clsx'; import { List as ImmutableList, OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import { type VirtuosoHandle } from 'react-virtuoso'; diff --git a/src/features/status/containers/quoted-status-container.tsx b/src/features/status/containers/quoted-status-container.tsx index 524035341..e57b19df5 100644 --- a/src/features/status/containers/quoted-status-container.tsx +++ b/src/features/status/containers/quoted-status-container.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import QuotedStatus from 'soapbox/components/quoted-status'; import Tombstone from 'soapbox/components/tombstone'; diff --git a/src/features/status/index.tsx b/src/features/status/index.tsx index 58640403c..1f07639dc 100644 --- a/src/features/status/index.tsx +++ b/src/features/status/index.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Redirect } from 'react-router-dom'; diff --git a/src/features/test-timeline/index.tsx b/src/features/test-timeline/index.tsx index e81b59318..a321e379e 100644 --- a/src/features/test-timeline/index.tsx +++ b/src/features/test-timeline/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import status5 from 'soapbox/__fixtures__/pleroma-quote-of-quote-post.json'; @@ -34,7 +34,7 @@ const TestTimeline: React.FC = () => { const theme = useTheme(); const isMobile = useIsMobile(); - React.useEffect(() => { + useEffect(() => { dispatch(importFetchedStatuses(MOCK_STATUSES)); dispatch(expandTimelineSuccess(timelineId, MOCK_STATUSES, undefined, undefined, false, false, false)); }, []); diff --git a/src/features/theme-editor/components/color.tsx b/src/features/theme-editor/components/color.tsx index 8fa540c42..575d17dd4 100644 --- a/src/features/theme-editor/components/color.tsx +++ b/src/features/theme-editor/components/color.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import ColorWithPicker from 'soapbox/features/soapbox-config/components/color-with-picker'; diff --git a/src/features/theme-editor/components/palette.tsx b/src/features/theme-editor/components/palette.tsx index e8c358629..82cf1ac70 100644 --- a/src/features/theme-editor/components/palette.tsx +++ b/src/features/theme-editor/components/palette.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { HStack, Stack, Slider } from 'soapbox/components/ui'; import { usePrevious } from 'soapbox/hooks'; diff --git a/src/features/theme-editor/index.tsx b/src/features/theme-editor/index.tsx index 115159e9c..bb534f109 100644 --- a/src/features/theme-editor/index.tsx +++ b/src/features/theme-editor/index.tsx @@ -1,7 +1,7 @@ import downloadIcon from '@tabler/icons/outline/download.svg'; import refreshIcon from '@tabler/icons/outline/refresh.svg'; import uploadIcon from '@tabler/icons/outline/upload.svg'; -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { updateSoapboxConfig } from 'soapbox/actions/admin'; diff --git a/src/features/ui/components/action-button.tsx b/src/features/ui/components/action-button.tsx index 03257713a..dcceb57db 100644 --- a/src/features/ui/components/action-button.tsx +++ b/src/features/ui/components/action-button.tsx @@ -1,6 +1,5 @@ import banIcon from '@tabler/icons/outline/ban.svg'; import plusIcon from '@tabler/icons/outline/plus.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { diff --git a/src/features/ui/components/background-shapes.tsx b/src/features/ui/components/background-shapes.tsx index f256ad987..379f40ca7 100644 --- a/src/features/ui/components/background-shapes.tsx +++ b/src/features/ui/components/background-shapes.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; interface IBackgroundShapes { /** Whether the shapes should be absolute positioned or fixed. */ diff --git a/src/features/ui/components/column-forbidden.tsx b/src/features/ui/components/column-forbidden.tsx index 86d4e7ab1..b3b9a8fb4 100644 --- a/src/features/ui/components/column-forbidden.tsx +++ b/src/features/ui/components/column-forbidden.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Column } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/column-loading.tsx b/src/features/ui/components/column-loading.tsx index 994ec1457..b462c95f5 100644 --- a/src/features/ui/components/column-loading.tsx +++ b/src/features/ui/components/column-loading.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Card, CardBody, Spinner } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/columns-area.tsx b/src/features/ui/components/columns-area.tsx index 5bfb62722..1f7c2e6b1 100644 --- a/src/features/ui/components/columns-area.tsx +++ b/src/features/ui/components/columns-area.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from '../../../components/ui'; diff --git a/src/features/ui/components/compose-button.test.tsx b/src/features/ui/components/compose-button.test.tsx index 29dd596d5..2c9d88a64 100644 --- a/src/features/ui/components/compose-button.test.tsx +++ b/src/features/ui/components/compose-button.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import React from 'react'; import { IntlProvider } from 'react-intl'; import { Provider } from 'react-redux'; import { MemoryRouter } from 'react-router-dom'; diff --git a/src/features/ui/components/compose-button.tsx b/src/features/ui/components/compose-button.tsx index 7686f9c55..97e0865ed 100644 --- a/src/features/ui/components/compose-button.tsx +++ b/src/features/ui/components/compose-button.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useLocation, useRouteMatch } from 'react-router-dom'; diff --git a/src/features/ui/components/cta-banner.test.tsx b/src/features/ui/components/cta-banner.test.tsx index ca672e5e8..b528c64bb 100644 --- a/src/features/ui/components/cta-banner.test.tsx +++ b/src/features/ui/components/cta-banner.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { storeClosed, storeLoggedIn, storeOpen } from 'soapbox/jest/mock-stores'; diff --git a/src/features/ui/components/cta-banner.tsx b/src/features/ui/components/cta-banner.tsx index ff321d870..050390bdd 100644 --- a/src/features/ui/components/cta-banner.tsx +++ b/src/features/ui/components/cta-banner.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Banner, Button, HStack, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/error-column.tsx b/src/features/ui/components/error-column.tsx index 585af0050..de3abdad8 100644 --- a/src/features/ui/components/error-column.tsx +++ b/src/features/ui/components/error-column.tsx @@ -1,5 +1,4 @@ import refreshIcon from '@tabler/icons/outline/refresh.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Column, Stack, Text, IconButton } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/floating-action-button.tsx b/src/features/ui/components/floating-action-button.tsx index ce5caef0d..0c0236029 100644 --- a/src/features/ui/components/floating-action-button.tsx +++ b/src/features/ui/components/floating-action-button.tsx @@ -1,6 +1,5 @@ import pencilPlusIcon from '@tabler/icons/outline/pencil-plus.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { useLocation, useRouteMatch } from 'react-router-dom'; diff --git a/src/features/ui/components/funding-panel.tsx b/src/features/ui/components/funding-panel.tsx index 8cfd0f961..f86e5bde1 100644 --- a/src/features/ui/components/funding-panel.tsx +++ b/src/features/ui/components/funding-panel.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchPatronInstance } from 'soapbox/actions/patron'; diff --git a/src/features/ui/components/group-media-panel.tsx b/src/features/ui/components/group-media-panel.tsx index 927ef72d8..deb3ff91b 100644 --- a/src/features/ui/components/group-media-panel.tsx +++ b/src/features/ui/components/group-media-panel.tsx @@ -1,5 +1,5 @@ import { List as ImmutableList } from 'immutable'; -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/hotkeys.tsx b/src/features/ui/components/hotkeys.tsx index 813469bab..5026e160a 100644 --- a/src/features/ui/components/hotkeys.tsx +++ b/src/features/ui/components/hotkeys.tsx @@ -1,11 +1,11 @@ import { HotKeys as _HotKeys, type HotKeysProps } from '@mkljczk/react-hotkeys'; -import React from 'react'; +import { forwardRef } from 'react'; /** * Wrapper component around `react-hotkeys`. * `react-hotkeys` is a legacy component, so confining its import to one place is beneficial. */ -const HotKeys = React.forwardRef(({ children, ...rest }, ref) => ( +const HotKeys = forwardRef(({ children, ...rest }, ref) => ( <_HotKeys {...rest} ref={ref}> {children} diff --git a/src/features/ui/components/image-loader.tsx b/src/features/ui/components/image-loader.tsx index 6f2156ab1..ef689a134 100644 --- a/src/features/ui/components/image-loader.tsx +++ b/src/features/ui/components/image-loader.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { PureComponent } from 'react'; import ZoomableImage from './zoomable-image'; @@ -14,7 +14,7 @@ interface IImageLoader { onClick?: React.MouseEventHandler; } -class ImageLoader extends React.PureComponent { +class ImageLoader extends PureComponent { static defaultProps = { alt: '', diff --git a/src/features/ui/components/instance-info-panel.tsx b/src/features/ui/components/instance-info-panel.tsx index 8f397ca18..ea8825d81 100644 --- a/src/features/ui/components/instance-info-panel.tsx +++ b/src/features/ui/components/instance-info-panel.tsx @@ -1,6 +1,5 @@ import pinIcon from '@tabler/icons/outline/pin.svg'; import pinnedOffIcon from '@tabler/icons/outline/pinned-off.svg'; -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { pinHost, unpinHost } from 'soapbox/actions/remote-timeline'; diff --git a/src/features/ui/components/instance-moderation-panel.tsx b/src/features/ui/components/instance-moderation-panel.tsx index f64725e69..d49d77dc4 100644 --- a/src/features/ui/components/instance-moderation-panel.tsx +++ b/src/features/ui/components/instance-moderation-panel.tsx @@ -1,6 +1,5 @@ import dotsVerticalIcon from '@tabler/icons/outline/dots-vertical.svg'; import editIcon from '@tabler/icons/outline/edit.svg'; -import React from 'react'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/link-footer.tsx b/src/features/ui/components/link-footer.tsx index 2162b20ca..15bf26e8f 100644 --- a/src/features/ui/components/link-footer.tsx +++ b/src/features/ui/components/link-footer.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/modal-loading.tsx b/src/features/ui/components/modal-loading.tsx index 61bccffb3..b3c48d249 100644 --- a/src/features/ui/components/modal-loading.tsx +++ b/src/features/ui/components/modal-loading.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Modal, Spinner } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modal-root.tsx b/src/features/ui/components/modal-root.tsx index b7d27472d..cadc90cff 100644 --- a/src/features/ui/components/modal-root.tsx +++ b/src/features/ui/components/modal-root.tsx @@ -1,4 +1,4 @@ -import React, { Suspense } from 'react'; +import { PureComponent, Suspense } from 'react'; import Base from 'soapbox/components/modal-root'; import { @@ -108,7 +108,7 @@ interface IModalRoot { onClose: (type?: ModalType) => void; } -export default class ModalRoot extends React.PureComponent { +export default class ModalRoot extends PureComponent { getSnapshotBeforeUpdate() { return { visible: !!this.props.type }; diff --git a/src/features/ui/components/modals/account-moderation-modal/account-moderation-modal.tsx b/src/features/ui/components/modals/account-moderation-modal/account-moderation-modal.tsx index 22e3ac915..98e7337ff 100644 --- a/src/features/ui/components/modals/account-moderation-modal/account-moderation-modal.tsx +++ b/src/features/ui/components/modals/account-moderation-modal/account-moderation-modal.tsx @@ -1,5 +1,5 @@ import externalLinkIcon from '@tabler/icons/outline/external-link.svg'; -import React, { ChangeEventHandler, useState } from 'react'; +import { ChangeEventHandler, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { revokeName, setBadges as saveBadges } from 'soapbox/actions/admin'; diff --git a/src/features/ui/components/modals/account-moderation-modal/badge-input.tsx b/src/features/ui/components/modals/account-moderation-modal/badge-input.tsx index 3bfaf44ef..4c6e9b5f4 100644 --- a/src/features/ui/components/modals/account-moderation-modal/badge-input.tsx +++ b/src/features/ui/components/modals/account-moderation-modal/badge-input.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { TagInput } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/account-moderation-modal/staff-role-picker.tsx b/src/features/ui/components/modals/account-moderation-modal/staff-role-picker.tsx index 8ee5bb6ea..ce8792578 100644 --- a/src/features/ui/components/modals/account-moderation-modal/staff-role-picker.tsx +++ b/src/features/ui/components/modals/account-moderation-modal/staff-role-picker.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, MessageDescriptor, useIntl } from 'react-intl'; import { setRole } from 'soapbox/actions/admin'; diff --git a/src/features/ui/components/modals/actions-modal.tsx b/src/features/ui/components/modals/actions-modal.tsx index 5fd37bab7..f908187d5 100644 --- a/src/features/ui/components/modals/actions-modal.tsx +++ b/src/features/ui/components/modals/actions-modal.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { spring } from 'react-motion'; diff --git a/src/features/ui/components/modals/birthdays-modal.tsx b/src/features/ui/components/modals/birthdays-modal.tsx index d6d17781a..4ae9de257 100644 --- a/src/features/ui/components/modals/birthdays-modal.tsx +++ b/src/features/ui/components/modals/birthdays-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import ScrollableList from 'soapbox/components/scrollable-list'; diff --git a/src/features/ui/components/modals/boost-modal.tsx b/src/features/ui/components/modals/boost-modal.tsx index badb827c2..031295fb3 100644 --- a/src/features/ui/components/modals/boost-modal.tsx +++ b/src/features/ui/components/modals/boost-modal.tsx @@ -1,5 +1,4 @@ import repeatIcon from '@tabler/icons/outline/repeat.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import Icon from 'soapbox/components/icon'; diff --git a/src/features/ui/components/modals/captcha-modal/captcha-modal.tsx b/src/features/ui/components/modals/captcha-modal/captcha-modal.tsx index 3818819b7..32f5d280a 100644 --- a/src/features/ui/components/modals/captcha-modal/captcha-modal.tsx +++ b/src/features/ui/components/modals/captcha-modal/captcha-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import useCaptcha from 'soapbox/api/hooks/captcha/useCaptcha'; diff --git a/src/features/ui/components/modals/captcha-modal/components/puzzle.tsx b/src/features/ui/components/modals/captcha-modal/components/puzzle.tsx index 9e0a74746..0bafb8562 100644 --- a/src/features/ui/components/modals/captcha-modal/components/puzzle.tsx +++ b/src/features/ui/components/modals/captcha-modal/components/puzzle.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useEffect } from 'react'; +import { useRef, useEffect } from 'react'; interface IPuzzleCaptcha { bg: string; diff --git a/src/features/ui/components/modals/compare-history-modal.tsx b/src/features/ui/components/modals/compare-history-modal.tsx index ac8b8c275..6b351f624 100644 --- a/src/features/ui/components/modals/compare-history-modal.tsx +++ b/src/features/ui/components/modals/compare-history-modal.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedDate, FormattedMessage } from 'react-intl'; import { fetchHistory } from 'soapbox/actions/history'; diff --git a/src/features/ui/components/modals/component-modal.tsx b/src/features/ui/components/modals/component-modal.tsx index 782417f9c..309941545 100644 --- a/src/features/ui/components/modals/component-modal.tsx +++ b/src/features/ui/components/modals/component-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Modal } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/compose-event-modal/compose-event-modal.tsx b/src/features/ui/components/modals/compose-event-modal/compose-event-modal.tsx index ac6a035a3..a7da9c968 100644 --- a/src/features/ui/components/modals/compose-event-modal/compose-event-modal.tsx +++ b/src/features/ui/components/modals/compose-event-modal/compose-event-modal.tsx @@ -1,7 +1,7 @@ import mapPinIcon from '@tabler/icons/outline/map-pin.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { diff --git a/src/features/ui/components/modals/compose-event-modal/upload-button.tsx b/src/features/ui/components/modals/compose-event-modal/upload-button.tsx index ea8a0bce1..6aefcf341 100644 --- a/src/features/ui/components/modals/compose-event-modal/upload-button.tsx +++ b/src/features/ui/components/modals/compose-event-modal/upload-button.tsx @@ -1,5 +1,5 @@ import photoPlusIcon from '@tabler/icons/outline/photo-plus.svg'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import Icon from 'soapbox/components/icon'; diff --git a/src/features/ui/components/modals/compose-modal.tsx b/src/features/ui/components/modals/compose-modal.tsx index ee4965dcb..52202d394 100644 --- a/src/features/ui/components/modals/compose-modal.tsx +++ b/src/features/ui/components/modals/compose-modal.tsx @@ -1,6 +1,6 @@ import trashIcon from '@tabler/icons/outline/trash.svg'; import clsx from 'clsx'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { cancelReplyCompose, setGroupTimelineVisible, uploadCompose } from 'soapbox/actions/compose'; diff --git a/src/features/ui/components/modals/confirmation-modal.tsx b/src/features/ui/components/modals/confirmation-modal.tsx index 20d62114a..ac4b0f93d 100644 --- a/src/features/ui/components/modals/confirmation-modal.tsx +++ b/src/features/ui/components/modals/confirmation-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import List, { ListItem } from 'soapbox/components/list'; diff --git a/src/features/ui/components/modals/crypto-donate-modal.tsx b/src/features/ui/components/modals/crypto-donate-modal.tsx index c1724ee78..78a276ee4 100644 --- a/src/features/ui/components/modals/crypto-donate-modal.tsx +++ b/src/features/ui/components/modals/crypto-donate-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Modal } from 'soapbox/components/ui'; import DetailedCryptoAddress from 'soapbox/features/crypto-donate/components/detailed-crypto-address'; diff --git a/src/features/ui/components/modals/dislikes-modal.tsx b/src/features/ui/components/modals/dislikes-modal.tsx index 7689d7047..52778b131 100644 --- a/src/features/ui/components/modals/dislikes-modal.tsx +++ b/src/features/ui/components/modals/dislikes-modal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchDislikes } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/modals/edit-announcement-modal.tsx b/src/features/ui/components/modals/edit-announcement-modal.tsx index 1a81df1ab..ebc4059e9 100644 --- a/src/features/ui/components/modals/edit-announcement-modal.tsx +++ b/src/features/ui/components/modals/edit-announcement-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { closeModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/modals/edit-bookmark-folder-modal.tsx b/src/features/ui/components/modals/edit-bookmark-folder-modal.tsx index e68b98228..a01452bf0 100644 --- a/src/features/ui/components/modals/edit-bookmark-folder-modal.tsx +++ b/src/features/ui/components/modals/edit-bookmark-folder-modal.tsx @@ -1,6 +1,6 @@ import { useFloating, shift } from '@floating-ui/react'; import moodHappyIcon from '@tabler/icons/outline/mood-happy.svg'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { createPortal } from 'react-dom'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; diff --git a/src/features/ui/components/modals/edit-domain-modal.tsx b/src/features/ui/components/modals/edit-domain-modal.tsx index c0e3b5e29..15274987e 100644 --- a/src/features/ui/components/modals/edit-domain-modal.tsx +++ b/src/features/ui/components/modals/edit-domain-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { closeModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/modals/edit-federation-modal.tsx b/src/features/ui/components/modals/edit-federation-modal.tsx index ff4547b26..a3d535278 100644 --- a/src/features/ui/components/modals/edit-federation-modal.tsx +++ b/src/features/ui/components/modals/edit-federation-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { updateMrf } from 'soapbox/actions/mrf'; diff --git a/src/features/ui/components/modals/edit-rule-modal.tsx b/src/features/ui/components/modals/edit-rule-modal.tsx index fe1862da5..08e9dc051 100644 --- a/src/features/ui/components/modals/edit-rule-modal.tsx +++ b/src/features/ui/components/modals/edit-rule-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useRules } from 'soapbox/api/hooks/admin'; diff --git a/src/features/ui/components/modals/embed-modal.tsx b/src/features/ui/components/modals/embed-modal.tsx index 5ba385238..c79d9d45c 100644 --- a/src/features/ui/components/modals/embed-modal.tsx +++ b/src/features/ui/components/modals/embed-modal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { closeModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/modals/event-map-modal.tsx b/src/features/ui/components/modals/event-map-modal.tsx index 24bc56193..d1f114192 100644 --- a/src/features/ui/components/modals/event-map-modal.tsx +++ b/src/features/ui/components/modals/event-map-modal.tsx @@ -3,7 +3,7 @@ import L from 'leaflet'; import iconRetinaUrl from 'leaflet/dist/images/marker-icon-2x.png'; import iconUrl from 'leaflet/dist/images/marker-icon.png'; import shadowUrl from 'leaflet/dist/images/marker-shadow.png'; -import React, { useCallback, useEffect, useRef } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import { FormattedMessage } from 'react-intl'; import { Button, Modal, Stack } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/event-participants-modal.tsx b/src/features/ui/components/modals/event-participants-modal.tsx index 85324546d..44c825b35 100644 --- a/src/features/ui/components/modals/event-participants-modal.tsx +++ b/src/features/ui/components/modals/event-participants-modal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchEventParticipations } from 'soapbox/actions/events'; diff --git a/src/features/ui/components/modals/familiar-followers-modal.tsx b/src/features/ui/components/modals/familiar-followers-modal.tsx index a3287a9c5..c249b83ef 100644 --- a/src/features/ui/components/modals/familiar-followers-modal.tsx +++ b/src/features/ui/components/modals/familiar-followers-modal.tsx @@ -1,5 +1,4 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import ScrollableList from 'soapbox/components/scrollable-list'; diff --git a/src/features/ui/components/modals/favourites-modal.tsx b/src/features/ui/components/modals/favourites-modal.tsx index d2b9b9ea7..ae8eb6e28 100644 --- a/src/features/ui/components/modals/favourites-modal.tsx +++ b/src/features/ui/components/modals/favourites-modal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchFavourites, expandFavourites } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/modals/hotkeys-modal.tsx b/src/features/ui/components/modals/hotkeys-modal.tsx index 7e5ff858f..057e54ad3 100644 --- a/src/features/ui/components/modals/hotkeys-modal.tsx +++ b/src/features/ui/components/modals/hotkeys-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Modal } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/join-event-modal.tsx b/src/features/ui/components/modals/join-event-modal.tsx index eff0adeba..553b9b7de 100644 --- a/src/features/ui/components/modals/join-event-modal.tsx +++ b/src/features/ui/components/modals/join-event-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { joinEvent } from 'soapbox/actions/events'; diff --git a/src/features/ui/components/modals/landing-page-modal.test.tsx b/src/features/ui/components/modals/landing-page-modal.test.tsx index ccb5eea29..650c276f2 100644 --- a/src/features/ui/components/modals/landing-page-modal.test.tsx +++ b/src/features/ui/components/modals/landing-page-modal.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { storeOpen } from 'soapbox/jest/mock-stores'; diff --git a/src/features/ui/components/modals/landing-page-modal.tsx b/src/features/ui/components/modals/landing-page-modal.tsx index b2e1196b1..076624ad3 100644 --- a/src/features/ui/components/modals/landing-page-modal.tsx +++ b/src/features/ui/components/modals/landing-page-modal.tsx @@ -1,6 +1,5 @@ import lifebuoyIcon from '@tabler/icons/outline/lifebuoy.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import SiteLogo from 'soapbox/components/site-logo'; diff --git a/src/features/ui/components/modals/manage-group-modal/create-group-modal.tsx b/src/features/ui/components/modals/manage-group-modal/create-group-modal.tsx index bef60fda4..bbb8601bd 100644 --- a/src/features/ui/components/modals/manage-group-modal/create-group-modal.tsx +++ b/src/features/ui/components/modals/manage-group-modal/create-group-modal.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useState } from 'react'; +import { useMemo, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { z } from 'zod'; diff --git a/src/features/ui/components/modals/manage-group-modal/steps/confirmation-step.tsx b/src/features/ui/components/modals/manage-group-modal/steps/confirmation-step.tsx index 1346a81f1..74a7f353c 100644 --- a/src/features/ui/components/modals/manage-group-modal/steps/confirmation-step.tsx +++ b/src/features/ui/components/modals/manage-group-modal/steps/confirmation-step.tsx @@ -1,6 +1,5 @@ import linkIcon from '@tabler/icons/outline/link.svg'; import shareIcon from '@tabler/icons/outline/share.svg'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Avatar, Divider, HStack, Stack, Text, Button } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/manage-group-modal/steps/details-step.tsx b/src/features/ui/components/modals/manage-group-modal/steps/details-step.tsx index 1f8a2006b..9b8aac350 100644 --- a/src/features/ui/components/modals/manage-group-modal/steps/details-step.tsx +++ b/src/features/ui/components/modals/manage-group-modal/steps/details-step.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { CreateGroupParams, useGroupValidation } from 'soapbox/api/hooks'; diff --git a/src/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx b/src/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx index 96d168c01..0d136727f 100644 --- a/src/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx +++ b/src/features/ui/components/modals/manage-group-modal/steps/privacy-step.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { type CreateGroupParams } from 'soapbox/api/hooks'; diff --git a/src/features/ui/components/modals/media-modal.tsx b/src/features/ui/components/modals/media-modal.tsx index 6eca2c813..7ec650b37 100644 --- a/src/features/ui/components/modals/media-modal.tsx +++ b/src/features/ui/components/modals/media-modal.tsx @@ -6,7 +6,7 @@ import downloadIcon from '@tabler/icons/outline/download.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; import ReactSwipeableViews from 'react-swipeable-views'; diff --git a/src/features/ui/components/modals/mentions-modal.tsx b/src/features/ui/components/modals/mentions-modal.tsx index 4d16afc75..6e70d01ce 100644 --- a/src/features/ui/components/modals/mentions-modal.tsx +++ b/src/features/ui/components/modals/mentions-modal.tsx @@ -1,5 +1,5 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React, { useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchStatusWithContext } from 'soapbox/actions/statuses'; diff --git a/src/features/ui/components/modals/missing-description-modal.tsx b/src/features/ui/components/modals/missing-description-modal.tsx index 742836dba..da91a76bb 100644 --- a/src/features/ui/components/modals/missing-description-modal.tsx +++ b/src/features/ui/components/modals/missing-description-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { injectIntl, FormattedMessage, IntlShape, defineMessages } from 'react-intl'; import { Modal } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/mute-modal.tsx b/src/features/ui/components/modals/mute-modal.tsx index a27127337..61bd2abfd 100644 --- a/src/features/ui/components/modals/mute-modal.tsx +++ b/src/features/ui/components/modals/mute-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { muteAccount } from 'soapbox/actions/accounts'; diff --git a/src/features/ui/components/modals/nostr-login-modal/components/nostr-extension-indicator.tsx b/src/features/ui/components/modals/nostr-login-modal/components/nostr-extension-indicator.tsx index adc56b707..17e6b9aed 100644 --- a/src/features/ui/components/modals/nostr-login-modal/components/nostr-extension-indicator.tsx +++ b/src/features/ui/components/modals/nostr-login-modal/components/nostr-extension-indicator.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { closeModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/modals/nostr-login-modal/nostr-login-modal.tsx b/src/features/ui/components/modals/nostr-login-modal/nostr-login-modal.tsx index 21595bdb9..7c55d4f59 100644 --- a/src/features/ui/components/modals/nostr-login-modal/nostr-login-modal.tsx +++ b/src/features/ui/components/modals/nostr-login-modal/nostr-login-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import ExtensionStep from './steps/extension-step'; import KeyAddStep from './steps/key-add-step'; diff --git a/src/features/ui/components/modals/nostr-login-modal/steps/extension-step.tsx b/src/features/ui/components/modals/nostr-login-modal/steps/extension-step.tsx index e65dac0ba..a969af8f9 100644 --- a/src/features/ui/components/modals/nostr-login-modal/steps/extension-step.tsx +++ b/src/features/ui/components/modals/nostr-login-modal/steps/extension-step.tsx @@ -1,5 +1,4 @@ import alertTriangleIcon from '@tabler/icons/outline/alert-triangle.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/modals/nostr-login-modal/steps/key-add-step.tsx b/src/features/ui/components/modals/nostr-login-modal/steps/key-add-step.tsx index 44f5b8cf7..dd589d002 100644 --- a/src/features/ui/components/modals/nostr-login-modal/steps/key-add-step.tsx +++ b/src/features/ui/components/modals/nostr-login-modal/steps/key-add-step.tsx @@ -1,5 +1,5 @@ import { nip19 } from 'nostr-tools'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { logInNostr } from 'soapbox/actions/nostr'; diff --git a/src/features/ui/components/modals/nostr-signup-modal/nostr-signup-modal.tsx b/src/features/ui/components/modals/nostr-signup-modal/nostr-signup-modal.tsx index ab4b5d5a7..f76b7273d 100644 --- a/src/features/ui/components/modals/nostr-signup-modal/nostr-signup-modal.tsx +++ b/src/features/ui/components/modals/nostr-signup-modal/nostr-signup-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import ExtensionStep from '../nostr-login-modal/steps/extension-step'; diff --git a/src/features/ui/components/modals/nostr-signup-modal/steps/key-step.tsx b/src/features/ui/components/modals/nostr-signup-modal/steps/key-step.tsx index f3fd6d0b9..feffd8f46 100644 --- a/src/features/ui/components/modals/nostr-signup-modal/steps/key-step.tsx +++ b/src/features/ui/components/modals/nostr-signup-modal/steps/key-step.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/modals/nostr-signup-modal/steps/keygen-step.tsx b/src/features/ui/components/modals/nostr-signup-modal/steps/keygen-step.tsx index ebc448dac..43b9aec8e 100644 --- a/src/features/ui/components/modals/nostr-signup-modal/steps/keygen-step.tsx +++ b/src/features/ui/components/modals/nostr-signup-modal/steps/keygen-step.tsx @@ -1,6 +1,6 @@ import downloadIcon from '@tabler/icons/outline/download.svg'; import { generateSecretKey, getPublicKey, nip19 } from 'nostr-tools'; -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchAccount } from 'soapbox/actions/accounts'; diff --git a/src/features/ui/components/modals/onboarding-flow-modal/onboarding-flow-modal.tsx b/src/features/ui/components/modals/onboarding-flow-modal/onboarding-flow-modal.tsx index 82f2b11cc..87ad89432 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/onboarding-flow-modal.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/onboarding-flow-modal.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { useEffect, useState } from 'react'; import ReactSwipeableViews from 'react-swipeable-views'; import { endOnboarding } from 'soapbox/actions/onboarding'; @@ -20,7 +20,7 @@ interface IOnboardingFlowModal { const OnboardingFlowModal: React.FC = ({ onClose }) => { const dispatch = useAppDispatch(); - const [currentStep, setCurrentStep] = React.useState(0); + const [currentStep, setCurrentStep] = useState(0); const handleSwipe = (nextStep: number) => { setCurrentStep(nextStep); @@ -64,7 +64,7 @@ const OnboardingFlowModal: React.FC = ({ onClose }) => { } }; - React.useEffect(() => { + useEffect(() => { document.addEventListener('keyup', handleKeyUp); return () => { diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/avatar-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/avatar-step.tsx index c7f8117e4..332a8b20e 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/avatar-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/avatar-step.tsx @@ -1,7 +1,7 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React from 'react'; +import { useRef, useState } from 'react'; import { FormattedMessage, defineMessages } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; @@ -29,10 +29,10 @@ interface IAvatarSelectionModal { const AvatarSelectionModal: React.FC = ({ onClose, onNext }) => { const dispatch = useAppDispatch(); const { account } = useOwnAccount(); - const fileInput = React.useRef(null); - const [selectedFile, setSelectedFile] = React.useState(); - const [isSubmitting, setSubmitting] = React.useState(false); - const [isDisabled, setDisabled] = React.useState(true); + const fileInput = useRef(null); + const [selectedFile, setSelectedFile] = useState(); + const [isSubmitting, setSubmitting] = useState(false); + const [isDisabled, setDisabled] = useState(true); const isDefault = account ? isDefaultAvatar(account.avatar) : false; const openFilePicker = () => { diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/bio-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/bio-step.tsx index b043a73ac..378f59aa6 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/bio-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/bio-step.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; @@ -27,9 +27,9 @@ const BioStep: React.FC = ({ onClose, onNext }) => { const dispatch = useAppDispatch(); const { account } = useOwnAccount(); - const [value, setValue] = React.useState(account?.source?.note ?? ''); - const [isSubmitting, setSubmitting] = React.useState(false); - const [errors, setErrors] = React.useState([]); + const [value, setValue] = useState(account?.source?.note ?? ''); + const [isSubmitting, setSubmitting] = useState(false); + const [errors, setErrors] = useState([]); const handleSubmit = () => { setSubmitting(true); diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/completed-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/completed-step.tsx index 321cd3a69..850cb2c25 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/completed-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/completed-step.tsx @@ -1,6 +1,5 @@ import confettiIcon from '@tabler/icons/outline/confetti.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Button, Icon, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/cover-photo-selection-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/cover-photo-selection-step.tsx index de40a1932..b2f56d180 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/cover-photo-selection-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/cover-photo-selection-step.tsx @@ -1,7 +1,7 @@ import plusIcon from '@tabler/icons/outline/plus.svg'; import xIcon from '@tabler/icons/outline/x.svg'; import clsx from 'clsx'; -import React from 'react'; +import { useRef, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; @@ -32,10 +32,10 @@ const CoverPhotoSelectionModal: React.FC = ({ onClose const dispatch = useAppDispatch(); const { account } = useOwnAccount(); - const fileInput = React.useRef(null); - const [selectedFile, setSelectedFile] = React.useState(); - const [isSubmitting, setSubmitting] = React.useState(false); - const [isDisabled, setDisabled] = React.useState(true); + const fileInput = useRef(null); + const [selectedFile, setSelectedFile] = useState(); + const [isSubmitting, setSubmitting] = useState(false); + const [isDisabled, setDisabled] = useState(true); const isDefault = account ? isDefaultHeader(account.avatar) : false; const openFilePicker = () => { diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/display-name-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/display-name-step.tsx index cf51decd0..43d7c8dc5 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/display-name-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/display-name-step.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; +import { useMemo, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { patchMe } from 'soapbox/actions/me'; @@ -27,15 +27,15 @@ const DisplayNameStep: React.FC = ({ onClose, onNext }) => { const dispatch = useAppDispatch(); const { account } = useOwnAccount(); - const [value, setValue] = React.useState(account?.display_name || ''); - const [isSubmitting, setSubmitting] = React.useState(false); - const [errors, setErrors] = React.useState([]); + const [value, setValue] = useState(account?.display_name || ''); + const [isSubmitting, setSubmitting] = useState(false); + const [errors, setErrors] = useState([]); const trimmedValue = value.trim(); const isValid = trimmedValue.length > 0; const isDisabled = !isValid || value.length > 30; - const hintText = React.useMemo(() => { + const hintText = useMemo(() => { const charsLeft = 30 - value.length; const suffix = charsLeft === 1 ? 'character remaining' : 'characters remaining'; diff --git a/src/features/ui/components/modals/onboarding-flow-modal/steps/suggested-accounts-step.tsx b/src/features/ui/components/modals/onboarding-flow-modal/steps/suggested-accounts-step.tsx index e186cd27a..434730ea1 100644 --- a/src/features/ui/components/modals/onboarding-flow-modal/steps/suggested-accounts-step.tsx +++ b/src/features/ui/components/modals/onboarding-flow-modal/steps/suggested-accounts-step.tsx @@ -1,6 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; import debounce from 'lodash/debounce'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import ScrollableList from 'soapbox/components/scrollable-list'; diff --git a/src/features/ui/components/modals/reactions-modal.tsx b/src/features/ui/components/modals/reactions-modal.tsx index dd51f7253..d0984e72d 100644 --- a/src/features/ui/components/modals/reactions-modal.tsx +++ b/src/features/ui/components/modals/reactions-modal.tsx @@ -1,6 +1,6 @@ import clsx from 'clsx'; import { List as ImmutableList } from 'immutable'; -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { fetchFavourites, fetchReactions } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/modals/reblogs-modal.tsx b/src/features/ui/components/modals/reblogs-modal.tsx index 5107fa881..5c9116a3f 100644 --- a/src/features/ui/components/modals/reblogs-modal.tsx +++ b/src/features/ui/components/modals/reblogs-modal.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchReblogs, expandReblogs } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/modals/reply-mentions-modal.tsx b/src/features/ui/components/modals/reply-mentions-modal.tsx index 9717694bd..f643fb178 100644 --- a/src/features/ui/components/modals/reply-mentions-modal.tsx +++ b/src/features/ui/components/modals/reply-mentions-modal.tsx @@ -1,5 +1,5 @@ import arrowLeftIcon from '@tabler/icons/outline/arrow-left.svg'; -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import { Modal } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/modals/report-modal/report-modal.tsx b/src/features/ui/components/modals/report-modal/report-modal.tsx index 27d35832a..c461cffa5 100644 --- a/src/features/ui/components/modals/report-modal/report-modal.tsx +++ b/src/features/ui/components/modals/report-modal/report-modal.tsx @@ -1,5 +1,5 @@ import infoCircleIcon from '@tabler/icons/outline/info-circle.svg'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { blockAccount } from 'soapbox/actions/accounts'; diff --git a/src/features/ui/components/modals/report-modal/steps/confirmation-step.tsx b/src/features/ui/components/modals/report-modal/steps/confirmation-step.tsx index e00d19115..f95539b78 100644 --- a/src/features/ui/components/modals/report-modal/steps/confirmation-step.tsx +++ b/src/features/ui/components/modals/report-modal/steps/confirmation-step.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { ReportableEntities } from 'soapbox/actions/reports'; diff --git a/src/features/ui/components/modals/report-modal/steps/other-actions-step.tsx b/src/features/ui/components/modals/report-modal/steps/other-actions-step.tsx index 40b135c20..fa985c19c 100644 --- a/src/features/ui/components/modals/report-modal/steps/other-actions-step.tsx +++ b/src/features/ui/components/modals/report-modal/steps/other-actions-step.tsx @@ -1,7 +1,7 @@ import arrowsMinimizeIcon from '@tabler/icons/outline/arrows-minimize.svg'; import plusIcon from '@tabler/icons/outline/plus.svg'; import { OrderedSet } from 'immutable'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { changeReportBlock, changeReportForward } from 'soapbox/actions/reports'; diff --git a/src/features/ui/components/modals/report-modal/steps/reason-step.tsx b/src/features/ui/components/modals/report-modal/steps/reason-step.tsx index 4d27688b7..d5fc1f98f 100644 --- a/src/features/ui/components/modals/report-modal/steps/reason-step.tsx +++ b/src/features/ui/components/modals/report-modal/steps/reason-step.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { changeReportComment, changeReportRule, ReportableEntities } from 'soapbox/actions/reports'; diff --git a/src/features/ui/components/modals/select-bookmark-folder-modal.tsx b/src/features/ui/components/modals/select-bookmark-folder-modal.tsx index 227e9724c..ac0f401cc 100644 --- a/src/features/ui/components/modals/select-bookmark-folder-modal.tsx +++ b/src/features/ui/components/modals/select-bookmark-folder-modal.tsx @@ -1,6 +1,6 @@ import bookmarksIcon from '@tabler/icons/outline/bookmarks.svg'; import folderIcon from '@tabler/icons/outline/folder.svg'; -import React, { useCallback, useState } from 'react'; +import { useCallback, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { bookmark } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/modals/unauthorized-modal.test.tsx b/src/features/ui/components/modals/unauthorized-modal.test.tsx index abee32123..f72448abf 100644 --- a/src/features/ui/components/modals/unauthorized-modal.test.tsx +++ b/src/features/ui/components/modals/unauthorized-modal.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { storeOpen } from 'soapbox/jest/mock-stores'; diff --git a/src/features/ui/components/modals/unauthorized-modal.tsx b/src/features/ui/components/modals/unauthorized-modal.tsx index d73c96884..13dd5df52 100644 --- a/src/features/ui/components/modals/unauthorized-modal.tsx +++ b/src/features/ui/components/modals/unauthorized-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/ui/components/modals/video-modal.tsx b/src/features/ui/components/modals/video-modal.tsx index 0f13c8d81..c80e2b19b 100644 --- a/src/features/ui/components/modals/video-modal.tsx +++ b/src/features/ui/components/modals/video-modal.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/features/ui/components/modals/zap-split/display-name-row.tsx b/src/features/ui/components/modals/zap-split/display-name-row.tsx index b6c54a85c..6f023f3a7 100644 --- a/src/features/ui/components/modals/zap-split/display-name-row.tsx +++ b/src/features/ui/components/modals/zap-split/display-name-row.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { HStack, Text } from 'soapbox/components/ui'; import VerificationBadge from 'soapbox/components/verification-badge'; diff --git a/src/features/ui/components/modals/zap-split/zap-split-modal.tsx b/src/features/ui/components/modals/zap-split/zap-split-modal.tsx index 535196571..023f3dc83 100644 --- a/src/features/ui/components/modals/zap-split/zap-split-modal.tsx +++ b/src/features/ui/components/modals/zap-split/zap-split-modal.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useDispatch } from 'react-redux'; diff --git a/src/features/ui/components/modals/zap-split/zap-split.tsx b/src/features/ui/components/modals/zap-split/zap-split.tsx index 036e8169d..9b6e75e72 100644 --- a/src/features/ui/components/modals/zap-split/zap-split.tsx +++ b/src/features/ui/components/modals/zap-split/zap-split.tsx @@ -1,6 +1,5 @@ import folderOpenIcon from '@tabler/icons/outline/folder-open.svg'; import { QRCodeCanvas } from 'qrcode.react'; -import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import Account from 'soapbox/components/account'; diff --git a/src/features/ui/components/modals/zaps-modal.tsx b/src/features/ui/components/modals/zaps-modal.tsx index acf15e09e..5783b31e7 100644 --- a/src/features/ui/components/modals/zaps-modal.tsx +++ b/src/features/ui/components/modals/zaps-modal.tsx @@ -1,5 +1,5 @@ import { List as ImmutableList } from 'immutable'; -import React, { useEffect, useMemo } from 'react'; +import { useEffect, useMemo } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchZaps, expandZaps } from 'soapbox/actions/interactions'; diff --git a/src/features/ui/components/navbar.test.tsx b/src/features/ui/components/navbar.test.tsx index 536f137f6..63b6bc655 100644 --- a/src/features/ui/components/navbar.test.tsx +++ b/src/features/ui/components/navbar.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { storeOpen } from 'soapbox/jest/mock-stores'; diff --git a/src/features/ui/components/navbar.tsx b/src/features/ui/components/navbar.tsx index e11a7e10b..d66cd1f88 100644 --- a/src/features/ui/components/navbar.tsx +++ b/src/features/ui/components/navbar.tsx @@ -1,6 +1,6 @@ import helpIcon from '@tabler/icons/outline/help.svg'; import clsx from 'clsx'; -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link, Redirect } from 'react-router-dom'; diff --git a/src/features/ui/components/new-account-zap-split.tsx b/src/features/ui/components/new-account-zap-split.tsx index 3f3ae03a3..999c1cc64 100644 --- a/src/features/ui/components/new-account-zap-split.tsx +++ b/src/features/ui/components/new-account-zap-split.tsx @@ -1,5 +1,5 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import Account from 'soapbox/components/account'; diff --git a/src/features/ui/components/panels/account-note-panel.tsx b/src/features/ui/components/panels/account-note-panel.tsx index 5a28136c8..152c4c1d5 100644 --- a/src/features/ui/components/panels/account-note-panel.tsx +++ b/src/features/ui/components/panels/account-note-panel.tsx @@ -1,5 +1,5 @@ import debounce from 'lodash/debounce'; -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { submitAccountNote } from 'soapbox/actions/account-notes'; diff --git a/src/features/ui/components/panels/my-groups-panel.tsx b/src/features/ui/components/panels/my-groups-panel.tsx index d9a95a314..578375796 100644 --- a/src/features/ui/components/panels/my-groups-panel.tsx +++ b/src/features/ui/components/panels/my-groups-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useGroups } from 'soapbox/api/hooks'; import { Widget } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/panels/new-event-panel.tsx b/src/features/ui/components/panels/new-event-panel.tsx index df7eeeddc..900f06559 100644 --- a/src/features/ui/components/panels/new-event-panel.tsx +++ b/src/features/ui/components/panels/new-event-panel.tsx @@ -1,5 +1,4 @@ import calendarEventIcon from '@tabler/icons/outline/calendar-event.svg'; -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/panels/new-group-panel.tsx b/src/features/ui/components/panels/new-group-panel.tsx index 387f3abf0..c69741853 100644 --- a/src/features/ui/components/panels/new-group-panel.tsx +++ b/src/features/ui/components/panels/new-group-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/panels/sign-up-panel.test.tsx b/src/features/ui/components/panels/sign-up-panel.test.tsx index 5780929ba..d2afa6be8 100644 --- a/src/features/ui/components/panels/sign-up-panel.test.tsx +++ b/src/features/ui/components/panels/sign-up-panel.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { storeOpen } from 'soapbox/jest/mock-stores'; diff --git a/src/features/ui/components/panels/sign-up-panel.tsx b/src/features/ui/components/panels/sign-up-panel.tsx index a37664c3d..4ffb25159 100644 --- a/src/features/ui/components/panels/sign-up-panel.tsx +++ b/src/features/ui/components/panels/sign-up-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/panels/suggested-groups-panel.tsx b/src/features/ui/components/panels/suggested-groups-panel.tsx index d2671bc14..d8fa17f6a 100644 --- a/src/features/ui/components/panels/suggested-groups-panel.tsx +++ b/src/features/ui/components/panels/suggested-groups-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useSuggestedGroups } from 'soapbox/api/hooks'; import { Widget } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/pending-status.tsx b/src/features/ui/components/pending-status.tsx index 1ed4e5502..bdb570d65 100644 --- a/src/features/ui/components/pending-status.tsx +++ b/src/features/ui/components/pending-status.tsx @@ -1,5 +1,4 @@ import clsx from 'clsx'; -import React from 'react'; import Account from 'soapbox/components/account'; import StatusContent from 'soapbox/components/status-content'; diff --git a/src/features/ui/components/pinned-accounts-panel.tsx b/src/features/ui/components/pinned-accounts-panel.tsx index c6de3a667..e521b60d6 100644 --- a/src/features/ui/components/pinned-accounts-panel.tsx +++ b/src/features/ui/components/pinned-accounts-panel.tsx @@ -1,5 +1,5 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchPinnedAccounts } from 'soapbox/actions/accounts'; diff --git a/src/features/ui/components/poll-preview.tsx b/src/features/ui/components/poll-preview.tsx index 03de9a582..85e1746cc 100644 --- a/src/features/ui/components/poll-preview.tsx +++ b/src/features/ui/components/poll-preview.tsx @@ -1,5 +1,4 @@ import noop from 'lodash/noop'; -import React from 'react'; import PollOption from 'soapbox/components/polls/poll-option'; import { Stack } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/profile-dropdown.tsx b/src/features/ui/components/profile-dropdown.tsx index 2047ae65b..434dc298b 100644 --- a/src/features/ui/components/profile-dropdown.tsx +++ b/src/features/ui/components/profile-dropdown.tsx @@ -3,7 +3,7 @@ import logoutIcon from '@tabler/icons/outline/logout.svg'; import plusIcon from '@tabler/icons/outline/plus.svg'; import clsx from 'clsx'; import throttle from 'lodash/throttle'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/profile-familiar-followers.tsx b/src/features/ui/components/profile-familiar-followers.tsx index c80e46b04..e63b9dcf1 100644 --- a/src/features/ui/components/profile-familiar-followers.tsx +++ b/src/features/ui/components/profile-familiar-followers.tsx @@ -1,5 +1,5 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import { FormattedList, FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/profile-field.tsx b/src/features/ui/components/profile-field.tsx index 151c3b2c9..2cdae088c 100644 --- a/src/features/ui/components/profile-field.tsx +++ b/src/features/ui/components/profile-field.tsx @@ -1,6 +1,5 @@ import checkIcon from '@tabler/icons/outline/check.svg'; import clsx from 'clsx'; -import React from 'react'; import { defineMessages, useIntl, FormatDateOptions } from 'react-intl'; import Markup from 'soapbox/components/markup'; diff --git a/src/features/ui/components/profile-fields-panel.tsx b/src/features/ui/components/profile-fields-panel.tsx index fb434a25b..9f0d7d305 100644 --- a/src/features/ui/components/profile-fields-panel.tsx +++ b/src/features/ui/components/profile-fields-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Widget, Stack } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/profile-info-panel.tsx b/src/features/ui/components/profile-info-panel.tsx index dcae6e4ce..8e19870ee 100644 --- a/src/features/ui/components/profile-info-panel.tsx +++ b/src/features/ui/components/profile-info-panel.tsx @@ -3,7 +3,6 @@ import calendarIcon from '@tabler/icons/outline/calendar.svg'; import linkIcon from '@tabler/icons/outline/link.svg'; import lockIcon from '@tabler/icons/outline/lock.svg'; import mapPinIcon from '@tabler/icons/outline/map-pin.svg'; -import React from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { usePatronUser } from 'soapbox/api/hooks'; diff --git a/src/features/ui/components/profile-media-panel.tsx b/src/features/ui/components/profile-media-panel.tsx index d63b849f3..9f2d3f5f4 100644 --- a/src/features/ui/components/profile-media-panel.tsx +++ b/src/features/ui/components/profile-media-panel.tsx @@ -1,5 +1,5 @@ import { List as ImmutableList } from 'immutable'; -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { openModal } from 'soapbox/actions/modals'; diff --git a/src/features/ui/components/profile-stats.tsx b/src/features/ui/components/profile-stats.tsx index 6863f9bd9..0c094c275 100644 --- a/src/features/ui/components/profile-stats.tsx +++ b/src/features/ui/components/profile-stats.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { useIntl, defineMessages } from 'react-intl'; import { NavLink } from 'react-router-dom'; diff --git a/src/features/ui/components/promo-panel.tsx b/src/features/ui/components/promo-panel.tsx index a709d0b16..2a3917628 100644 --- a/src/features/ui/components/promo-panel.tsx +++ b/src/features/ui/components/promo-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import ForkAwesomeIcon from 'soapbox/components/fork-awesome-icon'; import { Widget, Stack, Text } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/subscribe-button.test.tsx b/src/features/ui/components/subscribe-button.test.tsx index b3c8d7d5d..69c697fe1 100644 --- a/src/features/ui/components/subscribe-button.test.tsx +++ b/src/features/ui/components/subscribe-button.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, it } from 'vitest'; import { buildAccount, buildRelationship } from 'soapbox/jest/factory'; diff --git a/src/features/ui/components/subscription-button.tsx b/src/features/ui/components/subscription-button.tsx index fb734ea06..0e470f9c5 100644 --- a/src/features/ui/components/subscription-button.tsx +++ b/src/features/ui/components/subscription-button.tsx @@ -1,6 +1,5 @@ import bellRingingIcon from '@tabler/icons/outline/bell-ringing.svg'; import bellIcon from '@tabler/icons/outline/bell.svg'; -import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { diff --git a/src/features/ui/components/theme-selector.tsx b/src/features/ui/components/theme-selector.tsx index 019a8d59b..d242a0723 100644 --- a/src/features/ui/components/theme-selector.tsx +++ b/src/features/ui/components/theme-selector.tsx @@ -3,7 +3,7 @@ import deviceDesktopIcon from '@tabler/icons/outline/device-desktop.svg'; import moonIcon from '@tabler/icons/outline/moon.svg'; import shadowIcon from '@tabler/icons/outline/shadow.svg'; import sunIcon from '@tabler/icons/outline/sun.svg'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { Icon, Select } from 'soapbox/components/ui'; diff --git a/src/features/ui/components/theme-toggle.tsx b/src/features/ui/components/theme-toggle.tsx index 8137caeb6..3532b5cfd 100644 --- a/src/features/ui/components/theme-toggle.tsx +++ b/src/features/ui/components/theme-toggle.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { changeSetting } from 'soapbox/actions/settings'; import { useAppDispatch, useSettings } from 'soapbox/hooks'; diff --git a/src/features/ui/components/timeline.tsx b/src/features/ui/components/timeline.tsx index e578cec99..ed5ed93a3 100644 --- a/src/features/ui/components/timeline.tsx +++ b/src/features/ui/components/timeline.tsx @@ -1,6 +1,6 @@ import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import debounce from 'lodash/debounce'; -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { defineMessages } from 'react-intl'; import { dequeueTimeline, scrollTopTimeline } from 'soapbox/actions/timelines'; diff --git a/src/features/ui/components/trends-panel.test.tsx b/src/features/ui/components/trends-panel.test.tsx index 07e122c16..1cb0ab9ad 100644 --- a/src/features/ui/components/trends-panel.test.tsx +++ b/src/features/ui/components/trends-panel.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { beforeEach, describe, expect, it } from 'vitest'; import { __stub } from 'soapbox/api'; diff --git a/src/features/ui/components/trends-panel.tsx b/src/features/ui/components/trends-panel.tsx index 9e87cc8c2..b531a9932 100644 --- a/src/features/ui/components/trends-panel.tsx +++ b/src/features/ui/components/trends-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/user-panel.tsx b/src/features/ui/components/user-panel.tsx index c6c2a9d12..9a446eda5 100644 --- a/src/features/ui/components/user-panel.tsx +++ b/src/features/ui/components/user-panel.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/who-to-follow-panel.tsx b/src/features/ui/components/who-to-follow-panel.tsx index 8209fccb5..3f74100d6 100644 --- a/src/features/ui/components/who-to-follow-panel.tsx +++ b/src/features/ui/components/who-to-follow-panel.tsx @@ -1,5 +1,4 @@ import xIcon from '@tabler/icons/outline/x.svg'; -import React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/ui/components/zoomable-image.tsx b/src/features/ui/components/zoomable-image.tsx index d826dc63e..e9a78921d 100644 --- a/src/features/ui/components/zoomable-image.tsx +++ b/src/features/ui/components/zoomable-image.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PureComponent } from 'react'; const MIN_SCALE = 1; const MAX_SCALE = 4; @@ -21,7 +21,7 @@ interface IZoomableImage { onClick?: React.MouseEventHandler; } -class ZoomableImage extends React.PureComponent { +class ZoomableImage extends PureComponent { static defaultProps = { alt: '', diff --git a/src/features/ui/index.tsx b/src/features/ui/index.tsx index bad79eb3e..240a56cf3 100644 --- a/src/features/ui/index.tsx +++ b/src/features/ui/index.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { Suspense, lazy, useEffect, useRef } from 'react'; +import { Suspense, lazy, useEffect, useRef } from 'react'; import { Switch, useHistory, useLocation, Redirect } from 'react-router-dom'; import { fetchFollowRequests } from 'soapbox/actions/accounts'; diff --git a/src/features/ui/util/global-hotkeys.tsx b/src/features/ui/util/global-hotkeys.tsx index e413ff2db..ef25e6c69 100644 --- a/src/features/ui/util/global-hotkeys.tsx +++ b/src/features/ui/util/global-hotkeys.tsx @@ -1,4 +1,4 @@ -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { useHistory } from 'react-router-dom'; import { resetCompose } from 'soapbox/actions/compose'; diff --git a/src/features/ui/util/optional-motion.tsx b/src/features/ui/util/optional-motion.tsx index 368158fec..84e0c466a 100644 --- a/src/features/ui/util/optional-motion.tsx +++ b/src/features/ui/util/optional-motion.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Motion, MotionProps } from 'react-motion'; import { useSettings } from 'soapbox/hooks'; diff --git a/src/features/ui/util/react-router-helpers.tsx b/src/features/ui/util/react-router-helpers.tsx index e45105fbb..40f2c6023 100644 --- a/src/features/ui/util/react-router-helpers.tsx +++ b/src/features/ui/util/react-router-helpers.tsx @@ -1,4 +1,4 @@ -import React, { Suspense, useEffect, useRef } from 'react'; +import { Suspense, useEffect, useRef } from 'react'; import { ErrorBoundary, type FallbackProps } from 'react-error-boundary'; import { Redirect, Route, useHistory, RouteProps, RouteComponentProps, match as MatchType, useLocation } from 'react-router-dom'; diff --git a/src/features/ui/util/reduced-motion.tsx b/src/features/ui/util/reduced-motion.tsx index c677f4428..83a76f5e8 100644 --- a/src/features/ui/util/reduced-motion.tsx +++ b/src/features/ui/util/reduced-motion.tsx @@ -1,6 +1,5 @@ // Like react-motion's Motion, but reduces all animations to cross-fades // for the benefit of users with motion sickness. -import React from 'react'; import { Motion, MotionProps } from 'react-motion'; const stylesToKeep = ['opacity', 'backgroundOpacity']; diff --git a/src/features/video/index.tsx b/src/features/video/index.tsx index 25836c515..6d6fc91e7 100644 --- a/src/features/video/index.tsx +++ b/src/features/video/index.tsx @@ -7,7 +7,7 @@ import volumeIcon from '@tabler/icons/outline/volume.svg'; import clsx from 'clsx'; import debounce from 'lodash/debounce'; import throttle from 'lodash/throttle'; -import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import Blurhash from 'soapbox/components/blurhash'; diff --git a/src/features/zap/components/zap-button/zap-button.tsx b/src/features/zap/components/zap-button/zap-button.tsx index d07fab6aa..f5a840b49 100644 --- a/src/features/zap/components/zap-button/zap-button.tsx +++ b/src/features/zap/components/zap-button/zap-button.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import { forwardRef } from 'react'; import { Link } from 'react-router-dom'; import { shortNumberFormat } from 'soapbox/utils/numbers'; @@ -30,7 +30,7 @@ interface IButton { } /** Customizable button element. */ -const ZapButton = React.forwardRef((props, ref): JSX.Element => { +const ZapButton = forwardRef((props, ref): JSX.Element => { const { disabled = false, icon, diff --git a/src/features/zap/components/zap-pay-request-form.tsx b/src/features/zap/components/zap-pay-request-form.tsx index 0528a3245..e73d509b0 100644 --- a/src/features/zap/components/zap-pay-request-form.tsx +++ b/src/features/zap/components/zap-pay-request-form.tsx @@ -1,7 +1,7 @@ import boltIcon from '@tabler/icons/outline/bolt.svg'; import infoSquareRoundedIcon from '@tabler/icons/outline/info-square-rounded.svg'; import xIcon from '@tabler/icons/outline/x.svg'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/features/zap/components/zap-split-account-item.tsx b/src/features/zap/components/zap-split-account-item.tsx index 9e6438432..cd2776464 100644 --- a/src/features/zap/components/zap-split-account-item.tsx +++ b/src/features/zap/components/zap-split-account-item.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useState } from 'react'; +import { useState } from 'react'; import { Slider } from 'soapbox/components/ui'; diff --git a/src/hooks/useDraggedFiles.ts b/src/hooks/useDraggedFiles.ts index 8f519d16e..af3e74d9c 100644 --- a/src/hooks/useDraggedFiles.ts +++ b/src/hooks/useDraggedFiles.ts @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; /** Controls the state of files being dragged over a node. */ function useDraggedFiles(node: React.RefObject, onDrop?: (files: FileList) => void) { diff --git a/src/hooks/useOnScreen.ts b/src/hooks/useOnScreen.ts index de9aa23b2..04b63ab2f 100644 --- a/src/hooks/useOnScreen.ts +++ b/src/hooks/useOnScreen.ts @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; /** Detect whether a given element is on the screen. */ // https://stackoverflow.com/a/64892655 diff --git a/src/init/soapbox-head.tsx b/src/init/soapbox-head.tsx index d11572870..3125c601b 100644 --- a/src/init/soapbox-head.tsx +++ b/src/init/soapbox-head.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useEffect } from 'react'; +import { lazy, useEffect } from 'react'; import { useSettings, @@ -11,7 +11,7 @@ import { normalizeSoapboxConfig } from 'soapbox/normalizers'; import { startSentry } from 'soapbox/sentry'; import { generateThemeCss } from 'soapbox/utils/theme'; -const Helmet = React.lazy(() => import('soapbox/components/helmet')); +const Helmet = lazy(() => import('soapbox/components/helmet')); interface ISoapboxHead { children: React.ReactNode; diff --git a/src/init/soapbox-load.tsx b/src/init/soapbox-load.tsx index 7ad79e5a0..858e22b34 100644 --- a/src/init/soapbox-load.tsx +++ b/src/init/soapbox-load.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { IntlProvider } from 'react-intl'; import { fetchMe } from 'soapbox/actions/me'; diff --git a/src/init/soapbox-mount.tsx b/src/init/soapbox-mount.tsx index 2c915ebbf..80fdc2f61 100644 --- a/src/init/soapbox-mount.tsx +++ b/src/init/soapbox-mount.tsx @@ -1,4 +1,4 @@ -import React, { Suspense, useEffect } from 'react'; +import { lazy, Suspense, useEffect } from 'react'; import { Toaster } from 'react-hot-toast'; import { BrowserRouter, Switch, Redirect, Route } from 'react-router-dom'; import { CompatRouter } from 'react-router-dom-v5-compat'; @@ -20,9 +20,9 @@ import { } from 'soapbox/hooks'; import { useCachedLocationHandler } from 'soapbox/utils/redirect'; -const GdprBanner = React.lazy(() => import('soapbox/components/gdpr-banner')); -const EmbeddedStatus = React.lazy(() => import('soapbox/features/embedded-status')); -const UI = React.lazy(() => import('soapbox/features/ui')); +const GdprBanner = lazy(() => import('soapbox/components/gdpr-banner')); +const EmbeddedStatus = lazy(() => import('soapbox/features/embedded-status')); +const UI = lazy(() => import('soapbox/features/ui')); /** Highest level node with the Redux store. */ const SoapboxMount = () => { diff --git a/src/init/soapbox.tsx b/src/init/soapbox.tsx index 2b3cce228..117b732b5 100644 --- a/src/init/soapbox.tsx +++ b/src/init/soapbox.tsx @@ -1,5 +1,4 @@ import { QueryClientProvider } from '@tanstack/react-query'; -import React from 'react'; import { Provider } from 'react-redux'; import { NostrProvider } from 'soapbox/contexts/nostr-context'; diff --git a/src/jest/test-helpers.tsx b/src/jest/test-helpers.tsx index 7aeac78cc..064f686c8 100644 --- a/src/jest/test-helpers.tsx +++ b/src/jest/test-helpers.tsx @@ -3,7 +3,7 @@ import { QueryClientProvider } from '@tanstack/react-query'; import { render, RenderOptions } from '@testing-library/react'; import { renderHook, RenderHookOptions } from '@testing-library/react-hooks'; import { merge } from 'immutable'; -import React, { FC, ReactElement } from 'react'; +import { FC, ReactElement } from 'react'; import { Toaster } from 'react-hot-toast'; import { IntlProvider } from 'react-intl'; import { Provider } from 'react-redux'; diff --git a/src/main.tsx b/src/main.tsx index 7382d69b2..554273683 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,4 @@ import { enableMapSet } from 'immer'; -import React from 'react'; import { createRoot } from 'react-dom/client'; import * as BuildConfig from 'soapbox/build-config'; diff --git a/src/pages/admin-page.tsx b/src/pages/admin-page.tsx index 9d8c21073..41ce5e061 100644 --- a/src/pages/admin-page.tsx +++ b/src/pages/admin-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from 'soapbox/components/ui'; import { diff --git a/src/pages/chats-page.tsx b/src/pages/chats-page.tsx index 368b2079e..b6e103378 100644 --- a/src/pages/chats-page.tsx +++ b/src/pages/chats-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; interface IChatsPage { children: React.ReactNode; diff --git a/src/pages/default-page.tsx b/src/pages/default-page.tsx index 417d578b9..1cb045c28 100644 --- a/src/pages/default-page.tsx +++ b/src/pages/default-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; import { diff --git a/src/pages/empty-page.tsx b/src/pages/empty-page.tsx index 1cb34bddc..dc421c99c 100644 --- a/src/pages/empty-page.tsx +++ b/src/pages/empty-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from '../components/ui'; diff --git a/src/pages/event-page.tsx b/src/pages/event-page.tsx index b5249c744..570145096 100644 --- a/src/pages/event-page.tsx +++ b/src/pages/event-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/src/pages/events-page.tsx b/src/pages/events-page.tsx index eb31ecca9..ea41ccf0d 100644 --- a/src/pages/events-page.tsx +++ b/src/pages/events-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from 'soapbox/components/ui'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; diff --git a/src/pages/group-page.tsx b/src/pages/group-page.tsx index 3331d5b78..8c684b08e 100644 --- a/src/pages/group-page.tsx +++ b/src/pages/group-page.tsx @@ -1,7 +1,7 @@ import banIcon from '@tabler/icons/outline/ban.svg'; import eyeOffIcon from '@tabler/icons/outline/eye-off.svg'; import trashIcon from '@tabler/icons/outline/trash.svg'; -import React, { useMemo } from 'react'; +import { useMemo } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useRouteMatch } from 'react-router-dom'; diff --git a/src/pages/groups-page.tsx b/src/pages/groups-page.tsx index ed3f62501..e46e1b1f3 100644 --- a/src/pages/groups-page.tsx +++ b/src/pages/groups-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Route, Routes } from 'react-router-dom-v5-compat'; import { Column, Layout } from 'soapbox/components/ui'; diff --git a/src/pages/groups-pending-page.tsx b/src/pages/groups-pending-page.tsx index f692cf7bf..ff9375e06 100644 --- a/src/pages/groups-pending-page.tsx +++ b/src/pages/groups-pending-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from 'soapbox/components/ui'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; diff --git a/src/pages/home-page.tsx b/src/pages/home-page.tsx index 5087f2990..1d7e643bf 100644 --- a/src/pages/home-page.tsx +++ b/src/pages/home-page.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React, { useRef } from 'react'; +import { useRef } from 'react'; import { useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/src/pages/landing-page.tsx b/src/pages/landing-page.tsx index dd1733923..4ccbe385e 100644 --- a/src/pages/landing-page.tsx +++ b/src/pages/landing-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; import { diff --git a/src/pages/manage-groups-page.tsx b/src/pages/manage-groups-page.tsx index 1214259a8..d59d9b6fd 100644 --- a/src/pages/manage-groups-page.tsx +++ b/src/pages/manage-groups-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Layout } from 'soapbox/components/ui'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; diff --git a/src/pages/profile-page.tsx b/src/pages/profile-page.tsx index 5a0001e69..a0a0d1197 100644 --- a/src/pages/profile-page.tsx +++ b/src/pages/profile-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Redirect, useHistory } from 'react-router-dom'; diff --git a/src/pages/remote-instance-page.tsx b/src/pages/remote-instance-page.tsx index 0f15624a8..98c331add 100644 --- a/src/pages/remote-instance-page.tsx +++ b/src/pages/remote-instance-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; import { diff --git a/src/pages/search-page.tsx b/src/pages/search-page.tsx index 0da0ffb01..4e16fd81b 100644 --- a/src/pages/search-page.tsx +++ b/src/pages/search-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; import { diff --git a/src/pages/status-page.tsx b/src/pages/status-page.tsx index aacee8175..e1c3abc03 100644 --- a/src/pages/status-page.tsx +++ b/src/pages/status-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; import { diff --git a/src/pages/wide-page.tsx b/src/pages/wide-page.tsx index a85e21a46..1242482c0 100644 --- a/src/pages/wide-page.tsx +++ b/src/pages/wide-page.tsx @@ -1,4 +1,3 @@ -import React from 'react'; interface IWidePage { children: React.ReactNode; diff --git a/src/toast.test.tsx b/src/toast.test.tsx index 860fa35c6..c3aca5a11 100644 --- a/src/toast.test.tsx +++ b/src/toast.test.tsx @@ -1,7 +1,6 @@ import { render } from '@testing-library/react'; import { AxiosError, AxiosHeaders } from 'axios'; -import React from 'react'; import { Toaster } from 'react-hot-toast'; import { IntlProvider } from 'react-intl'; import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from 'vitest'; diff --git a/src/toast.tsx b/src/toast.tsx index 897f97429..e0c5db424 100644 --- a/src/toast.tsx +++ b/src/toast.tsx @@ -1,5 +1,4 @@ import { AxiosError } from 'axios'; -import React from 'react'; import toast from 'react-hot-toast'; import { defineMessages, MessageDescriptor } from 'react-intl'; diff --git a/src/utils/numbers.test.tsx b/src/utils/numbers.test.tsx index 0ff44ebd7..dbe1d26f3 100644 --- a/src/utils/numbers.test.tsx +++ b/src/utils/numbers.test.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { describe, expect, test } from 'vitest'; import { render, screen } from 'soapbox/jest/test-helpers'; diff --git a/src/utils/numbers.tsx b/src/utils/numbers.tsx index a35008c83..60f03294c 100644 --- a/src/utils/numbers.tsx +++ b/src/utils/numbers.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedNumber } from 'react-intl'; import { z } from 'zod'; diff --git a/tsconfig.json b/tsconfig.json index 6c92951ba..c48e67690 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "module": "ESNext", "lib": ["ESNext", "DOM"], "target": "ESNext", - "jsx": "react", + "jsx": "react-jsx", "allowJs": true, "isolatedModules": true, "moduleResolution": "Bundler",