blob: f614bd9135124c90c17473876127f91be250c4d4 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the 'License'); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
define([
'app',
'api',
// Modules
"addons/documents/helpers",
'addons/documents/shared-routes',
'addons/documents/views',
'addons/documents/index-editor/components.react',
'addons/documents/index-editor/actions',
'addons/databases/base',
'addons/fauxton/components',
'addons/documents/pagination/stores',
'addons/documents/index-results/actions',
'addons/documents/index-results/index-results.components.react',
'addons/documents/pagination/pagination.react',
'addons/documents/header/header.react',
'addons/documents/header/header.actions',
],
function (app, FauxtonAPI, Helpers, BaseRoute, Documents, IndexEditorComponents, ActionsIndexEditor,
Databases, Components, PaginationStores, IndexResultsActions,
IndexResultsComponents, ReactPagination, ReactHeader, ReactHeaderActions) {
var IndexEditorAndResults = BaseRoute.extend({
layout: 'two_pane',
routes: {
'database/:database/new_view': 'newViewEditor',
'database/:database/new_view/:designDoc': 'newViewEditor',
'database/:database/_design/:ddoc/_view/:view': {
route: 'viewFn',
roles: ['fx_loggedIn']
}
},
initialize: function (route, masterLayout, options) {
var databaseName = options[0];
this.databaseName = databaseName;
this.database = new Databases.Model({id: databaseName});
this.allDatabases = new Databases.List();
this.createDesignDocsCollection();
},
establish: function () {
return [
this.allDatabases.fetchOnce()
];
},
viewFn: function (databaseName, ddoc, viewName) {
var params = this.createParams(),
urlParams = params.urlParams,
docParams = params.docParams,
decodeDdoc = decodeURIComponent(ddoc);
this.rightHeader = this.setView('#right-header', new Documents.Views.RightAllDocsHeader({
database: this.database
}));
var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT);
this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({
toggleDisabled: true,
crumbs: [
{'type': 'back', 'link': Helpers.getPreviousPage(this.database)},
{'name': this.database.id, 'link': url }
]
}));
viewName = viewName.replace(/\?.*$/, '');
this.setComponent('#footer', ReactPagination.Footer);
this.indexedDocs = new Documents.IndexCollection(null, {
database: this.database,
design: decodeDdoc,
view: viewName,
params: docParams,
paging: {
pageSize: PaginationStores.indexPaginationStore.getPerPage()
}
});
ActionsIndexEditor.clearIndex();
IndexResultsActions.newResultsList({
collection: this.indexedDocs,
bulkCollection: Documents.BulkDeleteDocCollection
});
ActionsIndexEditor.fetchDesignDocsBeforeEdit({
viewName: viewName,
newView: false,
database: this.database,
designDocs: this.designDocs,
designDocId: '_design/' + decodeDdoc
});
this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController);
this.setComponent('#left-content', IndexEditorComponents.EditorController);
this.setComponent('#dashboard-lower-content', IndexResultsComponents.List);
this.apiUrl = function () {
return [this.indexedDocs.urlRef('apiurl'), FauxtonAPI.constants.DOC_URLS.GENERAL];
};
this.showQueryOptions(urlParams, ddoc, viewName);
},
newViewEditor: function (database, _designDoc) {
var params = app.getParams();
var newDesignDoc = true;
var designDoc;
if (_designDoc) {
designDoc = '_design/' + _designDoc;
newDesignDoc = false;
}
var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT);
this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({
toggleDisabled: true,
crumbs: [
{ type: 'back', link: Helpers.getPreviousPage(this.database) },
{ name: 'Create Index', link: url }
]
}));
ActionsIndexEditor.fetchDesignDocsBeforeEdit({
viewName: 'new-view',
newView: true,
database: this.database,
designDocs: this.designDocs,
designDocId: designDoc,
newDesignDoc: newDesignDoc
});
this.setComponent('#left-content', IndexEditorComponents.EditorController);
this.setComponent('#dashboard-lower-content', IndexResultsComponents.List);
IndexResultsActions.newResultsList({
collection: [],
bulkCollection: Documents.BulkDeleteDocCollection
});
}
});
return IndexEditorAndResults;
});