histogram.js 2.2 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/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}from"./support/utils.js";import{getNormalizationType as t,getFieldsList as n}from"../support/utils.js";import{createLayerAdapter as l,defaultSupportedLayerTypes as p,getLayerTypeLabels as m}from"../support/adapters/support/layerUtils.js";const d=["date",...r];async function f(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");const{layer:f,...h}=r,u=l(f,p),w={layerAdapter:u,...h};if(w.normalizationType=t(w),!u)throw new i("histogram:invalid-parameters","'layer' must be one of these types: "+m(p).join(", "));const c=e(w.signal)?{signal:w.signal}:null;await u.load(c);const v=w.valueExpression||w.sqlExpression,g=w.field,x=g?u.getField(g):null,E=!w.classificationMethod||"equal-interval"===w.classificationMethod,y=await n({field:g,normalizationField:w.normalizationField,valueExpression:w.valueExpression}),q=a(u,y,"histogram:invalid-parameters");if(q)throw q;if(x){const e=o(u,x,"histogram:invalid-parameters",d);if(e)throw e;if(s(x)){if(w.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed for date fields");if(!E)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed for date fields")}}else if(v){if(w.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed when 'valueExpression' or 'sqlExpression' is specified");if(!E)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed when 'valueExpression' or 'sqlExpression' is specified")}return w}async function h(i){const{layerAdapter:e,...r}=await f(i);return e.histogram(r)}export{h as default};