pcottle.learnGitBranching/src/js/stores/LevelStore.js
2015-03-29 14:24:44 -07:00

96 lines
2.1 KiB
JavaScript

"use strict";
var AppConstants = require('../constants/AppConstants');
var AppDispatcher = require('../dispatcher/AppDispatcher');
var EventEmitter = require('events').EventEmitter;
var _ = require('underscore');
var assign = require('object-assign');
var levelSequences = require('../../levels').levelSequences;
var sequenceInfo = require('../../levels').sequenceInfo;
var _levelMap = {};
var _sequences = [];
var validateLevel = function(level) {
level = level || {};
var requiredFields = [
'name',
'goalTreeString',
//'description',
'solutionCommand'
];
var optionalFields = [
'hint',
'disabledMap',
'startTree'
];
_.each(requiredFields, function(field) {
if (level[field] === undefined) {
console.log(level);
throw new Error('I need this field for a level: ' + field);
}
});
};
var unpackSequences = function() {
_.each(levelSequences, function(levels, levelSequenceName) {
_sequences.push(levelSequenceName);
if (!levels || !levels.length) {
throw new Error('no empty sequences allowed');
}
// for this particular sequence...
_.each(levels, function(level, index) {
validateLevel(level);
var id = levelSequenceName + String(index + 1);
var compiledLevel = assign(
{},
level,
{
index: index,
id: id,
sequenceName: levelSequenceName
}
);
// update our internal data
_levelMap[id] = compiledLevel;
levelSequences[levelSequenceName][index] = compiledLevel;
});
});
};
unpackSequences();
var ActionTypes = AppConstants.ActionTypes;
var LevelStore = assign(
{},
EventEmitter.prototype,
AppConstants.StoreSubscribePrototype,
{
dispatchToken: AppDispatcher.register(function(payload) {
var action = payload.action;
var shouldInform = false;
switch (action.type) {
case ActionTypes.RESET_LEVELS_SOLVED:
shouldInform = true;
break;
case ActionTypes.SET_LEVEL_SOLVED:
shouldInform = true;
break;
}
if (shouldInform) {
LevelStore.emit(AppConstants.CHANGE_EVENT);
}
})
});
module.exports = LevelStore;