@deck.gl/carto 8.5.5 → 8.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dist.dev.js CHANGED
@@ -10568,10 +10568,11 @@ async function request({method, url, format, accessToken, body}) {
10568
10568
  */
10569
10569
  function dealWithError({response, error}) {
10570
10570
  switch (response.status) {
10571
+ case 400:
10572
+ throw new Error(`Bad request. ${error}`);
10571
10573
  case 401:
10572
10574
  case 403:
10573
- throw new Error(`Unauthorized access to Maps API`);
10574
-
10575
+ throw new Error(`Unauthorized access. ${error}`);
10575
10576
  default:
10576
10577
  throw new Error(error);
10577
10578
  }
@@ -10580,19 +10581,35 @@ function dealWithError({response, error}) {
10580
10581
  /**
10581
10582
  * Build a URL with all required parameters
10582
10583
  */
10583
- function getParameters({type, source}) {
10584
+ function getParameters({type, source, geoColumn, columns}) {
10584
10585
  const encodedClient = Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])('client', 'deck-gl-carto');
10585
10586
  const parameters = [encodedClient];
10586
10587
 
10587
10588
  const sourceName = type === _maps_api_common__WEBPACK_IMPORTED_MODULE_1__["MAP_TYPES"].QUERY ? 'q' : 'name';
10588
10589
  parameters.push(Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])(sourceName, source));
10589
10590
 
10591
+ if (type === _maps_api_common__WEBPACK_IMPORTED_MODULE_1__["MAP_TYPES"].TABLE) {
10592
+ if (geoColumn) {
10593
+ parameters.push(Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])('geo_column', geoColumn));
10594
+ }
10595
+ if (columns) {
10596
+ parameters.push(Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])('columns', columns.join(',')));
10597
+ }
10598
+ }
10599
+
10590
10600
  return parameters.join('&');
10591
10601
  }
10592
10602
 
10593
- async function mapInstantiation({type, source, connection, credentials}) {
10603
+ async function mapInstantiation({
10604
+ type,
10605
+ source,
10606
+ connection,
10607
+ credentials,
10608
+ geoColumn,
10609
+ columns
10610
+ }) {
10594
10611
  const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;
10595
- const url = `${baseUrl}?${getParameters({type, source})}`;
10612
+ const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns})}`;
10596
10613
  const {accessToken} = credentials;
10597
10614
 
10598
10615
  const format = 'json';
@@ -10619,7 +10636,7 @@ function getUrlFromMetadata(metadata, format) {
10619
10636
  return null;
10620
10637
  }
10621
10638
 
10622
- async function getData({type, source, connection, credentials, format}) {
10639
+ async function getData({type, source, connection, credentials, geoColumn, columns, format}) {
10623
10640
  const localCreds = {...Object(_config__WEBPACK_IMPORTED_MODULE_0__["getDefaultCredentials"])(), ...credentials};
10624
10641
 
10625
10642
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_2__["log"].assert(connection, 'Must define connection');
@@ -10635,7 +10652,14 @@ async function getData({type, source, connection, credentials, format}) {
10635
10652
  localCreds.mapsUrl = Object(_config__WEBPACK_IMPORTED_MODULE_0__["buildMapsUrlFromBase"])(localCreds.apiBaseUrl);
10636
10653
  }
10637
10654
 
10638
- const metadata = await mapInstantiation({type, source, connection, credentials: localCreds});
10655
+ const metadata = await mapInstantiation({
10656
+ type,
10657
+ source,
10658
+ connection,
10659
+ credentials: localCreds,
10660
+ geoColumn,
10661
+ columns
10662
+ });
10639
10663
  let url;
10640
10664
  let mapFormat;
10641
10665
 
@@ -10915,7 +10939,13 @@ const defaultProps = {
10915
10939
  /* API v3 PARAMETERS */
10916
10940
  /**********************/
10917
10941
  // (String, required): connection name at CARTO platform
10918
- connection: null
10942
+ connection: null,
10943
+
10944
+ // (String, optional): name of the `geo_column` in the CARTO platform. Use this override the default column ('geom'), from which the geometry information should be fetched.
10945
+ geoColumn: null,
10946
+
10947
+ // (Array<String>, optional): names of columns to fetch. By default, all columns are fetched.
10948
+ columns: {type: 'array', value: null}
10919
10949
  };
10920
10950
 
10921
10951
  class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLayer"] {
@@ -10931,7 +10961,7 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
10931
10961
  }
10932
10962
 
10933
10963
  _checkProps(props) {
10934
- const {type, credentials, connection} = props;
10964
+ const {type, credentials, connection, geoColumn, columns} = props;
10935
10965
  const localCreds = {...Object(_config__WEBPACK_IMPORTED_MODULE_3__["getDefaultCredentials"])(), ...credentials};
10936
10966
  const {apiVersion} = localCreds;
10937
10967
 
@@ -10946,12 +10976,21 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
10946
10976
  `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`
10947
10977
  );
10948
10978
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);
10979
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!geoColumn, `geoColumn prop is not supported for apiVersion ${apiVersion}`);
10980
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!columns, `columns prop is not supported for apiVersion ${apiVersion}`);
10949
10981
  } else if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V3) {
10950
10982
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(connection, 'Missing mandatory connection parameter');
10951
10983
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(
10952
10984
  Object.values(_api_maps_api_common__WEBPACK_IMPORTED_MODULE_2__["MAP_TYPES"]).includes(type),
10953
10985
  `Invalid type ${type}. Use MAP_TYPES enum.`
10954
10986
  );
10987
+ if (type !== _api_maps_api_common__WEBPACK_IMPORTED_MODULE_2__["MAP_TYPES"].TABLE) {
10988
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!geoColumn, `geoColumn prop is only supported for type ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_2__["MAP_TYPES"].TABLE}`);
10989
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!columns, `columns prop is only supported for type ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_2__["MAP_TYPES"].TABLE}`);
10990
+ }
10991
+ if (columns) {
10992
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(Array.isArray(columns), 'columns prop must be an Array');
10993
+ }
10955
10994
  }
10956
10995
  }
10957
10996
 
@@ -10960,6 +10999,8 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
10960
10999
  const shouldUpdateData =
10961
11000
  changeFlags.dataChanged ||
10962
11001
  props.connection !== oldProps.connection ||
11002
+ props.geoColumn !== oldProps.geoColumn ||
11003
+ JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) ||
10963
11004
  props.type !== oldProps.type ||
10964
11005
  JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);
10965
11006
 
@@ -10971,7 +11012,7 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
10971
11012
 
10972
11013
  async _updateData() {
10973
11014
  try {
10974
- const {type, data: source, connection, credentials} = this.props;
11015
+ const {type, data: source, connection, credentials, geoColumn, columns} = this.props;
10975
11016
  const localConfig = {...Object(_config__WEBPACK_IMPORTED_MODULE_3__["getDefaultCredentials"])(), ...credentials};
10976
11017
  const {apiVersion} = localConfig;
10977
11018
 
@@ -10982,7 +11023,9 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
10982
11023
  type,
10983
11024
  source,
10984
11025
  connection,
10985
- credentials
11026
+ credentials,
11027
+ geoColumn,
11028
+ columns
10986
11029
  });
10987
11030
  } else if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V2) {
10988
11031
  data = await Object(_api__WEBPACK_IMPORTED_MODULE_1__["getDataV2"])({type, source, credentials});
@@ -107,9 +107,12 @@ function dealWithError(_ref2) {
107
107
  error = _ref2.error;
108
108
 
109
109
  switch (response.status) {
110
+ case 400:
111
+ throw new Error("Bad request. ".concat(error));
112
+
110
113
  case 401:
111
114
  case 403:
112
- throw new Error("Unauthorized access to Maps API");
115
+ throw new Error("Unauthorized access. ".concat(error));
113
116
 
114
117
  default:
115
118
  throw new Error(error);
@@ -118,11 +121,24 @@ function dealWithError(_ref2) {
118
121
 
119
122
  function getParameters(_ref3) {
120
123
  var type = _ref3.type,
121
- source = _ref3.source;
124
+ source = _ref3.source,
125
+ geoColumn = _ref3.geoColumn,
126
+ columns = _ref3.columns;
122
127
  var encodedClient = (0, _mapsApiCommon.encodeParameter)('client', 'deck-gl-carto');
123
128
  var parameters = [encodedClient];
124
129
  var sourceName = type === _mapsApiCommon.MAP_TYPES.QUERY ? 'q' : 'name';
125
130
  parameters.push((0, _mapsApiCommon.encodeParameter)(sourceName, source));
131
+
132
+ if (type === _mapsApiCommon.MAP_TYPES.TABLE) {
133
+ if (geoColumn) {
134
+ parameters.push((0, _mapsApiCommon.encodeParameter)('geo_column', geoColumn));
135
+ }
136
+
137
+ if (columns) {
138
+ parameters.push((0, _mapsApiCommon.encodeParameter)('columns', columns.join(',')));
139
+ }
140
+ }
141
+
126
142
  return parameters.join('&');
127
143
  }
128
144
 
@@ -132,16 +148,18 @@ function mapInstantiation(_x2) {
132
148
 
133
149
  function _mapInstantiation() {
134
150
  _mapInstantiation = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(_ref4) {
135
- var type, source, connection, credentials, baseUrl, url, accessToken, format, body;
151
+ var type, source, connection, credentials, geoColumn, columns, baseUrl, url, accessToken, format, body;
136
152
  return _regenerator.default.wrap(function _callee2$(_context2) {
137
153
  while (1) {
138
154
  switch (_context2.prev = _context2.next) {
139
155
  case 0:
140
- type = _ref4.type, source = _ref4.source, connection = _ref4.connection, credentials = _ref4.credentials;
156
+ type = _ref4.type, source = _ref4.source, connection = _ref4.connection, credentials = _ref4.credentials, geoColumn = _ref4.geoColumn, columns = _ref4.columns;
141
157
  baseUrl = "".concat(credentials.mapsUrl, "/").concat(connection, "/").concat(type);
142
158
  url = "".concat(baseUrl, "?").concat(getParameters({
143
159
  type: type,
144
- source: source
160
+ source: source,
161
+ geoColumn: geoColumn,
162
+ columns: columns
145
163
  }));
146
164
  accessToken = credentials.accessToken;
147
165
  format = 'json';
@@ -204,13 +222,13 @@ function getData(_x3) {
204
222
 
205
223
  function _getData() {
206
224
  _getData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(_ref5) {
207
- var type, source, connection, credentials, format, localCreds, metadata, url, mapFormat, prioritizedFormats, _i, _prioritizedFormats, f, accessToken;
225
+ var type, source, connection, credentials, geoColumn, columns, format, localCreds, metadata, url, mapFormat, prioritizedFormats, _i, _prioritizedFormats, f, accessToken;
208
226
 
209
227
  return _regenerator.default.wrap(function _callee3$(_context3) {
210
228
  while (1) {
211
229
  switch (_context3.prev = _context3.next) {
212
230
  case 0:
213
- type = _ref5.type, source = _ref5.source, connection = _ref5.connection, credentials = _ref5.credentials, format = _ref5.format;
231
+ type = _ref5.type, source = _ref5.source, connection = _ref5.connection, credentials = _ref5.credentials, geoColumn = _ref5.geoColumn, columns = _ref5.columns, format = _ref5.format;
214
232
  localCreds = _objectSpread(_objectSpread({}, (0, _config.getDefaultCredentials)()), credentials);
215
233
 
216
234
  _core.log.assert(connection, 'Must define connection');
@@ -236,7 +254,9 @@ function _getData() {
236
254
  type: type,
237
255
  source: source,
238
256
  connection: connection,
239
- credentials: localCreds
257
+ credentials: localCreds,
258
+ geoColumn: geoColumn,
259
+ columns: columns
240
260
  });
241
261
 
242
262
  case 12:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["MAX_GET_LENGTH","request","method","url","format","accessToken","body","headers","Accept","Authorization","fetch","response","Error","FORMATS","NDJSON","json","ok","dealWithError","error","rows","status","getParameters","type","source","encodedClient","parameters","sourceName","MAP_TYPES","QUERY","push","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","getData","localCreds","log","assert","apiVersion","API_VERSIONS","V3","apiBaseUrl","mapFormat","prioritizedFormats","GEOJSON","TILEJSON","f"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 401:\n case 403:\n throw new Error(`Unauthorized access to Maps API`);\n\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source}) {\n const encodedClient = encodeParameter('client', 'deck-gl-carto');\n const parameters = [encodedClient];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({type, source, connection, credentials}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: 'deck-gl-carto'\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nexport async function getData({type, source, connection, credentials, format}) {\n const localCreds = {...getDefaultCredentials(), ...credentials};\n\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n log.assert(localCreds.mapsUrl, 'mapsUrl cannot be undefined');\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({type, source, connection, credentials: localCreds});\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n\n return await request({url, format: mapFormat, accessToken});\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["MAX_GET_LENGTH","request","method","url","format","accessToken","body","headers","Accept","Authorization","fetch","response","Error","FORMATS","NDJSON","json","ok","dealWithError","error","rows","status","getParameters","type","source","geoColumn","columns","encodedClient","parameters","sourceName","MAP_TYPES","QUERY","push","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","getData","localCreds","log","assert","apiVersion","API_VERSIONS","V3","apiBaseUrl","mapFormat","prioritizedFormats","GEOJSON","TILEJSON","f"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source, geoColumn, columns}) {\n const encodedClient = encodeParameter('client', 'deck-gl-carto');\n const parameters = [encodedClient];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns\n}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: 'deck-gl-carto'\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nexport async function getData({type, source, connection, credentials, geoColumn, columns, format}) {\n const localCreds = {...getDefaultCredentials(), ...credentials};\n\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n log.assert(localCreds.mapsUrl, 'mapsUrl cannot be undefined');\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns\n });\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n\n return await request({url, format: mapFormat, accessToken});\n}\n"],"file":"maps-v3-client.js"}
@@ -60,7 +60,12 @@ var defaultProps = {
60
60
  optional: true
61
61
  },
62
62
  credentials: null,
63
- connection: null
63
+ connection: null,
64
+ geoColumn: null,
65
+ columns: {
66
+ type: 'array',
67
+ value: null
68
+ }
64
69
  };
65
70
 
66
71
  var CartoLayer = function (_CompositeLayer) {
@@ -86,7 +91,9 @@ var CartoLayer = function (_CompositeLayer) {
86
91
  value: function _checkProps(props) {
87
92
  var type = props.type,
88
93
  credentials = props.credentials,
89
- connection = props.connection;
94
+ connection = props.connection,
95
+ geoColumn = props.geoColumn,
96
+ columns = props.columns;
90
97
 
91
98
  var localCreds = _objectSpread(_objectSpread({}, (0, _config.getDefaultCredentials)()), credentials);
92
99
 
@@ -98,10 +105,24 @@ var CartoLayer = function (_CompositeLayer) {
98
105
  _core.log.assert(type === _mapsApiCommon.MAP_TYPES.QUERY || type === _mapsApiCommon.MAP_TYPES.TILESET, "Invalid type ".concat(type, ". Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ").concat(apiVersion));
99
106
 
100
107
  _core.log.assert(!connection, "Connection prop is not supported for apiVersion ".concat(apiVersion));
108
+
109
+ _core.log.assert(!geoColumn, "geoColumn prop is not supported for apiVersion ".concat(apiVersion));
110
+
111
+ _core.log.assert(!columns, "columns prop is not supported for apiVersion ".concat(apiVersion));
101
112
  } else if (apiVersion === _api.API_VERSIONS.V3) {
102
113
  _core.log.assert(connection, 'Missing mandatory connection parameter');
103
114
 
104
115
  _core.log.assert(Object.values(_mapsApiCommon.MAP_TYPES).includes(type), "Invalid type ".concat(type, ". Use MAP_TYPES enum."));
116
+
117
+ if (type !== _mapsApiCommon.MAP_TYPES.TABLE) {
118
+ _core.log.assert(!geoColumn, "geoColumn prop is only supported for type ".concat(_mapsApiCommon.MAP_TYPES.TABLE));
119
+
120
+ _core.log.assert(!columns, "columns prop is only supported for type ".concat(_mapsApiCommon.MAP_TYPES.TABLE));
121
+ }
122
+
123
+ if (columns) {
124
+ _core.log.assert(Array.isArray(columns), 'columns prop must be an Array');
125
+ }
105
126
  }
106
127
  }
107
128
  }, {
@@ -113,7 +134,7 @@ var CartoLayer = function (_CompositeLayer) {
113
134
 
114
135
  this._checkProps(props);
115
136
 
116
- var shouldUpdateData = changeFlags.dataChanged || props.connection !== oldProps.connection || props.type !== oldProps.type || JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);
137
+ var shouldUpdateData = changeFlags.dataChanged || props.connection !== oldProps.connection || props.geoColumn !== oldProps.geoColumn || JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) || props.type !== oldProps.type || JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);
117
138
 
118
139
  if (shouldUpdateData) {
119
140
  this.setState({
@@ -128,14 +149,14 @@ var CartoLayer = function (_CompositeLayer) {
128
149
  key: "_updateData",
129
150
  value: function () {
130
151
  var _updateData2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee() {
131
- var _this$props, type, source, connection, credentials, localConfig, apiVersion, data;
152
+ var _this$props, type, source, connection, credentials, geoColumn, columns, localConfig, apiVersion, data;
132
153
 
133
154
  return _regenerator.default.wrap(function _callee$(_context) {
134
155
  while (1) {
135
156
  switch (_context.prev = _context.next) {
136
157
  case 0:
137
158
  _context.prev = 0;
138
- _this$props = this.props, type = _this$props.type, source = _this$props.data, connection = _this$props.connection, credentials = _this$props.credentials;
159
+ _this$props = this.props, type = _this$props.type, source = _this$props.data, connection = _this$props.connection, credentials = _this$props.credentials, geoColumn = _this$props.geoColumn, columns = _this$props.columns;
139
160
  localConfig = _objectSpread(_objectSpread({}, (0, _config.getDefaultCredentials)()), credentials);
140
161
  apiVersion = localConfig.apiVersion;
141
162
 
@@ -149,7 +170,9 @@ var CartoLayer = function (_CompositeLayer) {
149
170
  type: type,
150
171
  source: source,
151
172
  connection: connection,
152
- credentials: credentials
173
+ credentials: credentials,
174
+ geoColumn: geoColumn,
175
+ columns: columns
153
176
  });
154
177
 
155
178
  case 7:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/carto-layer.js"],"names":["defaultProps","data","type","onDataLoad","value","compare","onDataError","optional","credentials","connection","CartoLayer","state","apiVersion","props","localCreds","log","assert","Object","values","API_VERSIONS","includes","V1","V2","MAP_TYPES","QUERY","TILESET","V3","oldProps","changeFlags","_checkProps","shouldUpdateData","dataChanged","JSON","stringify","setState","_updateData","source","localConfig","updateTriggers","layer","MVTLayer","GeoJsonLayer","getSubLayerProps","id","layerName","getSubLayers","length","CompositeLayer"],"mappings":"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","sourcesContent":["import {CompositeLayer, log} from '@deck.gl/core';\nimport {MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {getData, getDataV2, API_VERSIONS} from '../api';\nimport {MAP_TYPES} from '../api/maps-api-common';\nimport {getDefaultCredentials} from '../config';\n\nconst defaultProps = {\n // (String, required): data resource to load. table name, sql query or tileset name.\n data: null,\n // (Enum (MAP_TYPES), required)\n type: null,\n onDataLoad: {type: 'function', value: data => {}, compare: false},\n onDataError: {type: 'function', value: null, compare: false, optional: true},\n\n // override carto credentials for the layer, set to null to read from default\n credentials: null,\n\n /*********************/\n /* API v3 PARAMETERS */\n /**********************/\n // (String, required): connection name at CARTO platform\n connection: null\n};\n\nexport default class CartoLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n data: null,\n apiVersion: null\n };\n }\n\n get isLoaded() {\n return this.getSubLayers().length > 0 && super.isLoaded;\n }\n\n _checkProps(props) {\n const {type, credentials, connection} = props;\n const localCreds = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localCreds;\n\n log.assert(\n Object.values(API_VERSIONS).includes(apiVersion),\n `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`\n );\n\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n log.assert(\n type === MAP_TYPES.QUERY || type === MAP_TYPES.TILESET,\n `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`\n );\n log.assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);\n } else if (apiVersion === API_VERSIONS.V3) {\n log.assert(connection, 'Missing mandatory connection parameter');\n log.assert(\n Object.values(MAP_TYPES).includes(type),\n `Invalid type ${type}. Use MAP_TYPES enum.`\n );\n }\n }\n\n updateState({props, oldProps, changeFlags}) {\n this._checkProps(props);\n const shouldUpdateData =\n changeFlags.dataChanged ||\n props.connection !== oldProps.connection ||\n props.type !== oldProps.type ||\n JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);\n\n if (shouldUpdateData) {\n this.setState({data: null, apiVersion: null});\n this._updateData();\n }\n }\n\n async _updateData() {\n try {\n const {type, data: source, connection, credentials} = this.props;\n const localConfig = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localConfig;\n\n let data;\n\n if (apiVersion === API_VERSIONS.V3) {\n data = await getData({\n type,\n source,\n connection,\n credentials\n });\n } else if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n data = await getDataV2({type, source, credentials});\n } else {\n log.assert(`Unknow apiVersion ${apiVersion}. Use API_VERSIONS enum.`);\n }\n\n this.setState({data, apiVersion});\n this.props.onDataLoad(data);\n } catch (err) {\n if (this.props.onDataError) {\n this.props.onDataError(err);\n } else {\n throw err;\n }\n }\n }\n\n renderLayers() {\n const {data, apiVersion} = this.state;\n const {type} = this.props;\n\n if (!data) return null;\n\n const {updateTriggers} = this.props;\n\n let layer;\n\n if (\n apiVersion === API_VERSIONS.V1 ||\n apiVersion === API_VERSIONS.V2 ||\n type === MAP_TYPES.TILESET\n ) {\n layer = MVTLayer;\n } else {\n layer = GeoJsonLayer;\n }\n\n const props = {...this.props};\n delete props.data;\n\n // eslint-disable-next-line new-cap\n return new layer(\n props,\n this.getSubLayerProps({\n id: `carto-${layer.layerName}`,\n data,\n updateTriggers\n })\n );\n }\n}\n\nCartoLayer.layerName = 'CartoLayer';\nCartoLayer.defaultProps = defaultProps;\n"],"file":"carto-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/carto-layer.js"],"names":["defaultProps","data","type","onDataLoad","value","compare","onDataError","optional","credentials","connection","geoColumn","columns","CartoLayer","state","apiVersion","props","localCreds","log","assert","Object","values","API_VERSIONS","includes","V1","V2","MAP_TYPES","QUERY","TILESET","V3","TABLE","Array","isArray","oldProps","changeFlags","_checkProps","shouldUpdateData","dataChanged","JSON","stringify","setState","_updateData","source","localConfig","updateTriggers","layer","MVTLayer","GeoJsonLayer","getSubLayerProps","id","layerName","getSubLayers","length","CompositeLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,YAAY,GAAG;AAEnBC,EAAAA,IAAI,EAAE,IAFa;AAInBC,EAAAA,IAAI,EAAE,IAJa;AAKnBC,EAAAA,UAAU,EAAE;AAACD,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAE,eAAAH,IAAI,EAAI,CAAE,CAApC;AAAsCI,IAAAA,OAAO,EAAE;AAA/C,GALO;AAMnBC,EAAAA,WAAW,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAE,IAA1B;AAAgCC,IAAAA,OAAO,EAAE,KAAzC;AAAgDE,IAAAA,QAAQ,EAAE;AAA1D,GANM;AASnBC,EAAAA,WAAW,EAAE,IATM;AAenBC,EAAAA,UAAU,EAAE,IAfO;AAkBnBC,EAAAA,SAAS,EAAE,IAlBQ;AAqBnBC,EAAAA,OAAO,EAAE;AAACT,IAAAA,IAAI,EAAE,OAAP;AAAgBE,IAAAA,KAAK,EAAE;AAAvB;AArBU,CAArB;;IAwBqBQ,U;;;;;;;;;;;;sCACD;AAChB,WAAKC,KAAL,GAAa;AACXZ,QAAAA,IAAI,EAAE,IADK;AAEXa,QAAAA,UAAU,EAAE;AAFD,OAAb;AAID;;;gCAMWC,K,EAAO;AAAA,UACVb,IADU,GAC2Ca,KAD3C,CACVb,IADU;AAAA,UACJM,WADI,GAC2CO,KAD3C,CACJP,WADI;AAAA,UACSC,UADT,GAC2CM,KAD3C,CACSN,UADT;AAAA,UACqBC,SADrB,GAC2CK,KAD3C,CACqBL,SADrB;AAAA,UACgCC,OADhC,GAC2CI,KAD3C,CACgCJ,OADhC;;AAEjB,UAAMK,UAAU,mCAAO,oCAAP,GAAmCR,WAAnC,CAAhB;;AAFiB,UAGVM,UAHU,GAGIE,UAHJ,CAGVF,UAHU;;AAKjBG,gBAAIC,MAAJ,CACEC,MAAM,CAACC,MAAP,CAAcC,iBAAd,EAA4BC,QAA5B,CAAqCR,UAArC,CADF,+BAEwBA,UAFxB;;AAKA,UAAIA,UAAU,KAAKO,kBAAaE,EAA5B,IAAkCT,UAAU,KAAKO,kBAAaG,EAAlE,EAAsE;AACpEP,kBAAIC,MAAJ,CACEhB,IAAI,KAAKuB,yBAAUC,KAAnB,IAA4BxB,IAAI,KAAKuB,yBAAUE,OADjD,yBAEkBzB,IAFlB,4EAEwFY,UAFxF;;AAIAG,kBAAIC,MAAJ,CAAW,CAACT,UAAZ,4DAA2EK,UAA3E;;AACAG,kBAAIC,MAAJ,CAAW,CAACR,SAAZ,2DAAyEI,UAAzE;;AACAG,kBAAIC,MAAJ,CAAW,CAACP,OAAZ,yDAAqEG,UAArE;AACD,OARD,MAQO,IAAIA,UAAU,KAAKO,kBAAaO,EAAhC,EAAoC;AACzCX,kBAAIC,MAAJ,CAAWT,UAAX,EAAuB,wCAAvB;;AACAQ,kBAAIC,MAAJ,CACEC,MAAM,CAACC,MAAP,CAAcK,wBAAd,EAAyBH,QAAzB,CAAkCpB,IAAlC,CADF,yBAEkBA,IAFlB;;AAIA,YAAIA,IAAI,KAAKuB,yBAAUI,KAAvB,EAA8B;AAC5BZ,oBAAIC,MAAJ,CAAW,CAACR,SAAZ,sDAAoEe,yBAAUI,KAA9E;;AACAZ,oBAAIC,MAAJ,CAAW,CAACP,OAAZ,oDAAgEc,yBAAUI,KAA1E;AACD;;AACD,YAAIlB,OAAJ,EAAa;AACXM,oBAAIC,MAAJ,CAAWY,KAAK,CAACC,OAAN,CAAcpB,OAAd,CAAX,EAAmC,+BAAnC;AACD;AACF;AACF;;;sCAE2C;AAAA,UAA/BI,KAA+B,QAA/BA,KAA+B;AAAA,UAAxBiB,QAAwB,QAAxBA,QAAwB;AAAA,UAAdC,WAAc,QAAdA,WAAc;;AAC1C,WAAKC,WAAL,CAAiBnB,KAAjB;;AACA,UAAMoB,gBAAgB,GACpBF,WAAW,CAACG,WAAZ,IACArB,KAAK,CAACN,UAAN,KAAqBuB,QAAQ,CAACvB,UAD9B,IAEAM,KAAK,CAACL,SAAN,KAAoBsB,QAAQ,CAACtB,SAF7B,IAGA2B,IAAI,CAACC,SAAL,CAAevB,KAAK,CAACJ,OAArB,MAAkC0B,IAAI,CAACC,SAAL,CAAeN,QAAQ,CAACrB,OAAxB,CAHlC,IAIAI,KAAK,CAACb,IAAN,KAAe8B,QAAQ,CAAC9B,IAJxB,IAKAmC,IAAI,CAACC,SAAL,CAAevB,KAAK,CAACP,WAArB,MAAsC6B,IAAI,CAACC,SAAL,CAAeN,QAAQ,CAACxB,WAAxB,CANxC;;AAQA,UAAI2B,gBAAJ,EAAsB;AACpB,aAAKI,QAAL,CAAc;AAACtC,UAAAA,IAAI,EAAE,IAAP;AAAaa,UAAAA,UAAU,EAAE;AAAzB,SAAd;;AACA,aAAK0B,WAAL;AACD;AACF;;;;;;;;;;;;8BAI6E,KAAKzB,K,EAAxEb,I,eAAAA,I,EAAYuC,M,eAANxC,I,EAAcQ,U,eAAAA,U,EAAYD,W,eAAAA,W,EAAaE,S,eAAAA,S,EAAWC,O,eAAAA,O;AACzD+B,gBAAAA,W,mCAAkB,oC,GAA4BlC,W;AAC7CM,gBAAAA,U,GAAc4B,W,CAAd5B,U;;sBAIHA,UAAU,KAAKO,kBAAaO,E;;;;;;uBACjB,kBAAQ;AACnB1B,kBAAAA,IAAI,EAAJA,IADmB;AAEnBuC,kBAAAA,MAAM,EAANA,MAFmB;AAGnBhC,kBAAAA,UAAU,EAAVA,UAHmB;AAInBD,kBAAAA,WAAW,EAAXA,WAJmB;AAKnBE,kBAAAA,SAAS,EAATA,SALmB;AAMnBC,kBAAAA,OAAO,EAAPA;AANmB,iBAAR,C;;;AAAbV,gBAAAA,I;;;;;sBAQSa,UAAU,KAAKO,kBAAaE,EAA5B,IAAkCT,UAAU,KAAKO,kBAAaG,E;;;;;;uBAC1D,oBAAU;AAACtB,kBAAAA,IAAI,EAAJA,IAAD;AAAOuC,kBAAAA,MAAM,EAANA,MAAP;AAAejC,kBAAAA,WAAW,EAAXA;AAAf,iBAAV,C;;;AAAbP,gBAAAA,I;;;;;AAEAgB,0BAAIC,MAAJ,6BAAgCJ,UAAhC;;;AAGF,qBAAKyB,QAAL,CAAc;AAACtC,kBAAAA,IAAI,EAAJA,IAAD;AAAOa,kBAAAA,UAAU,EAAVA;AAAP,iBAAd;AACA,qBAAKC,KAAL,CAAWZ,UAAX,CAAsBF,IAAtB;;;;;;;;qBAEI,KAAKc,KAAL,CAAWT,W;;;;;AACb,qBAAKS,KAAL,CAAWT,WAAX;;;;;;;;;;;;;;;;;;;;;;;mCAOS;AAAA,wBACc,KAAKO,KADnB;AAAA,UACNZ,IADM,eACNA,IADM;AAAA,UACAa,UADA,eACAA,UADA;AAAA,UAENZ,IAFM,GAEE,KAAKa,KAFP,CAENb,IAFM;AAIb,UAAI,CAACD,IAAL,EAAW,OAAO,IAAP;AAJE,UAMN0C,cANM,GAMY,KAAK5B,KANjB,CAMN4B,cANM;AAQb,UAAIC,KAAJ;;AAEA,UACE9B,UAAU,KAAKO,kBAAaE,EAA5B,IACAT,UAAU,KAAKO,kBAAaG,EAD5B,IAEAtB,IAAI,KAAKuB,yBAAUE,OAHrB,EAIE;AACAiB,QAAAA,KAAK,GAAGC,mBAAR;AACD,OAND,MAMO;AACLD,QAAAA,KAAK,GAAGE,oBAAR;AACD;;AAED,UAAM/B,KAAK,qBAAO,KAAKA,KAAZ,CAAX;;AACA,aAAOA,KAAK,CAACd,IAAb;AAGA,aAAO,IAAI2C,KAAJ,CACL7B,KADK,EAEL,KAAKgC,gBAAL,CAAsB;AACpBC,QAAAA,EAAE,kBAAWJ,KAAK,CAACK,SAAjB,CADkB;AAEpBhD,QAAAA,IAAI,EAAJA,IAFoB;AAGpB0C,QAAAA,cAAc,EAAdA;AAHoB,OAAtB,CAFK,CAAP;AAQD;;;wBAxHc;AACb,aAAO,KAAKO,YAAL,GAAoBC,MAApB,GAA6B,CAA7B,6FAAP;AACD;;;EAVqCC,oB;;;AAmIxCxC,UAAU,CAACqC,SAAX,GAAuB,YAAvB;AACArC,UAAU,CAACZ,YAAX,GAA0BA,YAA1B","sourcesContent":["import {CompositeLayer, log} from '@deck.gl/core';\nimport {MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {getData, getDataV2, API_VERSIONS} from '../api';\nimport {MAP_TYPES} from '../api/maps-api-common';\nimport {getDefaultCredentials} from '../config';\n\nconst defaultProps = {\n // (String, required): data resource to load. table name, sql query or tileset name.\n data: null,\n // (Enum (MAP_TYPES), required)\n type: null,\n onDataLoad: {type: 'function', value: data => {}, compare: false},\n onDataError: {type: 'function', value: null, compare: false, optional: true},\n\n // override carto credentials for the layer, set to null to read from default\n credentials: null,\n\n /*********************/\n /* API v3 PARAMETERS */\n /**********************/\n // (String, required): connection name at CARTO platform\n connection: null,\n\n // (String, optional): name of the `geo_column` in the CARTO platform. Use this override the default column ('geom'), from which the geometry information should be fetched.\n geoColumn: null,\n\n // (Array<String>, optional): names of columns to fetch. By default, all columns are fetched.\n columns: {type: 'array', value: null}\n};\n\nexport default class CartoLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n data: null,\n apiVersion: null\n };\n }\n\n get isLoaded() {\n return this.getSubLayers().length > 0 && super.isLoaded;\n }\n\n _checkProps(props) {\n const {type, credentials, connection, geoColumn, columns} = props;\n const localCreds = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localCreds;\n\n log.assert(\n Object.values(API_VERSIONS).includes(apiVersion),\n `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`\n );\n\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n log.assert(\n type === MAP_TYPES.QUERY || type === MAP_TYPES.TILESET,\n `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`\n );\n log.assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!geoColumn, `geoColumn prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!columns, `columns prop is not supported for apiVersion ${apiVersion}`);\n } else if (apiVersion === API_VERSIONS.V3) {\n log.assert(connection, 'Missing mandatory connection parameter');\n log.assert(\n Object.values(MAP_TYPES).includes(type),\n `Invalid type ${type}. Use MAP_TYPES enum.`\n );\n if (type !== MAP_TYPES.TABLE) {\n log.assert(!geoColumn, `geoColumn prop is only supported for type ${MAP_TYPES.TABLE}`);\n log.assert(!columns, `columns prop is only supported for type ${MAP_TYPES.TABLE}`);\n }\n if (columns) {\n log.assert(Array.isArray(columns), 'columns prop must be an Array');\n }\n }\n }\n\n updateState({props, oldProps, changeFlags}) {\n this._checkProps(props);\n const shouldUpdateData =\n changeFlags.dataChanged ||\n props.connection !== oldProps.connection ||\n props.geoColumn !== oldProps.geoColumn ||\n JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) ||\n props.type !== oldProps.type ||\n JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);\n\n if (shouldUpdateData) {\n this.setState({data: null, apiVersion: null});\n this._updateData();\n }\n }\n\n async _updateData() {\n try {\n const {type, data: source, connection, credentials, geoColumn, columns} = this.props;\n const localConfig = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localConfig;\n\n let data;\n\n if (apiVersion === API_VERSIONS.V3) {\n data = await getData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns\n });\n } else if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n data = await getDataV2({type, source, credentials});\n } else {\n log.assert(`Unknow apiVersion ${apiVersion}. Use API_VERSIONS enum.`);\n }\n\n this.setState({data, apiVersion});\n this.props.onDataLoad(data);\n } catch (err) {\n if (this.props.onDataError) {\n this.props.onDataError(err);\n } else {\n throw err;\n }\n }\n }\n\n renderLayers() {\n const {data, apiVersion} = this.state;\n const {type} = this.props;\n\n if (!data) return null;\n\n const {updateTriggers} = this.props;\n\n let layer;\n\n if (\n apiVersion === API_VERSIONS.V1 ||\n apiVersion === API_VERSIONS.V2 ||\n type === MAP_TYPES.TILESET\n ) {\n layer = MVTLayer;\n } else {\n layer = GeoJsonLayer;\n }\n\n const props = {...this.props};\n delete props.data;\n\n // eslint-disable-next-line new-cap\n return new layer(\n props,\n this.getSubLayerProps({\n id: `carto-${layer.layerName}`,\n data,\n updateTriggers\n })\n );\n }\n}\n\nCartoLayer.layerName = 'CartoLayer';\nCartoLayer.defaultProps = defaultProps;\n"],"file":"carto-layer.js"}
@@ -54,9 +54,12 @@ function dealWithError({
54
54
  error
55
55
  }) {
56
56
  switch (response.status) {
57
+ case 400:
58
+ throw new Error("Bad request. ".concat(error));
59
+
57
60
  case 401:
58
61
  case 403:
59
- throw new Error("Unauthorized access to Maps API");
62
+ throw new Error("Unauthorized access. ".concat(error));
60
63
 
61
64
  default:
62
65
  throw new Error(error);
@@ -65,12 +68,25 @@ function dealWithError({
65
68
 
66
69
  function getParameters({
67
70
  type,
68
- source
71
+ source,
72
+ geoColumn,
73
+ columns
69
74
  }) {
70
75
  const encodedClient = encodeParameter('client', 'deck-gl-carto');
71
76
  const parameters = [encodedClient];
72
77
  const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';
73
78
  parameters.push(encodeParameter(sourceName, source));
79
+
80
+ if (type === MAP_TYPES.TABLE) {
81
+ if (geoColumn) {
82
+ parameters.push(encodeParameter('geo_column', geoColumn));
83
+ }
84
+
85
+ if (columns) {
86
+ parameters.push(encodeParameter('columns', columns.join(',')));
87
+ }
88
+ }
89
+
74
90
  return parameters.join('&');
75
91
  }
76
92
 
@@ -78,12 +94,16 @@ export async function mapInstantiation({
78
94
  type,
79
95
  source,
80
96
  connection,
81
- credentials
97
+ credentials,
98
+ geoColumn,
99
+ columns
82
100
  }) {
83
101
  const baseUrl = "".concat(credentials.mapsUrl, "/").concat(connection, "/").concat(type);
84
102
  const url = "".concat(baseUrl, "?").concat(getParameters({
85
103
  type,
86
- source
104
+ source,
105
+ geoColumn,
106
+ columns
87
107
  }));
88
108
  const {
89
109
  accessToken
@@ -126,6 +146,8 @@ export async function getData({
126
146
  source,
127
147
  connection,
128
148
  credentials,
149
+ geoColumn,
150
+ columns,
129
151
  format
130
152
  }) {
131
153
  const localCreds = { ...getDefaultCredentials(),
@@ -147,7 +169,9 @@ export async function getData({
147
169
  type,
148
170
  source,
149
171
  connection,
150
- credentials: localCreds
172
+ credentials: localCreds,
173
+ geoColumn,
174
+ columns
151
175
  });
152
176
  let url;
153
177
  let mapFormat;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["getDefaultCredentials","buildMapsUrlFromBase","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","log","MAX_GET_LENGTH","request","method","url","format","accessToken","body","response","headers","Accept","Authorization","fetch","error","Error","NDJSON","json","ok","dealWithError","rows","status","getParameters","type","source","encodedClient","parameters","sourceName","QUERY","push","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","getData","localCreds","assert","apiVersion","V3","apiBaseUrl","mapFormat","prioritizedFormats","GEOJSON","TILEJSON","f"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 401:\n case 403:\n throw new Error(`Unauthorized access to Maps API`);\n\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source}) {\n const encodedClient = encodeParameter('client', 'deck-gl-carto');\n const parameters = [encodedClient];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({type, source, connection, credentials}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: 'deck-gl-carto'\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nexport async function getData({type, source, connection, credentials, format}) {\n const localCreds = {...getDefaultCredentials(), ...credentials};\n\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n log.assert(localCreds.mapsUrl, 'mapsUrl cannot be undefined');\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({type, source, connection, credentials: localCreds});\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n\n return await request({url, format: mapFormat, accessToken});\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["getDefaultCredentials","buildMapsUrlFromBase","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","log","MAX_GET_LENGTH","request","method","url","format","accessToken","body","response","headers","Accept","Authorization","fetch","error","Error","NDJSON","json","ok","dealWithError","rows","status","getParameters","type","source","geoColumn","columns","encodedClient","parameters","sourceName","QUERY","push","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","getData","localCreds","assert","apiVersion","V3","apiBaseUrl","mapFormat","prioritizedFormats","GEOJSON","TILEJSON","f"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source, geoColumn, columns}) {\n const encodedClient = encodeParameter('client', 'deck-gl-carto');\n const parameters = [encodedClient];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns\n}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: 'deck-gl-carto'\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nexport async function getData({type, source, connection, credentials, geoColumn, columns, format}) {\n const localCreds = {...getDefaultCredentials(), ...credentials};\n\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n log.assert(localCreds.mapsUrl, 'mapsUrl cannot be undefined');\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns\n });\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n\n return await request({url, format: mapFormat, accessToken});\n}\n"],"file":"maps-v3-client.js"}
@@ -19,7 +19,12 @@ const defaultProps = {
19
19
  optional: true
20
20
  },
21
21
  credentials: null,
22
- connection: null
22
+ connection: null,
23
+ geoColumn: null,
24
+ columns: {
25
+ type: 'array',
26
+ value: null
27
+ }
23
28
  };
24
29
  export default class CartoLayer extends CompositeLayer {
25
30
  initializeState() {
@@ -37,7 +42,9 @@ export default class CartoLayer extends CompositeLayer {
37
42
  const {
38
43
  type,
39
44
  credentials,
40
- connection
45
+ connection,
46
+ geoColumn,
47
+ columns
41
48
  } = props;
42
49
  const localCreds = { ...getDefaultCredentials(),
43
50
  ...credentials
@@ -50,9 +57,20 @@ export default class CartoLayer extends CompositeLayer {
50
57
  if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {
51
58
  log.assert(type === MAP_TYPES.QUERY || type === MAP_TYPES.TILESET, "Invalid type ".concat(type, ". Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ").concat(apiVersion));
52
59
  log.assert(!connection, "Connection prop is not supported for apiVersion ".concat(apiVersion));
60
+ log.assert(!geoColumn, "geoColumn prop is not supported for apiVersion ".concat(apiVersion));
61
+ log.assert(!columns, "columns prop is not supported for apiVersion ".concat(apiVersion));
53
62
  } else if (apiVersion === API_VERSIONS.V3) {
54
63
  log.assert(connection, 'Missing mandatory connection parameter');
55
64
  log.assert(Object.values(MAP_TYPES).includes(type), "Invalid type ".concat(type, ". Use MAP_TYPES enum."));
65
+
66
+ if (type !== MAP_TYPES.TABLE) {
67
+ log.assert(!geoColumn, "geoColumn prop is only supported for type ".concat(MAP_TYPES.TABLE));
68
+ log.assert(!columns, "columns prop is only supported for type ".concat(MAP_TYPES.TABLE));
69
+ }
70
+
71
+ if (columns) {
72
+ log.assert(Array.isArray(columns), 'columns prop must be an Array');
73
+ }
56
74
  }
57
75
  }
58
76
 
@@ -63,7 +81,7 @@ export default class CartoLayer extends CompositeLayer {
63
81
  }) {
64
82
  this._checkProps(props);
65
83
 
66
- const shouldUpdateData = changeFlags.dataChanged || props.connection !== oldProps.connection || props.type !== oldProps.type || JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);
84
+ const shouldUpdateData = changeFlags.dataChanged || props.connection !== oldProps.connection || props.geoColumn !== oldProps.geoColumn || JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) || props.type !== oldProps.type || JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);
67
85
 
68
86
  if (shouldUpdateData) {
69
87
  this.setState({
@@ -81,7 +99,9 @@ export default class CartoLayer extends CompositeLayer {
81
99
  type,
82
100
  data: source,
83
101
  connection,
84
- credentials
102
+ credentials,
103
+ geoColumn,
104
+ columns
85
105
  } = this.props;
86
106
  const localConfig = { ...getDefaultCredentials(),
87
107
  ...credentials
@@ -96,7 +116,9 @@ export default class CartoLayer extends CompositeLayer {
96
116
  type,
97
117
  source,
98
118
  connection,
99
- credentials
119
+ credentials,
120
+ geoColumn,
121
+ columns
100
122
  });
101
123
  } else if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {
102
124
  data = await getDataV2({