UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 7.12 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{unique as e,isSome as l}from"../../core/arrayUtils.js";import t from"../../core/Logger.js";import{getOrCreateMapValue as i}from"../../core/MapUtils.js";import{convertDateFormatToIntlOptions as o,formatDate as a}from"../../intl/date.js";import{isTimeOnlyField as n}from"../../layers/support/fieldUtils.js";import{format as s,round as r}from"./numberUtils.js";import u from"../visualVariables/support/ColorStop.js";import{isAnyDateField as f,formatAnyDate as d}from"../../smartMapping/support/utils.js";import{getColorFromSymbol as p}from"../../symbols/support/utils.js";import{getRampStops as m}from"../../widgets/Legend/support/colorRampUtils.js";import{getHeatmapRampStops as c}from"../../widgets/Legend/support/heatmapRampUtils.js";const y=()=>t.getLogger("esri.renderers.support.utils"),g={lt:"<",gt:">",pct:"%",ld:"–"},h={millisecond:0,second:1,minute:2,hour:3,day:4,month:5,year:6},b={millisecond:"long-month-day-year-long-time",second:"long-month-day-year-long-time",minute:"long-month-day-year-short-time",hour:"long-month-day-year-short-time",day:"long-month-day-year",month:"long-month-day-year",year:"year"},v=o("short-date");async function w(e,l,t){i(e,l,()=>[]).push(...t)}async function x(l){const t=new Map;if(!l)return t;if("visualVariables"in l&&l.visualVariables)for(const e of l.visualVariables)if(D(e)){const l=(await m(e)??[]).map(e=>e.color);await w(t,e.field||e.valueExpression,l)}if("heatmap"===l.type){const e=c(l).map(e=>e.color);await w(t,l.field||l.valueExpression,e)}else if("pie-chart"===l.type){for(const e of l.attributes)await w(t,e.field||e.valueExpression,[e.color]);await w(t,"default",[l?.othersCategory?.color,p(l.backgroundFillSymbol,null)])}else if("dot-density"===l.type){for(const e of l.attributes)await w(t,e.field||e.valueExpression,[e.color]);await w(t,"default",[l.backgroundColor])}else if("unique-value"===l.type)if("predominance"===l.authoringInfo?.type)for(const e of l.uniqueValueInfos??[])await w(t,e.value.toString(),[p(e.symbol,null)]);else{const e=(l.uniqueValueInfos??[]).map(e=>p(e.symbol,null)),{field:i,field2:o,field3:a,valueExpression:n}=l;(i||n)&&await w(t,i||n,e),o&&await w(t,o,e),a&&await w(t,a,e)}else if("class-breaks"===l.type){const e=l.classBreakInfos.map(e=>p(e.symbol,null)),{field:i,valueExpression:o}=l;await w(t,i??o,e)}else"simple"===l.type&&await w(t,"default",[p(l.symbol,null)]);return"defaultSymbol"in l&&l.defaultSymbol&&await w(t,"default",[p(l.defaultSymbol,null)]),t.forEach((l,i)=>{const o=e(l.filter(Boolean),(e,l)=>JSON.stringify(e)===JSON.stringify(l));t.set(i,o)}),t}async function V(e,l,t){const o=i(e,l,()=>new Map);for(const i of t)o.set(i.value,i.color)}async function E(e){const l=new Map;if(!e)return l;if("unique-value"!==e.type||e.authoringInfo?.type)if("class-breaks"===e.type){const t=e.classBreakInfos.map(e=>({value:e.minValue,color:p(e.symbol,null)})).reverse(),{field:i,valueExpression:o}=e;await V(l,i??o,t)}else"simple"===e.type&&await V(l,"default",[{value:"default",color:p(e.symbol,null)}]);else{const t=(e.uniqueValueInfos??[]).map(e=>({value:e.value,color:p(e.symbol,null)})),{field:i,field2:o,field3:a,valueExpression:n,fieldDelimiter:s}=e,r=[i,o,a].filter(Boolean).join(s||"");(r||n)&&await V(l,r||n,t)}if("defaultSymbol"in e&&e.defaultSymbol&&await V(l,"default",[{value:"default",color:p(e.defaultSymbol,null)}]),"visualVariables"in e&&e.visualVariables){const t=e.visualVariables.filter(e=>"color"===e.type);for(const e of t){const t=await m(e)??[];await V(l,e.field||e.valueExpression,t)}}return l}function F(e,l,t){let i="";return 0===l?i=g.lt+" ":l===t&&(i=g.gt+" "),i+e}function z(e){const{values:l,colors:t,labelIndexes:i,isDate:o}=e;return l.map((e,n)=>{let r=null;if(!i||i.includes(n)){const t=o?a(e):s(e);t&&(r=F(t,n,l.length-1))}return new u({value:e,color:t[n],label:r})})}function S(e){let l=e.minValue,t=e.maxValue;const i=e.isFirstBreak?"":g.gt+" ",o="percent-of-total"===e.normalizationType?g.pct:"";return l=null==l?"":s(l),t=null==t?"":s(t),i+l+o+" "+g.ld+" "+t+o}function k(e){const l=e.classBreakInfos,t=e.normalizationType;let i=[];if(l?.length)if("standard-deviation"!==e.classificationMethod)if(e.round){i.push(l[0].minValue);for(const e of l)i.push(e.maxValue);i=r(i),l.forEach((e,l)=>{e.label=S({minValue:0===l?i[0]:i[l],maxValue:i[l+1],isFirstBreak:0===l,normalizationType:t})})}else l.forEach((e,l)=>{e.label=S({minValue:e.minValue,maxValue:e.maxValue,isFirstBreak:0===l,normalizationType:t})});else y().warn("setLabelsForClassBreaks","cannot set labels for class breaks generated using 'standard-deviation' method.")}function j(e){const l=e.map(e=>new Date(e)),t=l.length;let i=1/0,o=null;for(let a=0;a<t-1;a++){const e=l[a];let n=1/0,s=null;for(let i=a+1;i<t;i++){const t=l[i],o=(e.getFullYear()!==t.getFullYear()?"year":e.getMonth()!==t.getMonth()&&"month")||e.getDate()!==t.getDate()&&"day"||e.getHours()!==t.getHours()&&"hour"||e.getMinutes()!==t.getMinutes()&&"minute"||e.getSeconds()!==t.getSeconds()&&"second"||"millisecond",a=h[o];a<n&&(n=a,s=o)}n<i&&(i=n,o=s)}return o}function I(e){const{value:l,domain:t,fieldInfo:i,dateFormatOptions:o}=e;let a=String(l);const r=t&&"codedValues"in t&&t.codedValues?t.getName(l):null;return r?a=r:null!=l&&i&&(f(i)||n(i))?a=d(l,o??{fieldType:i.type}):"number"==typeof l&&(a=s(l)),a}function M(e,l){return"normalizationField"in e&&e.normalizationField?q(e.field,e.normalizationField):"field"in e&&e.field?B(e.field):"valueExpression"in e&&e.valueExpression?T(e.valueExpression,e.valueExpressionTitle,l):null}function B(e){return{type:"field",field:e}}function q(e,l){return{type:"normalized-field",field:e,normalizationField:l}}function T(e,l,t){return{type:"expression",expression:e,title:l,returnType:t}}function U(t,i){const o=[];if("class-breaks"===t.type||"heatmap"===t.type)o.push(M(t,"number"));else if("unique-value"===t.type){const e=t.authoringInfo;if("relationship"===e?.type){if(e.field1&&e.field2){const l=e.field1.field,t=e.field2.field,i=e.field1.normalizationField,a=e.field2.normalizationField;o.push(M({field:l,normalizationField:i})),o.push(M({field:t,normalizationField:a}))}}else{const e=t.uniqueValueInfos?.[0];let l=null;if(e?.value){const t=typeof e.value;"string"!==t&&"number"!==t||(l=t)}o.push(M(t,l)),[t.field2,t.field3].forEach(e=>e&&o.push(B(e)))}}else"attributes"in t&&t.attributes?.forEach(e=>o.push(M(e,"number")));const a=i?i(t):"visualVariables"in t?t.visualVariables:null;return a?.forEach(e=>o.push(M(e,"number"))),e(o.filter(l),(e,l)=>"field"===e.type&&"field"===l.type?e.field===l.field:"normalized-field"===e.type&&"normalized-field"===l.type?e.field===l.field&&e.normalizationField===l.normalizationField:"expression"===e.type&&"expression"===l.type&&e.expression===l.expression)}function D(e){return"color"===e.type}export{j as calculateDateFormatInterval,S as createClassBreakLabel,z as createColorStops,I as createUniqueValueLabel,b as dateFormatIntervalOptions,M as getAttribute,U as getAttributes,E as getColorsForRendererValues,x as getColorsFromRenderer,k as setLabelsForClassBreaks,v as timelineDateFormatOptions};