import React from 'react';
import './coordinate.css';
import Spinner from '../spinner';
import ServiceApi from '../../services/service-api';
export default class Coordinate extends React.Component {
constructor(props) {
super(props);
this.state = {
coordinate: {},
loading: true,
error: false,
}
this.apiService = new ServiceApi();
this.onCoordinateLoaded = this.onCoordinateLoaded.bind(this);
this.onError = this.onError.bind(this);
}
componentDidMount() {
this.interval = setInterval(this.updateCoordinate.bind(this), 2000);
}
onCoordinateLoaded(coor) {
this.setState({
coordinate: coor,
loading: false
})
}
onError(err) {
this.setState({
loading: false,
error: true
});
}
updateCoordinate() {
this.apiService
.getCoordinate()
.then(this.onCoordinateLoaded)
.catch(this.onError)
}
render() {
const {coordinate, loading, error} = this.state;
const errorMessage = error ? <ErrorIndicator /> : null;
const spinner = loading ? <Spinner /> : null;
const content = !(loading || error) ? <CoordinateView coordinate={coordinate} /> : null;
return (
<div className="coordinate">
<h3>ISS is now located at:</h3>
{errorMessage}
{spinner}
{content}
</div>
);
}
}
const CoordinateView = ({coordinate}) => {
const { latitude, longitude } = coordinate;
return (
<React.Fragment>
<span>latitude: {latitude}</span>
<span>longitude: {longitude}</span>
</React.Fragment>
);
}
const ErrorIndicator = (err) => {
return (
<span>Erorr, Sorry!</span>
);
}