import * as React from 'react'; import * as ReactDOM from 'react-dom'; import ScheduleRow from './schedule-row'; import axios from 'axios'; import { schedule, editor, config } from './models'; interface AppProps { height: number, config: { site: string, api: string, cdn: string }, editor: editor, window: any } interface AppState { schedules: Array accessToken: string, networkError?: boolean } export default class App extends React.Component { private CONSTANTS = { accessToken: 'whenhub-accessToken' } constructor(props) { super(); this.state = { schedules: [], accessToken: null } } componentDidMount() { const accessToken = localStorage.getItem(this.CONSTANTS.accessToken); if (accessToken) { this.setState({ accessToken }); this.fetchSchedules(accessToken); } } fetchSchedules(accessToken: string) { return axios.get(`${this.props.config.api}users/me/schedules?filter[include]=media&access_token=${accessToken}`).then(response => { this.setState({ schedules: response.data }); }).catch(err => { if (err.response && err.response.status === 401) { this.logout(); } if (err.message === 'Network Error') { this.setState({ networkError: true }); } }); } logout() { localStorage.removeItem(this.CONSTANTS.accessToken); this.setState({ accessToken: null }); } login() { let action = (event) => { let payload; try { if (typeof event.data === 'string') { payload = JSON.parse(event.data); } else { payload = event.data; } } catch (error) { window.removeEventListener('message', action, false); return console.error('Unable to parse event', event); } if (payload && payload.action === 'LOGIN_COMPLETED') { localStorage.setItem(this.CONSTANTS.accessToken, payload.data.accessToken); this.setState({ accessToken: payload.data.accessToken }) this.fetchSchedules(payload.data.accessToken); } window.removeEventListener('message', action, false); }; window.addEventListener('message', action); window.open(window['whenhub'].site + 'signin#login', 'AuthWindow', 'width=450, height=600'); } retryFetchSchedules() { this.setState({ networkError: false }); this.fetchSchedules(this.state.accessToken); } render() { if (this.state.accessToken) { let children = this.state.schedules.map(s => { return }); const logout =
; if (children.length === 0) { return
{!this.state.networkError ?
Loading...
:
Failed to communicate with WhenHub. Please try again
} {logout}
} children.unshift(
  • Click schedule to insert shortcode or open in WhenHub studio
  • ) return (
      {children}
    {logout}
    ) } return } }