ESLint: Add rule for duplicate imports

We had decent amount of import groups split into several imports, this adds a rule to output error when there's a duplicate import.
This commit is contained in:
regexowl 2025-07-09 13:24:27 +02:00 committed by Gianluca Zuccarelli
parent a0fe3644c3
commit 91b2cc2d10
27 changed files with 69 additions and 78 deletions

View file

@ -86,6 +86,7 @@ module.exports = defineConfig([
],
pathGroupsExcludedImportTypes: ['react']
}],
'no-duplicate-imports': 'error',
'prefer-const': ['error', {
destructuring: 'any',
}],

View file

@ -6,8 +6,7 @@ import {
Content,
ContentVariants,
} from '@patternfly/react-core';
import { PlusCircleIcon } from '@patternfly/react-icons';
import { ExternalLinkAltIcon } from '@patternfly/react-icons';
import { ExternalLinkAltIcon, PlusCircleIcon } from '@patternfly/react-icons';
import { v4 as uuidv4 } from 'uuid';
import FileSystemTable from './FileSystemTable';

View file

@ -2,11 +2,12 @@ import React from 'react';
import {
Alert,
Button,
Spinner,
Content,
ContentVariants,
Popover,
} from '@patternfly/react-core';
import { Button, Popover } from '@patternfly/react-core';
import { HelpIcon } from '@patternfly/react-icons';
import { Table, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table';

View file

@ -14,11 +14,11 @@ import {
import { ExclamationTriangleIcon } from '@patternfly/react-icons';
import {
FSReviewTable,
PackagesTable,
RepositoriesTable,
SnapshotTable,
} from './ReviewStepTables';
import { FSReviewTable } from './ReviewStepTables';
import {
ON_PREM_RELEASES,

View file

@ -1,6 +1,8 @@
import React, { useEffect, useState } from 'react';
import {
HelperText,
HelperTextItem,
Select,
SelectOption,
SelectList,
@ -12,8 +14,6 @@ import {
Button,
FormGroup,
} from '@patternfly/react-core';
import { HelperTextItem } from '@patternfly/react-core';
import { HelperText } from '@patternfly/react-core';
import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
import { useAppDispatch, useAppSelector } from '../../../../../store/hooks';

View file

@ -31,8 +31,7 @@ import {
MODAL_ANCHOR,
SEARCH_INPUT,
} from '../../constants';
import { useGetBlueprintsQuery } from '../../store/backendApi';
import { useGetComposeStatusQuery } from '../../store/backendApi';
import { useGetBlueprintsQuery, useGetComposeStatusQuery } from '../../store/backendApi';
import {
selectSelectedBlueprintId,
selectBlueprintSearchInput,

View file

@ -3,8 +3,7 @@ import React from 'react';
import { Skeleton } from '@patternfly/react-core';
import { targetOptions } from '../../constants';
import { useGetComposeClonesQuery } from '../../store/imageBuilderApi';
import { ComposesResponseItem } from '../../store/imageBuilderApi';
import { ComposesResponseItem, useGetComposeClonesQuery } from '../../store/imageBuilderApi';
type TargetPropTypes = {
compose: ComposesResponseItem;

View file

@ -1,7 +1,11 @@
// listenerMiddleware.ts
// https://redux-toolkit.js.org/api/createListenerMiddleware#typescript-usage
import { createListenerMiddleware, addListener } from '@reduxjs/toolkit';
import type { TypedStartListening, TypedAddListener } from '@reduxjs/toolkit';
import {
createListenerMiddleware,
addListener,
type TypedStartListening,
type TypedAddListener
} from '@reduxjs/toolkit';
import type { RootState, AppDispatch } from './index';

View file

@ -4,11 +4,12 @@ import { userEvent } from '@testing-library/user-event';
import { CREATE_BLUEPRINT, EDIT_BLUEPRINT } from '../../../../../constants';
import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { detailsCreateBlueprintRequest } from '../../../../fixtures/editMode';
import { clickNext, getNextButton } from '../../wizardTestUtils';
import {
blueprintRequest,
clickNext,
clickRegisterLater,
enterBlueprintName,
getNextButton,
goToRegistrationStep,
interceptBlueprintRequest,
interceptEditBlueprintRequest,

View file

@ -10,15 +10,13 @@ import {
} from '../../../../../constants';
import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { fscCreateBlueprintRequest } from '../../../../fixtures/editMode';
import {
clickNext,
clickReviewAndFinish,
getNextButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickNext,
clickRegisterLater,
clickReviewAndFinish,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,

View file

@ -9,14 +9,15 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -16,23 +16,21 @@ import {
firstBootCreateBlueprintRequest,
firstBootData,
} from '../../../../fixtures/editMode';
import {
clickNext,
clickReviewAndFinish,
goToOscapStep,
selectGuestImageTarget,
getNextButton,
selectRhel9,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickNext,
clickRegisterLater,
clickReviewAndFinish,
enterBlueprintName,
getNextButton,
goToOscapStep,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
selectGuestImageTarget,
selectRhel9,
} from '../../wizardTestUtils';
const goToFirstBootStep = async (): Promise<void> => {

View file

@ -9,15 +9,16 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -25,22 +25,20 @@ import {
rhel9CreateBlueprintRequest,
x86_64CreateBlueprintRequest,
} from '../../../../fixtures/editMode';
import {
clickNext,
getNextButton,
openReleaseMenu,
selectRhel9,
verifyCancelButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickNext,
clickRegisterLater,
enterBlueprintName,
getNextButton,
imageRequest,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openReleaseMenu,
renderCreateMode,
renderEditMode,
selectRhel9,
verifyCancelButton,
} from '../../wizardTestUtils';
import { goToDetailsStep } from '../Details/Details.test';

View file

@ -13,15 +13,16 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
selectRhel9,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -9,14 +9,15 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -5,8 +5,8 @@ import { CREATE_BLUEPRINT, EDIT_BLUEPRINT } from '../../../../../constants';
import { CreateBlueprintRequest } from '../../../../../store/imageBuilderApi';
import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { complianceCreateBlueprintRequest } from '../../../../fixtures/editMode';
import { clickNext, selectRhel9 } from '../../wizardTestUtils';
import {
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
@ -14,6 +14,7 @@ import {
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
selectRhel9,
} from '../../wizardTestUtils';
// Overwrite

View file

@ -14,7 +14,10 @@ import {
oscapCreateBlueprintRequest,
} from '../../../../fixtures/editMode';
import {
clickNext,
clickReviewAndFinish,
enterBlueprintName,
goToOscapStep,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
@ -23,11 +26,6 @@ import {
selectGuestImageTarget,
selectRhel9,
} from '../../wizardTestUtils';
import {
clickNext,
clickReviewAndFinish,
goToOscapStep,
} from '../../wizardTestUtils';
const selectRhel8 = async () => {
const user = userEvent.setup();

View file

@ -17,15 +17,10 @@ import {
packagesCreateBlueprintRequest,
} from '../../../../fixtures/editMode';
import {
blueprintRequest,
clickBack,
clickNext,
clickReviewAndFinish,
selectRhel9,
verifyCancelButton,
} from '../../wizardTestUtils';
import { selectCustomRepo } from '../../wizardTestUtils';
import {
blueprintRequest,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
@ -33,6 +28,9 @@ import {
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
selectCustomRepo,
selectRhel9,
verifyCancelButton,
} from '../../wizardTestUtils';
const router: RemixRouter | undefined = undefined;

View file

@ -14,13 +14,11 @@ import {
repositoriesCreateBlueprintRequest,
} from '../../../../fixtures/editMode';
import {
blueprintRequest,
clickBack,
clickNext,
clickReviewAndFinish,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickRegisterLater,
clickReviewAndFinish,
enterBlueprintName,
interceptBlueprintRequest,
interceptEditBlueprintRequest,

View file

@ -13,15 +13,16 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
openAndDismissSaveAndBuildModal,
interceptEditBlueprintRequest,
renderCreateMode,
renderEditMode,
verifyCancelButton,
selectRhel9,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -10,15 +10,13 @@ import {
expectedPayloadRepositories,
snapshotCreateBlueprintRequest,
} from '../../../../fixtures/editMode';
import {
clickNext,
clickReviewAndFinish,
getNextButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickNext,
clickRegisterLater,
clickReviewAndFinish,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,

View file

@ -16,20 +16,18 @@ import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { awsCreateBlueprintRequest } from '../../../../fixtures/editMode';
import { server } from '../../../../mocks/server';
import {
blueprintRequest,
clickBack,
clickNext,
getNextButton,
verifyCancelButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickRegisterLater,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
const goToAwsStep = async () => {

View file

@ -3,8 +3,7 @@ import { screen, waitFor, within } from '@testing-library/react';
import { userEvent } from '@testing-library/user-event';
import { http, HttpResponse } from 'msw';
import { CREATE_BLUEPRINT, EDIT_BLUEPRINT } from '../../../../../constants';
import { PROVISIONING_API } from '../../../../../constants';
import { CREATE_BLUEPRINT, EDIT_BLUEPRINT, PROVISIONING_API } from '../../../../../constants';
import {
CreateBlueprintRequest,
ImageRequest,
@ -13,20 +12,18 @@ import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { azureCreateBlueprintRequest } from '../../../../fixtures/editMode';
import { server } from '../../../../mocks/server';
import {
blueprintRequest,
clickBack,
clickNext,
getNextButton,
verifyCancelButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickRegisterLater,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
// The router is just initiliazed here, it's assigned a value in the tests

View file

@ -12,21 +12,19 @@ import {
import { mockBlueprintIds } from '../../../../fixtures/blueprints';
import { gcpCreateBlueprintRequest } from '../../../../fixtures/editMode';
import {
blueprintRequest,
clickBack,
clickNext,
getNextButton,
verifyCancelButton,
} from '../../wizardTestUtils';
import {
blueprintRequest,
clickRegisterLater,
enterBlueprintName,
getNextButton,
imageRequest,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
const GCP_ACCOUNT = 'test@gmail.com';

View file

@ -9,14 +9,15 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;

View file

@ -9,16 +9,17 @@ import {
blueprintRequest,
clickBack,
clickNext,
clickRegisterLater,
enterBlueprintName,
getNextButton,
interceptBlueprintRequest,
interceptEditBlueprintRequest,
openAndDismissSaveAndBuildModal,
renderCreateMode,
renderEditMode,
selectGuestImageTarget,
verifyCancelButton,
} from '../../wizardTestUtils';
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
let router: RemixRouter | undefined = undefined;