| @@ -8,106 +8,111 @@ import wbFormatDate from 'wb-format-date'; | |||||
| import WBNameAndUuid from 'wb-name-and-uuid'; | import WBNameAndUuid from 'wb-name-and-uuid'; | ||||
| import WBAccordion from 'wb-accordion'; | import WBAccordion from 'wb-accordion'; | ||||
| import WBJsonViewer from 'wb-json-viewer'; | import WBJsonViewer from 'wb-json-viewer'; | ||||
| import wbUpdateField from 'wb-update-field'; | |||||
| import WBJsonEditor from 'wb-json-editor'; | |||||
| class WBContainerRequestFields extends Component { | class WBContainerRequestFields extends Component { | ||||
| componentDidMount() { | componentDidMount() { | ||||
| this.prepareRows(); | |||||
| this.fetchData(); | |||||
| } | } | ||||
| componentWillReceiveProps(nextProps) { | componentWillReceiveProps(nextProps) { | ||||
| this.props = nextProps; | this.props = nextProps; | ||||
| this.prepareRows(); | |||||
| this.fetchData(); | |||||
| } | } | ||||
| prepareRows() { | |||||
| prepareRows(item) { | |||||
| const { app } = this.props; | |||||
| const { arvHost, arvToken } = app.state; | |||||
| let rows = [ | |||||
| [ 'Name', item.name ], | |||||
| [ 'Description', item.description || (<i>{ String(item.description) }</i>) ], | |||||
| [ 'Properties', ( | |||||
| <WBJsonEditor name="Properties" app={ app } value={ item.properties } | |||||
| onChange={ value => wbUpdateField(arvHost, arvToken, item.uuid, 'properties', value) | |||||
| .then(() => { item.properties = value; this.prepareRows(item); }) } /> | |||||
| ) ], | |||||
| [ 'State', item.state ], | |||||
| [ 'Requesting Container', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.requesting_container_uuid } /> | |||||
| ) ], | |||||
| [ 'Container', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.container_uuid } /> | |||||
| ) ], | |||||
| [ 'Container Count Max', item.container_count_max ], | |||||
| [ 'Mounts', ( | |||||
| <WBAccordion names={ Object.keys(item.mounts) } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| { Object.keys(item.mounts).map(k => ( | |||||
| <WBJsonViewer app={ app } value={ item.mounts[k] } /> | |||||
| )) } | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Runtime Constraints', ( | |||||
| <WBAccordion names={ ['Runtime Constraints'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.runtime_constraints } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Scheduling Parameters', ( | |||||
| <WBAccordion names={ ['Scheduling Parameters'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.scheduling_parameters } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Container Image', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.container_image } /> | |||||
| ) ], | |||||
| [ 'Environment', ( | |||||
| <WBAccordion names={ ['Environment'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.environment } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Working Directory', item.cwd ], | |||||
| [ 'Command', ( | |||||
| <WBJsonViewer app={ app } value={ item.command } pretty={ false } /> | |||||
| ) ], | |||||
| [ 'Output Path', item.output_path ], | |||||
| [ 'Output Name', item.output_name ], | |||||
| [ 'Output TTL', item.output_ttl ], | |||||
| [ 'Priority', item.priority ], | |||||
| [ 'Expires At', wbFormatDate(item.expires_at) ], | |||||
| [ 'Use Existing', String(item.use_existing) ], | |||||
| [ 'Log', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.log_uuid } /> | |||||
| ) ], | |||||
| [ 'Output', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.output_uuid } /> | |||||
| ) ], | |||||
| [ 'Filters', ( | |||||
| item.filters ? (<WBJsonViewer app={ app } value={ item.filters } />) : (<i>{ String(item.filters) }</i>) | |||||
| ) ], | |||||
| [ 'Runtime Token', item.runtime_token || (<i>{ String(item.runtime_token) }</i>) ], | |||||
| [ 'Runtime User', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.runtime_user } /> | |||||
| ) ], | |||||
| [ 'Runtime Auth Scopes', ( | |||||
| item.runtime_auth_scopes ? ( | |||||
| <WBJsonViewer app={ app } value={ item.runtime_auth_scopes } /> | |||||
| ) : ( | |||||
| <i>{ String(item.runtime_auth_scopes) }</i> | |||||
| ) | |||||
| ) ] | |||||
| ]; | |||||
| rows = rows.map(r => [r[0], r[1] ? r[1] : (<i>{ String(r[1]) }</i>)]); | |||||
| this.setState({ rows }); | |||||
| } | |||||
| fetchData() { | |||||
| let { uuid, app } = this.props; | let { uuid, app } = this.props; | ||||
| let { arvHost, arvToken } = app.state; | let { arvHost, arvToken } = app.state; | ||||
| let item; | let item; | ||||
| let prom = makeArvadosRequest(arvHost, arvToken, | let prom = makeArvadosRequest(arvHost, arvToken, | ||||
| '/arvados/v1/container_requests/' + uuid); | '/arvados/v1/container_requests/' + uuid); | ||||
| prom = prom.then(xhr => (item = xhr.response)); | |||||
| prom = prom.then(() => { | |||||
| let rows = [ | |||||
| [ 'Name', item.name ], | |||||
| [ 'Description', item.description || (<i>{ String(item.description) }</i>) ], | |||||
| [ 'Properties', ( | |||||
| <WBAccordion names={ ['Properties'] } cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.properties } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'State', item.state ], | |||||
| [ 'Requesting Container', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.requesting_container_uuid } /> | |||||
| ) ], | |||||
| [ 'Container', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.container_uuid } /> | |||||
| ) ], | |||||
| [ 'Container Count Max', item.container_count_max ], | |||||
| [ 'Mounts', ( | |||||
| <WBAccordion names={ Object.keys(item.mounts) } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| { Object.keys(item.mounts).map(k => ( | |||||
| <WBJsonViewer app={ app } value={ item.mounts[k] } /> | |||||
| )) } | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Runtime Constraints', ( | |||||
| <WBAccordion names={ ['Runtime Constraints'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.runtime_constraints } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Scheduling Parameters', ( | |||||
| <WBAccordion names={ ['Scheduling Parameters'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.scheduling_parameters } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Container Image', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.container_image } /> | |||||
| ) ], | |||||
| [ 'Environment', ( | |||||
| <WBAccordion names={ ['Environment'] } | |||||
| cardHeaderClass="card-header-sm"> | |||||
| <WBJsonViewer app={ app } value={ item.environment } /> | |||||
| </WBAccordion> | |||||
| ) ], | |||||
| [ 'Working Directory', item.cwd ], | |||||
| [ 'Command', ( | |||||
| <WBJsonViewer app={ app } value={ item.command } pretty={ false } /> | |||||
| ) ], | |||||
| [ 'Output Path', item.output_path ], | |||||
| [ 'Output Name', item.output_name ], | |||||
| [ 'Output TTL', item.output_ttl ], | |||||
| [ 'Priority', item.priority ], | |||||
| [ 'Expires At', wbFormatDate(item.expires_at) ], | |||||
| [ 'Use Existing', String(item.use_existing) ], | |||||
| [ 'Log', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.log_uuid } /> | |||||
| ) ], | |||||
| [ 'Output', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.output_uuid } /> | |||||
| ) ], | |||||
| [ 'Filters', ( | |||||
| item.filters ? (<WBJsonViewer app={ app } value={ item.filters } />) : (<i>{ String(item.filters) }</i>) | |||||
| ) ], | |||||
| [ 'Runtime Token', item.runtime_token || (<i>{ String(item.runtime_token) }</i>) ], | |||||
| [ 'Runtime User', ( | |||||
| <WBNameAndUuid app={ app } uuid={ item.runtime_user } /> | |||||
| ) ], | |||||
| [ 'Runtime Auth Scopes', ( | |||||
| item.runtime_auth_scopes ? ( | |||||
| <WBJsonViewer app={ app } value={ item.runtime_auth_scopes } /> | |||||
| ) : ( | |||||
| <i>{ String(item.runtime_auth_scopes) }</i> | |||||
| ) | |||||
| ) ] | |||||
| ]; | |||||
| rows = rows.map(r => [r[0], r[1] ? r[1] : (<i>{ String(r[1]) }</i>)]); | |||||
| this.setState({ 'rows': rows }); | |||||
| }); | |||||
| prom = prom.then(xhr => this.prepareRows(xhr.response)); | |||||
| } | } | ||||
| render({}, { rows }) { | render({}, { rows }) { | ||||