Wizard: Re-enable custom repositories HMS-3637

This reverts the changes made to disable custom repositories in the Create Image Wizard.

Reverting following PRs:
- https://github.com/osbuild/image-builder-frontend/pull/1590
- https://github.com/osbuild/image-builder-frontend/pull/1594
- https://github.com/osbuild/image-builder-frontend/pull/1595
This commit is contained in:
regexowl 2024-02-19 15:16:25 +01:00 committed by Lucas Garfield
parent 79626ac86d
commit 362cf6abee
4 changed files with 195 additions and 227 deletions

View file

@ -68,10 +68,7 @@ const CustomButtons = ({
!formOptions.valid ||
formOptions.getState().validating ||
isSaving ||
hasUnavailableRepo ||
// Temporarily disable when there are custom repositories
getState().values?.['payload-repositories'] ||
getState().values?.['custom-repositories']
hasUnavailableRepo
}
isLoading={currentStep.id === 'wizard-review' ? isSaving : null}
onClick={onNextOrSubmit}

View file

@ -318,212 +318,200 @@ const Packages = ({ getAllPackages, isSuccess }) => {
};
return (
<>
{
// vv REMOVE WHEN CONTENT REACHABLE AGAIN
currentStep.name === 'packages-content-sources' && (
<Alert title="Repositories unavailable" variant="warning" isInline>
The Content service cannot be reached, please check back later.
</Alert>
// ^^ REMOVE WHEN CONTENT REACHABLE AGAIN
)
}
<DualListSelector>
<DualListSelectorPane
title="Available packages"
searchInput={
<>
<SearchInput
placeholder="Search for a package"
data-testid="search-available-pkgs-input"
value={packagesSearchName}
ref={firstInputElement}
onFocus={() => setFocus('available')}
onBlur={() => setFocus('')}
onChange={(_, val) => setPackagesSearchName(val)}
submitSearchButtonLabel="Search button for available packages"
onSearch={handleAvailablePackagesSearch}
resetButtonLabel="Clear available packages search"
onClear={handleClearAvailableSearch}
// Temporarily disable search input for custom packages
isDisabled={currentStep.name === 'packages' ? !isSuccess : true}
/>
{availablePackagesDisplayList.length >= 100 && (
<Alert
title="Over 100 results found. Refine your search."
variant="warning"
isPlain
isInline
/>
)}
</>
}
status={
selectedAvailablePackages.size > 0
? `${selectedAvailablePackages.size}
of ${availablePackagesDisplayList.length} items`
: `${availablePackagesDisplayList.length} items`
}
>
<DualListSelectorList data-testid="available-pkgs-list">
{availablePackages === undefined ? (
<p className="pf-u-text-align-center pf-u-mt-md">
Search above to add additional
<br />
packages to your image
</p>
) : availablePackagesDisplayList.length === 0 ? (
<>
<p className="pf-u-text-align-center pf-u-mt-md pf-u-font-size-lg pf-u-font-weight-bold">
No results found
</p>
<br />
<p className="pf-u-text-align-center pf-u-mt-md">
Adjust your search and try again
</p>
</>
) : availablePackagesDisplayList.length >= 100 ? (
<>
{availablePackagesDisplayList.some(
(pkg) => pkg.name === packagesSearchName
) && (
<ExactMatch
pkgList={availablePackagesDisplayList}
search={packagesSearchName}
chosenPackages={chosenPackages}
selectedAvailablePackages={selectedAvailablePackages}
handleSelectAvailableFunc={handleSelectAvailable}
/>
)}
<p className="pf-u-text-align-center pf-u-mt-md pf-u-font-size-lg pf-u-font-weight-bold">
Too many results to display
</p>
<br />
<p className="pf-u-text-align-center pf-u-mt-md">
Please make the search more specific
<br />
and try again
</p>
</>
) : (
availablePackagesDisplayList.map((pkg) => {
return (
<DualListSelectorListItem
data-testid={`available-pkgs-${pkg.name}`}
key={pkg.name}
isDisabled={chosenPackages[pkg.name] ? true : false}
isSelected={selectedAvailablePackages.has(pkg.name)}
onOptionSelect={(e) => handleSelectAvailable(e, pkg.name)}
>
<TextContent key={`${pkg.name}`}>
<span
className={
chosenPackages[pkg.name] && 'pf-v5-u-color-400'
}
>
{pkg.name}
</span>
<small>{pkg.summary}</small>
</TextContent>
</DualListSelectorListItem>
);
})
)}
</DualListSelectorList>
</DualListSelectorPane>
<DualListSelectorControlsWrapper aria-label="Selector controls">
<DualListSelectorControl
isDisabled={selectedAvailablePackages.size === 0}
onClick={() => moveSelectedToChosen()}
aria-label="Add selected"
tooltipContent="Add selected"
>
<AngleRightIcon />
</DualListSelectorControl>
<DualListSelectorControl
isDisabled={
availablePackagesDisplayList.length === 0 ||
// also disable the "Add all" button if there are too many matches
// (even if there's an exact match)
availablePackagesDisplayList.length >= 100
}
onClick={() => moveAllToChosen()}
aria-label="Add all"
tooltipContent="Add all"
>
<AngleDoubleRightIcon />
</DualListSelectorControl>
<DualListSelectorControl
isDisabled={Object.values(chosenPackages).length === 0}
onClick={() => removeAllFromChosen()}
aria-label="Remove all"
tooltipContent="Remove all"
>
<AngleDoubleLeftIcon />
</DualListSelectorControl>
<DualListSelectorControl
onClick={() => removeSelectedFromChosen()}
isDisabled={selectedChosenPackages.size === 0}
aria-label="Remove selected"
tooltipContent="Remove selected"
>
<AngleLeftIcon />
</DualListSelectorControl>
</DualListSelectorControlsWrapper>
<DualListSelectorPane
title="Chosen packages"
searchInput={
<DualListSelector>
<DualListSelectorPane
title="Available packages"
searchInput={
<>
<SearchInput
placeholder="Search for a package"
data-testid="search-chosen-pkgs-input"
value={filterChosen}
onFocus={() => setFocus('chosen')}
data-testid="search-available-pkgs-input"
value={packagesSearchName}
ref={firstInputElement}
onFocus={() => setFocus('available')}
onBlur={() => setFocus('')}
onChange={(_, val) => setFilterChosen(val)}
resetButtonLabel="Clear chosen packages search"
onClear={handleClearChosenSearch}
onChange={(_, val) => setPackagesSearchName(val)}
submitSearchButtonLabel="Search button for available packages"
onSearch={handleAvailablePackagesSearch}
resetButtonLabel="Clear available packages search"
onClear={handleClearAvailableSearch}
isDisabled={currentStep.name === 'packages' ? !isSuccess : false}
/>
}
status={
selectedChosenPackages.size > 0
? `${selectedChosenPackages.size}
of ${chosenPackagesDisplayList.length} items`
: `${chosenPackagesDisplayList.length} items`
}
isChosen
>
<DualListSelectorList data-testid="chosen-pkgs-list">
{Object.values(chosenPackages).length === 0 ? (
<p className="pf-u-text-align-center pf-u-mt-md">
No packages added
</p>
) : chosenPackagesDisplayList.length === 0 ? (
<p className="pf-u-text-align-center pf-u-mt-md">
No packages found
</p>
) : (
chosenPackagesDisplayList.map((pkg) => {
return (
<DualListSelectorListItem
data-testid={`selected-pkgs-${pkg.name}`}
key={pkg.name}
isSelected={selectedChosenPackages.has(pkg.name)}
onOptionSelect={(e) => handleSelectChosen(e, pkg.name)}
>
<TextContent key={`${pkg.name}`}>
<span className="pf-c-dual-list-selector__item-text">
{pkg.name}
</span>
<small>{pkg.summary}</small>
</TextContent>
</DualListSelectorListItem>
);
})
{availablePackagesDisplayList.length >= 100 && (
<Alert
title="Over 100 results found. Refine your search."
variant="warning"
isPlain
isInline
/>
)}
</DualListSelectorList>
</DualListSelectorPane>
</DualListSelector>
</>
</>
}
status={
selectedAvailablePackages.size > 0
? `${selectedAvailablePackages.size}
of ${availablePackagesDisplayList.length} items`
: `${availablePackagesDisplayList.length} items`
}
>
<DualListSelectorList data-testid="available-pkgs-list">
{availablePackages === undefined ? (
<p className="pf-u-text-align-center pf-u-mt-md">
Search above to add additional
<br />
packages to your image
</p>
) : availablePackagesDisplayList.length === 0 ? (
<>
<p className="pf-u-text-align-center pf-u-mt-md pf-u-font-size-lg pf-u-font-weight-bold">
No results found
</p>
<br />
<p className="pf-u-text-align-center pf-u-mt-md">
Adjust your search and try again
</p>
</>
) : availablePackagesDisplayList.length >= 100 ? (
<>
{availablePackagesDisplayList.some(
(pkg) => pkg.name === packagesSearchName
) && (
<ExactMatch
pkgList={availablePackagesDisplayList}
search={packagesSearchName}
chosenPackages={chosenPackages}
selectedAvailablePackages={selectedAvailablePackages}
handleSelectAvailableFunc={handleSelectAvailable}
/>
)}
<p className="pf-u-text-align-center pf-u-mt-md pf-u-font-size-lg pf-u-font-weight-bold">
Too many results to display
</p>
<br />
<p className="pf-u-text-align-center pf-u-mt-md">
Please make the search more specific
<br />
and try again
</p>
</>
) : (
availablePackagesDisplayList.map((pkg) => {
return (
<DualListSelectorListItem
data-testid={`available-pkgs-${pkg.name}`}
key={pkg.name}
isDisabled={chosenPackages[pkg.name] ? true : false}
isSelected={selectedAvailablePackages.has(pkg.name)}
onOptionSelect={(e) => handleSelectAvailable(e, pkg.name)}
>
<TextContent key={`${pkg.name}`}>
<span
className={
chosenPackages[pkg.name] && 'pf-v5-u-color-400'
}
>
{pkg.name}
</span>
<small>{pkg.summary}</small>
</TextContent>
</DualListSelectorListItem>
);
})
)}
</DualListSelectorList>
</DualListSelectorPane>
<DualListSelectorControlsWrapper aria-label="Selector controls">
<DualListSelectorControl
isDisabled={selectedAvailablePackages.size === 0}
onClick={() => moveSelectedToChosen()}
aria-label="Add selected"
tooltipContent="Add selected"
>
<AngleRightIcon />
</DualListSelectorControl>
<DualListSelectorControl
isDisabled={
availablePackagesDisplayList.length === 0 ||
// also disable the "Add all" button if there are too many matches
// (even if there's an exact match)
availablePackagesDisplayList.length >= 100
}
onClick={() => moveAllToChosen()}
aria-label="Add all"
tooltipContent="Add all"
>
<AngleDoubleRightIcon />
</DualListSelectorControl>
<DualListSelectorControl
isDisabled={Object.values(chosenPackages).length === 0}
onClick={() => removeAllFromChosen()}
aria-label="Remove all"
tooltipContent="Remove all"
>
<AngleDoubleLeftIcon />
</DualListSelectorControl>
<DualListSelectorControl
onClick={() => removeSelectedFromChosen()}
isDisabled={selectedChosenPackages.size === 0}
aria-label="Remove selected"
tooltipContent="Remove selected"
>
<AngleLeftIcon />
</DualListSelectorControl>
</DualListSelectorControlsWrapper>
<DualListSelectorPane
title="Chosen packages"
searchInput={
<SearchInput
placeholder="Search for a package"
data-testid="search-chosen-pkgs-input"
value={filterChosen}
onFocus={() => setFocus('chosen')}
onBlur={() => setFocus('')}
onChange={(_, val) => setFilterChosen(val)}
resetButtonLabel="Clear chosen packages search"
onClear={handleClearChosenSearch}
/>
}
status={
selectedChosenPackages.size > 0
? `${selectedChosenPackages.size}
of ${chosenPackagesDisplayList.length} items`
: `${chosenPackagesDisplayList.length} items`
}
isChosen
>
<DualListSelectorList data-testid="chosen-pkgs-list">
{Object.values(chosenPackages).length === 0 ? (
<p className="pf-u-text-align-center pf-u-mt-md">
No packages added
</p>
) : chosenPackagesDisplayList.length === 0 ? (
<p className="pf-u-text-align-center pf-u-mt-md">
No packages found
</p>
) : (
chosenPackagesDisplayList.map((pkg) => {
return (
<DualListSelectorListItem
data-testid={`selected-pkgs-${pkg.name}`}
key={pkg.name}
isSelected={selectedChosenPackages.has(pkg.name)}
onOptionSelect={(e) => handleSelectChosen(e, pkg.name)}
>
<TextContent key={`${pkg.name}`}>
<span className="pf-c-dual-list-selector__item-text">
{pkg.name}
</span>
<small>{pkg.summary}</small>
</TextContent>
</DualListSelectorListItem>
);
})
)}
</DualListSelectorList>
</DualListSelectorPane>
</DualListSelector>
);
};

View file

@ -243,7 +243,6 @@ const Repositories = (props) => {
}
);
// eslint-disable-next-line no-unused-vars
const { data, isError, isFetching, isLoading, isSuccess, refetch } =
useMemo(() => {
if (firstRequest?.data?.meta?.count > 100) {
@ -356,8 +355,7 @@ const Repositories = (props) => {
};
return (
// Temporarily disable repositories step while service is down
(true && <Error />) ||
(isError && <Error />) ||
(isLoading && <Loading />) ||
(isSuccess && (
<>
@ -525,8 +523,8 @@ const Repositories = (props) => {
const Error = () => {
return (
<Alert title="Repositories unavailable" variant="warning" isPlain isInline>
The Content service cannot be reached, please check back later.
<Alert title="Repositories unavailable" variant="danger" isPlain isInline>
Repositories cannot be reached, try again later.
</Alert>
);
};

View file

@ -2,7 +2,6 @@ import React, { useEffect, useState } from 'react';
import useFormApi from '@data-driven-forms/react-form-renderer/use-form-api';
import {
Alert,
ExpandableSection,
Text,
TextContent,
@ -10,9 +9,8 @@ import {
} from '@patternfly/react-core';
import { useChrome } from '@redhat-cloud-services/frontend-components/useChrome';
// Temporarily disable
//import RepositoryUnavailable from './RepositoryUnavailable';
import OscapProfileInformation from './OscapProfileInformation';
import RepositoryUnavailable from './RepositoryUnavailable';
import {
ContentList,
FSCList,
@ -68,20 +66,7 @@ const ReviewStep = () => {
return (
<>
{
// Temporarily disable
//<RepositoryUnavailable />
// vv REMOVE WHEN CONTENT REACHABLE AGAIN
(getState()?.values?.['payload-repositories'] ||
getState()?.values?.['custom-repositories']) && (
<Alert title="Repositories unavailable" variant="warning" isInline>
The Content service cannot be reached, please check back later.
</Alert>
)
// ^^ REMOVE WHEN CONTENT REACHABLE AGAIN
}
<RepositoryUnavailable />
{getState()?.values?.['file-system-configuration']?.find((mp) =>
mp.mountpoint.includes('/usr')
) && <UsrSubDirectoriesDisabled />}