app/addons/documents/routes-documents.js (136 lines of code) (raw):

// 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. import React from 'react'; import FauxtonAPI from '../../core/api'; import BaseRoute from './shared-routes'; import DatabaseActions from '../databases/actions'; import Databases from '../databases/base'; import Resources from './resources'; import {SidebarItemSelection} from './sidebar/helpers'; import ComponentsActions from '../components/actions'; import {DocsTabsSidebarLayout, ViewsTabsSidebarLayout, ChangesSidebarLayout} from './layouts'; var DocumentsRouteObject = BaseRoute.extend({ routes: { "database/:database/_partition/:partitionkey/_all_docs": { route: "partitionedAllDocs", roles: ["fx_loggedIn"] }, "database/:database/_all_docs(:extra)": { route: "globalAllDocs", roles: ["fx_loggedIn"] }, "database/:database/_partition/:partitionkey/_design/:ddoc/_info": { route: "designDocMetadata", roles: ['fx_loggedIn'] }, "database/:database/_design/:ddoc/_info": { route: "designDocMetadataNoPartition", roles: ['fx_loggedIn'] }, 'database/:database/_partition/:partitionKey/_changes': { route: 'changes', roles: ['fx_loggedIn'] }, 'database/:database/_changes': { route: 'changes', roles: ['fx_loggedIn'] } }, initialize (route, options) { this.initViews(options[0]); }, initViews: function (dbName) { this.databaseName = dbName; this.database = new Databases.Model({id: this.databaseName}); this.createDesignDocsCollection(); this.addSidebar(); }, designDocMetadataNoPartition: function (database, ddoc) { return this.designDocMetadata(database, '', ddoc); }, designDocMetadata: function (database, partitionKey, ddoc) { const designDocInfo = new Resources.DdocInfo({ _id: "_design/" + ddoc }, { database: this.database }); const selectedNavItem = new SidebarItemSelection('designDoc', { designDocName: ddoc, designDocSection: 'metadata' }); DatabaseActions.fetchSelectedDatabaseInfo(database); const dropDownLinks = this.getCrumbs(this.database); return <ViewsTabsSidebarLayout showEditView={false} docURL={designDocInfo.documentation()} endpoint={designDocInfo.url('apiurl')} dbName={this.database.id} dropDownLinks={dropDownLinks} database={this.database} selectedNavItem={selectedNavItem} designDocInfo={designDocInfo} partitionKey={partitionKey} />; }, globalAllDocs: function (databaseName, options) { return this.allDocs(databaseName, '', options); }, partitionedAllDocs: function (databaseName, partitionKey) { return this.allDocs(databaseName, partitionKey); }, /* * docParams are the options fauxton uses to fetch from the server * urlParams are what are shown in the url and to the user * They are not the same when paginating */ allDocs: function (databaseName, partitionKey, options) { const params = this.createParams(options); const docParams = params.docParams; const url = partitionKey ? FauxtonAPI.urls('partitioned_allDocs', 'server', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) : FauxtonAPI.urls('allDocsSanitized', 'server', databaseName); // this is used for the header and sidebar this.database.buildAllDocs(docParams); const onlyShowDdocs = !!(docParams.startkey && docParams.startkey.indexOf("_design") > -1); let tab = 'all-docs'; if (onlyShowDdocs) { tab = 'design-docs'; } const selectedNavItem = new SidebarItemSelection(tab); ComponentsActions.showDeleteDatabaseModal({showDeleteModal: false, dbId: ''}); const endpoint = partitionKey ? FauxtonAPI.urls('partitioned_allDocs', 'apiurl', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) : this.database.allDocs.urlRef("apiurl", {}); const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL; const navigateToPartitionedAllDocs = (partKey) => { const baseUrl = FauxtonAPI.urls('partitioned_allDocs', 'app', encodeURIComponent(databaseName), encodeURIComponent(partKey)); FauxtonAPI.navigate('#/' + baseUrl); }; const navigateToGlobalAllDocs = () => { const baseUrl = FauxtonAPI.urls('allDocs', 'app', encodeURIComponent(databaseName)); FauxtonAPI.navigate('#/' + baseUrl); }; const dropDownLinks = this.getCrumbs(this.database); DatabaseActions.fetchSelectedDatabaseInfo(databaseName); return <DocsTabsSidebarLayout docURL={docURL} endpoint={endpoint} dbName={this.database.id} dropDownLinks={dropDownLinks} database={this.database} designDocs={this.designDocs} fetchUrl={url} ddocsOnly={onlyShowDdocs} selectedNavItem={selectedNavItem} partitionKey={partitionKey} onPartitionKeySelected={navigateToPartitionedAllDocs} onGlobalModeSelected={navigateToGlobalAllDocs} globalMode={partitionKey === ''} />; }, changes: function (databaseName, partitionKey) { const selectedNavItem = new SidebarItemSelection('changes'); DatabaseActions.fetchSelectedDatabaseInfo(databaseName); return <ChangesSidebarLayout endpoint={FauxtonAPI.urls('changes', 'apiurl', this.database.id, '')} docURL={this.database.documentation()} dbName={this.database.id} dropDownLinks={this.getCrumbs(this.database)} database={this.database} selectedNavItem={selectedNavItem} partitionKey={partitionKey} />; } }); export default DocumentsRouteObject;