blob: 9b85a26f35ca605cda99a5efe8447a4f34586552 [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 { connect } from 'react-redux';
import SidebarComponents from './sidebar';
import Action from './actions';
import { getDatabase, getDesignDocPartitioned } from './reducers';
// returns a simple array of design doc IDs
const getAvailableDesignDocs = (state) => {
const availableDocs = state.designDocs.filter((doc) => {
return !doc.isMangoDoc();
});
return _.map(availableDocs, (doc) => {
return doc.id;
});
};
const getDeleteIndexDesignDoc = (state) => {
const designDoc = state.designDocs.find((ddoc) => {
return '_design/' + state.deleteIndexModalDesignDocName === ddoc.id;
});
return designDoc ? designDoc.dDocModel() : null;
};
const selectedNavItem = (selectedItem) => {
// resets previous selection and sets new values
const settings = {
designDocName: '',
designDocSection: '',
indexName: '',
navItem: '',
...selectedItem
};
return settings;
};
const mapStateToProps = ({ sidebar, databases }, ownProps) => {
return {
database: getDatabase(sidebar),
selectedNav: selectedNavItem(ownProps.selectedNavItem),
designDocs: sidebar.designDocs,
designDocList: sidebar.designDocList,
availableDesignDocIds: getAvailableDesignDocs(sidebar),
toggledSections: sidebar.toggledSections,
isLoading: sidebar.loading || databases.isLoadingDbInfo,
selectedPartitionKey: ownProps.selectedPartitionKey,
isDbPartitioned: databases.isDbPartitioned,
deleteIndexModalVisible: sidebar.deleteIndexModalVisible,
deleteIndexModalText: sidebar.deleteIndexModalText,
deleteIndexModalOnSubmit: sidebar.deleteIndexModalOnSubmit,
deleteIndexModalIndexName: sidebar.deleteIndexModalIndexName,
deleteIndexModalDesignDoc: getDeleteIndexDesignDoc(sidebar),
cloneIndexModalVisible: sidebar.cloneIndexModalVisible,
cloneIndexModalTitle: sidebar.cloneIndexModalTitle,
cloneIndexModalSelectedDesignDoc: sidebar.cloneIndexModalSelectedDesignDoc,
cloneIndexModalSelectedDesignDocPartitioned: getDesignDocPartitioned(sidebar, databases.isDbPartitioned),
cloneIndexModalNewDesignDocName: sidebar.cloneIndexModalNewDesignDocName,
cloneIndexModalNewDesignDocPartitioned: sidebar.cloneIndexModalNewDesignDocPartitioned,
cloneIndexModalOnSubmit: sidebar.cloneIndexModalOnSubmit,
cloneIndexDesignDocProp: sidebar.cloneIndexDesignDocProp,
cloneIndexModalNewIndexName: sidebar.cloneIndexModalNewIndexName,
cloneIndexSourceIndexName: sidebar.cloneIndexModalSourceIndexName,
cloneIndexSourceDesignDocName: sidebar.cloneIndexModalSourceDesignDocName,
cloneIndexModalIndexLabel: sidebar.cloneIndexModalIndexLabel
};
};
const mapDispatchToProps = (dispatch) => {
return {
toggleContent: (designDoc, indexGroup) => {
dispatch(Action.toggleContent(designDoc, indexGroup));
},
hideCloneIndexModal: () => {
dispatch(Action.hideCloneIndexModal());
},
hideDeleteIndexModal: () => {
dispatch(Action.hideDeleteIndexModal());
},
showDeleteIndexModal: (indexName, designDocName, indexLabel, onDelete) => {
dispatch(Action.showDeleteIndexModal(indexName, designDocName, indexLabel, onDelete));
},
showCloneIndexModal: (indexName, designDocName, indexLabel, onSubmit) => {
dispatch(Action.showCloneIndexModal(indexName, designDocName, indexLabel, onSubmit));
},
selectDesignDoc: (designDoc) => {
dispatch(Action.selectDesignDoc(designDoc));
},
updateNewDesignDocName: (designDocName) => {
dispatch(Action.updateNewDesignDocName(designDocName));
},
updateNewDesignDocPartitioned: (isPartitioned) => {
dispatch(Action.updateNewDesignDocPartitioned(isPartitioned));
},
setNewCloneIndexName: (indexName) => {
dispatch(Action.setNewCloneIndexName(indexName));
}
};
};
const SidebarControllerContainer = connect(
mapStateToProps,
mapDispatchToProps
)(SidebarComponents.SidebarController);
export default SidebarControllerContainer;