CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/components/tab-pane/tab-pane-view-routed.js

Summary

Maintainability
A
2 hrs
Test Coverage
var _ = require('underscore');
var TabPaneView = require('./tab-pane-view.js');
var TabPaneViewItemRouted = require('./tab-pane-item-view-routed.js');
var Router = require('builder/routes/router');

module.exports = TabPaneView.extend({
  initialize: function (options) {
    TabPaneView.prototype.initialize.call(this, options);

    this._initialRoute = false;
    this.onRouteChange = options.onRouteChange;
    this.onRouteChange && this.listenTo(Router.getRouteModel(), 'change:currentRoute', this.onRouteChange);
    this.onRouteChange && this._setInitialRoute(Router.getRouteModel());
  },

  _renderTabPaneItemView: function (model) {
    var tabPaneItemView = new TabPaneViewItemRouted(_.extend({ model: model }, this._tabPaneItemOptions));
    this.addView(tabPaneItemView);
    this.$('.js-menu').append(tabPaneItemView.render().el);
  },

  _setInitialRoute: function (routeModel) {
    this._initialRoute = true;
    this.onRouteChange(routeModel);
  },

  _renderTabPaneContentView: function (model) {
    var selectedView = TabPaneView.prototype._renderTabPaneContentView.call(this, model);
    var currentRoute = Router.getCurrentRoute();
    var routeName = _.last(currentRoute.split('/'));
    var tabName = model.get('name');

    if (this._initialRoute) {
      var parsed = selectedView.handleRoute && selectedView.handleRoute(Router.getRouteModel());

      if (parsed === false) {
        Router.replaceWithRoot();
      }

      if (this.collection.isDisabledTab(routeName) && tabName !== routeName) {
        var newRoute = currentRoute.replace(routeName, tabName);
        Router.replaceState(newRoute);
      }

      this._initialRoute = false;
    } else {
      selectedView.handleRoute && selectedView.handleRoute(Router.getRouteModel());
    }

    return selectedView;
  }
});