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 = '
\n'; + this.articles.forEach(element => { + answer = `${answer}[${element.time}] ${element.category} - ${element.title}\n`; + }); + this.weathers.forEach(element => { + answer = `${answer}[${element.time}] ${element.temperature} C, ${element.pressure} P, ${ + element.humidity + } U\n`; + }); + console.log(`${answer}
`); } } diff --git a/src/views/mobile.ts b/src/views/mobile.ts index 02a2ba5..f085d14 100644 --- a/src/views/mobile.ts +++ b/src/views/mobile.ts @@ -1,12 +1,37 @@ 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 MobileView 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(-1); + } + if (observable instanceof WeatherState) { + this.weathers = observable.getMeasurements().slice(-1); + } + this.render(); } public render() { - throw new Error('Not implemented'); + let answer = '
\n'; + this.articles.forEach(element => { + if (element !== undefined) { + answer = `${answer}[${element.time}] ${element.category} - ${element.title}\n`; + } + }); + this.weathers.forEach(element => { + if (element !== undefined) { + answer = `${answer}[${element.time}] ${element.temperature} C, ${ + element.pressure + } P, ${element.humidity} U\n`; + } + }); + console.log(`${answer}
`); } }