// // Copyright (C) Stanislaw Adaszewski, 2020 // Contact: s.adaszewski@gmail.com // Website: https://adared.ch/wba // License: GNU Affero General Public License, Version 3 // import { h, Component } from 'preact'; import makeArvadosRequest from 'make-arvados-request'; import wbProcessStateName from 'wb-process-state-name'; class WBProcessState extends Component { componentDidMount() { if (!this.props.lazy) this.fetchData(); } componentWillReceiveProps(nextProps) { if (this.props.lazy) { this.setState({ container: null, apiError: null }); } else { this.props = nextProps; this.fetchData(); } } fetchData() { const { app, process } = this.props; const { arvHost, arvToken } = app.state; if (!process.container_uuid) return; let prom = makeArvadosRequest(arvHost, arvToken, '/arvados/v1/containers/' + process.container_uuid); prom = prom.then(xhr => this.setState({ 'container': xhr.response })); prom = prom.catch(() => this.setState({ 'apiError': 'Failed to fetch container' })); } render({ process, lazy }, { container, apiError }) { const runtimeStatus = container ? container.runtime_status : null; const error = runtimeStatus ? runtimeStatus.error : null; const warning = runtimeStatus ? runtimeStatus.warning : null; return (
{ wbProcessStateName(process, container) } { apiError ? { [ ' / ', apiError ] } : null } { error ? [" / ", E ] : null } { warning ? [ " / ", W ] : null } {} { lazy && !container && !apiError ? ( { e.preventDefault(); this.fetchData(); } }> ) : null }
); } } export default WBProcessState;