ih-portal
Version:
A project for connecting interaction hub services with catalyst-ui components
76 lines (63 loc) • 2.07 kB
JSX
import React, { Component, PropTypes } from 'react';
import ObjectInspector from 'react-object-inspector';
export default class Courses extends Component {
constructor() {
super(...arguments);
this.invalidateCourses = this.invalidateCourses.bind(this);
this.copyToClipboard = this.copyToClipboard.bind(this);
}
componentDidMount() {
const { courses } = this.props;
if (!courses || (courses.lastAction && courses.lastAction.status === 'error') || !courses.data) {
const requestParams = {
url: __COURSES_URL__,
auth: [__USERNAME__, __PASSWORD__],
};
const institution = 'UCINN';
const subject = 'OM';
this.props.fetch(requestParams, subject, institution);
}
}
invalidateCourses() {
const requestParams = {
url: __COURSES_URL__,
auth: [__USERNAME__, __PASSWORD__],
};
const institution = 'UCINN';
const subject = '15MATH';
this.props.invalidate(requestParams, subject, institution);
}
copyToClipboard() {
const copyText = JSON.stringify(this.props.courses.data);
window.prompt('Copy Response:', copyText);
}
render() {
let isFetching = false;
let hasData = false;
let responseDisp = '';
if (this.props.courses) {
isFetching = this.props.courses.isFetching;
if (this.props.courses.data) {
hasData = true;
const json = this.props.courses.data;
responseDisp = <ObjectInspector data={json} />;
}
}
return (
<div>
<h2>Courses Service</h2>
<input className="invalidateBtn" type="button" value="Invalidate Courses" onClick={this.invalidateCourses} />
<input className="copyBtn" type="button" value="Copy Response" onClick={this.copyToClipboard} disabled={isFetching || !hasData} />
<br /><br/>
{isFetching ? <p>Fetching Data...</p> : responseDisp}
<br/>
</div>
);
}
}
const { func, object } = PropTypes;
Courses.propTypes = {
courses: object,
fetch: func.isRequired,
invalidate: func.isRequired,
};