query()

in js/vnext/data-source/memory.js [36:76]


  query(params) {
    const {
      skip = 0,
      take = this.data.length - skip,
      filter = truthy,
      orderby = [],
    } = params || {};

    if (this._cache.seed !== this.data || !_.isEqual(this._cache.query, { filter, orderby })) {
      const { key, direction } = _.first(orderby) || {};
      let sortIteratee = null;

      if (_.isFunction(key)) {
        sortIteratee = key;
      } else if (_.isString(key)) {
        const segs = key.split(/[\.\/]/);
        sortIteratee = item => _.reduce(segs, (memo, seg) => _.result(memo, seg), item);
      }

      let data = _.filter(this.data, filter);

      if (sortIteratee) {
        data = _.sortBy(data, sortIteratee);

        if (direction < 0) {
          data.reverse();
        }
      }

      this._cache = {
        seed: this.data,
        query: { filter, orderby },
        data,
      };
    }

    return {
      totalCount: this._cache.data.length,
      items: this._cache.data.slice(skip, skip + take),
    };
  }