Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ test.describe('Assign Template to System via UI', () => {

const nextButton = page.getByRole('button', { name: 'Next', exact: true });

page.getByRole('button', { name: 'Create template' }).click();
await page.getByRole('button', { name: 'Create template' }).click();
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'x86_64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await nextButton.click();

await expect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ test.describe('Associated Template CRUD', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'x86_64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();

await expect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ test.describe('Test System With Template', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'x86_64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();
await expect(
page.getByRole('heading', { name: 'Additional Red Hat repositories', exact: true }),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ test.describe('Install Upload Repo Content', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'x86_64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();
await expect(
page.getByRole('heading', { name: 'Additional Red Hat repositories', exact: true }),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ test.describe('Register and assign template to systems via API', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'x86_64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();

await expect(
Expand Down
2 changes: 1 addition & 1 deletion _playwright-tests/UI/SnapshotRepo.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ test.describe('Snapshot Repositories', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'aarch64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();
const modalPage = page.getByTestId('add_template_modal');
const rowRHELRepo = await getRowByNameOrUrl(modalPage, smallRHRepo);
Expand Down
2 changes: 1 addition & 1 deletion _playwright-tests/UI/TemplateCRUD.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ test.describe('Templates CRUD', () => {
await page.getByRole('button', { name: 'filter architecture' }).click();
await page.getByRole('menuitem', { name: 'aarch64' }).click();
await page.getByRole('button', { name: 'filter OS version' }).click();
await page.getByRole('menuitem', { name: 'el9' }).click();
await page.getByRole('menuitem', { name: 'RHEL 9' }).click();
await page.getByRole('button', { name: 'Next', exact: true }).click();
const modalPage = page.getByTestId('add_template_modal');
const rowRHELRepo = await getRowByNameOrUrl(modalPage, smallRHRepo);
Expand Down
37 changes: 0 additions & 37 deletions src/Hooks/useArchVersion.tsx

This file was deleted.

104 changes: 104 additions & 0 deletions src/Hooks/useDistributionDetails.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { useCallback, useMemo } from 'react';
import { useRepositoryParams } from 'services/Content/ContentQueries';
import { toRhelDisplayName } from '../helpers';
import {
getMinorVersionsForCurrentMajor,
EXTENDED_SUPPORT_FEATURES,
} from '../Pages/Templates/TemplatesTable/components/templateHelpers';

export default function useDistributionDetails() {
const {
isLoading,
error,
isError,
data: {
distribution_versions: distVersions,
distribution_arches: distArches,
distribution_minor_versions: distMinorVersions,
extended_release_features: extendedReleaseFeatures,
} = {
distribution_versions: [],
distribution_arches: [],
distribution_minor_versions: [],
extended_release_features: [],
},
} = useRepositoryParams();

const labelToName: Record<string, string> = useMemo(() => {
const result = {};
distArches.forEach(({ name, label }) => {
result[label] = name;
});
distVersions.forEach(({ name, label }) => {
result[label] = name;
});
return result;
}, [distVersions, distArches]);

const archesDisplay = useCallback(
(arch: string = '') => labelToName[arch] || arch,
[labelToName],
);

/**
* Converts an OS label (e.g., "9") or array of labels to a user-friendly display string (e.g., "RHEL 9" or "RHEL 8, RHEL 9").
*/
const versionDisplay = useCallback(
(version?: string | string[]): string => {
if (!version) return '';
const versions = Array.isArray(version) ? version : [version];
const displayNames = versions
.map((label) => {
if (!Object.keys(labelToName).includes(label)) return undefined;
return toRhelDisplayName(labelToName[label]);
})
.filter(Boolean);
return displayNames.join(', ');
},
[labelToName],
);

const getMinorVersionName = useCallback(
(majorVersion?: string, minorVersion?: string) => {
const minorVersions = getMinorVersionsForCurrentMajor(majorVersion, distMinorVersions);
const name = minorVersions?.find((distribution) => distribution.label === minorVersion)?.name;
return name ? toRhelDisplayName(name) : '';
},
[distMinorVersions],
);

const getStreamName = useCallback(
(stream?: string) => {
const name = extendedReleaseFeatures.find(({ label }) => label === stream)?.name;
return name ? name : '';
},
[extendedReleaseFeatures],
);

const getStreamAvailability = useCallback(
(majorVersion: string) => {
const relevantMinors = distMinorVersions.filter(({ major }) => major === majorVersion);
return EXTENDED_SUPPORT_FEATURES.map((feature) =>
relevantMinors.some(({ feature_names }) => feature_names?.includes(feature)),
) as [boolean, boolean];
},
[distMinorVersions],
);

const isExtendedSupportAvailable = useMemo(
() => !!extendedReleaseFeatures?.length,
[extendedReleaseFeatures],
);

return {
isLoading,
error,
isError,
archesDisplay,
versionDisplay,
getStreamName,
getMinorVersionName,
getStreamAvailability,
isExtendedSupportAvailable,
};
}
4 changes: 2 additions & 2 deletions src/Pages/Repositories/ContentListTable/ContentListTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import {
Tooltip,
TooltipPosition,
} from '@patternfly/react-core';
import useArchVersion from 'Hooks/useArchVersion';
import useDistributionDetails from '../../../Hooks/useDistributionDetails';
import dayjs from 'dayjs';
import { useSearchParams, useNavigate, Outlet, useOutletContext } from 'react-router-dom';
import Hide from 'components/Hide/Hide';
Expand Down Expand Up @@ -190,7 +190,7 @@ const ContentListTable = () => {
versionDisplay,
isError: repositoryParamsIsError,
error: repositoryParamsError,
} = useArchVersion();
} = useDistributionDetails();

// Column configuration combining display names and sort attributes
// Selection is handled by DataView selection system, not individual columns
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { REPOSITORY_PARAMS_KEY } from '../../../../services/Content/ContentQueri
import { QueryClient } from 'react-query';
import useDebounce from '../../../../Hooks/useDebounce';
import { useDataViewFilters } from '@patternfly/react-data-view';
import { toRhelDisplayName } from '../../../../helpers';

// Mapping from display names to backend API values
const StatusDisplayMap = {
Expand Down Expand Up @@ -57,7 +58,7 @@ export const useContentListFilters = (queryClient: QueryClient) => {
distribution_versions.map(
(nameLabel: NameLabel) =>
({
label: nameLabel.name,
label: toRhelDisplayName(nameLabel.name),
value: nameLabel.label,
['data-ouia-component-id']: `filter_${nameLabel.name}`,
}) as unknown as DataViewFilterOption,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import { AddRepo } from './components/AddRepo';

import { DELETE_ROUTE } from 'Routes/constants';
import { Outlet, useNavigate, useOutletContext } from 'react-router-dom';
import useArchVersion from 'Hooks/useArchVersion';
import useDistributionDetails from '../../../Hooks/useDistributionDetails';
import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';

const useStyles = createUseStyles({
Expand Down Expand Up @@ -114,7 +114,7 @@ const PopularRepositoriesTable = () => {
isLoading: repositoryParamsLoading,
isError: repositoryParamsIsError,
error: repositoryParamsError,
} = useArchVersion();
} = useDistributionDetails();

const onDropdownToggle = () => {
setIsActionOpen((prev) => !prev);
Expand Down
6 changes: 3 additions & 3 deletions src/Pages/Templates/TemplateDetails/TemplateDetails.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ jest.mock('react-router-dom', () => ({
}),
}));

jest.mock('Hooks/useArchVersion', () => () => ({
jest.mock('../../../Hooks/useDistributionDetails', () => () => ({
isError: false,
isLoading: false,
archesDisplay: () => 'x86_64',
versionDisplay: () => 'Rhel9',
versionDisplay: () => 'RHEL 9',
}));

it('expect TemplateDetails to render correctly', () => {
const { queryByText, queryAllByText } = render(<TemplateDetails />);

expect(queryByText('TemplateDetailsTabs')).toBeInTheDocument();
expect(queryByText('x86_64')).toBeInTheDocument();
expect(queryByText('Rhel9')).toBeInTheDocument();
expect(queryByText('RHEL 9')).toBeInTheDocument();
expect(queryAllByText(defaultTemplateItem.name)).toHaveLength(2);
});
6 changes: 3 additions & 3 deletions src/Pages/Templates/TemplateDetails/TemplateDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { createUseStyles } from 'react-jss';
import { TEMPLATES_ROUTE } from 'Routes/constants';
import useRootPath from 'Hooks/useRootPath';
import { useFetchTemplate } from 'services/Templates/TemplateQueries';
import useArchVersion from 'Hooks/useArchVersion';
import useDistributionDetails from '../../../Hooks/useDistributionDetails';
import DetailItem from './components/DetaiItem';
import Hide from 'components/Hide/Hide';
import { formatDateDDMMMYYYY } from 'helpers';
Expand Down Expand Up @@ -73,7 +73,7 @@ export default function TemplateDetails() {
error: repositoryParamsError,
archesDisplay,
versionDisplay,
} = useArchVersion();
} = useDistributionDetails();

// Error is caught in the wrapper component
if (isError) throw error;
Expand Down Expand Up @@ -105,7 +105,7 @@ export default function TemplateDetails() {
<Title headingLevel='h1'>{data?.name}</Title>
<LabelGroup className={classes.labelGroup}>
<Label isCompact color='blue'>
{data?.version ? versionDisplay([data?.version]) : ''}
{versionDisplay(data?.version)}
</Label>
<Label isCompact color='blue'>
{archesDisplay(data?.arch)}
Expand Down
6 changes: 3 additions & 3 deletions src/Pages/Templates/TemplatesTable/TemplatesTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import { formatDateDDMMMYYYY, formatDateUTC } from 'helpers';
import Header from 'components/Header/Header';
import useRootPath from 'Hooks/useRootPath';
import { DELETE_ROUTE, TEMPLATES_ROUTE } from 'Routes/constants';
import useArchVersion from 'Hooks/useArchVersion';
import useDistributionDetails from '../../../Hooks/useDistributionDetails';
import { useTemplateList } from 'services/Templates/TemplateQueries';
import StatusIcon from './components/StatusIcon';
import { ExclamationTriangleIcon, ExternalLinkAltIcon } from '@patternfly/react-icons';
Expand Down Expand Up @@ -189,7 +189,7 @@ const TemplatesTable = () => {
isError: repositoryParamsIsError,
archesDisplay,
versionDisplay,
} = useArchVersion();
} = useDistributionDetails();

const actionTakingPlace = isLoading || isFetching || repositoryParamsLoading;

Expand Down Expand Up @@ -344,7 +344,7 @@ const TemplatesTable = () => {
</Td>
<Td>{description}</Td>
<Td>{archesDisplay(arch)}</Td>
<Td>{versionDisplay([version])}</Td>
<Td>{versionDisplay(version)}</Td>
<Td>
<ConditionalTooltip
show={!use_latest}
Expand Down
Loading
Loading