define([
"jquery",
"underscore",
"backbone",
"collections/Filters",
"views/portals/PortalListView",
], function ($, _, Backbone, Filters, PortalListView) {
"use strict";
/**
* @class PortalsSearchView
* @classdesc A view that shows a list of Portals in the main app window
* @classcategory Views/Portals
* @extends Backbone.View
* @constructor
* @since 2.16.0
* @screenshot views/portals/PortalsSearchView.png
*/
var PortalsSearchView = Backbone.View.extend(
/** @lends PortalsSearchView.prototype */ {
/**
* The template for this view.
*/
template: _.template(
'<div id="portals-list-container"><div id="portals-list-user"/> <div id="portals-list-all"/> </div>',
),
/**
* Renders the list of portals
*/
render: function () {
try {
//Set the header type
MetacatUI.appModel.set("headerType", "default");
//Insert the template
this.$el.html(this.template());
//Render the view after the user's authentication has been checked
if (!MetacatUI.appUserModel.get("checked")) {
this.listenToOnce(
MetacatUI.appUserModel,
"change:checked",
this.render,
);
return;
}
let allPortalsView = new PortalListView();
//Create titles for the My Portals and All Portals sections
var title = $(document.createElement("h4")).addClass(
"portals-list-title",
),
allPortalsTitle = title
.clone()
.text("All " + MetacatUI.appModel.get("portalTermPlural"));
// Filter datasets that the user has ownership of
if (MetacatUI.appUserModel.get("loggedIn")) {
let filters = new Filters();
filters.addWritePermissionFilter();
//Render My Portals list
let myPortalsView = new PortalListView();
myPortalsView.numPortals = 99999;
myPortalsView.numPortalsPerPage = 5;
myPortalsView.filters = filters;
//Create titles for the My Portals section
var myPortalsTitle = title
.clone()
.text("My " + MetacatUI.appModel.get("portalTermPlural"));
this.$("#portals-list-user").append(
myPortalsTitle,
myPortalsView.el,
);
myPortalsView.render();
//Exclude portals the user is an owner of from the All portals list
let allPortalsFilters = new Filters();
allPortalsFilters.addWritePermissionFilter();
let permissionFilter = allPortalsFilters.at(
allPortalsFilters.length - 1,
);
if (permissionFilter) {
permissionFilter.set("exclude", true);
allPortalsView.filters = allPortalsFilters;
}
}
//Render All Portals
allPortalsView.numPortals = 99999;
allPortalsView.numPortalsPerPage = 10;
allPortalsView.createBtnContainer = "#none";
allPortalsView.noResultsMessage =
"There are no " +
MetacatUI.appModel.get("portalTermPlural") +
" to show.";
this.$("#portals-list-all").append(
allPortalsTitle,
allPortalsView.el,
);
allPortalsView.render();
} catch (e) {
console.error(e);
this.showError();
}
},
/**
* Displays an error message when rendering this view has failed.
*/
showError: function () {
//Remove the loading elements
this.$(".loading").remove();
//Show an error message
MetacatUI.appView.showAlert(
"Something went wrong while getting this list of " +
MetacatUI.appModel.get("portalTermPlural") +
".",
"alert-error",
this.$el,
);
},
},
);
return PortalsSearchView;
});