Initial commit
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
const Backbone = require('backbone');
|
||||
const _ = require('underscore');
|
||||
const checkAndBuildOpts = require('builder/helpers/required-opts');
|
||||
|
||||
const UserModel = require('dashboard/data/user-model');
|
||||
const GroupModel = require('dashboard/data/group-model');
|
||||
|
||||
const REQUIRED_OPTS = [
|
||||
'configModel'
|
||||
];
|
||||
|
||||
/**
|
||||
* A collection of Grantable objects.
|
||||
*/
|
||||
module.exports = Backbone.Collection.extend({
|
||||
|
||||
model: function (attrs, { collection }) {
|
||||
// This used to be in its own file, but we took the same approach as builder
|
||||
|
||||
// This used to have:
|
||||
// new cdb.admin[className](this.get('model'));
|
||||
// We took grantable_presenter types as the truth.
|
||||
|
||||
const { _configModel: configModel, organization } = collection;
|
||||
|
||||
let model;
|
||||
if (attrs.type === 'user') {
|
||||
model = new UserModel(attrs, { configModel, collection });
|
||||
} else {
|
||||
model = new GroupModel(attrs, { configModel, collection });
|
||||
}
|
||||
model.organization = organization;
|
||||
model.entity = model; // legacy (see grantable.js), left in case someone uses it
|
||||
return model;
|
||||
},
|
||||
|
||||
url: function (method) {
|
||||
var version = this._configModel.urlVersion('organizationGrantables', method);
|
||||
return '/api/' + version + '/organization/' + this.organization.id + '/grantables';
|
||||
},
|
||||
|
||||
initialize: function (users, opts) {
|
||||
checkAndBuildOpts(opts, REQUIRED_OPTS, this);
|
||||
if (!opts.organization) throw new Error('organization is required');
|
||||
this.organization = opts.organization;
|
||||
this.currentUserId = opts.currentUserId;
|
||||
this.sync = require('dashboard/data/backbone/sync-abort'); // adds abort behaviour
|
||||
},
|
||||
|
||||
parse: function (response) {
|
||||
this.total_entries = response.total_entries;
|
||||
|
||||
return _.reduce(response.grantables, function (memo, m) {
|
||||
if (m.id === this.currentUserId) {
|
||||
this.total_entries--;
|
||||
} else {
|
||||
memo.push(m);
|
||||
}
|
||||
|
||||
return memo;
|
||||
}, [], this);
|
||||
},
|
||||
|
||||
// @return {Number, undefined} may be undefined until a first fetch is done
|
||||
totalCount: function () {
|
||||
return this.total_entries;
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user