@stand/callback
Version: 
208 lines (175 loc) • 7.73 kB
JavaScript
'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var _Object$defineProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/define-property'));
var _Object$defineProperties = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/define-properties'));
var _Object$getOwnPropertyDescriptors = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors'));
var _forEachInstanceProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/instance/for-each'));
var _Object$getOwnPropertyDescriptor = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor'));
var _Object$getOwnPropertySymbols = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols'));
var _Object$keys = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/object/keys'));
var _slicedToArray = _interopDefault(require('@babel/runtime-corejs3/helpers/slicedToArray'));
var _filterInstanceProperty = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/instance/filter'));
var _defineProperty = _interopDefault(require('@babel/runtime-corejs3/helpers/defineProperty'));
var _objectWithoutProperties = _interopDefault(require('@babel/runtime-corejs3/helpers/objectWithoutProperties'));
var _parseInt = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/parse-int'));
var _classCallCheck = _interopDefault(require('@babel/runtime-corejs3/helpers/classCallCheck'));
var _createClass = _interopDefault(require('@babel/runtime-corejs3/helpers/createClass'));
var _Symbol = _interopDefault(require('@babel/runtime-corejs3/core-js-stable/symbol'));
var _sortBy = _interopDefault(require('lodash/sortBy'));
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context7; _forEachInstanceProperty(_context7 = ownKeys(source, true)).call(_context7, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context8; _forEachInstanceProperty(_context8 = ownKeys(source)).call(_context8, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
var groupsSymbol = _Symbol('groups');
var sortSymbol = _Symbol('sort');
var itemsSymbol = _Symbol('items');
var Callback =
/*#__PURE__*/
function () {
  function Callback() {
    _classCallCheck(this, Callback);
    this[itemsSymbol] = [];
    this[groupsSymbol] = {};
  }
  _createClass(Callback, [{
    key: "configGroup",
    value: function configGroup(name) {
      var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
      var defaultExtra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
      this.groups[name] = [_parseInt(order, 10), _parseInt(defaultExtra, 10)];
      return this;
    }
  }, {
    key: "getGroupConfig",
    value: function getGroupConfig() {
      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
      var groups = this.groups;
      if (groups[name]) {
        return groups[name];
      }
      return [1000, 1000];
    }
  }, {
    key: "add",
    value: function add(_ref) {
      var method = _ref.method,
          _ref$group = _ref.group,
          group = _ref$group === void 0 ? 'default' : _ref$group,
          extra = _ref.extra,
          id = _ref.id,
          other = _objectWithoutProperties(_ref, ["method", "group", "extra", "id"]);
      var item = _objectSpread({}, other, {
        group: group,
        extra: extra,
        id: id
      });
      var config = this.getGroupConfig(group);
      if (!item.extra) {
        if (item.extra === 0 || item.extra === '0') {
          item.extra = 0;
        } else {
          item.extra = config[1];
        }
      } else {
        item.extra = _parseInt(item.extra);
      }
      item.method = method || function () {};
      this[itemsSymbol].push(item);
      return this;
    }
  }, {
    key: "getAll",
    value: function getAll() {
      return this[sortSymbol](this[itemsSymbol]);
    }
  }, {
    key: "getItems",
    value: function getItems(filter) {
      var _context;
      return _filterInstanceProperty(_context = this[itemsSymbol]).call(_context, filter);
    }
  }, {
    key: "getById",
    value: function getById(id, group) {
      var _context2;
      var filter = group ? function (item) {
        return item.group === group && item.id === id;
      } : function (item) {
        return item.id === id;
      };
      var arr = _filterInstanceProperty(_context2 = this[itemsSymbol]).call(_context2, filter);
      return arr[0];
    }
  }, {
    key: "getByGroup",
    value: function getByGroup(name, extra) {
      var _context3;
      var filter = typeof extra === 'undefined' ? function (item) {
        return item.group === name;
      } : function (item) {
        return item.group === name && item.extra === _parseInt(extra, 10);
      };
      var arr = _filterInstanceProperty(_context3 = this[itemsSymbol]).call(_context3, filter);
      return this[sortSymbol](arr);
    }
  }, {
    key: "removeAll",
    value: function removeAll() {
      this[itemsSymbol] = [];
      return this;
    }
  }, {
    key: "removeItems",
    value: function removeItems(filter) {
      var _context4;
      this[itemsSymbol] = _filterInstanceProperty(_context4 = this[itemsSymbol]).call(_context4, function (item) {
        return !filter(item);
      });
      return this;
    }
  }, {
    key: "removeByGroup",
    value: function removeByGroup(name, extra) {
      var _context5;
      var filter = typeof extra === 'undefined' ? function (item) {
        return item.group !== name;
      } : function (item) {
        return !(item.group === name && item.extra === _parseInt(extra, 10));
      };
      this[itemsSymbol] = _filterInstanceProperty(_context5 = this[itemsSymbol]).call(_context5, filter);
      return this;
    }
  }, {
    key: "removeById",
    value: function removeById(id, group) {
      var _context6;
      var filter = group ? function (item) {
        return !(item.group === group && item.id === id);
      } : function (item) {
        return item.id !== id;
      };
      this[itemsSymbol] = _filterInstanceProperty(_context6 = this[itemsSymbol]).call(_context6, filter);
      return this;
    }
  }, {
    key: sortSymbol,
    value: function value() {
      var _this = this;
      var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
      return _sortBy(arr, [function (item) {
        var group = item.group;
        var _this$getGroupConfig = _this.getGroupConfig(group),
            _this$getGroupConfig2 = _slicedToArray(_this$getGroupConfig, 1),
            order = _this$getGroupConfig2[0];
        return order;
      }, function (item) {
        return item.extra;
      }]);
    }
  }, {
    key: "groups",
    get: function get() {
      return this[groupsSymbol];
    }
  }]);
  return Callback;
}();
module.exports = Callback;