From 2d3a5ca457260fa3e7d22815c86eb19b862f9689 Mon Sep 17 00:00:00 2001 From: Tom Wayson Date: Mon, 4 Jan 2021 16:10:50 -0800 Subject: [PATCH 1/2] pass dataset request options to queryFeatures() --- packages/cedar-amcharts/CHANGELOG.md | 2 +- packages/cedar/CHANGELOG.md | 8 +++++++- packages/cedar/src/common.ts | 5 +++++ packages/cedar/src/query/query.ts | 3 ++- packages/cedar/test/query/query.spec.ts | 21 +++++++++++++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/cedar-amcharts/CHANGELOG.md b/packages/cedar-amcharts/CHANGELOG.md index 65102204..ee0141a9 100644 --- a/packages/cedar-amcharts/CHANGELOG.md +++ b/packages/cedar-amcharts/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## Unreleased +## 1.0.0 - Add tabindex properties to fillInSpec ## 1.0.0-rc.1 diff --git a/packages/cedar/CHANGELOG.md b/packages/cedar/CHANGELOG.md index 52f1e037..626865d3 100644 --- a/packages/cedar/CHANGELOG.md +++ b/packages/cedar/CHANGELOG.md @@ -5,6 +5,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added +- pass dataset request options to `queryFeatures()` + +## [1.0.1] + ### Fixed - make @esri/arcis-rest-* `peerDependencies` of @esri/cedar ### Changed @@ -282,7 +287,8 @@ Baseline version. - Basic interaction events: on, off, clicked - Map to Chart interaction demos -[Unreleased]: https://github.com/Esri/cedar/compare/v1.0.0...master +[Unreleased]: https://github.com/Esri/cedar/compare/v1.0.1...master +[1.0.1]: https://github.com/Esri/cedar/compare/v1.0.0...v1.0.1 [1.0.0]: https://github.com/Esri/cedar/compare/v1.0.0-rc.1...v1.0.0 [1.0.0-rc.1]: https://github.com/Esri/cedar/compare/v1.0.0-beta.9...v1.0.0-rc.1 [1.0.0-beta.9]: https://github.com/Esri/cedar/compare/v1.0.0-beta.8...v1.0.0-beta.9 diff --git a/packages/cedar/src/common.ts b/packages/cedar/src/common.ts index 94d63fa7..35c1fe2a 100644 --- a/packages/cedar/src/common.ts +++ b/packages/cedar/src/common.ts @@ -1,3 +1,4 @@ +import { IRequestOptions } from '@esri/arcgis-rest-request' import { IFeatureSet } from '@esri/arcgis-rest-types' export interface IField { @@ -72,6 +73,10 @@ export interface IDataset { * Values in these fields will be decoded using the coded value domain specified. */ domains?: IDomains + /** + * Options to use for requests to this dataset. See: https://esri.github.io/arcgis-rest-js/api/request/IRequestOptions/ + */ + requestOptions?: IRequestOptions } /** diff --git a/packages/cedar/src/query/query.ts b/packages/cedar/src/query/query.ts index 3c54738b..729de1ee 100644 --- a/packages/cedar/src/query/query.ts +++ b/packages/cedar/src/query/query.ts @@ -22,8 +22,9 @@ export function queryDatasets(datasets: IDataset[]) { const queryParams = createQueryParams(dataset.query) const options: IQueryFeaturesOptions = { + ...dataset.requestOptions, url: dataset.url, - params: queryParams + params: queryParams, } if (config.fetch && typeof config.fetch === 'function') { // we are configured to use a custom fetch implementation diff --git a/packages/cedar/test/query/query.spec.ts b/packages/cedar/test/query/query.spec.ts index b57b993d..b3991cb2 100644 --- a/packages/cedar/test/query/query.spec.ts +++ b/packages/cedar/test/query/query.spec.ts @@ -1,6 +1,7 @@ // NOTE: this is auto-mocked in __mocks__ import { queryFeatures, decodeValues } from '@esri/arcgis-rest-feature-layer' import {} from 'jest' +import { IDataset } from '../../src/common' import config from '../../src/config' import { queryDatasets } from '../../src/query/query' import { createQueryParams } from '../../src/query/url' @@ -88,6 +89,26 @@ describe('when querying datasets', () => { }) }) }) + describe('when that dataset has requestOptions', () => { + const datasets = definitions.bar.datasets + it('should merge them into those passed to queryFeatures', () => { + const httpMethod = 'POST' + const dataset: IDataset = datasets[0] + dataset.requestOptions = { + httpMethod + } + return queryDatasets(datasets).then((datasetsData) => { + // verify that it called queryFeatures once w/ the right parameters + expect(mockQueryFeatures.mock.calls.length).toEqual(1) + const requestOptions = mockQueryFeatures.mock.calls[0][0] + verifyRequestOptions(dataset, requestOptions) + expect(requestOptions.httpMethod).toEqual(httpMethod) + expect(datasetsData).toEqual({ + Number_of_SUM: mockQueryResponse + }) + }) + }) + }) }) describe('when multiple datasets', () => { beforeEach(() => { From d28433c75278a2515957152fd998fe94cd302891 Mon Sep 17 00:00:00 2001 From: Tom Wayson Date: Mon, 4 Jan 2021 16:51:20 -0800 Subject: [PATCH 2/2] merge dataset.requestOptions.params into the generated params --- packages/cedar/src/query/query.ts | 11 ++++++----- packages/cedar/test/query/query.spec.ts | 15 +++++++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/packages/cedar/src/query/query.ts b/packages/cedar/src/query/query.ts index 729de1ee..af68d658 100644 --- a/packages/cedar/src/query/query.ts +++ b/packages/cedar/src/query/query.ts @@ -17,14 +17,15 @@ export function queryDatasets(datasets: IDataset[]) { datasets.forEach((dataset, i) => { // only query datasets that don't have inline data if (dataset.url) { + const { url, name, query, requestOptions } = dataset // TODO: make name required on datasets, or required if > 1 dataset? - names.push(dataset.name || `dataset${i}`) + names.push(name || `dataset${i}`) - const queryParams = createQueryParams(dataset.query) + const params = { ...(requestOptions && requestOptions.params), ...createQueryParams(query) } const options: IQueryFeaturesOptions = { - ...dataset.requestOptions, - url: dataset.url, - params: queryParams, + ...requestOptions, + url, + params, } if (config.fetch && typeof config.fetch === 'function') { // we are configured to use a custom fetch implementation diff --git a/packages/cedar/test/query/query.spec.ts b/packages/cedar/test/query/query.spec.ts index b3991cb2..9105c47b 100644 --- a/packages/cedar/test/query/query.spec.ts +++ b/packages/cedar/test/query/query.spec.ts @@ -93,11 +93,18 @@ describe('when querying datasets', () => { const datasets = definitions.bar.datasets it('should merge them into those passed to queryFeatures', () => { const httpMethod = 'POST' - const dataset: IDataset = datasets[0] - dataset.requestOptions = { - httpMethod + const dataset: IDataset = { + ...datasets[0], + requestOptions: { + // override default HTTP method + httpMethod, + params: { + // invalid param should NOT be used + f: 'html' + } + } } - return queryDatasets(datasets).then((datasetsData) => { + return queryDatasets([ dataset ]).then((datasetsData) => { // verify that it called queryFeatures once w/ the right parameters expect(mockQueryFeatures.mock.calls.length).toEqual(1) const requestOptions = mockQueryFeatures.mock.calls[0][0]