app/addons/documents/index-results/helpers/shared-helpers.js (91 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 app from "../../../../app"; import FauxtonAPI from "../../../../core/api"; import Constants from '../../constants'; const getDocUrl = (context, id, databaseName) => { if (context === undefined) { context = 'server'; } // new without id make a POST to the DB and not a PUT on a DB let safeId = app.utils.getSafeIdForDoc(id); if (!safeId) { safeId = ''; } const safeDatabaseName = encodeURIComponent(databaseName); return FauxtonAPI.urls('document', context, safeDatabaseName, safeId, '?conflicts=true'); }; const isJSONDocEditable = (doc, docType) => { if (!doc) { return; } if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) { return false; } if (!Object.keys(doc).length) { return false; } if (!doc._id) { return false; } return true; }; const isJSONDocBulkDeletable = (doc, docType) => { if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) { return doc.type !== 'special'; } const result = (doc._id || doc.id) && (doc._rev || (doc.value && doc.value.rev)); return !!result; }; const hasBulkDeletableDoc = (docs, docType) => { const doc = docs.find((doc) => { return isJSONDocBulkDeletable(doc, docType); }); return !!doc; }; // if we've previously set the perPage in local storage, default to that. const getDefaultPerPage = () => { if (window.localStorage) { const storedPerPage = app.utils.localStorageGet('fauxton:perpageredux'); if (storedPerPage) { return parseInt(storedPerPage, 10); } } return FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE; }; const isGhostDoc = (doc) => { // ghost docs are empty results where all properties were // filtered away by mango return !doc || !doc.attributes || !Object.keys(doc.attributes).length; }; const getDocId = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => { if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) { return doc.id || doc._id; } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) { return doc.type === 'special' ? '_all_docs' : doc.ddoc; } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) { return doc._id; } return doc.id || doc._id; }; const getDocRev = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => { if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) { if (doc.value) { return doc.value.rev; } return doc._rev; } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) { return undefined; } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) { return doc._rev; } return undefined; }; const errorReason = (error) => { return 'Reason: ' + ((error && error.message) || 'n/a'); }; export { getDocUrl, isGhostDoc, isJSONDocEditable, isJSONDocBulkDeletable, hasBulkDeletableDoc, getDefaultPerPage, getDocId, getDocRev, errorReason };