From 6c180ef2e572b0c3df922683846926b0f1ecaed7 Mon Sep 17 00:00:00 2001 From: Wes <76014409+Redtigercod4@users.noreply.github.com> Date: Mon, 21 Sep 2026 08:00:00 +0000 Subject: [PATCH 1/5] Added new eslint rule and fixed circular deps in src/api --- eslint.config.mjs | 10 ++++++++++ src/api/base.ts | 2 +- src/api/collection.ts | 2 +- src/api/execution-environment-registry.ts | 2 +- src/api/sign-collections.ts | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 84d74386..d9fddb27 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -115,4 +115,14 @@ export default defineConfig([ '@typescript-eslint/no-var-requires': 'off', }, }, + { + files: ['src/**/**/*.{js,jsx,ts,tsx}'], + rules: { + 'no-restricted-imports': ['warn', { + paths: [ + { name: 'src/api', message: "Import the specific file and not the barrel." } + ] + }] + } + } ]); diff --git a/src/api/base.ts b/src/api/base.ts index 4c1bf79d..a35b9794 100644 --- a/src/api/base.ts +++ b/src/api/base.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import { ParamHelper } from 'src/utilities'; +import { ParamHelper } from '../utilities/param-helper'; export class BaseAPI { http: { delete; get; interceptors; patch; post; put }; diff --git a/src/api/collection.ts b/src/api/collection.ts index c4a9c93a..ba6f9daa 100644 --- a/src/api/collection.ts +++ b/src/api/collection.ts @@ -1,4 +1,4 @@ -import { repositoryBasePath } from 'src/utilities'; +import { repositoryBasePath } from '../utilities/repository-distro'; import { PulpAPI } from './pulp'; import { type CollectionUploadType, diff --git a/src/api/execution-environment-registry.ts b/src/api/execution-environment-registry.ts index be4123e2..bf90a72d 100644 --- a/src/api/execution-environment-registry.ts +++ b/src/api/execution-environment-registry.ts @@ -1,4 +1,4 @@ -import { type RemoteType } from '.'; +import { type RemoteType } from './response-types/remote'; import { PulpAPI } from './pulp'; // Deletes any hidden fields from the object so that they don't get sent to the API diff --git a/src/api/sign-collections.ts b/src/api/sign-collections.ts index 6b63de4f..3bab4c9c 100644 --- a/src/api/sign-collections.ts +++ b/src/api/sign-collections.ts @@ -1,4 +1,4 @@ -import { repositoryBasePath } from 'src/utilities'; +import { repositoryBasePath } from '../utilities/repository-distro'; import { PulpAPI } from './pulp'; import { type CollectionVersionSearch } from './response-types/collection'; From 41ca4ed1102f62498e7ff5e78d8c1dd6dee031db Mon Sep 17 00:00:00 2001 From: Wes <76014409+Redtigercod4@users.noreply.github.com> Date: Mon, 21 Sep 2026 08:01:29 +0000 Subject: [PATCH 2/5] Extended eslint rule and fixed circular deps in src/utilities --- eslint.config.mjs | 3 ++- src/paths.ts | 2 +- src/utilities/content-summary.ts | 2 +- src/utilities/delete-collection.ts | 8 +++----- src/utilities/get-repo-url.ts | 4 ++-- src/utilities/model-to-api.ts | 8 ++++---- src/utilities/plugin-repository-base-path.ts | 8 ++++++++ src/utilities/plugin-version.ts | 2 +- src/utilities/repo-signing.ts | 2 +- src/utilities/repository-distro.ts | 8 ++++++-- src/utilities/repository-remove-collection.ts | 2 +- src/utilities/wait-for-task.ts | 2 +- 12 files changed, 31 insertions(+), 20 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index d9fddb27..662b37aa 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -120,7 +120,8 @@ export default defineConfig([ rules: { 'no-restricted-imports': ['warn', { paths: [ - { name: 'src/api', message: "Import the specific file and not the barrel." } + { name: 'src/api', message: "Import the specific file and not the barrel." }, + { name: 'src/utilities', message: "Import the specific file and not the barrel." } ] }] } diff --git a/src/paths.ts b/src/paths.ts index 9e28bb7a..89d0a3f0 100644 --- a/src/paths.ts +++ b/src/paths.ts @@ -1,4 +1,4 @@ -import { ParamHelper, type ParamType } from 'src/utilities'; +import { ParamHelper, type ParamType } from './utilities/param-helper'; export function formatPath( path: string, diff --git a/src/utilities/content-summary.ts b/src/utilities/content-summary.ts index f5679a18..5e26897c 100644 --- a/src/utilities/content-summary.ts +++ b/src/utilities/content-summary.ts @@ -1,4 +1,4 @@ -import { type CollectionVersionSearch } from 'src/api'; +import { type CollectionVersionSearch } from '../api/response-types/collection'; class Summary { total_count: number; diff --git a/src/utilities/delete-collection.ts b/src/utilities/delete-collection.ts index 77f2f527..971caf7c 100644 --- a/src/utilities/delete-collection.ts +++ b/src/utilities/delete-collection.ts @@ -1,9 +1,7 @@ import { t } from '@lingui/core/macro'; -import { - CollectionAPI, - CollectionVersionAPI, - type CollectionVersionSearch, -} from 'src/api'; +import { CollectionAPI } from '../api/collection'; +import { CollectionVersionAPI } from '../api/collection-version'; +import { type CollectionVersionSearch } from '../api/response-types/collection'; import { jsxErrorMessage } from './fail-alerts'; import { parsePulpIDFromURL } from './parse-pulp-id'; import { repositoryRemoveCollection } from './repository-remove-collection'; diff --git a/src/utilities/get-repo-url.ts b/src/utilities/get-repo-url.ts index 709b0a90..dcd10135 100644 --- a/src/utilities/get-repo-url.ts +++ b/src/utilities/get-repo-url.ts @@ -1,6 +1,6 @@ import { config } from 'src/ui-config'; -import { parsePulpResource } from 'src/utilities'; -import { ModelToApi } from 'src/utilities'; +import { parsePulpResource } from './parse-pulp-id'; +import { ModelToApi } from './model-to-api'; export function getDistroURL(distribution) { const resource = parsePulpResource( diff --git a/src/utilities/model-to-api.ts b/src/utilities/model-to-api.ts index d3c0e8c4..3ab03292 100644 --- a/src/utilities/model-to-api.ts +++ b/src/utilities/model-to-api.ts @@ -1,10 +1,10 @@ +import { AnsibleDistributionAPI } from '../api/ansible-distribution'; +import { AnsibleRemoteAPI } from '../api/ansible-remote'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; import { - AnsibleDistributionAPI, - AnsibleRemoteAPI, - AnsibleRepositoryAPI, ContainerDistributionAPI, ContainerPullThroughDistributionAPI, -} from 'src/api'; +} from '../api/container-distribution'; export const ModelToApi = { // TODO: Add all model translations diff --git a/src/utilities/plugin-repository-base-path.ts b/src/utilities/plugin-repository-base-path.ts index 6f811cd9..61a2a293 100644 --- a/src/utilities/plugin-repository-base-path.ts +++ b/src/utilities/plugin-repository-base-path.ts @@ -1,4 +1,5 @@ import { t } from '@lingui/core/macro'; +<<<<<<< HEAD import { AnsibleDistributionAPI, AnsibleRemoteAPI, @@ -11,6 +12,13 @@ import { FileRepositoryAPI, RPMRepositoryAPI, } from 'src/api'; +======= +import { AnsibleDistributionAPI } from '../api/ansible-distribution'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { FileDistributionAPI } from '../api/file-distribution'; +import { FileRepositoryAPI } from '../api/file-repository'; +import { RPMRepositoryAPI } from '../api/rpm-repository'; +>>>>>>> c1a0cf5 (Extended eslint rule and fixed circular deps in src/utilities) // returns the preferred distribution base_path given a repo name // if there is a distribution with the same name as the repository, it will be used (as long as it's connected to the right repo too) diff --git a/src/utilities/plugin-version.ts b/src/utilities/plugin-version.ts index 02c03cab..f26cf853 100644 --- a/src/utilities/plugin-version.ts +++ b/src/utilities/plugin-version.ts @@ -1,5 +1,5 @@ import { satisfies } from 'compare-versions'; -import { PulpStatusAPI } from 'src/api'; +import { PulpStatusAPI } from '../api/pulp-status'; interface PluginVersion { name: string; diff --git a/src/utilities/repo-signing.ts b/src/utilities/repo-signing.ts index d7d1f0d0..a01e4fc0 100644 --- a/src/utilities/repo-signing.ts +++ b/src/utilities/repo-signing.ts @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { SignContainersAPI } from 'src/api'; +import { SignContainersAPI } from '../api/sign-containers'; import { waitForTaskUrl } from './wait-for-task'; export class RepoSigningUtils { diff --git a/src/utilities/repository-distro.ts b/src/utilities/repository-distro.ts index 612348e4..69923553 100644 --- a/src/utilities/repository-distro.ts +++ b/src/utilities/repository-distro.ts @@ -1,6 +1,10 @@ import { t } from '@lingui/core/macro'; -import { GenericDistributionAPI, GenericRepositoryAPI } from 'src/api'; -import { ModelToApi, parsePulpResource } from 'src/utilities'; +import { + GenericDistributionAPI, + GenericRepositoryAPI, +} from '../api/generic-pulp'; +import { ModelToApi } from './model-to-api'; +import { parsePulpResource } from './parse-pulp-id'; // returns the preferred distribution given a repo name // if there is a distribution with the same name as the repository, it will be used (as long as it's connected to the right repo too) diff --git a/src/utilities/repository-remove-collection.ts b/src/utilities/repository-remove-collection.ts index bf7985ba..963d5af2 100644 --- a/src/utilities/repository-remove-collection.ts +++ b/src/utilities/repository-remove-collection.ts @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { AnsibleRepositoryAPI } from 'src/api'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; import { parsePulpIDFromURL } from './parse-pulp-id'; import { waitForTaskUrl } from './wait-for-task'; diff --git a/src/utilities/wait-for-task.ts b/src/utilities/wait-for-task.ts index c613d6c4..c9fabaf5 100644 --- a/src/utilities/wait-for-task.ts +++ b/src/utilities/wait-for-task.ts @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { TaskAPI } from 'src/api'; +import { TaskAPI } from '../api/task'; import { parsePulpIDFromURL } from './parse-pulp-id'; interface Options { From 27f38f4828c2bb180244d449a3134c827ccded4c Mon Sep 17 00:00:00 2001 From: Wes <76014409+Redtigercod4@users.noreply.github.com> Date: Mon, 21 Sep 2026 14:46:38 +0000 Subject: [PATCH 3/5] Updated eslint and fix circular deps in actions --- eslint.config.mjs | 29 ++++++++++++++----- src/actions/action.tsx | 2 +- src/actions/ansible-remote-delete.tsx | 14 ++++----- src/actions/ansible-remote-download-ca.tsx | 2 +- .../ansible-remote-download-client.tsx | 2 +- .../ansible-remote-download-requirements.tsx | 2 +- ...ible-repository-collection-version-add.tsx | 14 +++++---- ...e-repository-collection-version-remove.tsx | 8 +++-- src/actions/ansible-repository-copy.tsx | 9 ++++-- src/actions/ansible-repository-delete.tsx | 15 +++++----- src/actions/ansible-repository-sync.tsx | 10 ++++--- .../ansible-repository-version-revert.tsx | 9 ++++-- src/actions/file-remote-delete.tsx | 14 ++++----- src/actions/file-repository-delete.tsx | 15 +++++----- src/actions/file-repository-sync.tsx | 8 +++-- src/utilities/fail-alerts.tsx | 2 +- src/utilities/last-sync-task.tsx | 4 ++- src/utilities/task-alert.tsx | 2 +- 18 files changed, 92 insertions(+), 69 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 662b37aa..37081741 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -118,12 +118,25 @@ export default defineConfig([ { files: ['src/**/**/*.{js,jsx,ts,tsx}'], rules: { - 'no-restricted-imports': ['warn', { - paths: [ - { name: 'src/api', message: "Import the specific file and not the barrel." }, - { name: 'src/utilities', message: "Import the specific file and not the barrel." } - ] - }] - } - } + 'no-restricted-imports': [ + 'warn', + { + paths: [ + { + name: 'src/api', + message: 'Import the specific file and not the barrel.', + }, + { + name: 'src/utilities', + message: 'Import the specific file and not the barrel.', + }, + { + name: 'src/actions', + message: '"Import the specific file and not the barrel."', + }, + ], + }, + ], + }, + }, ]); diff --git a/src/actions/action.tsx b/src/actions/action.tsx index c1faf4f5..a9f10303 100644 --- a/src/actions/action.tsx +++ b/src/actions/action.tsx @@ -2,7 +2,7 @@ import { type MessageDescriptor, i18n } from '@lingui/core'; import { Button } from '@patternfly/react-core'; import { DropdownItem } from '@patternfly/react-core/deprecated'; import { type ReactNode } from 'react'; -import { Tooltip } from 'src/components'; +import { Tooltip } from '../components/patternfly-wrappers/tooltip'; type ModalType = ({ addAlert, listQuery, query, setState, state }) => ReactNode; diff --git a/src/actions/ansible-remote-delete.tsx b/src/actions/ansible-remote-delete.tsx index cafb2325..54f02e05 100644 --- a/src/actions/ansible-remote-delete.tsx +++ b/src/actions/ansible-remote-delete.tsx @@ -1,12 +1,10 @@ import { msg, t } from '@lingui/core/macro'; -import { AnsibleRemoteAPI } from 'src/api'; -import { DeleteRemoteModal } from 'src/components'; -import { - handleHttpError, - parsePulpIDFromURL, - taskAlert, - waitForTaskUrl, -} from 'src/utilities'; +import { DeleteRemoteModal } from '../components/delete-remote-modal'; +import { AnsibleRemoteAPI } from '../api/ansible-remote'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; +import { waitForTaskUrl } from '../utilities/wait-for-task'; import { Action } from './action'; export const ansibleRemoteDeleteAction = Action({ diff --git a/src/actions/ansible-remote-download-ca.tsx b/src/actions/ansible-remote-download-ca.tsx index 62a6752a..93f50699 100644 --- a/src/actions/ansible-remote-download-ca.tsx +++ b/src/actions/ansible-remote-download-ca.tsx @@ -1,5 +1,5 @@ import { msg } from '@lingui/core/macro'; -import { downloadString } from 'src/utilities'; +import { downloadString } from '../utilities/download-data'; import { Action } from './action'; export const ansibleRemoteDownloadCAAction = Action({ diff --git a/src/actions/ansible-remote-download-client.tsx b/src/actions/ansible-remote-download-client.tsx index 609f4342..0ab0fabb 100644 --- a/src/actions/ansible-remote-download-client.tsx +++ b/src/actions/ansible-remote-download-client.tsx @@ -1,5 +1,5 @@ import { msg } from '@lingui/core/macro'; -import { downloadString } from 'src/utilities'; +import { downloadString } from '../utilities/download-data'; import { Action } from './action'; export const ansibleRemoteDownloadClientAction = Action({ diff --git a/src/actions/ansible-remote-download-requirements.tsx b/src/actions/ansible-remote-download-requirements.tsx index 038dd552..b7dd8d3d 100644 --- a/src/actions/ansible-remote-download-requirements.tsx +++ b/src/actions/ansible-remote-download-requirements.tsx @@ -1,5 +1,5 @@ import { msg } from '@lingui/core/macro'; -import { downloadString } from 'src/utilities'; +import { downloadString } from '../utilities/download-data'; import { Action } from './action'; export const ansibleRemoteDownloadRequirementsAction = Action({ diff --git a/src/actions/ansible-repository-collection-version-add.tsx b/src/actions/ansible-repository-collection-version-add.tsx index 780305f7..3eaec0b3 100644 --- a/src/actions/ansible-repository-collection-version-add.tsx +++ b/src/actions/ansible-repository-collection-version-add.tsx @@ -5,16 +5,18 @@ import { useState } from 'react'; import { AnsibleRepositoryAPI, type AnsibleRepositoryType, - CollectionVersionAPI, - type CollectionVersionSearch, -} from 'src/api'; +} from '../api/ansible-repository'; +import { CollectionVersionAPI } from '../api/collection-version'; +import { type CollectionVersionSearch } from '../api/response-types/collection'; import { AlertList, type AlertType, - DetailList, closeAlert, -} from 'src/components'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +} from '../components/alert-list'; +import { DetailList } from '../components/detail-list'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; import { Action } from './action'; const add = ( diff --git a/src/actions/ansible-repository-collection-version-remove.tsx b/src/actions/ansible-repository-collection-version-remove.tsx index ed4df70a..a8337462 100644 --- a/src/actions/ansible-repository-collection-version-remove.tsx +++ b/src/actions/ansible-repository-collection-version-remove.tsx @@ -2,9 +2,11 @@ import { msg, t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Text } from '@patternfly/react-core'; import { useState } from 'react'; -import { AnsibleRepositoryAPI } from 'src/api'; -import { DeleteModal } from 'src/components'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +import { DeleteModal } from '../components/delete-modal'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; import { Action } from './action'; const remove = ( diff --git a/src/actions/ansible-repository-copy.tsx b/src/actions/ansible-repository-copy.tsx index 47e1f2db..07c8ea64 100644 --- a/src/actions/ansible-repository-copy.tsx +++ b/src/actions/ansible-repository-copy.tsx @@ -1,7 +1,10 @@ import { msg, t } from '@lingui/core/macro'; -import { AnsibleDistributionAPI } from 'src/api'; -import { getDistroURL, repositoryDistro } from 'src/utilities'; -import type { Distribution } from 'src/utilities/repository-distro'; +import { AnsibleDistributionAPI } from '../api/ansible-distribution'; +import { getDistroURL } from '../utilities/get-repo-url'; +import { + type Distribution, + repositoryDistro, +} from '../utilities/repository-distro'; import { Action } from './action'; export const ansibleRepositoryCopyAction = Action({ diff --git a/src/actions/ansible-repository-delete.tsx b/src/actions/ansible-repository-delete.tsx index 711f1c99..5555f469 100644 --- a/src/actions/ansible-repository-delete.tsx +++ b/src/actions/ansible-repository-delete.tsx @@ -1,12 +1,11 @@ import { msg, t } from '@lingui/core/macro'; -import { AnsibleDistributionAPI, AnsibleRepositoryAPI } from 'src/api'; -import { DeleteRepositoryModal } from 'src/components'; -import { - handleHttpError, - parsePulpIDFromURL, - taskAlert, - waitForTaskUrl, -} from 'src/utilities'; +import { DeleteRepositoryModal } from '../components/delete-repository-modal'; +import { AnsibleDistributionAPI } from '../api/ansible-distribution'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; +import { waitForTaskUrl } from '../utilities/wait-for-task'; import { Action } from './action'; export const ansibleRepositoryDeleteAction = Action({ diff --git a/src/actions/ansible-repository-sync.tsx b/src/actions/ansible-repository-sync.tsx index b2732358..de8d49c8 100644 --- a/src/actions/ansible-repository-sync.tsx +++ b/src/actions/ansible-repository-sync.tsx @@ -1,10 +1,12 @@ import { msg, t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Link } from 'react-router'; -import { AnsibleRepositoryAPI } from 'src/api'; -import { SyncModal } from 'src/components'; -import { Paths, formatPath } from 'src/paths'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { SyncModal } from '../components/sync-modal'; +import { Paths, formatPath } from '../paths'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; import { Action } from './action'; export const ansibleRepositorySyncAction = Action({ diff --git a/src/actions/ansible-repository-version-revert.tsx b/src/actions/ansible-repository-version-revert.tsx index bf1bef47..02a650dd 100644 --- a/src/actions/ansible-repository-version-revert.tsx +++ b/src/actions/ansible-repository-version-revert.tsx @@ -1,9 +1,12 @@ import { msg, t } from '@lingui/core/macro'; import { Button, Modal } from '@patternfly/react-core'; import { useState } from 'react'; -import { AnsibleRepositoryAPI } from 'src/api'; -import { Spinner } from 'src/components'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { Spinner } from '../components/patternfly-wrappers/l10n'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; + import { Action } from './action'; const RevertModal = ({ diff --git a/src/actions/file-remote-delete.tsx b/src/actions/file-remote-delete.tsx index f037500e..daef2067 100644 --- a/src/actions/file-remote-delete.tsx +++ b/src/actions/file-remote-delete.tsx @@ -1,12 +1,10 @@ import { msg, t } from '@lingui/core/macro'; -import { FileRemoteAPI } from 'src/api'; -import { DeleteRemoteModal } from 'src/components'; -import { - handleHttpError, - parsePulpIDFromURL, - taskAlert, - waitForTaskUrl, -} from 'src/utilities'; +import { FileRemoteAPI } from '../api/file-remote'; +import { DeleteRemoteModal } from '../components/delete-remote-modal'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; +import { waitForTaskUrl } from '../utilities/wait-for-task'; import { Action } from './action'; export const fileRemoteDeleteAction = Action({ diff --git a/src/actions/file-repository-delete.tsx b/src/actions/file-repository-delete.tsx index 58653798..475c95ca 100644 --- a/src/actions/file-repository-delete.tsx +++ b/src/actions/file-repository-delete.tsx @@ -1,12 +1,11 @@ import { msg, t } from '@lingui/core/macro'; -import { FileDistributionAPI, FileRepositoryAPI } from 'src/api'; -import { DeleteRepositoryModal } from 'src/components'; -import { - handleHttpError, - parsePulpIDFromURL, - taskAlert, - waitForTaskUrl, -} from 'src/utilities'; +import { FileDistributionAPI } from '../api/file-distribution'; +import { FileRepositoryAPI } from '../api/file-repository'; +import { DeleteRepositoryModal } from '../components/delete-repository-modal'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; +import { waitForTaskUrl } from '../utilities/wait-for-task'; import { Action } from './action'; export const fileRepositoryDeleteAction = Action({ diff --git a/src/actions/file-repository-sync.tsx b/src/actions/file-repository-sync.tsx index 71a69c71..ad3adee6 100644 --- a/src/actions/file-repository-sync.tsx +++ b/src/actions/file-repository-sync.tsx @@ -1,7 +1,9 @@ import { msg, t } from '@lingui/core/macro'; -import { FileRepositoryAPI } from 'src/api'; -import { SyncModal } from 'src/components'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +import { FileRepositoryAPI } from '../api/file-repository'; +import { SyncModal } from '../components/sync-modal'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; +import { taskAlert } from '../utilities/task-alert'; import { Action } from './action'; export const fileRepositorySyncAction = Action({ diff --git a/src/utilities/fail-alerts.tsx b/src/utilities/fail-alerts.tsx index 15426944..4e959967 100644 --- a/src/utilities/fail-alerts.tsx +++ b/src/utilities/fail-alerts.tsx @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { LoginLink } from 'src/components'; +import { LoginLink } from '../components/login-link'; import { mapErrorMessages } from './map-error-messages'; export function errorMessage( diff --git a/src/utilities/last-sync-task.tsx b/src/utilities/last-sync-task.tsx index 13d906d9..b12a5bd7 100644 --- a/src/utilities/last-sync-task.tsx +++ b/src/utilities/last-sync-task.tsx @@ -1,4 +1,6 @@ -import { DateComponent, HelpButton, StatusIndicator } from 'src/components'; +import { StatusIndicator } from '../components/status-indicator'; +import { DateComponent } from '../components/date-component'; +import { HelpButton } from '../components/help-button'; export function lastSynced(entity) { if (!entity.last_sync_task || !entity.last_sync_task.finished_at) { diff --git a/src/utilities/task-alert.tsx b/src/utilities/task-alert.tsx index de7189e6..d6080bb1 100644 --- a/src/utilities/task-alert.tsx +++ b/src/utilities/task-alert.tsx @@ -1,6 +1,6 @@ import { Trans } from '@lingui/react/macro'; import { type ReactNode } from 'react'; -import { MaybeLink } from 'src/components'; +import { MaybeLink } from '../components/maybe-link'; import { Paths, formatPath } from 'src/paths'; import { parsePulpIDFromURL } from './parse-pulp-id'; From 04c89fb5570cc5293b547b00abf4005b3a2dc680 Mon Sep 17 00:00:00 2001 From: Wes <76014409+Redtigercod4@users.noreply.github.com> Date: Wed, 23 Sep 2026 08:40:08 +0000 Subject: [PATCH 4/5] Fixed further circular deps from utilities into components --- src/actions/ansible-remote-delete.tsx | 2 +- ...ansible-repository-collection-version-remove.tsx | 2 +- src/actions/ansible-repository-delete.tsx | 2 +- src/actions/ansible-repository-version-revert.tsx | 1 - src/api/execution-environment-registry.ts | 2 +- src/components/access-tab.tsx | 5 +++-- src/components/detail-list.tsx | 5 +++-- src/components/list-page.tsx | 13 +++++-------- src/components/login-link.tsx | 2 +- src/utilities/get-repo-url.ts | 2 +- src/utilities/last-sync-task.tsx | 2 +- src/utilities/task-alert.tsx | 2 +- 12 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/actions/ansible-remote-delete.tsx b/src/actions/ansible-remote-delete.tsx index 54f02e05..2e6afed3 100644 --- a/src/actions/ansible-remote-delete.tsx +++ b/src/actions/ansible-remote-delete.tsx @@ -1,6 +1,6 @@ import { msg, t } from '@lingui/core/macro'; -import { DeleteRemoteModal } from '../components/delete-remote-modal'; import { AnsibleRemoteAPI } from '../api/ansible-remote'; +import { DeleteRemoteModal } from '../components/delete-remote-modal'; import { handleHttpError } from '../utilities/fail-alerts'; import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; import { taskAlert } from '../utilities/task-alert'; diff --git a/src/actions/ansible-repository-collection-version-remove.tsx b/src/actions/ansible-repository-collection-version-remove.tsx index a8337462..751169f9 100644 --- a/src/actions/ansible-repository-collection-version-remove.tsx +++ b/src/actions/ansible-repository-collection-version-remove.tsx @@ -2,8 +2,8 @@ import { msg, t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; import { Text } from '@patternfly/react-core'; import { useState } from 'react'; -import { DeleteModal } from '../components/delete-modal'; import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { DeleteModal } from '../components/delete-modal'; import { handleHttpError } from '../utilities/fail-alerts'; import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; import { taskAlert } from '../utilities/task-alert'; diff --git a/src/actions/ansible-repository-delete.tsx b/src/actions/ansible-repository-delete.tsx index 5555f469..19597adc 100644 --- a/src/actions/ansible-repository-delete.tsx +++ b/src/actions/ansible-repository-delete.tsx @@ -1,7 +1,7 @@ import { msg, t } from '@lingui/core/macro'; -import { DeleteRepositoryModal } from '../components/delete-repository-modal'; import { AnsibleDistributionAPI } from '../api/ansible-distribution'; import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { DeleteRepositoryModal } from '../components/delete-repository-modal'; import { handleHttpError } from '../utilities/fail-alerts'; import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; import { taskAlert } from '../utilities/task-alert'; diff --git a/src/actions/ansible-repository-version-revert.tsx b/src/actions/ansible-repository-version-revert.tsx index 02a650dd..e8bb5b5c 100644 --- a/src/actions/ansible-repository-version-revert.tsx +++ b/src/actions/ansible-repository-version-revert.tsx @@ -6,7 +6,6 @@ import { Spinner } from '../components/patternfly-wrappers/l10n'; import { handleHttpError } from '../utilities/fail-alerts'; import { parsePulpIDFromURL } from '../utilities/parse-pulp-id'; import { taskAlert } from '../utilities/task-alert'; - import { Action } from './action'; const RevertModal = ({ diff --git a/src/api/execution-environment-registry.ts b/src/api/execution-environment-registry.ts index bf90a72d..31ecede4 100644 --- a/src/api/execution-environment-registry.ts +++ b/src/api/execution-environment-registry.ts @@ -1,5 +1,5 @@ -import { type RemoteType } from './response-types/remote'; import { PulpAPI } from './pulp'; +import { type RemoteType } from './response-types/remote'; // Deletes any hidden fields from the object so that they don't get sent to the API function clearSetFieldsFromRequest(data, hidden_fields) { diff --git a/src/components/access-tab.tsx b/src/components/access-tab.tsx index b1b8fd78..debc880b 100644 --- a/src/components/access-tab.tsx +++ b/src/components/access-tab.tsx @@ -11,7 +11,6 @@ import { Table, Tbody, Td, Tr } from '@patternfly/react-table'; import { sortBy } from 'lodash'; import { Component } from 'react'; import { Link } from 'react-router'; -import { type GroupType, type RoleType } from 'src/api'; import { DeleteModal, EmptyStateNoData, @@ -29,7 +28,9 @@ import { Spinner, WizardModal, } from 'src/components'; -import { ParamHelper } from 'src/utilities'; +import { type RoleType } from '../api/response-types/role'; +import { type GroupType } from '../api/response-types/user'; +import { ParamHelper } from '../utilities/param-helper'; interface UserType { username: string; diff --git a/src/components/detail-list.tsx b/src/components/detail-list.tsx index 13fddd24..aa7ea753 100644 --- a/src/components/detail-list.tsx +++ b/src/components/detail-list.tsx @@ -6,7 +6,6 @@ import { } from '@patternfly/react-core'; import { Table, Tbody } from '@patternfly/react-table'; import { type ReactNode, useEffect, useState } from 'react'; -import { type ActionType } from 'src/actions'; import { AppliedFilters, CompoundFilter, @@ -20,7 +19,9 @@ import { type RenderTableRow, SortTable, } from 'src/components'; -import { filterIsSet, handleHttpError } from 'src/utilities'; +import { type ActionType } from '../actions/action'; +import { handleHttpError } from '../utilities/fail-alerts'; +import { filterIsSet } from '../utilities/filter-is-set'; interface IProps { actionContext: { diff --git a/src/components/list-page.tsx b/src/components/list-page.tsx index 1f1add1b..86250dd1 100644 --- a/src/components/list-page.tsx +++ b/src/components/list-page.tsx @@ -7,7 +7,6 @@ import { } from '@patternfly/react-core'; import { Table, Tbody } from '@patternfly/react-table'; import { Component, type ReactNode } from 'react'; -import { type ActionType } from 'src/actions'; import { AppContext, type IAppContextType } from 'src/app-context'; import { AlertList, @@ -25,13 +24,11 @@ import { SortTable, closeAlert, } from 'src/components'; -import { - ParamHelper, - type RouteProps, - filterIsSet, - jsxErrorMessage, - withRouter, -} from 'src/utilities'; +import { type ActionType } from '../actions/action'; +import { jsxErrorMessage } from '../utilities/fail-alerts'; +import { filterIsSet } from '../utilities/filter-is-set'; +import { ParamHelper } from '../utilities/param-helper'; +import { type RouteProps, withRouter } from '../utilities/with-router'; interface IState { params: { diff --git a/src/components/login-link.tsx b/src/components/login-link.tsx index 5470eb41..7b72e09c 100644 --- a/src/components/login-link.tsx +++ b/src/components/login-link.tsx @@ -2,7 +2,7 @@ import { t } from '@lingui/core/macro'; import { Link, useLocation } from 'react-router'; import { Paths, formatPath } from 'src/paths'; import { config } from 'src/ui-config'; -import { loginURL } from 'src/utilities'; +import { loginURL } from '../utilities/login-url'; interface IProps { button?: boolean; diff --git a/src/utilities/get-repo-url.ts b/src/utilities/get-repo-url.ts index dcd10135..7a6517a2 100644 --- a/src/utilities/get-repo-url.ts +++ b/src/utilities/get-repo-url.ts @@ -1,6 +1,6 @@ import { config } from 'src/ui-config'; -import { parsePulpResource } from './parse-pulp-id'; import { ModelToApi } from './model-to-api'; +import { parsePulpResource } from './parse-pulp-id'; export function getDistroURL(distribution) { const resource = parsePulpResource( diff --git a/src/utilities/last-sync-task.tsx b/src/utilities/last-sync-task.tsx index b12a5bd7..c2d5ae22 100644 --- a/src/utilities/last-sync-task.tsx +++ b/src/utilities/last-sync-task.tsx @@ -1,6 +1,6 @@ -import { StatusIndicator } from '../components/status-indicator'; import { DateComponent } from '../components/date-component'; import { HelpButton } from '../components/help-button'; +import { StatusIndicator } from '../components/status-indicator'; export function lastSynced(entity) { if (!entity.last_sync_task || !entity.last_sync_task.finished_at) { diff --git a/src/utilities/task-alert.tsx b/src/utilities/task-alert.tsx index d6080bb1..ef30cd50 100644 --- a/src/utilities/task-alert.tsx +++ b/src/utilities/task-alert.tsx @@ -1,7 +1,7 @@ import { Trans } from '@lingui/react/macro'; import { type ReactNode } from 'react'; -import { MaybeLink } from '../components/maybe-link'; import { Paths, formatPath } from 'src/paths'; +import { MaybeLink } from '../components/maybe-link'; import { parsePulpIDFromURL } from './parse-pulp-id'; type VariantType = 'custom' | 'success' | 'danger' | 'warning' | 'info'; From 6ca130d1cd5f9b5aaa229cc10f913d9faf132a0a Mon Sep 17 00:00:00 2001 From: Wes <76014409+Redtigercod4@users.noreply.github.com> Date: Wed, 23 Sep 2026 09:45:06 +0000 Subject: [PATCH 5/5] Brought in new changes and updated circular deps within new Deb plugin --- src/utilities/plugin-repository-base-path.ts | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/utilities/plugin-repository-base-path.ts b/src/utilities/plugin-repository-base-path.ts index 61a2a293..763ebd11 100644 --- a/src/utilities/plugin-repository-base-path.ts +++ b/src/utilities/plugin-repository-base-path.ts @@ -1,24 +1,14 @@ import { t } from '@lingui/core/macro'; -<<<<<<< HEAD -import { - AnsibleDistributionAPI, - AnsibleRemoteAPI, - AnsibleRepositoryAPI, - DebDistributionAPI, - DebRemoteAPI, - DebRepositoryAPI, - FileDistributionAPI, - FileRemoteAPI, - FileRepositoryAPI, - RPMRepositoryAPI, -} from 'src/api'; -======= import { AnsibleDistributionAPI } from '../api/ansible-distribution'; +import { AnsibleRemoteAPI } from '../api/ansible-remote'; import { AnsibleRepositoryAPI } from '../api/ansible-repository'; +import { DebDistributionAPI } from '../api/deb-distribution'; +import { DebRemoteAPI } from '../api/deb-remote'; +import { DebRepositoryAPI } from '../api/deb-repository'; import { FileDistributionAPI } from '../api/file-distribution'; +import { FileRemoteAPI } from '../api/file-remote'; import { FileRepositoryAPI } from '../api/file-repository'; import { RPMRepositoryAPI } from '../api/rpm-repository'; ->>>>>>> c1a0cf5 (Extended eslint rule and fixed circular deps in src/utilities) // returns the preferred distribution base_path given a repo name // if there is a distribution with the same name as the repository, it will be used (as long as it's connected to the right repo too)