blob: 86d139b37dff068f2d9fceb3c627db018652b39e [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 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
};