Skip to content

Commit

Permalink
Implemented basic mvc architecture and dummy async API request
Browse files Browse the repository at this point in the history
  • Loading branch information
Eleazar Meza committed Feb 6, 2020
1 parent e0899c6 commit 6cec505
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# MacOS
.DS_Store

# Logs
logs
*.log
Expand Down
3 changes: 3 additions & 0 deletions src/assets/css/weather.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* {
color: red;
}
14 changes: 14 additions & 0 deletions src/controllers/weather_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class WeatherController {
constructor(weatherModel, weatherView) {
this.weatherModel = weatherModel;
this.weatherView = weatherView;
this.weatherModel.updated.addListener(this.weatherView.update);
}

run() {
this.weatherView.render();
this.weatherModel.get();
}
}

export default WeatherController;
1 change: 0 additions & 1 deletion src/index.js

This file was deleted.

9 changes: 9 additions & 0 deletions src/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Weather from './models/weather';
import WeatherView from './views/weather_view';
import WeatherController from './controllers/weather_controller';

const weather = new Weather('Dolartoday');
const weatherView = new WeatherView;
const app = new WeatherController(weather, weatherView);

app.run();
16 changes: 16 additions & 0 deletions src/models/event.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Event {
constructor(sender) {
this.sender = sender;
this.listeners = [];
}

addListener(listener) {
this.listeners.push(listener);
}

notify(args) {
this.listeners.forEach(listener => listener(this.sender, args));
}
}

export default Event;
21 changes: 21 additions & 0 deletions src/models/weather.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import Event from './event';

class Weather {
constructor(location) {
this.location = location;
this.updated = new Event(this);
}

get() {
fetch('https://s3.amazonaws.com/dolartoday/data.json', { mode: 'cors' })
.then(response => response.json())
.then(data => { this.updated.notify(data['USD']['dolartoday']); });
}

changeLocation(location) {
this.location = location;
this.get();
}
}

export default Weather;
15 changes: 15 additions & 0 deletions src/views/weather_view.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class WeatherView {
constructor() {

}

update(weather, response) {
document.body.innerHTML = weather.location + ': ' + response;
}

render() {
document.body.innerHTML = 'Plz wait...';
}
}

export default WeatherView;
2 changes: 1 addition & 1 deletion webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const path = require('path');

module.exports = {
entry: './src/index.js',
entry: './src/main.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
Expand Down

0 comments on commit 6cec505

Please sign in to comment.