// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define("exports ../../core/Error ../../core/lang ../../intl/messages ../../renderers/support/AuthoringInfo ../../renderers/support/AuthoringInfoClassBreakInfo ../../renderers/support/AuthoringInfoFieldInfo ./type ./support/utils ../support/binningUtils ../support/adapters/support/layerUtils ../symbology/relationship ../../symbols/support/utils".split(" "),function(y,h,G,H,D,u,v,I,t,J,w,x,K){async function L(a){if(!(a?.layer&&a.view&&a.field1&&a.field2))throw new h("relationship-renderer:missing-parameters", "'layer', 'view', 'field1' and 'field2' parameters are required");a.forBinning&&J.verifyBinningParams(a,"relationship-renderer");const b={...a,layer:a.layer,field1:a.field1,field2:a.field2};b.symbolType??(b.symbolType="2d");b.defaultSymbolEnabled??(b.defaultSymbolEnabled=!0);b.classificationMethod??(b.classificationMethod="quantile");b.numClasses??(b.numClasses=3);b.focus??(b.focus=null);if(!M.has(b.classificationMethod))throw new h("relationship-renderer:invalid-parameters",`classification method ${b.classificationMethod} is not supported`); if(2>b.numClasses||4({value:c,count:0}))}function F(a,b,c,d){const {field:e,normalizationField:f}=a,{field:g,normalizationField:k}=b;a=c.map(l=>[l.minValue,l.maxValue]);d=d.map(l=>[l.minValue,l.maxValue]);b=S[a.length];return`\n var field1 = $feature['${e}'];\n var field2 = $feature['${g}'];\n var hasNormField1 = ${f?"true":"false"};\n var hasNormField2 = ${k? "true":"false"};\n var normField1 = ${f?`$feature['${f}']`:"null"};\n var normField2 = ${k?`$feature['${k}']`:"null"};\n\n if (\n IsEmpty(field1) ||\n IsEmpty(field2) ||\n (hasNormField1 && (IsEmpty(normField1) || normField1 == 0)) ||\n (hasNormField2 && (IsEmpty(normField2) || normField2 == 0))\n ) {\n return null;\n }\n\n var value1 = IIf(hasNormField1, (field1 / normField1), field1);\n var value2 = IIf(hasNormField2, (field2 / normField2), field2);\n\n var breaks1 = ${JSON.stringify(a)};\n var breaks2 = ${JSON.stringify(d)};\n var classCodes = ${JSON.stringify(b)};\n\n function getClassCode(value, breaks) {\n var code = null;\n\n for (var i in breaks) {\n var info = breaks[i];\n if (value >= info[0] && value <= info[1]) {\n code = classCodes[i];\n break;\n }\n }\n\n return code;\n }\n\n var code1 = getClassCode(value1, breaks1);\n var code2 = getClassCode(value2, breaks2);\n\n var classValue = IIf(IsEmpty(code1) || IsEmpty(code2), null, code1 + code2);\n return classValue;\n `} async function T(a,b,c){var d=await H.fetchMessageBundle("esri/smartMapping/t9n/smartMapping");const {basemap:e,classificationMethod:f,field1:g,field2:k,focus:l,numClasses:m,signal:p}=a;var n=a.layer,q=b.classBreakInfos;const z=c.classBreakInfos;if(m!==q.length||q.length!==z.length)throw new h("relationship-renderer:error","incompatible class breaks");var A=R(m,l);const U=F(a.field1,a.field2,q,z),B=(await P({basemap:e,geometryType:n.geometryType,theme:"default",relationshipScheme:a.relationshipScheme, worldScale:!!a.symbolType?.includes("3d-volumetric"),view:a.view})).scheme;a=await I.createRenderer({layer:n,basemap:e,valueExpression:U,valueExpressionTitle:d.relationship.legendTitle,numTypes:-1,sortEnabled:!1,defaultSymbolEnabled:a.defaultSymbolEnabled,typeScheme:{colors:x.getColors(B,m,l),...B},statistics:{uniqueValueInfos:A},legendOptions:a.legendOptions,outlineOptimizationEnabled:a.outlineOptimizationEnabled,sizeOptimizationEnabled:a.sizeOptimizationEnabled,symbolType:a.symbolType,colorMixMode:a.colorMixMode, edgesType:a.edgesType,view:a.view,signal:p});n=a.renderer;A=n.uniqueValueInfos;d=d.relationship;for(const r of A??[])r.label=d[r.value];q=new D({type:"relationship",classificationMethod:f,numClasses:m,focus:l,field1:new v.AuthoringInfoFieldInfo({field:g.field,normalizationField:g.normalizationField,label:g.label,classBreakInfos:q.map(({minValue:r,maxValue:C})=>new u.AuthoringInfoClassBreakInfo({minValue:r,maxValue:C}))}),field2:new v.AuthoringInfoFieldInfo({field:k.field,normalizationField:k.normalizationField, label:k.label,classBreakInfos:z.map(({minValue:r,maxValue:C})=>new u.AuthoringInfoClassBreakInfo({minValue:r,maxValue:C}))})});n.authoringInfo=q;return{renderer:n,classBreaks:{field1:b,field2:c},uniqueValueInfos:a.uniqueValueInfos,relationshipScheme:B,basemapId:a.basemapId,basemapTheme:a.basemapTheme}}function V(a,b,c){const d=E(b,c);a.sort((e,f)=>{e=d.indexOf(e.value);f=d.indexOf(f.value);let g=0;ef&&(g=1);return g})}function W(a,b){a.authoringInfo??(a.authoringInfo=new D);const c=a.authoringInfo; c.numClasses=b.numClasses;c.focus=b.focus||null;c.focus||delete c.focus;const {field1:d,field2:e}=b;c.field1=new v.AuthoringInfoFieldInfo({field:d.field,normalizationField:d.normalizationField,label:d.label,classBreakInfos:d.classBreakInfos.map(f=>new u.AuthoringInfoClassBreakInfo({minValue:f.minValue,maxValue:f.maxValue}))});c.field2=new v.AuthoringInfoFieldInfo({field:e.field,normalizationField:e.normalizationField,label:e.label,classBreakInfos:e.classBreakInfos.map(f=>new u.AuthoringInfoClassBreakInfo({minValue:f.minValue, maxValue:f.maxValue}))});a.authoringInfo=c}const M=new Set(["equal-interval","natural-breaks","quantile"]),N=new Set(["HH","HL","LH","LL"]),Q={2:[["HL","HH"],["LL","LH"]],3:[["HL","HM","HH"],["ML","MM","MH"],["LL","LM","LH"]],4:[["HL","HM1","HM2","HH"],["M2L","M2M1","M2M2","M2H"],["M1L","M1M1","M1M2","M1H"],["LL","LM1","LM2","LH"]]},S={2:["L","H"],3:["L","M","H"],4:["L","M1","M2","H"]};y.createRenderer=async function(a){a=await L(a);const {layer:b,classificationMethod:c,field1:d,field2:e,numClasses:f, view:g,signal:k}=a,l={layer:b,classificationMethod:c,field:e.field,normalizationField:e.normalizationField,normalizationType:e.normalizationField?"field":null,minValue:e.minValue,maxValue:e.maxValue,analyzeData:!(null!=e.minValue&&null!=e.maxValue),numClasses:f,view:g,signal:k},[m,p]=await Promise.all([t.getClassBreaks({layer:b,classificationMethod:c,field:d.field,normalizationField:d.normalizationField,normalizationType:d.normalizationField?"field":null,minValue:d.minValue,maxValue:d.maxValue,analyzeData:!(null!= d.minValue&&null!=d.maxValue),numClasses:f,view:g,signal:k}),t.getClassBreaks(l)]);if(!m||!p)throw new h("relationship-renderer:error","error when calculating class breaks");return T(a,m.result,p.result)};y.updateRenderer=async function(a){a=await O(a);const {field1:b,field2:c,renderer:d,numClasses:e,focus:f,colors:g}=a,k=d.clone();k.valueExpression=F(b,c,b.classBreakInfos,c.classBreakInfos);const l=k.uniqueValueInfos??[];V(l,e,f);if(g){const m=t.createColors(g,g.length);l.forEach((p,n)=>K.applyColorToSymbol(p.symbol, m[n]))}W(k,a);return k};Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});