import * as React from "react"; import Build from "./build"; import Throbber from "./throbber"; interface IBody { description: string; api: Object; repository: Object; } interface IBodyState { currentBuild: any; intervalId: number; } /** * The Component for the main body of the repo page * @param {string} description - The description of the repository * @param {object} api - The ApiService injected from Angular * @param {object} repository - The list of properties for the repository */ class body extends React.Component { static propTypes = { description: React.PropTypes.string.isRequired, api: React.PropTypes.object.isRequired, repository: React.PropTypes.object.isRequired, } constructor(props){ super(props) this.state = { currentBuild: [], intervalId: null }; } componentDidMount() { let intervalId: number = window.setInterval(() => this.getBuilds(), 1000); this.setState({ currentBuild: this.state.currentBuild, intervalId: intervalId }); } comoponentDidUnmount() { clearInterval(this.state.intervalId); } getBuilds() { let api: any = this.props.api; let repository: any = this.props.repository; let params: Object = { 'repository': repository.namespace + '/' + repository.name, 'limit': 8 }; api.getRepoBuildsAsResource(params, true).get((data) => { let builds: Array = []; data.builds.forEach((element, i) => { builds.push({ user: element.manual_user, id: element.id, display_name: element.display_name, started: element.started, tags: element.tags, phase: element.phase, trigger: element.trigger, trigger_metadata: element.trigger_metadata }); }); this.setState({ currentBuild: builds, intervalId: this.state.intervalId }); }); } render () { let description: string = this.props.description; if (description === null || description === "") { description = "No Description"; } return(
{description}

Repository Builds

); } } export default body;