docs: function ContentListBaseViewModel(api, apiResourceName, settings) {
      var self = this;
  
      if (!api) {
        throw new Error('ContentListBaseViewModel - missing api');
      }
  
      if (!apiResourceName) {
        throw new Error('ContentListBaseViewModel - missing api resource name');
      }
  
      var defaultSettings = {
        defaultSearchArguments: {},
        pageable: true
      };
  
      self.disposer = new _kocoDisposer2.default();
      self.apiResourceName = apiResourceName;
      self.api = api;
  
      self.settings = _jquery2.default.extend({}, defaultSettings, settings);
  
      var pagingAttr = {
        pageNumber: 'pageNumber',
        pageSize: 'pageSize',
        orderBy: 'orderBy',
        orderByDirection: 'orderByDirection'
      };
  
      self.settings.defaultPagingAttr = _jquery2.default.extend({}, pagingAttr, self.settings.defaultPagingAttr);
  
      var defaultPagingArguments = {};
      _lodash2.default.each(self.settings.defaultPagingAttr, function (attr /*, key*/) {
        defaultPagingArguments[attr] = null;
      });
  
      self.apiSearchArguments = Object.keys(self.settings.defaultSearchArguments).concat(Object.keys(defaultPagingArguments));
      self.searchArguments = null;
      self.isSearchInProgress = _knockout2.default.observable(false);
      self.searchArguments = self.settings.defaultSearchArguments;
      self.totalNumberOfItems = _knockout2.default.observable();
      self.items = _knockout2.default.observableArray([]);
  
      self.hasItems = _knockout2.default.pureComputed(function () {
        return self.items().length > 0;
      });
      self.disposer.add(self.hasItems);
  
      self.pagingArguments = _knockout2.default.observable(defaultPagingArguments);
  
      self.remainingItemsToLoad = _knockout2.default.observable(false);
  
      self.isPaging = _knockout2.default.observable(false);
    }