Source: src/js/views/portals/PortalDataView.js

define([
  "jquery",
  "underscore",
  "backbone",
  "collections/Filters",
  "views/portals/PortalSectionView",
  "views/DataCatalogViewWithFilters",
  "views/filters/FilterGroupsView",
], function (
  $,
  _,
  Backbone,
  Filters,
  PortalSectionView,
  DataCatalogView,
  FilterGroupsView,
) {
  /**
   * @class PortalDataView
   * @classdesc The PortalDataView is a view to render the
   * portal data tab (within PortalView) to display all the datasets related to this portal.
   * @classcategory Views/Portals
   * @extends PortalSectionView
   * @constructor
   */
  var PortalDataView = PortalSectionView.extend(
    /** @lends PortalDataView.prototype */ {
      tagName: "div",

      /**
       * The Portal associated with this view
       * @type {PortalModel}
       */
      model: null,

      /**
       * An array of subviews in this view
       * @type {Backbone.View[]}
       */
      subviews: [],

      /**
       * The display name for this Section
       * @type {string}
       */
      uniqueSectionLabel: "Data",

      render: function () {
        if (this.id) {
          this.$el.attr("id", this.id);
        }

        var searchResults;
        var searchModel = this.model.get("searchModel");

        //Set some options on the searchResults
        searchResults = this.model.get("searchResults");

        //If Solr joins are disabled, get the documents and id facets for the PortalMetricsView
        if (!MetacatUI.appModel.get("enableSolrJoins")) {
          //Get the documents values as a facet so we can get all the data object IDs
          searchResults.facet = ["documents", "id"];
        }

        //Retrieve only 5 result rows
        searchResults.rows = 25;

        //Hide the Filters that are part of the Collection definition.
        var searchFilters = this.model.get("searchModel").get("filters");
        searchFilters.each(function (searchFilter) {
          //Check if this Filter model is also part of the definition filters collection
          if (this.model.get("definitionFilters").contains(searchFilter)) {
            searchFilter.set("isInvisible", true);
          }
        }, this);

        //Render the filters
        var filterGroupsView = new FilterGroupsView({
          filterGroups: this.model.get("filterGroups"),
          filters: this.model.get("searchModel").get("filters"),
        });

        this.$el.append(filterGroupsView.el);
        filterGroupsView.render();
        this.subviews.push(filterGroupsView);

        //Create a DataCatalogView
        var dataCatalogView = new DataCatalogView({
          mode: "map",
          searchModel: this.model.get("searchModel"),
          searchResults: searchResults,
          mapModel: this.model.get("mapModel"),
          isSubView: true,
          filters: false,
          fixedHeight: true,
          filterGroupsView: filterGroupsView,
        });

        this.dataCatalogView = dataCatalogView;
        var view = this;

        this.$el.append(dataCatalogView.el);
        this.$el.data("view", this);

        dataCatalogView.render();

        // Listener to handle the semantic annotation search
        this.listenTo(
          filterGroupsView,
          "updateDataCatalogView",
          function (event, item) {
            view.dataCatalogView.updateTextFilters(event, item);
            view.dataCatalogView.triggerSearch();
          },
        );
      },
    },
  );

  return PortalDataView;
});