From c1da61ac1f763bef50112eaf0ae88c086940f5a4 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Wed, 12 Apr 2023 15:48:06 +0200 Subject: [PATCH] [NO JIRA] remove default exports --- server/sonar-web/design-system/.eslintrc | 1 + server/sonar-web/design-system/package.json | 1 + .../design-system/src/components/Badge.tsx | 2 +- .../design-system/src/components/Checkbox.tsx | 2 +- .../src/components/DeferredSpinner.tsx | 2 +- .../design-system/src/components/Dropdown.tsx | 6 +++--- .../src/components/DropdownToggler.tsx | 2 +- .../design-system/src/components/InputSearch.tsx | 6 +++--- .../design-system/src/components/Link.tsx | 6 ++---- .../src/components/QualityGateIndicator.tsx | 2 +- .../design-system/src/components/ToggleButton.tsx | 2 +- .../src/components/__tests__/Badge-test.tsx | 2 +- .../components/__tests__/DeferredSpinner-test.tsx | 4 +--- .../src/components/__tests__/Dropdown-test.tsx | 2 +- .../src/components/__tests__/InputSearch-test.tsx | 2 +- .../src/components/__tests__/Link-test.tsx | 2 +- .../__tests__/QualityGateIndicator-test.tsx | 2 +- .../design-system/src/components/index.ts | 14 +++++++------- server/sonar-web/yarn.lock | 1 + 19 files changed, 30 insertions(+), 31 deletions(-) diff --git a/server/sonar-web/design-system/.eslintrc b/server/sonar-web/design-system/.eslintrc index 3ba5bf477cf..71f5c0ed042 100644 --- a/server/sonar-web/design-system/.eslintrc +++ b/server/sonar-web/design-system/.eslintrc @@ -13,6 +13,7 @@ "testing-library/no-node-access": ["error", { "allowContainerFirstChild": true }], "no-implicit-coercion": [2, { "boolean": true, "number": true, "string": true }], "jest/no-large-snapshots": ["warn", { "maxSize": 200 }], + "import/no-default-export": "warn", // Local rules "local-rules/use-componentqualifier-enum": "warn", diff --git a/server/sonar-web/design-system/package.json b/server/sonar-web/design-system/package.json index 7ff8db90bfc..610c32ffd8a 100644 --- a/server/sonar-web/design-system/package.json +++ b/server/sonar-web/design-system/package.json @@ -30,6 +30,7 @@ "autoprefixer": "10.4.14", "eslint": "8.37.0", "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-local-rules": "1.3.2", "eslint-plugin-typescript-sort-keys": "2.3.0", "history": "5.3.0", diff --git a/server/sonar-web/design-system/src/components/Badge.tsx b/server/sonar-web/design-system/src/components/Badge.tsx index a343c76931e..abb8172d5be 100644 --- a/server/sonar-web/design-system/src/components/Badge.tsx +++ b/server/sonar-web/design-system/src/components/Badge.tsx @@ -38,7 +38,7 @@ interface BadgeProps { variant?: BadgeVariant; } -export default function Badge({ className, children, title, variant = 'default' }: BadgeProps) { +export function Badge({ className, children, title, variant = 'default' }: BadgeProps) { const commonProps = { 'aria-label': title ?? children.toString(), className, diff --git a/server/sonar-web/design-system/src/components/Checkbox.tsx b/server/sonar-web/design-system/src/components/Checkbox.tsx index ad5848ecb8c..2968443b597 100644 --- a/server/sonar-web/design-system/src/components/Checkbox.tsx +++ b/server/sonar-web/design-system/src/components/Checkbox.tsx @@ -22,7 +22,7 @@ import styled from '@emotion/styled'; import React from 'react'; import tw from 'twin.macro'; import { themeBorder, themeColor, themeContrast } from '../helpers/theme'; -import DeferredSpinner from './DeferredSpinner'; +import { DeferredSpinner } from './DeferredSpinner'; import { CheckIcon } from './icons/CheckIcon'; import { CustomIcon } from './icons/Icon'; diff --git a/server/sonar-web/design-system/src/components/DeferredSpinner.tsx b/server/sonar-web/design-system/src/components/DeferredSpinner.tsx index fad7efff8b0..3f3a06e577a 100644 --- a/server/sonar-web/design-system/src/components/DeferredSpinner.tsx +++ b/server/sonar-web/design-system/src/components/DeferredSpinner.tsx @@ -40,7 +40,7 @@ interface State { const DEFAULT_TIMEOUT = 100; -export default class DeferredSpinner extends React.PureComponent { +export class DeferredSpinner extends React.PureComponent { timer?: number; state: State = { showSpinner: false }; diff --git a/server/sonar-web/design-system/src/components/Dropdown.tsx b/server/sonar-web/design-system/src/components/Dropdown.tsx index 28cd84dfdcd..54e7d348c21 100644 --- a/server/sonar-web/design-system/src/components/Dropdown.tsx +++ b/server/sonar-web/design-system/src/components/Dropdown.tsx @@ -23,9 +23,9 @@ import { translate } from '../helpers/l10n'; import { PopupPlacement, PopupZLevel } from '../helpers/positioning'; import { InputSizeKeys } from '../types/theme'; import { DropdownMenu } from './DropdownMenu'; -import DropdownToggler from './DropdownToggler'; -import { MenuIcon } from './icons/MenuIcon'; +import { DropdownToggler } from './DropdownToggler'; import { InteractiveIcon } from './InteractiveIcon'; +import { MenuIcon } from './icons/MenuIcon'; type OnClickCallback = (event?: React.MouseEvent) => void; type A11yAttrs = Pick & { @@ -59,7 +59,7 @@ interface State { open: boolean; } -export default class Dropdown extends React.PureComponent { +export class Dropdown extends React.PureComponent { state: State = { open: false }; componentDidUpdate(_: Props, prevState: State) { diff --git a/server/sonar-web/design-system/src/components/DropdownToggler.tsx b/server/sonar-web/design-system/src/components/DropdownToggler.tsx index c57762c5d02..f4217e42ef7 100644 --- a/server/sonar-web/design-system/src/components/DropdownToggler.tsx +++ b/server/sonar-web/design-system/src/components/DropdownToggler.tsx @@ -28,7 +28,7 @@ interface Props extends PopupProps { open: boolean; } -export default function DropdownToggler(props: Props) { +export function DropdownToggler(props: Props) { const { children, open, onRequestClose, overlay, ...popupProps } = props; return ( diff --git a/server/sonar-web/design-system/src/components/InputSearch.tsx b/server/sonar-web/design-system/src/components/InputSearch.tsx index 2330a050058..d87c3844468 100644 --- a/server/sonar-web/design-system/src/components/InputSearch.tsx +++ b/server/sonar-web/design-system/src/components/InputSearch.tsx @@ -28,10 +28,10 @@ import { Key } from '../helpers/keyboard'; import { themeBorder, themeColor, themeContrast } from '../helpers/theme'; import { isDefined } from '../helpers/types'; import { InputSizeKeys } from '../types/theme'; -import DeferredSpinner from './DeferredSpinner'; +import { DeferredSpinner } from './DeferredSpinner'; +import { InteractiveIcon } from './InteractiveIcon'; import { CloseIcon } from './icons/CloseIcon'; import { SearchIcon } from './icons/SearchIcon'; -import { InteractiveIcon } from './InteractiveIcon'; interface Props { autoFocus?: boolean; @@ -56,7 +56,7 @@ interface Props { const DEFAULT_MAX_LENGTH = 100; -export default function InputSearch({ +export function InputSearch({ autoFocus, id, className, diff --git a/server/sonar-web/design-system/src/components/Link.tsx b/server/sonar-web/design-system/src/components/Link.tsx index 8b83efd5b43..91a88bd9d62 100644 --- a/server/sonar-web/design-system/src/components/Link.tsx +++ b/server/sonar-web/design-system/src/components/Link.tsx @@ -24,8 +24,8 @@ import React, { HTMLAttributeAnchorTarget } from 'react'; import { Link as RouterLink, LinkProps as RouterLinkProps } from 'react-router-dom'; import tw, { theme as twTheme } from 'twin.macro'; import { themeBorder, themeColor } from '../helpers/theme'; -import { OpenNewTabIcon } from './icons/OpenNewTabIcon'; import { TooltipWrapperInner } from './Tooltip'; +import { OpenNewTabIcon } from './icons/OpenNewTabIcon'; export interface LinkProps extends RouterLinkProps { blurAfterClick?: boolean; @@ -166,7 +166,7 @@ export const DiscreetLink = styled(HoverLink)` `; DiscreetLink.displayName = 'DiscreetLink'; -const StandoutLink = styled(StyledBaseLink)` +export const StandoutLink = styled(StyledBaseLink)` ${tw`sw-font-semibold`} ${tw`sw-no-underline`} @@ -183,5 +183,3 @@ const StandoutLink = styled(StyledBaseLink)` } `; StandoutLink.displayName = 'StandoutLink'; - -export default StandoutLink; diff --git a/server/sonar-web/design-system/src/components/QualityGateIndicator.tsx b/server/sonar-web/design-system/src/components/QualityGateIndicator.tsx index 2f7df789576..0f0abf6a012 100644 --- a/server/sonar-web/design-system/src/components/QualityGateIndicator.tsx +++ b/server/sonar-web/design-system/src/components/QualityGateIndicator.tsx @@ -43,7 +43,7 @@ interface Props { const RX_4 = 4; const RX_2 = 2; -export default function QualityGateIndicator(props: Props) { +export function QualityGateIndicator(props: Props) { const { className, size = 'md', diff --git a/server/sonar-web/design-system/src/components/ToggleButton.tsx b/server/sonar-web/design-system/src/components/ToggleButton.tsx index 82dcc07b304..17383161cbf 100644 --- a/server/sonar-web/design-system/src/components/ToggleButton.tsx +++ b/server/sonar-web/design-system/src/components/ToggleButton.tsx @@ -21,7 +21,7 @@ import styled from '@emotion/styled'; import tw from 'twin.macro'; import { themeBorder, themeColor, themeContrast } from '../helpers/theme'; -import Badge from './Badge'; +import { Badge } from './Badge'; import { ButtonSecondary } from './buttons'; type ToggleButtonValueType = string | number | boolean; diff --git a/server/sonar-web/design-system/src/components/__tests__/Badge-test.tsx b/server/sonar-web/design-system/src/components/__tests__/Badge-test.tsx index 384dcfde844..0250842bd29 100644 --- a/server/sonar-web/design-system/src/components/__tests__/Badge-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/Badge-test.tsx @@ -19,7 +19,7 @@ */ import { screen } from '@testing-library/react'; import { render } from '../../helpers/testUtils'; -import Badge from '../Badge'; +import { Badge } from '../Badge'; it('renders badge correctly', () => { render(foo); diff --git a/server/sonar-web/design-system/src/components/__tests__/DeferredSpinner-test.tsx b/server/sonar-web/design-system/src/components/__tests__/DeferredSpinner-test.tsx index 3893a349555..f78c026d694 100644 --- a/server/sonar-web/design-system/src/components/__tests__/DeferredSpinner-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/DeferredSpinner-test.tsx @@ -18,9 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { render, screen } from '@testing-library/react'; -// @ts-expect-error React is needed for <> fragments -import React from 'react'; -import DeferredSpinner from '../DeferredSpinner'; +import { DeferredSpinner } from '../DeferredSpinner'; beforeAll(() => { jest.useFakeTimers(); diff --git a/server/sonar-web/design-system/src/components/__tests__/Dropdown-test.tsx b/server/sonar-web/design-system/src/components/__tests__/Dropdown-test.tsx index 6d0da97d615..bc20f7bc0af 100644 --- a/server/sonar-web/design-system/src/components/__tests__/Dropdown-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/Dropdown-test.tsx @@ -19,8 +19,8 @@ */ import { screen } from '@testing-library/react'; import { renderWithRouter } from '../../helpers/testUtils'; +import { ActionsDropdown, Dropdown } from '../Dropdown'; import { ButtonSecondary } from '../buttons'; -import Dropdown, { ActionsDropdown } from '../Dropdown'; describe('Dropdown with Portal Wrapper', () => { it('renders', async () => { diff --git a/server/sonar-web/design-system/src/components/__tests__/InputSearch-test.tsx b/server/sonar-web/design-system/src/components/__tests__/InputSearch-test.tsx index 6dde045207d..683c2e5fb74 100644 --- a/server/sonar-web/design-system/src/components/__tests__/InputSearch-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/InputSearch-test.tsx @@ -20,7 +20,7 @@ import { screen, waitFor } from '@testing-library/react'; import { render } from '../../helpers/testUtils'; import { FCProps } from '../../types/misc'; -import InputSearch from '../InputSearch'; +import { InputSearch } from '../InputSearch'; it('should warn when input is too short', async () => { const { user } = setupWithProps({ value: 'f' }); diff --git a/server/sonar-web/design-system/src/components/__tests__/Link-test.tsx b/server/sonar-web/design-system/src/components/__tests__/Link-test.tsx index 25163a7fd22..cab7adcc029 100644 --- a/server/sonar-web/design-system/src/components/__tests__/Link-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/Link-test.tsx @@ -22,7 +22,7 @@ import { screen } from '@testing-library/react'; import React from 'react'; import { MemoryRouter, Route, Routes, useLocation } from 'react-router-dom'; import { render } from '../../helpers/testUtils'; -import Link, { DiscreetLink } from '../Link'; +import { DiscreetLink, StandoutLink as Link } from '../Link'; beforeAll(() => { const { location } = window; diff --git a/server/sonar-web/design-system/src/components/__tests__/QualityGateIndicator-test.tsx b/server/sonar-web/design-system/src/components/__tests__/QualityGateIndicator-test.tsx index 0ab9b9a1225..20c0ef8bc2f 100644 --- a/server/sonar-web/design-system/src/components/__tests__/QualityGateIndicator-test.tsx +++ b/server/sonar-web/design-system/src/components/__tests__/QualityGateIndicator-test.tsx @@ -20,7 +20,7 @@ import { screen } from '@testing-library/react'; import { render } from '../../helpers/testUtils'; import { FCProps } from '../../types/misc'; -import QualityGateIndicator from '../QualityGateIndicator'; +import { QualityGateIndicator } from '../QualityGateIndicator'; const SIZE_VS_WIDTH = { sm: '1rem', diff --git a/server/sonar-web/design-system/src/components/index.ts b/server/sonar-web/design-system/src/components/index.ts index a9e95d2a208..741a4c04f3b 100644 --- a/server/sonar-web/design-system/src/components/index.ts +++ b/server/sonar-web/design-system/src/components/index.ts @@ -20,23 +20,23 @@ export * from './Accordion'; export * from './Avatar'; -export { default as Badge } from './Badge'; -export { default as DeferredSpinner } from './DeferredSpinner'; -export { default as Dropdown } from './Dropdown'; +export { Badge } from './Badge'; +export { DeferredSpinner } from './DeferredSpinner'; +export { Dropdown } from './Dropdown'; export * from './DropdownMenu'; -export { default as DropdownToggler } from './DropdownToggler'; +export { DropdownToggler } from './DropdownToggler'; export { FailedQGConditionLink } from './FailedQGConditionLink'; export { FlagMessage } from './FlagMessage'; export * from './GenericAvatar'; -export { default as InputSearch } from './InputSearch'; +export { InputSearch } from './InputSearch'; export * from './InteractiveIcon'; export * from './Link'; -export { default as Link } from './Link'; +export { StandoutLink as Link } from './Link'; export * from './MainAppBar'; export * from './MainMenu'; export * from './MainMenuItem'; export * from './NavBarTabs'; -export { default as QualityGateIndicator } from './QualityGateIndicator'; +export { QualityGateIndicator } from './QualityGateIndicator'; export * from './SonarQubeLogo'; export * from './Text'; export { ToggleButton } from './ToggleButton'; diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock index 232c0795365..2e4be312cf8 100644 --- a/server/sonar-web/yarn.lock +++ b/server/sonar-web/yarn.lock @@ -6131,6 +6131,7 @@ __metadata: autoprefixer: 10.4.14 eslint: 8.37.0 eslint-plugin-header: 3.1.1 + eslint-plugin-import: 2.27.5 eslint-plugin-local-rules: 1.3.2 eslint-plugin-typescript-sort-keys: 2.3.0 history: 5.3.0 -- 2.39.5