1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 09:23:21 +01:00

notices - replace getLatestNotice with getNextNotice

This commit is contained in:
kumavis 2018-06-13 23:30:31 -07:00
parent ac8b56a00d
commit 44a8e48a04
12 changed files with 39 additions and 97 deletions

View File

@ -189,9 +189,6 @@ module.exports = class MetamaskController extends EventEmitter {
version, version,
firstVersion: initState.firstTimeInfo.version, firstVersion: initState.firstTimeInfo.version,
}) })
this.noticeController.updateNoticesList()
// to be uncommented when retrieving notices from a remote server.
// this.noticeController.startPolling()
this.shapeshiftController = new ShapeShiftController({ this.shapeshiftController = new ShapeShiftController({
initState: initState.ShapeShiftController, initState: initState.ShapeShiftController,

View File

@ -13,7 +13,7 @@ module.exports = class NoticeController extends EventEmitter {
this.firstVersion = opts.firstVersion this.firstVersion = opts.firstVersion
this.version = opts.version this.version = opts.version
const initState = extend({ const initState = extend({
noticesList: [], noticesList: hardCodedNotices,
}, opts.initState) }, opts.initState)
this.store = new ObservableStore(initState) this.store = new ObservableStore(initState)
this.memStore = new ObservableStore({}) this.memStore = new ObservableStore({})
@ -29,9 +29,9 @@ module.exports = class NoticeController extends EventEmitter {
return notices.filter((notice) => notice.read === false) return notices.filter((notice) => notice.read === false)
} }
getLatestUnreadNotice () { getNextUnreadNotice () {
const unreadNotices = this.getUnreadNotices() const unreadNotices = this.getUnreadNotices()
return unreadNotices[unreadNotices.length - 1] return unreadNotices[0]
} }
async setNoticesList (noticesList) { async setNoticesList (noticesList) {
@ -47,7 +47,7 @@ module.exports = class NoticeController extends EventEmitter {
notices[index].read = true notices[index].read = true
notices[index].body = '' notices[index].body = ''
this.setNoticesList(notices) this.setNoticesList(notices)
const latestNotice = this.getLatestUnreadNotice() const latestNotice = this.getNextUnreadNotice()
cb(null, latestNotice) cb(null, latestNotice)
} catch (err) { } catch (err) {
cb(err) cb(err)
@ -64,15 +64,6 @@ module.exports = class NoticeController extends EventEmitter {
return result return result
} }
startPolling () {
if (this.noticePoller) {
clearInterval(this.noticePoller)
}
this.noticePoller = setInterval(() => {
this.noticeController.updateNoticesList()
}, 300000)
}
_mergeNotices (oldNotices, newNotices) { _mergeNotices (oldNotices, newNotices) {
return uniqBy(oldNotices.concat(newNotices), 'id') return uniqBy(oldNotices.concat(newNotices), 'id')
} }
@ -91,19 +82,15 @@ module.exports = class NoticeController extends EventEmitter {
}) })
} }
_mapNoticeIds (notices) {
return notices.map((notice) => notice.id)
}
async _retrieveNoticeData () { async _retrieveNoticeData () {
// Placeholder for the API. // Placeholder for the API.
return hardCodedNotices return []
} }
_updateMemstore () { _updateMemstore () {
const lastUnreadNotice = this.getLatestUnreadNotice() const nextUnreadNotice = this.getNextUnreadNotice()
const noActiveNotices = !lastUnreadNotice const noActiveNotices = !nextUnreadNotice
this.memStore.updateState({ lastUnreadNotice, noActiveNotices }) this.memStore.updateState({ nextUnreadNotice, noActiveNotices })
} }
} }

View File

@ -52,7 +52,7 @@
"conversionRate": 12.7200827, "conversionRate": 12.7200827,
"conversionDate": 1487363041, "conversionDate": 1487363041,
"noActiveNotices": true, "noActiveNotices": true,
"lastUnreadNotice": { "nextUnreadNotice": {
"read": true, "read": true,
"date": "Thu Feb 09 2017", "date": "Thu Feb 09 2017",
"title": "Terms of Use", "title": "Terms of Use",

View File

@ -12,7 +12,7 @@
"conversionRate": 12.7527416, "conversionRate": 12.7527416,
"conversionDate": 1487624341, "conversionDate": 1487624341,
"noActiveNotices": false, "noActiveNotices": false,
"lastUnreadNotice": { "nextUnreadNotice": {
"read": false, "read": false,
"date": "Thu Feb 09 2017", "date": "Thu Feb 09 2017",
"title": "Terms of Use", "title": "Terms of Use",

View File

@ -13,7 +13,7 @@
"conversionRate": 8.3533002, "conversionRate": 8.3533002,
"conversionDate": 1481671082, "conversionDate": 1481671082,
"noActiveNotices": false, "noActiveNotices": false,
"lastUnreadNotice": { "nextUnreadNotice": {
"read": false, "read": false,
"date": "Tue Dec 13 2016", "date": "Tue Dec 13 2016",
"title": "MultiVault Support", "title": "MultiVault Support",

View File

@ -14,7 +14,7 @@ import LoadingScreen from './loading-screen'
class NoticeScreen extends Component { class NoticeScreen extends Component {
static propTypes = { static propTypes = {
address: PropTypes.string.isRequired, address: PropTypes.string.isRequired,
lastUnreadNotice: PropTypes.shape({ nextUnreadNotice: PropTypes.shape({
title: PropTypes.string, title: PropTypes.string,
date: PropTypes.string, date: PropTypes.string,
body: PropTypes.string, body: PropTypes.string,
@ -31,7 +31,7 @@ class NoticeScreen extends Component {
}; };
static defaultProps = { static defaultProps = {
lastUnreadNotice: {}, nextUnreadNotice: {},
}; };
state = { state = {
@ -47,8 +47,8 @@ class NoticeScreen extends Component {
} }
acceptTerms = () => { acceptTerms = () => {
const { markNoticeRead, lastUnreadNotice, history } = this.props const { markNoticeRead, nextUnreadNotice, history } = this.props
markNoticeRead(lastUnreadNotice) markNoticeRead(nextUnreadNotice)
.then(hasActiveNotices => { .then(hasActiveNotices => {
if (!hasActiveNotices) { if (!hasActiveNotices) {
history.push(INITIALIZE_BACKUP_PHRASE_ROUTE) history.push(INITIALIZE_BACKUP_PHRASE_ROUTE)
@ -72,7 +72,7 @@ class NoticeScreen extends Component {
render () { render () {
const { const {
address, address,
lastUnreadNotice: { title, body }, nextUnreadNotice: { title, body },
isLoading, isLoading,
} = this.props } = this.props
const { atBottom } = this.state const { atBottom } = this.state
@ -113,12 +113,12 @@ class NoticeScreen extends Component {
} }
const mapStateToProps = ({ metamask, appState }) => { const mapStateToProps = ({ metamask, appState }) => {
const { selectedAddress, lastUnreadNotice, noActiveNotices } = metamask const { selectedAddress, nextUnreadNotice, noActiveNotices } = metamask
const { isLoading } = appState const { isLoading } = appState
return { return {
address: selectedAddress, address: selectedAddress,
lastUnreadNotice, nextUnreadNotice,
noActiveNotices, noActiveNotices,
isLoading, isLoading,
} }

View File

@ -73,7 +73,7 @@ function mapStateToProps (state) {
network: state.metamask.network, network: state.metamask.network,
provider: state.metamask.provider, provider: state.metamask.provider,
forgottenPassword: state.appState.forgottenPassword, forgottenPassword: state.appState.forgottenPassword,
lastUnreadNotice: state.metamask.lastUnreadNotice, nextUnreadNotice: state.metamask.nextUnreadNotice,
lostAccounts: state.metamask.lostAccounts, lostAccounts: state.metamask.lostAccounts,
frequentRpcList: state.metamask.frequentRpcList || [], frequentRpcList: state.metamask.frequentRpcList || [],
featureFlags, featureFlags,
@ -460,9 +460,9 @@ App.prototype.renderPrimary = function () {
}, [ }, [
h(NoticeScreen, { h(NoticeScreen, {
notice: props.lastUnreadNotice, notice: props.nextUnreadNotice,
key: 'NoticeScreen', key: 'NoticeScreen',
onConfirm: () => props.dispatch(actions.markNoticeRead(props.lastUnreadNotice)), onConfirm: () => props.dispatch(actions.markNoticeRead(props.nextUnreadNotice)),
}), }),
!props.isInitialized && h('.flex-row.flex-center.flex-grow', [ !props.isInitialized && h('.flex-row.flex-center.flex-grow', [

View File

@ -14,18 +14,6 @@ describe('notice-controller', function () {
}) })
describe('notices', function () { describe('notices', function () {
describe('#getNoticesList', function () {
it('should return an empty array when new', function (done) {
// const testList = [{
// id: 0,
// read: false,
// title: 'Futuristic Notice',
// }]
var result = noticeController.getNoticesList()
assert.equal(result.length, 0)
done()
})
})
describe('#setNoticesList', function () { describe('#setNoticesList', function () {
it('should set data appropriately', function (done) { it('should set data appropriately', function (done) {
@ -41,36 +29,6 @@ describe('notice-controller', function () {
}) })
}) })
describe('#updateNoticeslist', function () {
it('should integrate the latest changes from the source', function (done) {
var testList = [{
id: 55,
read: false,
title: 'Futuristic Notice',
}]
noticeController.setNoticesList(testList)
noticeController.updateNoticesList().then(() => {
var newList = noticeController.getNoticesList()
assert.ok(newList[0].id === 55)
assert.ok(newList[1])
done()
})
})
it('should not overwrite any existing fields', function (done) {
var testList = [{
id: 0,
read: false,
title: 'Futuristic Notice',
}]
noticeController.setNoticesList(testList)
var newList = noticeController.getNoticesList()
assert.equal(newList[0].id, 0)
assert.equal(newList[0].title, 'Futuristic Notice')
assert.equal(newList.length, 1)
done()
})
})
describe('#markNoticeRead', function () { describe('#markNoticeRead', function () {
it('should mark a notice as read', function (done) { it('should mark a notice as read', function (done) {
var testList = [{ var testList = [{
@ -86,7 +44,7 @@ describe('notice-controller', function () {
}) })
}) })
describe('#getLatestUnreadNotice', function () { describe('#getNextUnreadNotice', function () {
it('should retrieve the latest unread notice', function (done) { it('should retrieve the latest unread notice', function (done) {
var testList = [ var testList = [
{id: 0, read: true, title: 'Past Notice'}, {id: 0, read: true, title: 'Past Notice'},
@ -94,8 +52,8 @@ describe('notice-controller', function () {
{id: 2, read: false, title: 'Future Notice'}, {id: 2, read: false, title: 'Future Notice'},
] ]
noticeController.setNoticesList(testList) noticeController.setNoticesList(testList)
var latestUnread = noticeController.getLatestUnreadNotice() var latestUnread = noticeController.getNextUnreadNotice()
assert.equal(latestUnread.id, 2) assert.equal(latestUnread.id, 1)
done() done()
}) })
it('should return undefined if no unread notices exist.', function (done) { it('should return undefined if no unread notices exist.', function (done) {
@ -105,7 +63,7 @@ describe('notice-controller', function () {
{id: 2, read: true, title: 'Future Notice'}, {id: 2, read: true, title: 'Future Notice'},
] ]
noticeController.setNoticesList(testList) noticeController.setNoticesList(testList)
var latestUnread = noticeController.getLatestUnreadNotice() var latestUnread = noticeController.getNextUnreadNotice()
assert.ok(!latestUnread) assert.ok(!latestUnread)
done() done()
}) })

View File

@ -314,7 +314,7 @@ function mapStateToProps (state) {
noActiveNotices, noActiveNotices,
seedWords, seedWords,
unapprovedTxs, unapprovedTxs,
lastUnreadNotice, nextUnreadNotice,
lostAccounts, lostAccounts,
unapprovedMsgCount, unapprovedMsgCount,
unapprovedPersonalMsgCount, unapprovedPersonalMsgCount,
@ -348,7 +348,7 @@ function mapStateToProps (state) {
network: state.metamask.network, network: state.metamask.network,
provider: state.metamask.provider, provider: state.metamask.provider,
forgottenPassword: state.appState.forgottenPassword, forgottenPassword: state.appState.forgottenPassword,
lastUnreadNotice, nextUnreadNotice,
lostAccounts, lostAccounts,
frequentRpcList: state.metamask.frequentRpcList || [], frequentRpcList: state.metamask.frequentRpcList || [],
currentCurrency: state.metamask.currentCurrency, currentCurrency: state.metamask.currentCurrency,

View File

@ -86,9 +86,9 @@ class Home extends Component {
// if (!props.noActiveNotices) { // if (!props.noActiveNotices) {
// log.debug('rendering notice screen for unread notices.') // log.debug('rendering notice screen for unread notices.')
// return h(NoticeScreen, { // return h(NoticeScreen, {
// notice: props.lastUnreadNotice, // notice: props.nextUnreadNotice,
// key: 'NoticeScreen', // key: 'NoticeScreen',
// onConfirm: () => props.dispatch(actions.markNoticeRead(props.lastUnreadNotice)), // onConfirm: () => props.dispatch(actions.markNoticeRead(props.nextUnreadNotice)),
// }) // })
// } else if (props.lostAccounts && props.lostAccounts.length > 0) { // } else if (props.lostAccounts && props.lostAccounts.length > 0) {
// log.debug('rendering notice screen for lost accounts view.') // log.debug('rendering notice screen for lost accounts view.')
@ -279,7 +279,7 @@ function mapStateToProps (state) {
noActiveNotices, noActiveNotices,
seedWords, seedWords,
unapprovedTxs, unapprovedTxs,
lastUnreadNotice, nextUnreadNotice,
lostAccounts, lostAccounts,
unapprovedMsgCount, unapprovedMsgCount,
unapprovedPersonalMsgCount, unapprovedPersonalMsgCount,
@ -313,7 +313,7 @@ function mapStateToProps (state) {
network: state.metamask.network, network: state.metamask.network,
provider: state.metamask.provider, provider: state.metamask.provider,
forgottenPassword: state.appState.forgottenPassword, forgottenPassword: state.appState.forgottenPassword,
lastUnreadNotice, nextUnreadNotice,
lostAccounts, lostAccounts,
frequentRpcList: state.metamask.frequentRpcList || [], frequentRpcList: state.metamask.frequentRpcList || [],
currentCurrency: state.metamask.currentCurrency, currentCurrency: state.metamask.currentCurrency,

View File

@ -154,11 +154,11 @@ class Notice extends Component {
const mapStateToProps = state => { const mapStateToProps = state => {
const { metamask } = state const { metamask } = state
const { noActiveNotices, lastUnreadNotice, lostAccounts } = metamask const { noActiveNotices, nextUnreadNotice, lostAccounts } = metamask
return { return {
noActiveNotices, noActiveNotices,
lastUnreadNotice, nextUnreadNotice,
lostAccounts, lostAccounts,
} }
} }
@ -171,21 +171,21 @@ Notice.propTypes = {
const mapDispatchToProps = dispatch => { const mapDispatchToProps = dispatch => {
return { return {
markNoticeRead: lastUnreadNotice => dispatch(actions.markNoticeRead(lastUnreadNotice)), markNoticeRead: nextUnreadNotice => dispatch(actions.markNoticeRead(nextUnreadNotice)),
markAccountsFound: () => dispatch(actions.markAccountsFound()), markAccountsFound: () => dispatch(actions.markAccountsFound()),
} }
} }
const mergeProps = (stateProps, dispatchProps, ownProps) => { const mergeProps = (stateProps, dispatchProps, ownProps) => {
const { noActiveNotices, lastUnreadNotice, lostAccounts } = stateProps const { noActiveNotices, nextUnreadNotice, lostAccounts } = stateProps
const { markNoticeRead, markAccountsFound } = dispatchProps const { markNoticeRead, markAccountsFound } = dispatchProps
let notice let notice
let onConfirm let onConfirm
if (!noActiveNotices) { if (!noActiveNotices) {
notice = lastUnreadNotice notice = nextUnreadNotice
onConfirm = () => markNoticeRead(lastUnreadNotice) onConfirm = () => markNoticeRead(nextUnreadNotice)
} else if (lostAccounts && lostAccounts.length > 0) { } else if (lostAccounts && lostAccounts.length > 0) {
notice = generateLostAccountsNotice(lostAccounts) notice = generateLostAccountsNotice(lostAccounts)
onConfirm = () => markAccountsFound() onConfirm = () => markAccountsFound()

View File

@ -21,7 +21,7 @@ function reduceMetamask (state, action) {
identities: {}, identities: {},
unapprovedTxs: {}, unapprovedTxs: {},
noActiveNotices: true, noActiveNotices: true,
lastUnreadNotice: undefined, nextUnreadNotice: undefined,
frequentRpcList: [], frequentRpcList: [],
addressBook: [], addressBook: [],
selectedTokenAddress: null, selectedTokenAddress: null,
@ -65,7 +65,7 @@ function reduceMetamask (state, action) {
case actions.SHOW_NOTICE: case actions.SHOW_NOTICE:
return extend(metamaskState, { return extend(metamaskState, {
noActiveNotices: false, noActiveNotices: false,
lastUnreadNotice: action.value, nextUnreadNotice: action.value,
}) })
case actions.CLEAR_NOTICES: case actions.CLEAR_NOTICES: