UNPKG

unveil

Version:

A React-based Reactive Presentation Framework

69 lines (62 loc) 5.64 kB
"use strict"; 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=