From 059fd940418e7c0f6ddaec0d30d3b35761ff1c38 Mon Sep 17 00:00:00 2001 From: azure_pipelines Date: Tue, 1 Sep 2020 16:10:53 -0400 Subject: [PATCH] added expandAllContentLinks and test --- package-lock.json | 2 +- package.json | 2 +- src/methods/getContentList.js | 10 +++++++--- src/utils.js | 7 ++++++- test/getContentList.tests.js | 26 ++++++++++++++++++++------ 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 350be3b..18e8ec7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@agility/content-fetch", - "version": "0.8.1", + "version": "0.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 756aba3..29e36cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@agility/content-fetch", - "version": "0.8.2", + "version": "0.9.0", "description": "JavaScript library for the Agility Fetch API (node and browser)", "main": "dist/agility-content-fetch.node.js", "scripts": { diff --git a/src/methods/getContentList.js b/src/methods/getContentList.js index f5217b3..57820bc 100644 --- a/src/methods/getContentList.js +++ b/src/methods/getContentList.js @@ -6,7 +6,8 @@ import {buildPathUrl, buildRequestUrlPath, buildAuthHeader } from '../utils' * @param {Object} requestParams - The parameters for the API request. * @param {string} requestParams.referenceName - The unique reference name of the content list you wish to retrieve in the specified language. * @param {string} requestParams.languageCode - The language code of the content you want to retrieve. - * @param {number} [requestParams.contentLinkDepth] - The depth, representing the levels in which you want linked content auto-resolved. Default is 1. + * @param {number} [requestParams.contentLinkDepth] - The depth, representing the levels in which you want linked content auto-resolved. Default is *1*. + * @param {boolean} [requestParams.expandAllContentLinks] - Whether or not to expand entire linked content references, includings lists and items that are rendered in the CMS as Grid or Link. Default is *false* * @param {number} [requestParams.take] - The maximum number of items to retrieve in this request. Default is **10**. Maximum allowed is **50**. * @param {number} [requestParams.skip] - The number of items to skip from the list. Default is **0**. Used for implementing pagination. * @param {string} [requestParams.sort] - The field to sort the results by. Example *fields.title* or *properties.modified*. @@ -64,7 +65,7 @@ function getContentList(requestParams) { requestParams = {...defaultParams, ...requestParams}; const req = { - url: buildPathUrl("list", requestParams.referenceName, requestParams.skip, requestParams.take, requestParams.sort, requestParams.direction, requestParams.filters, requestParams.filtersLogicOperator, requestParams.contentLinkDepth), + url: buildPathUrl("list", requestParams.referenceName, requestParams.skip, requestParams.take, requestParams.sort, requestParams.direction, requestParams.filters, requestParams.filtersLogicOperator, requestParams.contentLinkDepth, requestParams.expandAllContentLinks), method: 'get', baseURL: buildRequestUrlPath(this.config, requestParams.languageCode), headers: buildAuthHeader(this.config), @@ -117,13 +118,16 @@ function validateRequestParams(requestParams) { } } else if (requestParams.filtersLogicOperator && requestParams.filtersLogicOperator.toLowerCase() !== 'and' && requestParams.filtersLogicOperator.toLowerCase() !== 'or') { throw new TypeError('FiltersLogicOperator parameter must have a value of "AND" or "OR"'); + } else if(requestParams.expandAllContentLinks && typeof requestParams.expandAllContentLinks !== 'boolean') { + throw new TypeError('ExpandAllContentLinks parameter must be a value of true or false'); } return true; } const defaultParams = { - contentLinkDepth: 1 + contentLinkDepth: 1, + expandAllContentLinks: false } export default getContentList; \ No newline at end of file diff --git a/src/utils.js b/src/utils.js index c156166..e6206e3 100644 --- a/src/utils.js +++ b/src/utils.js @@ -19,7 +19,7 @@ function buildRequestUrlPath(config, languageCode) { return urlPath; } -function buildPathUrl(contentType, referenceName, skip, take, sort, direction, filters, filtersLogicOperator, contentLinkDepth) { +function buildPathUrl(contentType, referenceName, skip, take, sort, direction, filters, filtersLogicOperator, contentLinkDepth, expandAllContentLinks) { let url = `/${contentType}/${referenceName}?contentLinkDepth=${contentLinkDepth}&`; filtersLogicOperator = filtersLogicOperator ? ` ${filtersLogicOperator} ` : ' AND '; @@ -46,6 +46,11 @@ function buildPathUrl(contentType, referenceName, skip, take, sort, direction, f } url += '&'; } + + if(expandAllContentLinks) { + url += `expandAllContentLinks=${expandAllContentLinks}&`; + } + return url; } diff --git a/test/getContentList.tests.js b/test/getContentList.tests.js index 9dacc08..925ad81 100644 --- a/test/getContentList.tests.js +++ b/test/getContentList.tests.js @@ -302,11 +302,25 @@ describe('getContentList:', function() { filters: [{property: 'contentID', operator: api.types.FilterOperators.EQUAL_TO, value: '16'}, {property: 'properties.referenceName', operator: api.types.FilterOperators.LIKE, value: 'posts'}], filtersLogicOperator: api.types.FilterLogicOperators.AND }) - .then(function(contentList) { - assert.strictEqual(contentList.items[0].contentID, 16); - assert.strictEqual(contentList.items.length, 1); - done(); - }) - .catch(done); + .then(function(contentList) { + assert.strictEqual(contentList.items[0].contentID, 16); + assert.strictEqual(contentList.items.length, 1); + done(); + }) + .catch(done); }); + + it('should expand all content links when expandContentLinks are set to true', function(done) { + var api = createApiClient(); + api.getContentList({ + referenceName: 'posts', + languageCode: 'en-us', + expandAllContentLinks: true + }) + .then(function(contentList) { + console.log(contentList); + done(); + }) + .catch(done); + }) }); \ No newline at end of file