12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.24/esri/copyright.txt for details.
- */
- import"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import e from"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../symbols.js";import r from"../../core/Error.js";import{isSome as i}from"../../core/maybe.js";import{toPt as a}from"../../core/screenUtils.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import t from"../heuristics/outline.js";import n from"../heuristics/sizeRange.js";import{createVisualVariables as o}from"./size.js";import{createColors as l,createSymbol as p,getSymbolOutlineFromScheme as m,verifyBasicFieldValidity as u,getBasemapInfo as d}from"./support/utils.js";import c from"../statistics/predominantCategories.js";import{getSumOfAttributesExpr as b}from"../statistics/support/utils.js";import{getFieldsList as h}from"../support/utils.js";import{LayerType as y,createLayerAdapter as f,getLayerTypeLabels as g}from"../support/adapters/support/layerUtils.js";import{cloneScheme as z,getSchemes as v}from"../symbology/pieChart.js";import w from"../../symbols/SimpleLineSymbol.js";async function E(e){if(!(e&&e.layer&&e.view&&e.attributes?.length))throw new r("pie-chart-renderer:missing-parameters","'layer', 'view' and 'attributes' parameters are required");if(e.attributes.length>10)throw new r("pie-chart-renderer:invalid-parameters","PieChart renderer does not support more than 10 attributes");const a={...e};a.shape=a.shape||"pie",a.othersCategoryEnabled=null==a.othersCategoryEnabled||a.othersCategoryEnabled,a.includeSizeVariable=e.includeSizeVariable||!1;const s=[y.CSVLayer,y.FeatureLayer,y.OGCFeatureLayer,y.GeoJSONLayer,y.WFSLayer],t=f(a.layer,s);if(a.layer=t,!t)throw new r("pie-chart-renderer:invalid-parameters","'layer' must be one of these types: "+g(s).join(", "));const n=i(a.signal)?{signal:a.signal}:null;await Promise.all([a.view.when(),t.load(n)]);const o=t.geometryType,l="polygon"===o,p="point"===o||"multipoint"===o||l;if(a.outlineOptimizationEnabled=!!l&&a.outlineOptimizationEnabled,a.sizeOptimizationEnabled=!!p&&a.sizeOptimizationEnabled,!p)throw new r("pie-chart-renderer:not-supported","PieChart renderer is only supported for point and polygon layers");const m=[],d=a.attributes;for(const r of d){const e=await h({field:r.field,valueExpression:r.valueExpression});m.push(...e)}const c=u(t,m.filter(Boolean),"pie-chart-renderer:invalid-parameters");if(c)throw c;return a}async function j(e){let r=e.pieChartScheme,a=null,s=null;const t=await d(e.basemap,e.view);if(a=i(t.basemapId)?t.basemapId:null,s=i(t.basemapTheme)?t.basemapTheme:null,r)return{scheme:z(r),basemapId:a,basemapTheme:s};const n=v({basemap:a,numColors:e.attributes.length,geometryType:e.layer.geometryType,basemapTheme:s});return n&&(r=n.primaryScheme,a=n.basemapId,s=n.basemapTheme),{scheme:r,basemapId:a,basemapTheme:s}}async function S(e,r){const{valueExpression:i,sqlExpression:a,sqlWhere:t}=b(e.attributes),n=await s("esri/smartMapping/t9n/smartMapping");return o({layer:e.layer,basemap:e.basemap,valueExpression:i,sqlExpression:a,sqlWhere:t,sizeScheme:r,sizeOptimizationEnabled:e.sizeOptimizationEnabled,legendOptions:{title:n.sumOfCategories},view:e.view,signal:e.signal})}async function C(i){const s=await E(i),o=await j(s),u=o?.scheme;if(!u)throw new r("pie-chart-renderer:insufficient-info","Unable to find pie-chart scheme");const d=s.layer,{includeSizeVariable:b,sizeOptimizationEnabled:h,outlineOptimizationEnabled:y,view:f,signal:g}=s,v=u.sizeScheme,C=s.attributes,V=C.map((e=>e.field)),[O,T,x,I]=await Promise.all([V.length>1?c({layer:d,fields:V,view:f,signal:g}):null,b?S(s,v):null,!b&&h?n({layer:d,view:f,signal:g}):null,y?t({layer:d,view:f,signal:g}):null]),R=O&&O.predominantCategoryInfos?{uniqueValueInfos:O.predominantCategoryInfos}:{uniqueValueInfos:V.map((e=>({value:e,count:0})))},q=l(u.colors,C.length),L=C.map(((e,r)=>({field:e.field,valueExpression:e.valueExpression,label:e.label,valueExpressionTitle:e.valueExpressionTitle,color:q[r]}))),P=d.geometryType,F="background"in v&&v.background,U=new e({attributes:L,othersCategory:{color:s.othersCategoryEnabled?u.colorForOthersCategory:null,threshold:.04},holePercentage:"donut"===s.shape?.45:0,backgroundFillSymbol:F?p(P,{type:"2d",color:F.color,outline:m(F,P,I?.opacity)}):null,size:a(u.size),outline:new w(m(u,"point",I?.opacity)),legendOptions:s.legendOptions});if(T&&(h||T.visualVariables.forEach((e=>{"number"==typeof e.minSize&&"number"==typeof e.maxSize&&(e.minSize*=2.5,e.maxSize*=1.8)})),h&&"point"===P&&T.visualVariables.forEach((e=>{e?.minSize&&"object"==typeof e.minSize&&e.minSize?.stops.forEach((e=>{e.size*=1.8}))})),U.authoringInfo=T.authoringInfo.clone(),U.visualVariables=T.visualVariables?.map((e=>e.clone()))),I?.visualVariables?.length){const e=I.visualVariables.map((e=>e.clone()));U.visualVariables?U.visualVariables.push(...e):U.visualVariables=e}return x?.minSize&&("point"===P&&x.minSize.stops.forEach((e=>{e.size*=2.5})),"polygon"===P&&x.minSize.stops.forEach((e=>{e.size*=1.8})),U.visualVariables?U.visualVariables.push(x.minSize):U.visualVariables=[x.minSize]),{renderer:U,pieChartScheme:z(u),size:T,basemapId:o.basemapId,basemapTheme:o.basemapTheme,statistics:R}}export{C as createRenderer};
|