CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/components/modals/publish/share/users-group-view.js

Summary

Maintainability
A
1 hr
Test Coverage
var CoreView = require('backbone/core-view');
var _ = require('underscore');
var template = require('./users-group.tpl');
var UserView = require('./user-view');

var REQUIRED_OPTS = [
  'users'
];

var MAX_USERS_TO_SHOW = 3;

module.exports = CoreView.extend({
  initialize: function (opts) {
    _.each(REQUIRED_OPTS, function (item) {
      if (!opts[item]) throw new Error(item + ' is required');
      this['_' + item] = opts[item];
    }, this);
  },

  render: function () {
    this.clearSubViews();
    this.$el.html(template({
      people: this._getRemainsPeople()
    }));
    this._renderUsers();
    return this;
  },

  _getRemainsPeople: function () {
    return Math.max(0, this._users.length - MAX_USERS_TO_SHOW);
  },

  _renderUsers: function () {
    _.each(this._users.slice(0, MAX_USERS_TO_SHOW), this._renderUser, this);
  },

  _renderUser: function (user) {
    var view = new UserView({
      username: user.username,
      avatar: user.avatar_url
    });

    this.$('.js-content').append(view.render().el);
    this.addView(view);
  }
});