papir
Version:
Rest API Modelling library
165 lines (132 loc) • 3.94 kB
JavaScript
/**
* Query
*/
export default class Query {
constructor (endpoint) {
let accessor = this
let queries = []
let argsMap = {}
if (endpoint.shared.map && typeof endpoint.shared.map.args !== 'undefined') {
argsMap = endpoint.shared.map.args
}
accessor.custom = (key, value) => {
// Resolve mapping
if (typeof argsMap[key] !== 'undefined') {
key = argsMap[key]
}
// Ensures new arg (key, value) is added at end of query
let newQ = []
queries.forEach(query => {
if (query.key !== key) {
newQ.push(query)
}
})
newQ.push({
key: key,
value: value
})
queries = newQ
return accessor
}
accessor.exclude = (value) => {
return accessor.custom('exclude', value)
}
accessor.include = (value) => {
return accessor.custom('include', value)
}
accessor.parent = (value) => {
return accessor.custom('parent', value)
}
accessor.parentExclude = (value) => {
return accessor.custom('parent_exclude', value)
}
accessor.slug = (value) => {
return accessor.custom('slug', value)
}
accessor.status = (value) => {
return accessor.custom('status', value)
}
accessor.type = (value) => {
return accessor.custom('type', value)
}
accessor.sku = (value) => {
return accessor.custom('sku', value)
}
accessor.featured = (value) => {
return accessor.custom('featured', value)
}
accessor.shippingClass = (value) => {
return accessor.custom('shipping_class', value)
}
accessor.attribute = (value) => {
return accessor.custom('attribute', value)
}
accessor.attributeTerm = (value) => {
return accessor.custom('attribute_term', value)
}
accessor.taxClass = (value) => {
return accessor.custom('tax_class', value)
}
accessor.inStock = (value = true) => {
return accessor.custom('in_stock', value)
}
accessor.onSale = (value = true) => {
return accessor.custom('on_sale', value)
}
accessor.product = (value) => {
return accessor.custom('product', value)
}
accessor.minPrice = (value = 0) => {
return accessor.custom('min_price', value)
}
accessor.maxPrice = (value = 10000) => {
return accessor.custom('max_price', value)
}
accessor.after = (value) => {
return accessor.custom('after', value)
}
accessor.before = (value) => {
return accessor.custom('before', value)
}
accessor.hideEmpty = (value = true) => {
return accessor.custom('hide_empty', value)
}
accessor.order = (value = 'desc') => {
return accessor.custom('order', value)
}
accessor.orderby = (value = 'menu_order') => {
return accessor.custom('orderby', value)
}
accessor.offset = (value = 100) => {
return accessor.custom('offset', value)
}
accessor.search = (value = '') => {
return accessor.custom('search', value)
}
accessor.page = (value = 1) => {
return accessor.custom('page', value)
}
accessor.limit = (value = 12) => {
return accessor.custom('per_page', value)
}
accessor.perPage = accessor.limit
accessor.category = (value = 0) => {
return accessor.custom('category', value)
}
accessor.context = (value = 'view') => {
return accessor.custom('context', value)
}
accessor.tag = (value = 0) => {
return accessor.custom('tag', value)
}
accessor.fetch = (apiSlug = endpoint.shared.defaultApi, args = null, replace = true) => {
// Merge args with queries as its just two different ways of using args
if (args !== null) {
args.forEach(arg => {
return accessor.custom(arg.key, arg.value)
})
}
return endpoint.fetch(apiSlug, queries, replace)
}
}
}