UNPKG

d2

Version:

Javascript library for DHIS2

131 lines (117 loc) 4.42 kB
import AnalyticsRequest from './AnalyticsRequest' /** * @private * @description * AnalyticsRequest dimensions mixin function * * @param {*} base The base class to mix onto * @return {module:analytics.AnalyticsRequestDimensionsMixin} The mixin class */ /** * @private * @description * AnalyticsRequest dimensions mixin class * * @alias module:analytics.AnalyticsRequestDimensionsMixin */ const AnalyticsRequestDimensionsMixin = base => class extends base { /** * Adds/updates the dx dimension to use in the request. * * @param {!(String|Array)} items The dimension items to add to the dx dimension * * @returns {AnalyticsRequest} A new instance of the class for chaining purposes * * @example * const req = new d2.analytics.request() * .addDataDimension(['fbfJHSPpUQD', 'cYeuwXTCPkU']) * .addDataDimension('BfMAe6Itzgt.REPORTING_RATE'); * * // dimension=dx:fbfJHSPpUQD;cYeuwXTCPkU;BfMAe6Itzgt.REPORTING_RATE * */ addDataDimension(items) { return this.addDimension('dx', items) } /** * Adds/updates the pe dimension to use in the request. * * @param {!(String|Array)} items The dimension items to add to the pe dimension * * @returns {AnalyticsRequest} A new instance of the class for chaining purposes * * @example * const req = new d2.analytics.request() * .addPeriodDimension(['201701', '201702']) * .addPeriodDimension('LAST_4_QUARTERS'); * * // dimension=pe:201701;201702;LAST_4_QUARTERS */ addPeriodDimension(items) { return this.addDimension('pe', items) } /** * Adds/updates the ou dimension to use in the request. * * @param {!(String|Array)} items The dimension items to add to the ou dimension * * @returns {AnalyticsRequest} A new instance of the class for chaining purposes * * @example * const req = new d2.analytics.request() * .addOrgUnitDimension(['O6uvpzGd5pu', 'lc3eMKXaEfw']) * .addOrgUnitDimension('OU_GROUP-w0gFTTmsUcF'); * * // dimension=ou:O6uvpzGd5pu;lc3eMKXaEfw;OU_GROUP-w0gFTTmsUcF */ addOrgUnitDimension(items) { return this.addDimension('ou', items) } /** * Adds a new dimension or updates an existing one to use in the request. * * @param {!String} dimension The dimension to add to the request * @param {(String|Array)} items The dimension items to add to the dimension * * @returns {AnalyticsRequest} A new instance of the class for chaining purposes * * @example * const req = new d2.analytics.request() * .addDimension('Bpx0589u8y0', ['oRVt7g429ZO', 'MAs88nJc9nL']) * .addDimension('qrur9Dvnyt5-Yf6UHoPkdS6'); * * // dimension=Bpx0589u8y0:oRVt7g429ZO;MAs88nJc9nL&dimension=qrur9Dvnyt5-Yf6UHoPkdS6 */ // eslint-disable-next-line complexity addDimension(dimension, items) { let dimensionIndex = 0 const existingDimension = this.dimensions.find((item, index) => { if (item.dimension === dimension) { dimensionIndex = index return item } return false }) let updatedItems = [] let existingItems = [] if (existingDimension) { existingItems = existingDimension.items || [] } if (typeof items === 'string') { updatedItems = [...new Set([...existingItems, items])] } else if (Array.isArray(items)) { updatedItems = [...new Set([...existingItems, ...items])] } if (existingDimension) { this.dimensions.splice(dimensionIndex, 1, { dimension, items: updatedItems, }) } else { this.dimensions.push({ dimension, items: updatedItems }) } return new AnalyticsRequest(this) } } export default AnalyticsRequestDimensionsMixin