unveil
Version:
A React-based Reactive Presentation Framework
69 lines (62 loc) • 5.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* Returns possible directions from state on each level.
* If we are at state [1, 0] depending on the map, the
* result might look something like this:
* [
* {
* next: [2],
* previous: [0]
* },
* {
* next: [1, 1],
* previous: false
* }
* ]
*
* @param {number[]} state State for which to return the directions
* @param {*[]} elements Elements to go through
* @param {number} level Depth of recursion. Defaults to 0
* @return {[directions]} List of direcitons object
*/
var getDirections = function getDirections(state, elements) {
var level = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];
if (level === state.length) return [];
var index = state[level];
var stateLevel = state.slice(0, level);
var result = [getDirectionObject(elements, index, stateLevel)];
return result.concat(getDirections(state, elements[index].children, level + 1));
};
/**
* Builds the direction object for one level.
*
* @param {*[]} elements Elements to look into
* @param {number} index index of state at this level
* @param {number[]} stateLevel state until level
*
* @returns {{next, previous}} object with indices of
* next and previous indices. See @getIndex
*/
var getDirectionObject = function getDirectionObject(elements, index, stateLevel) {
return {
next: getIndex(elements, index + 1, stateLevel),
previous: getIndex(elements, index - 1, stateLevel)
};
};
/**
* Returns the new state based on index or false, if
* the state does not exist
*
* @param {*[]} elements
* @param {number} index
* @param {number[]} stateLevel state
* @returns {boolean|number[]} state list or false
*/
var getIndex = function getIndex(elements, index, stateLevel) {
return elements[index] !== undefined && stateLevel.concat([index]) || false;
};
exports.default = getDirections;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9nZXREaXJlY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsSUFBSSxnQkFBZ0IsU0FBaEIsYUFBZ0IsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFnQztNQUFkLDhEQUFRLGlCQUFNOztBQUNsRCxNQUFJLFVBQVcsTUFBTSxNQUFOLEVBQWMsT0FBTyxFQUFQLENBQTdCOztBQUVBLE1BQUksUUFBUSxNQUFNLEtBQU4sQ0FBUixDQUg4QztBQUlsRCxNQUFJLGFBQWEsTUFBTSxLQUFOLENBQVksQ0FBWixFQUFlLEtBQWYsQ0FBYixDQUo4QztBQUtsRCxNQUFJLFNBQVMsQ0FBQyxtQkFBbUIsUUFBbkIsRUFBNkIsS0FBN0IsRUFBb0MsVUFBcEMsQ0FBRCxDQUFULENBTDhDOztBQU9sRCxTQUFPLE9BQU8sTUFBUCxDQUFjLGNBQWMsS0FBZCxFQUFxQixTQUFTLEtBQVQsRUFBZ0IsUUFBaEIsRUFBMEIsUUFBUSxDQUFSLENBQTdELENBQVAsQ0FQa0Q7Q0FBaEM7Ozs7Ozs7Ozs7OztBQW9CcEIsSUFBSSxxQkFBcUIsU0FBckIsa0JBQXFCLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0IsVUFBbEIsRUFBaUM7QUFDeEQsU0FBTztBQUNMLFVBQU0sU0FBUyxRQUFULEVBQW1CLFFBQVEsQ0FBUixFQUFXLFVBQTlCLENBQU47QUFDQSxjQUFVLFNBQVMsUUFBVCxFQUFtQixRQUFRLENBQVIsRUFBVyxVQUE5QixDQUFWO0dBRkYsQ0FEd0Q7Q0FBakM7Ozs7Ozs7Ozs7O0FBZ0J6QixJQUFJLFdBQVcsU0FBWCxRQUFXLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0IsVUFBbEIsRUFBaUM7QUFDOUMsU0FBTyxTQUFTLEtBQVQsTUFBb0IsU0FBcEIsSUFBaUMsV0FBVyxNQUFYLENBQWtCLENBQUMsS0FBRCxDQUFsQixDQUFqQyxJQUErRCxLQUEvRCxDQUR1QztDQUFqQzs7a0JBSUEiLCJmaWxlIjoiZ2V0RGlyZWN0aW9ucy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJucyBwb3NzaWJsZSBkaXJlY3Rpb25zIGZyb20gc3RhdGUgb24gZWFjaCBsZXZlbC5cbiAqIElmIHdlIGFyZSBhdCBzdGF0ZSBbMSwgMF0gZGVwZW5kaW5nIG9uIHRoZSBtYXAsIHRoZVxuICogcmVzdWx0IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczpcbiAqIFtcbiAqICAgIHtcbiAqICAgICAgbmV4dDogWzJdLFxuICogICAgICBwcmV2aW91czogWzBdXG4gKiAgICB9LFxuICogICAge1xuICogICAgICBuZXh0OiBbMSwgMV0sXG4gKiAgICAgIHByZXZpb3VzOiBmYWxzZVxuICogICAgfVxuICogXVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyW119IHN0YXRlIFN0YXRlIGZvciB3aGljaCB0byByZXR1cm4gdGhlIGRpcmVjdGlvbnNcbiAqIEBwYXJhbSB7KltdfSBlbGVtZW50cyBFbGVtZW50cyB0byBnbyB0aHJvdWdoXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgRGVwdGggb2YgcmVjdXJzaW9uLiBEZWZhdWx0cyB0byAwXG4gKiBAcmV0dXJuIHtbZGlyZWN0aW9uc119IExpc3Qgb2YgZGlyZWNpdG9ucyBvYmplY3RcbiAqL1xubGV0IGdldERpcmVjdGlvbnMgPSAoc3RhdGUsIGVsZW1lbnRzLCBsZXZlbCA9IDApID0+IHtcbiAgaWYgKGxldmVsICA9PT0gc3RhdGUubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgbGV0IGluZGV4ID0gc3RhdGVbbGV2ZWxdO1xuICBsZXQgc3RhdGVMZXZlbCA9IHN0YXRlLnNsaWNlKDAsIGxldmVsKTtcbiAgbGV0IHJlc3VsdCA9IFtnZXREaXJlY3Rpb25PYmplY3QoZWxlbWVudHMsIGluZGV4LCBzdGF0ZUxldmVsKV07XG5cbiAgcmV0dXJuIHJlc3VsdC5jb25jYXQoZ2V0RGlyZWN0aW9ucyhzdGF0ZSwgZWxlbWVudHNbaW5kZXhdLmNoaWxkcmVuLCBsZXZlbCArIDEpKTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBkaXJlY3Rpb24gb2JqZWN0IGZvciBvbmUgbGV2ZWwuXG4gKlxuICogQHBhcmFtIHsqW119IGVsZW1lbnRzIEVsZW1lbnRzIHRvIGxvb2sgaW50b1xuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IGluZGV4IG9mIHN0YXRlIGF0IHRoaXMgbGV2ZWxcbiAqIEBwYXJhbSB7bnVtYmVyW119IHN0YXRlTGV2ZWwgc3RhdGUgdW50aWwgbGV2ZWxcbiAqXG4gKiBAcmV0dXJucyB7e25leHQsIHByZXZpb3VzfX0gb2JqZWN0IHdpdGggaW5kaWNlcyBvZlxuICogbmV4dCBhbmQgcHJldmlvdXMgaW5kaWNlcy4gU2VlIEBnZXRJbmRleFxuICovXG5sZXQgZ2V0RGlyZWN0aW9uT2JqZWN0ID0gKGVsZW1lbnRzLCBpbmRleCwgc3RhdGVMZXZlbCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5leHQ6IGdldEluZGV4KGVsZW1lbnRzLCBpbmRleCArIDEsIHN0YXRlTGV2ZWwpLFxuICAgIHByZXZpb3VzOiBnZXRJbmRleChlbGVtZW50cywgaW5kZXggLSAxLCBzdGF0ZUxldmVsKVxuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5ldyBzdGF0ZSBiYXNlZCBvbiBpbmRleCBvciBmYWxzZSwgaWZcbiAqIHRoZSBzdGF0ZSBkb2VzIG5vdCBleGlzdFxuICpcbiAqIEBwYXJhbSB7KltdfSBlbGVtZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcltdfSBzdGF0ZUxldmVsIHN0YXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxudW1iZXJbXX0gc3RhdGUgbGlzdCBvciBmYWxzZVxuICovXG5sZXQgZ2V0SW5kZXggPSAoZWxlbWVudHMsIGluZGV4LCBzdGF0ZUxldmVsKSA9PiB7XG4gIHJldHVybiBlbGVtZW50c1tpbmRleF0gIT09IHVuZGVmaW5lZCAmJiBzdGF0ZUxldmVsLmNvbmNhdChbaW5kZXhdKSB8fCBmYWxzZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERpcmVjdGlvbnM7XG4iXX0=