diff --git a/src/Components/CreateImageWizardV2/steps/Packages/Packages.tsx b/src/Components/CreateImageWizardV2/steps/Packages/Packages.tsx
index 8b15a472..be6b043a 100644
--- a/src/Components/CreateImageWizardV2/steps/Packages/Packages.tsx
+++ b/src/Components/CreateImageWizardV2/steps/Packages/Packages.tsx
@@ -28,8 +28,13 @@ import { HelpIcon, OptimizeIcon, SearchIcon } from '@patternfly/react-icons';
import { Table, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table';
import { useDispatch } from 'react-redux';
-import { RH_ICON_SIZE } from '../../../../constants';
import {
+ EPEL_8_REPO_DEFINITION,
+ EPEL_9_REPO_DEFINITION,
+ RH_ICON_SIZE,
+} from '../../../../constants';
+import {
+ useCreateRepositoryMutation,
useListRepositoriesQuery,
useSearchRpmMutation,
} from '../../../../store/contentSourcesApi';
@@ -95,7 +100,7 @@ const Packages = () => {
{
data: dataCustomPackages,
isSuccess: isSuccessCustomPackages,
- isLoading: isLoadingRpms,
+ isLoading: isLoadingCustomPackages,
},
] = useSearchRpmMutation();
const [
@@ -107,15 +112,20 @@ const Packages = () => {
},
] = useSearchRpmMutation();
- const { data: dataDistroPackages, isSuccess: isSuccessDistroPackages } =
- useGetPackagesQuery(
- {
- distribution: distribution,
- architecture: arch,
- search: searchTerm,
- },
- { skip: !searchTerm }
- );
+ const {
+ data: dataDistroPackages,
+ isSuccess: isSuccessDistroPackages,
+ isLoading: isLoadingDistroPackages,
+ } = useGetPackagesQuery(
+ {
+ distribution: distribution,
+ architecture: arch,
+ search: searchTerm,
+ },
+ { skip: !searchTerm }
+ );
+
+ const [createRepository] = useCreateRepositoryMutation();
useEffect(() => {
const fetchCustomPackages = async () => {
@@ -161,11 +171,19 @@ const Packages = () => {
} />
-
- Search above to add additional
-
- packages to your image.
-
+ {toggleSelected === 'toggle-available' ? (
+
+ Search above to add additional
+
+ packages to your image.
+
+ ) : (
+
+ No packages selected.
+
+ Search above to see available packages.
+
+ )}
@@ -383,10 +401,26 @@ const Packages = () => {
}
if (toggleSelected === 'toggle-available') {
- return combinedPackageData;
+ if (toggleSourceRepos === 'toggle-included-repos') {
+ return combinedPackageData.filter(
+ (pkg) => pkg.repository !== 'recommended'
+ );
+ } else {
+ return combinedPackageData.filter(
+ (pkg) => pkg.repository === 'recommended'
+ );
+ }
} else {
const selectedPackages = [...packages];
- return selectedPackages;
+ if (toggleSourceRepos === 'toggle-included-repos') {
+ return selectedPackages.filter(
+ (pkg) => pkg.repository !== 'recommended'
+ );
+ } else {
+ return selectedPackages.filter(
+ (pkg) => pkg.repository === 'recommended'
+ );
+ }
}
};
@@ -541,10 +575,82 @@ const Packages = () => {
`There was an error while adding the recommended repository.`
);
}
+ const enableEpelRepository = async () => {
+ await createRepository({
+ apiRepositoryRequest: distribution.startsWith('rhel-8')
+ ? EPEL_8_REPO_DEFINITION
+ : EPEL_9_REPO_DEFINITION,
+ });
+ };
+
+ if (epelRepo.data.length === 0) {
+ enableEpelRepository();
+ }
+
dispatch(addRecommendedRepository(epelRepo.data[0]));
setIsRepoModalOpen(!isRepoModalOpen);
};
+ const composePkgTable = () => {
+ return transformedPackages
+ .slice(computeStart(), computeEnd())
+ .map((pkg, rowIndex) => (
+
+ | p.name === pkg.name),
+ rowIndex: rowIndex,
+ onSelect: (event, isSelecting) =>
+ handleSelect(pkg, rowIndex, isSelecting),
+ }}
+ />
+ | {pkg.name} |
+
+ {pkg.summary ? (
+ pkg.summary
+ ) : (
+ Not available
+ )}
+ |
+ {pkg.repository === 'distro' ? (
+ <>
+
+ {' '}
+ Red Hat repository
+ |
+ Supported |
+ >
+ ) : pkg.repository === 'custom' ? (
+ <>
+ Third party repository |
+ Not supported |
+ >
+ ) : pkg.repository === 'recommended' ? (
+ <>
+
+
+
+ {' '}
+ EPEL {distribution.startsWith('rhel-8') ? '8' : '9'} Everything
+ x86_64
+ |
+ Not supported |
+ >
+ ) : (
+ <>
+ Not available |
+ Not available |
+ >
+ )}
+
+ ));
+ };
+
return (
<>
@@ -698,79 +804,24 @@ const Packages = () => {
- {!searchTerm && toggleSelected === 'toggle-available' && (
+ {((toggleSelected === 'toggle-selected' && packages.length === 0) ||
+ (!searchTerm && toggleSelected === 'toggle-available')) && (
)}
- {searchTerm && (isLoadingRecommendedPackages || isLoadingRpms) && (
-
- )}
+ {((searchTerm &&
+ isLoadingRecommendedPackages &&
+ toggleSourceRepos === 'toggle-other-repos') ||
+ (searchTerm &&
+ (isLoadingDistroPackages || isLoadingCustomPackages) &&
+ toggleSourceRepos === 'toggle-included-repos')) && }
{searchTerm &&
- !isLoadingRecommendedPackages &&
+ isSuccessRecommendedPackages &&
transformedPackages.length === 0 &&
toggleSelected === 'toggle-available' && }
{searchTerm &&
transformedPackages.length >= 100 &&
handleExactMatch()}
- {transformedPackages.length < 100 &&
- transformedPackages
- .slice(computeStart(), computeEnd())
- .map((pkg, rowIndex) => (
-
- | p.name === pkg.name),
- rowIndex: rowIndex,
- onSelect: (event, isSelecting) =>
- handleSelect(pkg, rowIndex, isSelecting),
- }}
- />
- | {pkg.name} |
-
- {pkg.summary ? (
- pkg.summary
- ) : (
- Not available
- )}
- |
- {pkg.repository === 'distro' ? (
- <>
-
- {' '}
- Red Hat repository
- |
- Supported |
- >
- ) : pkg.repository === 'custom' ? (
- <>
- Third party repository |
- Not supported |
- >
- ) : pkg.repository === 'recommended' ? (
- <>
-
-
-
- {' '}
- EPEL {distribution.startsWith('rhel-8') ? '8' : '9'}{' '}
- Everything x86_64
- |
- Not supported |
- >
- ) : (
- <>
- Not available |
- Not available |
- >
- )}
-
- ))}
+ {transformedPackages.length < 100 && composePkgTable()}