CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/dashboard/views/organization/groups-admin/group-user/group-user-view.js

Summary

Maintainability
A
50 mins
Test Coverage
const CoreView = require('backbone/core-view');
const template = require('./group-user.tpl');
const pluralizeStr = require('dashboard/helpers/pluralize');

const checkAndBuildOpts = require('builder/helpers/required-opts');

const REQUIRED_OPTS = [
  'model'
];

/**
 * View of a single group user.
 */
module.exports = CoreView.extend({
  tagName: 'li',
  className: 'OrganizationList-user is-selectable',
  events: {
    'click': '_onClick'
  },

  initialize: function (options) {
    checkAndBuildOpts(options, REQUIRED_OPTS, this);

    this._initBinds();
  },

  _initBinds: function () {
    this.listenTo(this.model, 'change:selected', this._onChangeSelected);
  },

  render: function () {
    this.$el.html(
      template({
        avatarUrl: this.model.get('avatar_url'),
        username: this.model.get('username'),
        email: this.model.get('email'),
        maps_count: pluralizeStr.prefixWithCount('map', 'maps', this.model.get('all_visualization_count')),
        table_count: pluralizeStr.prefixWithCount('dataset', 'datasets', this.model.get('table_count'))
      })
    );

    return this;
  },

  _onChangeSelected: function (model, isSelected) {
    this.$el.toggleClass('is-selected', !!isSelected);
  },

  _onClick: function (ev) {
    this.killEvent(ev);
    this.model.set('selected', !this.model.get('selected'));
  }

});