blob: b4981f0fba69198722441b482122d5a017097e14 [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.
import React from 'react';
import app from '../../app';
import FauxtonAPI from '../../core/api';
import Databases from '../databases/resources';
import DatabaseActions from '../databases/actions';
import Documents from './shared-resources';
import {MangoLayoutContainer} from './mangolayout';
const MangoIndexEditorAndQueryEditor = FauxtonAPI.RouteObject.extend({
selectedHeader: 'Databases',
hideApiBar: true,
hideNotificationCenter: true,
routes: {
'database/:database/_partition/:partitionkey/_index': {
route: 'createIndex',
roles: ['fx_loggedIn']
},
'database/:database/_index': {
route: 'createIndexNoPartition',
roles: ['fx_loggedIn']
},
'database/:database/_partition/:partitionkey/_find': {
route: 'findUsingIndex',
roles: ['fx_loggedIn']
},
'database/:database/_find': {
route: 'findUsingIndexNoPartition',
roles: ['fx_loggedIn']
},
},
initialize: function (route, options) {
var databaseName = options[0];
this.databaseName = databaseName;
this.database = new Databases.Model({id: databaseName});
},
findUsingIndexNoPartition: function (database) {
return this.findUsingIndex(database, '');
},
findUsingIndex: function (database, partitionKey) {
const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
const url = FauxtonAPI.urls(
'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
);
const partKeyUrlComponent = partitionKey ? `/${encodedPartitionKey}` : '';
const fetchUrl = '/' + encodeURIComponent(this.databaseName) + partKeyUrlComponent + '/_find';
const crumbs = [
{name: database, link: url},
{name: app.i18n.en_US['mango-title-editor']}
];
const endpoint = FauxtonAPI.urls('mango', 'query-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
const navigateToPartitionedView = (partKey) => {
const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database),
encodeURIComponent(partKey));
FauxtonAPI.navigate('#/' + baseUrl);
};
const navigateToGlobalView = () => {
const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database));
FauxtonAPI.navigate('#/' + baseUrl);
};
return <MangoLayoutContainer
database={database}
crumbs={crumbs}
docURL={FauxtonAPI.constants.DOC_URLS.MANGO_SEARCH}
endpoint={endpoint}
edit={false}
databaseName={this.databaseName}
fetchUrl={fetchUrl}
partitionKey={partitionKey}
onPartitionKeySelected={navigateToPartitionedView}
onGlobalModeSelected={navigateToGlobalView}
globalMode={partitionKey === ''}
/>;
},
createIndexNoPartition: function (database) {
return this.createIndex(database, '');
},
createIndex: function (database, partitionKey) {
const designDocs = new Documents.AllDocs(null, {
database: this.database,
paging: {
pageSize: 500
},
params: {
startkey: '_design/',
endkey: '_design0',
include_docs: true,
limit: 500
}
});
const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
const url = FauxtonAPI.urls(
'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
);
const endpoint = FauxtonAPI.urls('mango', 'index-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
const crumbs = [
{name: database, link: url},
{name: app.i18n.en_US['mango-indexeditor-title']}
];
DatabaseActions.fetchSelectedDatabaseInfo(database);
return <MangoLayoutContainer
showIncludeAllDocs={false}
crumbs={crumbs}
docURL={FauxtonAPI.constants.DOC_URLS.MANGO_INDEX}
endpoint={endpoint}
edit={true}
designDocs={designDocs}
databaseName={this.databaseName}
partitionKey={partitionKey}
/>;
}
});
export default {
MangoIndexEditorAndQueryEditor: MangoIndexEditorAndQueryEditor
};