Change map logic and view

This commit is contained in:
Berkeley Martinez
2015-12-04 22:13:14 -08:00
parent 4c1d84cbf4
commit ab043d1c6d
2 changed files with 93 additions and 71 deletions

View File

@@ -84,6 +84,26 @@ function updateUserProgress(user, challengeId, completedChallenge) {
return user;
}
// small helper function to determine whether to mark something as new
const dateFormat = 'MMM MMMM DD, YYYY';
function shouldShowNew(element, block) {
if (element) {
return typeof element.releasedOn !== 'undefined' &&
moment(element.releasedOn, dateFormat).diff(moment(), 'days') >= -30;
}
if (block) {
const newCount = block.reduce((sum, { markNew }) => {
if (markNew) {
return sum + 1;
}
return sum;
}, 0);
return newCount / block.length * 100 === 100;
}
}
module.exports = function(app) {
const router = app.loopback.Router();
@@ -113,23 +133,31 @@ module.exports = function(app) {
.shareReplay();
// create a stream of challenge blocks
const blocks$ = challenge$
const superBlocks$ = challenge$
.map(challenge => challenge.toJSON())
// group challenges by block | returns a stream of observables
.groupBy(challenge => challenge.block)
// turn block group stream into an array
.flatMap(block$ => block$.toArray())
.flatMap(blocks$ => blocks$.toArray())
// turn array into stream of object
.map(blockArray => ({
name: blockArray[0].block,
dashedName: dasherize(blockArray[0].block),
challenges: blockArray
challenges: blockArray,
superBlock: blockArray[0].superBlock
}))
.filter(({ name })=> {
return name !== 'Hikes';
})
.groupBy(block => block.superBlock)
.flatMap(superBlocks$ => superBlocks$.toArray())
.shareReplay();
const blocks$ = superBlocks$
.flatMap(superBlock => Observable.just(superBlock))
.shareReplay();
superBlocks$.subscribe(() => {});
const User = app.models.User;
const userCount$ = observeMethod(User, 'count');
@@ -455,23 +483,6 @@ module.exports = function(app) {
function challengeMap({ user = {} }, res, next) {
// small helper function to determine whether to mark something as new
function shouldShowNew(element, block) {
if (element) {
return (typeof element.releasedOn !== 'undefined' &&
moment(element.releasedOn, 'MMM MMMM DD, YYYY')
.diff(moment(), 'days') >= -30);
} else if (block) {
const newCount = block.reduce((sum, { markNew }) => {
if (markNew) {
return sum + 1;
}
return sum;
}, 0);
return newCount / block.length * 100 === 100;
}
}
let lastCompleted;
const daysRunning = moment().diff(new Date('10/15/2014'), 'days');
@@ -485,7 +496,7 @@ module.exports = function(app) {
.map(camperCount => numberWithCommas(camperCount));
// create a stream of an array of all the challenge blocks
const blocks$ = challenge$
const superBlocks$ = challenge$
// mark challenge completed
.map(challengeModel => {
const challenge = challengeModel.toJSON();
@@ -511,6 +522,7 @@ module.exports = function(app) {
return {
isBeta,
name: blockArray[0].block,
superBlock: blockArray[0].superBlock,
dashedName: dasherize(blockArray[0].block),
markNew: shouldShowNew(null, blockArray),
challenges: blockArray,
@@ -521,22 +533,31 @@ module.exports = function(app) {
.filter(({ name }) => name !== 'Hikes')
// turn stream of blocks into a stream of an array
.toArray()
.doOnNext((blocks) => {
.doOnNext(blocks => {
const lastCompletedBlock = _.findLast(blocks, (block) => {
return block.completed === 100;
});
lastCompleted = lastCompletedBlock && lastCompletedBlock.name || null;
});
})
.flatMap(blocks => Observable.from(blocks, null, null, Scheduler.default))
.groupBy(block => block.superBlock)
.flatMap(blocks$ => blocks$.toArray())
.map(superBlockArray => ({
name: superBlockArray[0].superBlock,
blocks: superBlockArray
}))
.toArray();
Observable.combineLatest(
camperCount$,
blocks$,
(camperCount, blocks) => ({ camperCount, blocks })
superBlocks$,
(camperCount, superBlocks) => ({ camperCount, superBlocks })
)
.subscribe(
({ camperCount, blocks }) => {
({ camperCount, superBlocks }) => {
console.log('sup', superBlocks);
res.render('challengeMap/show', {
blocks,
superBlocks,
daysRunning,
globalCompletedCount: numberWithCommas(
5612952 + (Math.floor((Date.now() - 1446268581061) / 2000))