prismic-website
Version:
A ready to use webserver (Express base) with utility methods for working with Prismic.io.
63 lines (53 loc) • 1.67 kB
JavaScript
var logger = require('logfmt');
var Promise = require('promise');
var Prismic = require('prismic.io').Prismic;
module.exports = function query(ctx, params) {
if (!ctx.api || !ctx.ref) {
logger.log({
type: 'warning',
msg: 'ctx must include a reference and Prismic API'
});
return false;
}
var limit = params.limit || 20;
var sort = params.sort || false;
var predicate = null;
if (params.type) {
if (typeof params.type === 'string') {
predicate = Prismic.Predicates.at('document.type', params.type);
}
if (params.type instanceof Array) {
predicate = Prismic.Predicates.any('document.type', params.type);
}
}
if (params.id && predicate === null) {
if (typeof params.id === 'string') {
predicate = Prismic.Predicates.at('document.id', params.id);
}
if (params.id instanceof Array) {
predicate = Prismic.Predicates.any('document.id', params.id);
}
}
if (predicate === null) {
logger.log({
type: 'warning',
msg: 'Missing query type or id'
});
return false;
}
return new Promise(function (resolve, reject) {
var request = ctx.api.form('everything')
.ref(ctx.ref)
.query(predicate)
.pageSize(limit);
if (sort) {
request.orderings(sort);
}
request.submit(function(err, response) {
if (err) {
return reject(err);
}
resolve(response);
});
});
}