histogram.js 2.5 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import i from"../../core/Error.js";import{isSome as e}from"../../core/maybe.js";import{numericTypes as r,isDateField as s}from"../../layers/support/fieldUtils.js";import{verifyBasicFieldValidity as a,verifyFieldType as o,verifyFilterValidty as t}from"./support/utils.js";import{verifyBinningParams as n}from"../support/binningUtils.js";import{getNormalizationType as l,getFieldsList as p}from"../support/utils.js";import{binningCapableLayerTypes as m,defaultSupportedLayerTypes as f,createLayerAdapter as d,getLayerTypeLabels as h}from"../support/adapters/support/layerUtils.js";const u=["date",...r];async function w(r){if(!(r&&r.layer&&(r.field||r.valueExpression||r.sqlExpression)))throw new i("histogram:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(r.valueExpression&&!r.sqlExpression&&!r.view)throw new i("histogram:missing-parameters","View is required when 'valueExpression' is specified");r.forBinning&&n(r,"histogram");const{layer:w,...c}=r,g=r.forBinning?m:f,v=d(w,g,r.forBinning),x={layerAdapter:v,...c};if(x.normalizationType=l(x),!v)throw new i("histogram:invalid-parameters","'layer' must be one of these types: "+h(g).join(", "));const E=e(x.signal)?{signal:x.signal}:null;await v.load(E);const y=x.valueExpression||x.sqlExpression,q=x.field,j=q?v.getField(q):null,z=!x.classificationMethod||"equal-interval"===x.classificationMethod,M=await p({field:q,normalizationField:x.normalizationField,valueExpression:x.valueExpression}),b=a(v,M,"histogram:invalid-parameters");if(b)throw b;if(j){const e=o(v,j,"histogram:invalid-parameters",u);if(e)throw e;if(s(j)){if(x.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed for date fields");if(!z)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed for date fields")}}else if(y){if(x.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed when 'valueExpression' or 'sqlExpression' is specified");if(!z)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed when 'valueExpression' or 'sqlExpression' is specified")}const B=t(x.filter,"histogram:invalid-parameters");if(B)throw B;return x}async function c(i){const{layerAdapter:e,...r}=await w(i);return e.histogram(r)}export{c as default};