diff --git a/src/components/common/GeneratePipelineButton.tsx b/src/components/common/GeneratePipelineButton.tsx deleted file mode 100644 index 49151d7..0000000 --- a/src/components/common/GeneratePipelineButton.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import * as React from 'react'; -import { - Button, - DialogActions, - DialogContent, - DialogTitle, - makeStyles, - TextareaAutosize, -} from '@material-ui/core'; -import Dialog from '@material-ui/core/Dialog'; -import { toast } from 'react-toastify'; -import { getFormattedRuntimeException, post } from '../../helper/api-client'; -import { text } from '../../coreform/Styles'; -import { generateAwsTemplate } from '@src/coreform/baseform/Pipeline/util'; - -const API_TO_POST_PIPELINE_MANIFEST = '/api/pipelines'; -const YAML = require('js-yaml'); -const useStyles = makeStyles({ - text, -}); - -const GeneratePipelineButton = props => { - const { values } = props; - const [open, setOpen] = React.useState(false); - const [yamlText, setYamlText] = React.useState(); - const classes = useStyles(); - - const handleClickOpen = () => { - submitManifest(generateAwsTemplate(values.name, values.environment, props.type)); - }; - - const handleClose = () => { - setOpen(false); - }; - const descriptionElementRef = React.useRef(null); - React.useEffect(() => { - if (open) { - const { current: descriptionElement } = descriptionElementRef; - if (descriptionElement !== null) { - // @ts-ignore - descriptionElement.focus(); - } - } - }, [open]); - - const submitManifest = (body: any) => { - const toastId = toast.info('In Progress ...', { - autoClose: 50000, - }); - post(body, API_TO_POST_PIPELINE_MANIFEST).then(r => { - r.json().then(resJson => { - if (r.ok) { - toast.update(toastId, { - render: 'Updated', - type: 'success', - autoClose: 3000, - }); - setYamlText(resJson); - setOpen(true); - } else { - toast.update(toastId, { - render: `${getFormattedRuntimeException(resJson)}`, - type: 'error', - autoClose: 3000, - }); - } - }); - }); - }; - - return ( - <> - - - Pipeline - - - - - - - - - ); -}; - -export default GeneratePipelineButton; diff --git a/src/components/gocd-yaml/PipelineBaseForm.tsx b/src/components/gocd-yaml/PipelineBaseForm.tsx index f0730a1..2f7bd34 100644 --- a/src/components/gocd-yaml/PipelineBaseForm.tsx +++ b/src/components/gocd-yaml/PipelineBaseForm.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react'; +import { toast } from 'react-toastify'; import { withCookies } from 'react-cookie'; import { makeStyles } from '@material-ui/core/styles'; import { Button, TextareaAutosize, TextField } from '@material-ui/core'; @@ -7,14 +8,14 @@ import { Form, Formik } from 'formik'; import { FormikTextField } from '../common/FormikTextField'; import { pipelineManifestValidationSchema } from './PipelineManifestValidationSchema'; import { cardStyles, text } from '../../coreform/Styles'; -import { toast } from 'react-toastify'; import { getFormattedRuntimeException, httpClient, post } from '../../helper/api-client'; +import { DeploymentPipeline } from '@src/types/Types'; import { PipelineList } from './PipelineList'; import Header from '../layout/Header'; +import { API_PIPELINE_MANIFEST } from '@src/constants/Pipeline'; const YAML = require('js-yaml'); -const API_TO_GET_TEMPLATE_PIPELINE_MANIFEST = '/api/pipelines/template'; const useStyles = makeStyles({ ...cardStyles, text, @@ -55,11 +56,12 @@ const PipelineBaseForm = () => { const [yamlText, setYamlText] = useState(''); const [manifest, setManifest] = useState(_p.initData); - const submitManifest = (pipelineManifest: any) => { + const submitManifest = (pipelineManifest: DeploymentPipeline) => { const toastId = toast.info('In Progress ...', { autoClose: 50000, }); - post(pipelineManifest, API_TO_GET_TEMPLATE_PIPELINE_MANIFEST).then(r => { + const requestBody = _p.addUpstream(pipelineManifest); + post(requestBody, API_PIPELINE_MANIFEST + '/template').then(r => { r.json().then(resJson => { if (r.ok) { toast.update(toastId, { diff --git a/src/components/gocd-yaml/pipeline.ts b/src/components/gocd-yaml/pipeline.ts index b289826..c160518 100644 --- a/src/components/gocd-yaml/pipeline.ts +++ b/src/components/gocd-yaml/pipeline.ts @@ -1,5 +1,7 @@ import { toast } from 'react-toastify'; import { getFormattedRuntimeException, httpClient } from '../../helper/api-client'; +import { DeploymentPipeline } from '@src/types/Types'; +import _ from 'lodash'; export const initData = { name: '', @@ -58,3 +60,12 @@ export const initData = { export const addStage = () => { return { type: '', approvalType: '' }; }; +export const addUpstream = (pipelineManifest: DeploymentPipeline) => { + const newPipelineManifest = _.cloneDeep(pipelineManifest); + const upstream: string[] = []; + newPipelineManifest.pipelines.forEach((pipeline, i) => { + newPipelineManifest.pipelines[i].upstream = [...upstream]; + upstream.push(pipeline.env); + }); + return newPipelineManifest; +}; diff --git a/src/constants/Pipeline.tsx b/src/constants/Pipeline.tsx index e5ffe11..a65502c 100644 --- a/src/constants/Pipeline.tsx +++ b/src/constants/Pipeline.tsx @@ -64,3 +64,5 @@ export const approvalTypeMap = { uat: 'manual', prod: 'manual', }; + +export const API_PIPELINE_MANIFEST = '/api/pipelines'; diff --git a/src/coreform/awsaccess/AWSAccessForm.tsx b/src/coreform/awsaccess/AWSAccessForm.tsx index 51b91a4..6ae1278 100644 --- a/src/coreform/awsaccess/AWSAccessForm.tsx +++ b/src/coreform/awsaccess/AWSAccessForm.tsx @@ -6,7 +6,6 @@ import { FormikTextField } from '../../components/common/FormikTextField'; import { FormikCardList } from '../../components/common/FormikCardList'; import * as _m from '../../models/Manifest'; import NotConfigured from '../NotConfiguredPanel'; -import GeneratePipelineButton from '../../components/common/GeneratePipelineButton'; import { Environment } from '../../constants/Environment'; const useStyles = makeStyles({ diff --git a/src/coreform/baseform/Pipeline/GenratePipeline.tsx b/src/coreform/baseform/Pipeline/GenratePipeline.tsx index 2f2cb10..84529ab 100644 --- a/src/coreform/baseform/Pipeline/GenratePipeline.tsx +++ b/src/coreform/baseform/Pipeline/GenratePipeline.tsx @@ -15,10 +15,10 @@ const GeneratePipeline: React.FC = (props: GeneratePipelin const { manifestName, environment } = props; const [openDialog, setOpenDialog] = useState(false); const formSubmitButtonRef = useRef(null); - const handleClose = () => { + const handleClose = (): void => { setOpenDialog(false); }; - const handleSubmit = () => { + const handleSubmit = (): void => { formSubmitButtonRef.current?.click(); }; return ( diff --git a/src/coreform/baseform/Pipeline/PipelineCard.tsx b/src/coreform/baseform/Pipeline/PipelineCard.tsx index f511638..df7a8a4 100644 --- a/src/coreform/baseform/Pipeline/PipelineCard.tsx +++ b/src/coreform/baseform/Pipeline/PipelineCard.tsx @@ -1,28 +1,34 @@ -import React, { RefObject, useState } from 'react'; +import React, { FC, RefObject, useEffect, useState } from 'react'; import { Form, Formik } from 'formik'; import { toast } from 'react-toastify'; import { getFormattedRuntimeException, httpClient, post } from '@src/helper/api-client'; import { PipelineList } from '@src/components/gocd-yaml/PipelineList'; import { createPipeLineInitData, createPipelineManifestObject, generateAwsTemplate } from './util'; import { Checkbox, DialogTitle, FormControlLabel } from '@material-ui/core'; -import { resourceMap, upstreamMap, upstreamOrder } from '@src/constants/Pipeline'; -import { Pipeline } from '@src/types/Types'; +import { + API_PIPELINE_MANIFEST, + resourceMap, + upstreamMap, + upstreamOrder, +} from '@src/constants/Pipeline'; +import { DeploymentPipeline, Pipeline } from '@src/types/Types'; import { addToArray, removeFromArray } from '../utils'; import './PipelineCard.module.css'; -const API_TO_POST_PIPELINE_MANIFEST = '/api/pipelines'; interface PipelineCardProps { environment: string; manifestName: string; formSubmitButtonRef: RefObject; } -export const PipelineCard = (props: PipelineCardProps) => { +export const PipelineCard: FC = (props: PipelineCardProps) => { const { environment, manifestName, formSubmitButtonRef } = props; - const [manifest, setManifest] = useState(createPipeLineInitData(environment, manifestName)); + const [manifest, setManifest] = useState( + createPipeLineInitData(environment, manifestName), + ); const [upstream, setUpstream] = useState([]); const [resource, setResource] = useState([]); - const handleUpstreamSelectionChange = (event: React.ChangeEvent) => { + const handleUpstreamSelectionChange = (event: React.ChangeEvent): void => { const { name, checked } = event.target; const updatedUpstream: string[] = checked ? (addToArray(name, upstream) as string[]) @@ -30,7 +36,7 @@ export const PipelineCard = (props: PipelineCardProps) => { updatedUpstream.sort((a, b) => upstreamOrder[a] - upstreamOrder[b]); setUpstream(updatedUpstream); }; - const handleResourceSelectionChange = (event: React.ChangeEvent) => { + const handleResourceSelectionChange = (event: React.ChangeEvent): void => { const { name, checked } = event.target; const updatedResources: Pipeline[] = checked ? (addToArray(generateAwsTemplate(manifestName, environment, name), resource) as Pipeline[]) @@ -40,11 +46,11 @@ export const PipelineCard = (props: PipelineCardProps) => { ) as Pipeline[]); setResource(updatedResources); }; - const submitManifest = (pipelineManifest: any) => { + const submitPipeline = (pipelineManifest: DeploymentPipeline): void => { const toastId = toast.info('In Progress ...', { autoClose: 50000, }); - post(pipelineManifest, API_TO_POST_PIPELINE_MANIFEST).then(r => { + post(pipelineManifest, API_PIPELINE_MANIFEST).then(r => { r.json().then(resJson => { if (r.ok) { toast.update(toastId, { @@ -52,7 +58,6 @@ export const PipelineCard = (props: PipelineCardProps) => { type: 'success', autoClose: 3000, }); - // setYamlText(resJson); } else { toast.update(toastId, { render: `${getFormattedRuntimeException(resJson)}`, @@ -64,11 +69,11 @@ export const PipelineCard = (props: PipelineCardProps) => { }); }; - const getManifestByName = (name: string) => { + const getPipelineManifestByNameAndEnvironment = (name: string, env: string): void => { const toastId = toast.info('In Progress ...', { autoClose: 50000, }); - httpClient(`${API_TO_POST_PIPELINE_MANIFEST}/name/${name}`).then(r => { + httpClient(`${API_PIPELINE_MANIFEST}?name=${name}&env=${env}`).then(r => { r.json().then(resJson => { if (r.ok) { toast.update(toastId, { @@ -87,6 +92,9 @@ export const PipelineCard = (props: PipelineCardProps) => { }); }); }; + useEffect(() => { + getPipelineManifestByNameAndEnvironment(manifestName, environment); + }, [manifestName, environment]); return (
@@ -95,7 +103,7 @@ export const PipelineCard = (props: PipelineCardProps) => { initialValues={manifest} validateOnChange={false} onSubmit={values => { - console.log(createPipelineManifestObject(values, upstream, resource)); + submitPipeline(createPipelineManifestObject(values, upstream, resource)); }} >
@@ -127,10 +135,6 @@ export const PipelineCard = (props: PipelineCardProps) => { ))}
- {/*
- Include resource pipeline - -
*/} ); }; diff --git a/src/coreform/documentdb/DocumentDbForm.tsx b/src/coreform/documentdb/DocumentDbForm.tsx index a21b98e..3d8e4f4 100644 --- a/src/coreform/documentdb/DocumentDbForm.tsx +++ b/src/coreform/documentdb/DocumentDbForm.tsx @@ -17,7 +17,6 @@ import { TableRow, Tooltip, } from '@material-ui/core'; -import GeneratePipelineButton from '../../components/common/GeneratePipelineButton'; import { cardStyles } from '../Styles'; import CardLayout from '../../components/common/CardLayout'; import { toMenuItems } from '../FormUtil'; diff --git a/src/coreform/elasticcache/ElasticCacheForm.tsx b/src/coreform/elasticcache/ElasticCacheForm.tsx index f9523a6..ebb78d0 100644 --- a/src/coreform/elasticcache/ElasticCacheForm.tsx +++ b/src/coreform/elasticcache/ElasticCacheForm.tsx @@ -16,7 +16,6 @@ import { FormikTextField } from '../../components/common/FormikTextField'; import * as _m from '../../models/Manifest'; import { FormikCheckbox } from '../../components/common/FormikCheckbox'; import CardLayout from '../../components/common/CardLayout'; -import GeneratePipelineButton from '../../components/common/GeneratePipelineButton'; import { Environment } from '../../constants/Environment'; import NotConfigured from '../NotConfiguredPanel'; import { toMenuItems } from '../FormUtil'; diff --git a/src/coreform/s3bucket/S3BucketForm.tsx b/src/coreform/s3bucket/S3BucketForm.tsx index 734e760..77db49a 100644 --- a/src/coreform/s3bucket/S3BucketForm.tsx +++ b/src/coreform/s3bucket/S3BucketForm.tsx @@ -11,15 +11,10 @@ import AddRemoveButton from '../../components/common/AddRemoveButton'; import NotConfigured from '../NotConfiguredPanel'; import CardLayout from '../../components/common/CardLayout'; import { FormikCheckbox } from '../../components/common/FormikCheckbox'; -import GeneratePipelineButton from '../../components/common/GeneratePipelineButton'; -import { List } from 'material-ui'; -import { FormikAutocomplete } from '../../components/common/FormikAutocomplete'; import FormikMultiSelect from '../../components/common/FormikMultiSelect'; import { FormikTable } from '../../components/common/FormikTable'; import { Announcement } from '../../components/common/Announcement'; import { Environment } from '../../constants/Environment'; -import { boolean } from 'yup'; -import { hasS3Bucket } from '../../models/Manifest'; import MenuItem from '@material-ui/core/MenuItem'; import { environmentsNeedingAllMetadataFields } from '../../components/manifest/MetadataForm';