diff --git a/src/state/news/index.ts b/src/state/news/index.ts index 02ef131..aefeccb 100644 --- a/src/state/news/index.ts +++ b/src/state/news/index.ts @@ -2,11 +2,14 @@ import { Observable } from '../../utils/observable'; import { IArticle, INewsState } from './types'; export class NewsState extends Observable implements INewsState { + private articles: IArticle[] = []; + public getArticles() { - return []; + return this.articles; } public setArticles(articles: IArticle[]) { - throw new Error('Not implemented'); + this.articles = articles; + this.notifyObservers(); } } diff --git a/src/state/weather/index.ts b/src/state/weather/index.ts index 2ac4584..3377879 100644 --- a/src/state/weather/index.ts +++ b/src/state/weather/index.ts @@ -2,11 +2,14 @@ import { IMeasurement, IWeatherState } from './types'; import { Observable } from '../../utils/observable'; export class WeatherState extends Observable implements IWeatherState { + private measurements: IMeasurement[] = []; + public getMeasurements() { - return []; + return this.measurements; } public setMeasurements(measurements: IMeasurement[]) { - throw new Error('Not implemented'); + this.measurements = measurements; + this.notifyObservers(); } } diff --git a/src/utils/observable/index.ts b/src/utils/observable/index.ts index 022cdb8..292c067 100644 --- a/src/utils/observable/index.ts +++ b/src/utils/observable/index.ts @@ -1,15 +1,18 @@ import { IObservable, IObserver } from './types'; export class Observable implements IObservable { + private observers: IObserver[] = []; public addObserver(observer: IObserver) { - throw new Error('Not implemented'); + this.observers.push(observer); } public deleteObserver(observer: IObserver) { - throw new Error('Not implemented'); + this.observers = this.observers.filter(element => element !== observer); } public notifyObservers() { - throw new Error('Not implemented'); + this.observers.forEach(element => { + element.update(this); + }); } } diff --git a/src/views/desktop.ts b/src/views/desktop.ts index 98c881d..6ac01c9 100644 --- a/src/views/desktop.ts +++ b/src/views/desktop.ts @@ -1,12 +1,33 @@ import { IObservable, IObserver } from '../utils/observable/types'; import { IView } from './types'; +import { NewsState } from '../state/news'; +import { WeatherState } from '../state/weather'; +import { IArticle } from '../state/news/types'; +import { IMeasurement } from '../state/weather/types'; export class DesktopView implements IObserver, IView { + private articles: IArticle[] = []; + private weathers: IMeasurement[] = []; public update(observable: IObservable) { - throw new Error('Not implemented'); + if (observable instanceof NewsState) { + this.articles = observable.getArticles().slice(-3); + } + if (observable instanceof WeatherState) { + this.weathers = observable.getMeasurements().slice(-2); + } + this.render(); } public render() { - throw new Error('Not implemented'); + let answer = '