diff options
migration #8 - break out NoticeController substate
Diffstat (limited to 'app/scripts/notice-controller.js')
-rw-r--r-- | app/scripts/notice-controller.js | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/app/scripts/notice-controller.js b/app/scripts/notice-controller.js index c3777b4b1..ba7c68df4 100644 --- a/app/scripts/notice-controller.js +++ b/app/scripts/notice-controller.js @@ -1,36 +1,37 @@ const EventEmitter = require('events').EventEmitter +const extend = require('xtend') +const ObservableStore = require('obs-store') const hardCodedNotices = require('../../notices/notices.json') module.exports = class NoticeController extends EventEmitter { constructor (opts) { super() - this.configManager = opts.configManager this.noticePoller = null + const initState = extend({ + noticesList: [], + }, opts.initState) + this.store = new ObservableStore(initState) + this.memStore = new ObservableStore({}) + this.store.subscribe(() => this._updateMemstore()) } - getState () { - var lastUnreadNotice = this.getLatestUnreadNotice() + getNoticesList () { + return this.store.getState().noticesList + } - return { - lastUnreadNotice: lastUnreadNotice, - noActiveNotices: !lastUnreadNotice, - } + getUnreadNotices () { + const notices = this.getNoticesList() + return notices.filter((notice) => notice.read === false) } - getNoticesList () { - var data = this.configManager.getData() - if ('noticesList' in data) { - return data.noticesList - } else { - return [] - } + getLatestUnreadNotice () { + const unreadNotices = this.getUnreadNotices() + return unreadNotices[unreadNotices.length - 1] } - setNoticesList (list) { - var data = this.configManager.getData() - data.noticesList = list - this.configManager.setData(data) + setNoticesList (noticesList) { + this.store.updateState({ noticesList }) return Promise.resolve(true) } @@ -56,14 +57,6 @@ module.exports = class NoticeController extends EventEmitter { }) } - getLatestUnreadNotice () { - var notices = this.getNoticesList() - var filteredNotices = notices.filter((notice) => { - return notice.read === false - }) - return filteredNotices[filteredNotices.length - 1] - } - startPolling () { if (this.noticePoller) { clearInterval(this.noticePoller) @@ -92,5 +85,10 @@ module.exports = class NoticeController extends EventEmitter { return Promise.resolve(hardCodedNotices) } + _updateMemstore () { + const lastUnreadNotice = this.getLatestUnreadNotice() + const noActiveNotices = !lastUnreadNotice + this.memStore.updateState({ lastUnreadNotice, noActiveNotices }) + } } |