From b17be18dfd39694e0db63998fd8f52d44c95fd85 Mon Sep 17 00:00:00 2001 From: sanne raymaekers Date: Fri, 17 Apr 2020 15:37:22 +0200 Subject: [PATCH] components: Show status of image composes --- .../LandingPage/CreateImageCard.js | 28 +++------- .../LandingPage/LandingPage.js | 18 +++++- .../LandingPage/PendingImagesCard.js | 56 +++++++++++++++++++ 3 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 src/SmartComponents/LandingPage/PendingImagesCard.js diff --git a/src/SmartComponents/LandingPage/CreateImageCard.js b/src/SmartComponents/LandingPage/CreateImageCard.js index 46465ce1..68f2aa47 100644 --- a/src/SmartComponents/LandingPage/CreateImageCard.js +++ b/src/SmartComponents/LandingPage/CreateImageCard.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { @@ -9,8 +10,6 @@ import { FlexModifiers, Form, FormGroup, - FormSelect, - FormSelectOption, } from '@patternfly/react-core'; import { DefaultApi } from '@redhat-cloud-services/osbuild-installer'; @@ -33,9 +32,8 @@ class CreateImageCard extends Component { }] }; let api = new DefaultApi(); - api.osbuildInstallerViewsV1BuildImage(request).then(x => { - console.log('response', x); - alert('composing ' + x.data.compose_id); + api.composeImage(request).then(response => { + this.props.onCompose(response.data.compose_id); }); } @@ -43,25 +41,11 @@ class CreateImageCard extends Component { return ( Create a new image - - - - {[ '8-2', '8-1' ].map((option, index) => ( - - ))} - - -
- - - - - - +
@@ -70,4 +54,8 @@ class CreateImageCard extends Component { } } +CreateImageCard.propTypes = { + onCompose: PropTypes.func, +}; + export default CreateImageCard; diff --git a/src/SmartComponents/LandingPage/LandingPage.js b/src/SmartComponents/LandingPage/LandingPage.js index cf950e4f..42d098aa 100644 --- a/src/SmartComponents/LandingPage/LandingPage.js +++ b/src/SmartComponents/LandingPage/LandingPage.js @@ -9,6 +9,7 @@ import { } from '@redhat-cloud-services/frontend-components'; import CreateImageCard from './CreateImageCard'; +import PendingImagesCard from './PendingImagesCard.js'; /** * A smart component that handles all the api calls and data needed by the dumb components. @@ -20,6 +21,18 @@ import CreateImageCard from './CreateImageCard'; class LandingPage extends Component { constructor(props) { super(props); + + this.state = { + pendingComposeIds: [], + }; + + this.onPendingCompose = this.onPendingCompose.bind(this); + } + + onPendingCompose(composeId) { + this.setState(oldState => { + return { pendingComposeIds: oldState.pendingComposeIds.concat(composeId) }; + }); } render() { @@ -31,7 +44,10 @@ class LandingPage extends Component {
- + + + +
diff --git a/src/SmartComponents/LandingPage/PendingImagesCard.js b/src/SmartComponents/LandingPage/PendingImagesCard.js new file mode 100644 index 00000000..1d420a1d --- /dev/null +++ b/src/SmartComponents/LandingPage/PendingImagesCard.js @@ -0,0 +1,56 @@ +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; + +import { + Card, + CardHeader, + CardBody, +} from '@patternfly/react-core'; + +import { DefaultApi } from '@redhat-cloud-services/osbuild-installer'; + +class PendingImagesCard extends Component { + constructor(props) { + super(props); + + this.state = { + composeStatuses: {}, + }; + + this.pollComposeIds = this.pollComposeIds.bind(this); + } + + componentDidMount() { + this.interval = setInterval(() => this.pollComposeIds(), 8000); + } + + pollComposeIds() { + let api = new DefaultApi(); + for (let id of this.props.pendingComposeIds) { + api.getComposeStatus(id).then(response => { + this.setState(oldState => { + let composeStatuses = Object.assign({}, oldState.composeStatuses); + composeStatuses[id] = response.data.status; + return { composeStatuses }; + }); + }); + } + } + + render() { + return ( + + Pending composes + { Object.entries(this.state.composeStatuses).map(([ id, status ]) => { + return

{ status }

; + }) + } +
); + } +} + +PendingImagesCard.propTypes = { + pendingComposeIds: PropTypes.array, +}; + +export default PendingImagesCard;