Skip to content

Commit

Permalink
Pipeline Resource rework
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewballantyne committed Apr 12, 2020
1 parent a7e2c17 commit 315d091
Show file tree
Hide file tree
Showing 40 changed files with 529 additions and 619 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ import * as React from 'react';
import { SectionHeading, ResourceSummary, ResourceLink } from '@console/internal/components/utils';
import { referenceForModel } from '@console/internal/module/k8s';
import PipelineRunVisualization from './PipelineRunVisualization';
import { PipelineRun } from '../../../utils/pipeline-augment';
import { PipelineRun, PipelineRunReferenceResource } from '../../../utils/pipeline-augment';
import { PipelineModel, PipelineResourceModel } from '../../../models';

export interface PipelineRunDetailsProps {
obj: PipelineRun;
}

export const PipelineRunDetails: React.FC<PipelineRunDetailsProps> = ({ obj: pipelineRun }) => {
const resources = pipelineRun?.spec?.resources?.filter(({ resourceRef }) => !!resourceRef);
// FIXME: If they are inline resources, we are not going to render them
const unfilteredResources = pipelineRun?.spec?.resources as PipelineRunReferenceResource[];
const renderResources = unfilteredResources?.filter(({ resourceRef }) => !!resourceRef);

return (
<div className="co-m-pane__body">
<SectionHeading text="Pipeline Run Details" />
Expand All @@ -31,11 +34,11 @@ export const PipelineRunDetails: React.FC<PipelineRunDetailsProps> = ({ obj: pip
</dd>
</dl>
<br />
{resources?.length > 0 && (
{renderResources?.length > 0 && (
<>
<SectionHeading text="Pipeline Resources" />
<dl>
{resources.map((res) => {
{renderResources.map((res) => {
return (
<React.Fragment key={res.resourceRef.name}>
<dt>Name: {res.resourceRef.name}</dt>
Expand Down
17 changes: 12 additions & 5 deletions frontend/packages/dev-console/src/components/pipelines/const.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
export enum PipelineResourceType {
'' = 'Select resource type',
git = 'Git',
image = 'Image',
cluster = 'Cluster',
storage = 'Storage',
git = 'git',
image = 'image',
cluster = 'cluster',
storage = 'storage',
}

export const pipelineResourceTypeSelections = {
'': 'Select resource type',
[PipelineResourceType.git]: 'Git',
[PipelineResourceType.image]: 'Image',
[PipelineResourceType.cluster]: 'Cluster',
[PipelineResourceType.storage]: 'Storage',
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import { TextInputTypes } from '@patternfly/react-core';
import { MultiColumnField, InputField, DropdownField } from '@console/shared';
import { PipelineResourceType } from '../const';
import { pipelineResourceTypeSelections } from '../const';

type PipelineResourcesParam = {
addLabel?: string;
Expand All @@ -27,7 +27,7 @@ const PipelineResources: React.FC<PipelineResourcesParam> = (props) => {
placeholder="Name"
isReadOnly={isReadOnly}
/>
<DropdownField name="type" items={PipelineResourceType} fullWidth disabled={isReadOnly} />
<DropdownField name="type" items={pipelineResourceTypeSelections} fullWidth disabled={isReadOnly} />
</MultiColumnField>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,3 @@ export const parametersValidationSchema = yup.object().shape({
}),
),
});

export const startPipelineSchema = yup.object().shape({
resources: yup.array().of(
yup.object().shape({
name: yup.string().required('Required'),
type: yup.string().required('Required'),
resourceRef: yup.object().shape({
name: yup.string().required('Required'),
}),
}),
),
parameters: yup.array().of(
yup.object().shape({
name: yup.string().required('Required'),
description: yup.string(),
default: yup.string().required('Required'),
}),
),
});
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ const ModalStructure: React.FC<ModalStructureProps> = (props) => {
<Form onSubmit={handleSubmit}>
<div className="modal-content">
<ModalTitle>{title}</ModalTitle>
<ModalBody>{children}</ModalBody>
<ModalBody>
<div className="pf-c-form">{children}</div>
</ModalBody>
<ModalSubmitFooter
errorMessage={status?.submitError}
inProgress={isSubmitting}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,15 @@ const PipelineParameterSection: React.FC<ParametersSectionProps> = ({ parameters
parameters.length > 0 && (
<FormSection title="Parameters" fullWidth>
{parameters.map((parameter, index) => (
<div
className="form-group"
// eslint-disable-next-line react/no-array-index-key
key={`${parameter.name}-${index}`}
>
<InputField
name={`parameters.${index}.default`}
type={TextInputTypes.text}
label={parameter.name}
helpText={parameter.description}
placeholder="Name"
required
/>
</div>
<InputField
key={parameter.name}
name={`parameters.${index}.default`}
type={TextInputTypes.text}
label={parameter.name}
helpText={parameter.description}
placeholder="Name"
required
/>
))}
</FormSection>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.odc-pipeline-resource-dropdown {
li[role=presentation] {
list-style: none;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import * as React from 'react';
import * as _ from 'lodash';
import { FormikValues, useField, useFormikContext } from 'formik';
import { Select, SelectOption } from '@patternfly/react-core';
import { referenceForModel } from '@console/internal/module/k8s';
import {
useK8sWatchResource,
WatchK8sResource,
} from '@console/internal/components/utils/k8s-watch-hook';
import { PipelineResourceModel } from '../../../../models';
import { PipelineResourceKind } from '../../../../utils/pipeline-augment';

import './PipelineResourceDropdown.scss';
import { LoadingInline } from '@console/internal/components/utils';
import { CREATE_PIPELINE_RESOURCE } from './const';

type PipelineResourceDropdownProps = {
autoSelect?: boolean;
filterType: string;
name: string;
namespace: string;
selectedKey: string;
};

const PipelineResourceDropdown: React.FC<PipelineResourceDropdownProps> = (props) => {
const { autoSelect, filterType, name, namespace, selectedKey } = props;

const [isExpanded, setExpanded] = React.useState(false);
const { setFieldValue, setFieldTouched } = useFormikContext<FormikValues>();
const [, { touched }] = useField(name);

const resourceDefinition: WatchK8sResource = React.useMemo(
() => ({
isList: true,
namespace,
kind: referenceForModel(PipelineResourceModel),
}),
[namespace],
);
const [resources, loaded, error] = useK8sWatchResource<PipelineResourceKind[]>(
resourceDefinition,
);

const availableResources: PipelineResourceKind[] = resources.filter(
(resource) => resource.spec.type === filterType,
);

const canAutoSelect = autoSelect && !touched && loaded && !error;
React.useEffect(() => {
if (canAutoSelect) {
if (availableResources.length === 0) {
setFieldValue(name, CREATE_PIPELINE_RESOURCE);
} else {
setFieldValue(name, availableResources[0].metadata.name);
}
setFieldTouched(name);
}
}, [canAutoSelect, name, availableResources, setFieldTouched, setFieldValue]);

const options = [
{ label: 'Create Pipeline Resource', value: CREATE_PIPELINE_RESOURCE },
...availableResources.map((resource) => {
const resourceName = resource.metadata.name;
const url = _.get(_.find(resource.spec.params, ['name', 'url']), 'value', '');
const label = url.trim().length > 0 ? `${url} (${resourceName})` : resourceName;

return { label, value: resourceName };
}),
];

return (
<Select
className="odc-pipeline-resource-dropdown"
selections={selectedKey}
isExpanded={isExpanded}
onToggle={() => setExpanded(!isExpanded)}
onSelect={(e, value) => {
setFieldValue(name, value);
setExpanded(false);
}}
placeholderText={!loaded ? <LoadingInline /> : 'Select Pipeline Resource'}
isDisabled={loaded && resources.length === 0}
>
{options.map(({ label, value }) => (
<SelectOption key={value} value={value}>
{label}
</SelectOption>
))}
</Select>
);
};

export default PipelineResourceDropdown;

0 comments on commit 315d091

Please sign in to comment.