Source: src/js/collections/ProjectList.js

/* global define */
"use strict";
define(['jquery', 'backbone', 'models/projects/Project'],
    function ($, Backbone, Project) {
        'use strict';
        /**
         @class ProjectList
         @classdesc A ProjectList represents a collection of projects. This can be
         used for a projects list view populating EML projects. It also supports loading
         projects from a third-party API in case projects information is located outside of
         metacat.
         * @classcategory Collections
         @extends Backbone.Collection
         @constructor
         @since 2.22.0
         */

        var ProjectList = Backbone.Collection.extend(
            /** @lends ProjectList.prototype */{
            model: Project,
            type: "ProjectList",                            //The name of this type of collection
            authToken: undefined,
            urlBase: undefined,
            urlEndpoint: "project/",

            /** Builds the url from the urlBase **/
            url: function(){
                if(this.urlBase)
                {
                    return new URL(new URL(this.urlBase).pathname + this.urlEndpoint, this.urlBase).href
                }
                else {
                    return undefined
                }
            },
            /**
             * Override backbone's parse to set the data after the request returns from the server
             */
            parse: function (response, options) {
                // Add any custom data structure code here.
                return response
            },
            /**
             * Override backbone's sync to set the auth token
             */
            sync: function(method, model, options) {

                if (this.authToken) {
                    if (options.headers === undefined){
                        options.headers = {}
                    }
                    options.headers["Authorization"] = "Bearer " + this.authToken;
                }
                if (this.urlBase)
                    return Backbone.Model.prototype.sync.apply(this, [method, model, options]);
            },

            /**
             * Initializing the Model objects project variables.
             */
            initialize: function (options) {
                if (MetacatUI && MetacatUI.appModel) this.urlBase = MetacatUI.appModel.get("projectsApiUrl");
                if (options) {
                    if (options.authToken) this.authToken = options.authToken;
                    if (options.urlBase) this.urlBase = options.urlBase;
                }
                Backbone.Collection.prototype.initialize.apply(this, options);
            }
        });

        return ProjectList

    });