From 9a47395010996757372ac7242d381dbc60550916 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Thu, 14 Oct 2021 00:24:38 +0300 Subject: [PATCH] Fix controller.getMinMax for stacked charts (#9766) --- src/core/core.datasetController.js | 19 ++++++------- .../controller.line/stacking/bounds-data.png | Bin 17328 -> 19599 bytes test/specs/controller.line.tests.js | 26 ++++++++++++++++++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 584aeda02..63aea1f33 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -67,7 +67,7 @@ function getSortedDatasetIndices(chart, filterVisible) { return keys; } -function applyStack(stack, value, dsIndex, options) { +function applyStack(stack, value, dsIndex, options = {}) { const keys = stack.keys; const singleMode = options.mode === 'single'; let i, ilen, datasetIndex, otherValue; @@ -212,6 +212,8 @@ function clearStacks(meta, items) { const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none'; const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); +const createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked + && {keys: getSortedDatasetIndices(chart, true), values: null}; export default class DatasetController { @@ -567,11 +569,7 @@ export default class DatasetController { const values = stack && parsed._stacks[scale.axis]; if (stack && values) { stack.values = values; - // Need to consider individual stack values for data range, - // in addition to the stacked value - range.min = Math.min(range.min, value); - range.max = Math.max(range.max, value); - value = applyStack(stack, parsedValue, this._cachedMeta.index, {all: true}); + value = applyStack(stack, parsedValue, this._cachedMeta.index); } range.min = Math.min(range.min, value); range.max = Math.max(range.max, value); @@ -586,16 +584,15 @@ export default class DatasetController { const sorted = meta._sorted && scale === meta.iScale; const ilen = _parsed.length; const otherScale = this._getOtherScale(scale); - const stack = canStack && meta._stacked && {keys: getSortedDatasetIndices(this.chart, true), values: null}; + const stack = createStack(canStack, meta, this.chart); const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY}; const {min: otherMin, max: otherMax} = getUserBounds(otherScale); - let i, value, parsed, otherValue; + let i, parsed; function _skip() { parsed = _parsed[i]; - value = parsed[scale.axis]; - otherValue = parsed[otherScale.axis]; - return !isFinite(value) || otherMin > otherValue || otherMax < otherValue; + const otherValue = parsed[otherScale.axis]; + return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; } for (i = 0; i < ilen; ++i) { diff --git a/test/fixtures/controller.line/stacking/bounds-data.png b/test/fixtures/controller.line/stacking/bounds-data.png index 90ce6a30c282c7f2dbec6a7934fdc828ab3b3219..71ea7e96392b8cdb1785cd76785e0549ff1ab74d 100644 GIT binary patch literal 19599 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 literal 17328 zc-rl|_g7O{{|0&z5+HO10hJOPMO1K*rj!UMMd?Tpgdi#)C8$V;B%^>GMn$DZ0RcgR zqS7IP3W@?MMWh9((p#h^x%(u{`@Z)NxWC->owa7ogmcb5dwE5zE(aP9k1CODzZOz7bT%O5smj}6i&1I-QB z5WDtlcJMqNHR2FbZ#gnK85NN?wo1LE?c6){EP`nDPk8xw`~1#QWeN!?phUq1AKV(Q z|1!c%GbCyJI|jQpS;H?G{hRg|23OkBoTRQ;K{EhP*grt0UTV^D4emUfN@Oi}s#$9H zqxMxV{n~>G{nP2?Ok^^aJBZAV?2TmEknXQ2is0c(54lr%wJ#ySI^2IQh!OF?3}Ouv zSh1%q*aE^{|N5#FRmdrNA%Xk8LWB85!Wt6|0&LR(G%Qtq2pA@ z3+A6LRSkt2gtwk?wJmH09JvWoS+Q*on@C=Ku(+&w>u3I5{yp~~ndqf{nTUxOor)`C zC`vf4hB--a_I>_(X{p|zsVAiGi&pilaP``d>ZQSdOy&&O^9ILLwg0JF?5(&@Sdzev zoc^6I!Lfn2Gxih|61kx;d?Rb%a_M|#5wpaj^;0LKEZm@fKTXOllsr37A14^ngQ6D{ zH=X`;U)eQc@^xoS^v_p5$CD2zukzBrn#iABS@`|=(f%D3dU#~Z#jME3NRCxxH=2f! zLsUt9`}l}U8h%UJ-|qA+ixdR%?ks6Ng>q6wJkpEMte3eY6fsq%=#>$rsY0#%YnxB# zaFW-{E}rS?)qVK|F9rBygT&OmnhGqS50|~qO&#SJ27!*1DD`#uG2BN_W6;0MsSHmD zut)YU^*DM=WF~y}Q$g@At{SX%HoqKB_T9LVJY(_J+Qn4v!>!GAYs>RpOkV6x{`p(E z$aU|jBn0rKA|jtGG+B2|zn`;AXYY<&>nd8hVA_7=%;821F0_>pCmW29+2nxL-C$ku zgBt#58zQ$r)O%i%guzwJ{$X%N`bRL!17#?tUZP*YNUiLB z^J9C(w0o!Fi;N8R+DIppWg-{0b9K4&!T>*2v_xQym*PSWso~7|f_kU5=X1pV5kaYaJ9W26OCn<<*uK;%P2YkSNB^7@ zC!O0iGqP^T?Fog##}OiE)`CXl@8^ridL!H2eO9&F z8|n1o+^{H8(eR>O#dZZ~^2TyF*Sq0hAe0PRM)2xRN_a#;o&NrHOPH^m3tCmeP_~#w(D>0sGPh^*QFbp?q)=~^j=a?J%I2&^09*pZY?(CppuK7 zz0c1FZ`B`iw_PbWz?k7WG{s4UU&}qY3q6ni=1-a@&-gMVr^cJ1rmI=Dw3_@#1?be! z<#nT?$l;6?XZw?1n>(;!)ejvMpsLnCPTY9IWXUU^>VBBlAurdTf=(6q_??N{j~IW?ONRN7LS;cy@m9bD;hoVS*k~8AqGYVhvju6Yi`tHEv%X9qi4`k-DUb7>#*Z&z)2*&VfqIICwjJH)ExF zIw&*U4W9%p7p%jjit>FYx915)JJ2?TeC+HDczdy!kbl=9{RPXD>axULNC%2Dhd>cQi zS4I2lzf)>>j4MB!x4HQ*#)=*NAbl{pV|-d68H3Zh+*87NP6RgAW1~JYF0_&wE_gfK z^6KDY8Ij6NBQT0m&LK|CYoOx3hcit^vTdwXg)E@(#}oTG0kWc$P$(c{m*d91GGw); z#kfF<(s_l!x&P4Ppcift{qm@u38Egk4U^mZ>2`Q2;%;EGK{>E!dBPzN*jFv^>)jCw zJf6PiT&{u1UrYF(MTw$LKI<^Z{TO(c?TTMamfedi+;ig3v2^+V!%xC1FgW}E z;Fs{czM{t3$K8cK?{1s3O5gXhU{1|VoTO{~c0b4et^6>U3ENN&Zh(bq%O3x)Ax}zx zxPr0C@NmZ1O_$l~USrcN3t}%cg*S z7$tB^4_+H7JkBub%JtH|J6T6SSdg~T7URCH-V%v5Pc-@`RbX+PE{M! z5Tmz?O>Ds2w{J47yL_%0m6eWI1?j&q5KX|@D_?yXL4r7cA&&+gI8bSeL z7B4n{0cj+G*5@5;kwA>tzO{M2pt+c&2N;}(;Sdf`AabQ(R{y(K zGck~jie0&iH94^uT(svv0|x{IU=SGirp{^~Z}ypaAk>J$PH(sv3A-@>^-Y6BZ3n)vkH#TdTzz`E;gOwGQu?Hz*M^mQxnM#IS5SuD*1eEd=Z}1}g z_6u;LyYF$QcjRv_xgCB(yy3yo^T?Ks_f&0xwRxQ>+2Kqn;NqetggEK#jhtfG2|p!F zLwK5?H_yTb#%W=+nD%kPy;oROErgOOMdm3S0nX$Cn`UR4rpD^?17k_NW~Rt)UV9n} zkK-AC1yA`g7YN)oeSG5+AoG^Q=gm916qNV?8r7;tSV9#zp>84`az zt&#<}M5xkBhC$vCuD4w^W>qW||5kOwVgB9#q}btvv?rj<{tbf4i$FhsuS?z>lauol zss6mffd9qR7a5SQ0~0o|sW$LuW$;+?X%=>VY@~J4&L&(nj}8Ep7Zj4e5>?^i7QWZI z#H|Lvmh26LZaRhr@wO=|1AIV#YoRC}fFXwX47gTqfEC||qOkV|qF~QE!*R8*C_?z7 zA)YtzDPu*?`QR=vsIu8&CWivR_2URFG5c=y$N9S6DuO+pA0ZA|3Bm=0fc#xfGXn*r z#Kx-c^u}hg1@!CsYjxnNZvHcj6)ONPM>~YZ>$9IlYmR-iDCG?T*vGTQDJPqR43qeu zLL04xF5d^v5XZyH3$yzE@KmkIFq#HScB*(xx z=vsD%-Ij2*ezjX-G#?OF_hr3O@O&(83u|vru_f$4p`!_W0g_<4Qnrd&BxKbl09RIg zZ*p}4vfbFr0MGo5bx-<&9D1&^yc;&gQP@&iWI>Wo`}ktk$6_#Sdgj0n!0zIZK1*5h zC+FMS$3-VYRS`|(GtnY^Qwb7I<}?&d+z=KXX0RVLi=?cXgq+*qC+Fsm{LjJ$k5hcA zSjxbL&J8k_$B@T%K|aY(_g3ZKmfB_Z&GPPs^oPPK=X&5c(HG3}<*|zeIl@Y-6w&Ss zXGV$q6DR)<2}8TK6j=-wnGQo(K5YXochIpa=BS>c;am&-OV{T23f5YP(1ouiWsG*0 z<%h)Ohr1N4bZ1doy`i3eMru|oYCJP>XjDsI+KVKVs)mJXl${OIkrIGNfjqWTRc1}iqz zZ07WQXLEFL-eJI-yY|lt1F#Y&2OS8sP77xa9o6fG%<4OiGR}m{8Iu)|jXR-36Gc4t z6s^uJ_8f~Zb=XLP#cT?pI_zUc-Op;Ps4=_GN$PPx13ZXY?0I-hwdz2HY!O&>ahrq7 z*=a4rjEp^w9EkxrQR5WQQ0(^QhhOVGDqbgfp8&8=cl7Gy#H;U?{k2v0$d=LO?@ui} zzh#+4GRNIVrYfd~(?WVb25h^k0R#4}^a=+YS(8Ij>W=F9C#-xk6a?z=hb2<%ZtM($ z{W~Y43FyYVJ#yMZ_w8P4AT=;Jf0xgO13ICAE#9C-9eR7N{_Uv6L%G>sj`-g9f%FrB z;}u7eZV%YwrIC%gr~CdvQG&7C!XBx4AZwQ1tFH0lrETW+0t+d_wRIV{^g2BMz*w2s zUF(WI3joR|Eg{wlm7TmgRYAzpfLsVw8f<1CyGrP!DO6hm^?yVV5XK>vIv(hYST00e z6qAih5G4ckM~EEQ8oAu)-Xymy*ag&B>FAT2OP?I8@AfQ;emop%j(__%y0f`9nKa*Y zs2PQozYr`TV7xsc8ntxtN;os8GgtAh-CG~cP2M_)(7BI_I%_j^4|PZ6Su&C>zpbZkvrF%p2nOd@rX3+oAHPkxUCgRC-c3GA@%pN>kU}5yRQFT z0`ZQVxu760Xa!@zd)gkly=i(=U#aXrNTyVg6prml=LbmPPcG*Wmp9pjYbR(ZYx~47^flXnhXWGUm&Xyv8t8VL41BY z{IsrC>ZKgOG7j$g9S!EigLJN9MFG7C)ZUWo@-+308<8)!=g0yGyssHZq*8(uIY^5x zL}@i&uyQHgtG($F=3{N;t@aB_)|Rd7Zo89Vz2* z=qvt#Ky}|}s-=`TeCnwiv6O0%Y2RoNX0sQR?b`ru38{KFkQ)TgfRc|CLDddKC4M=o zw;^MbWfdDd&x|MUSQlzJP#iKdU%@%A!=Ur19?zEWoD-m^kqobXJiOa_Cpng}LKI5% zu3~L}|NVu?GXR~GqwQhJEtkkayXd)qbQ-0xtU>LX46(zJWk7uz#PW+ACZ86B^BZ}b z_e1;Vp~n~F^Z^Sv)Nm&nLLY~C)p9M($i4h<@o@_4?-OnxpSC!ldjmNs@CbUPGCaQN zni~+?6Q^L3HWWiF-sUW$mk0?AI)V78e|y0j#1xh(6L_%b0tY*4@H*SkTfnoSe}f_} zh_o1Ixcg{$sUeiS=`wGSJsUvTi<7L3K(w*-f8^#IqEDS5S7Sg) zzTL~ClAuTijKS)qjaB-uAt#Vbz*G&wJy(!uNz)GAr$Rt>=+TNtTA9|vr{Y5SnJ1CoDjXN#pB`7W+5oT)iBd%y;}9r)(j z-;?&9lBOUmt^*Ag$Eyb_jNCJq#)V8k1p=Z$#4{zMPTn6`c zkAb|>-7KM0fa`(Rq3m~DwiHy?VbFF|PxeW$mVi(ZupY$M zktdwIj!Ag?wh2k3y1BtIHm<^G!5K{ai80@n~-Gk{pC;Grmw zManEpH*x%h(}M-%gM{0Ts(Yb|4g8s5OvB&@};L zK-tAE%%rUZqTohF;+8qFyQHzb2gYMJZ_UeOa_kt}@*bjfo<w!TM0i6{MESL z2I;eaJ4UHs;r)igqzcu9Xc2AMAEm=ifX?byn}BEK;MC^-StoHAW}KTr+#1TrX2Ok3 zz|L>nrEU%+2c=xhO#d0qRORvFc?hgYvqI$L;NT644ZJPyT9P@eqwF8KCELew-p+uUI zI4mP2=+;9z$ao?>(VhB99qFrJ`67Al28e8i>yh=~%LW;$Qr=G|~}3cUB)c%jMm1dXxfEk%wN zRX5D5SeN`-)i=8L!FpQo5%eyacQAkj;z^wxMYcIn7r|GG;+JAAmu-E+1Iv5?1psPA zB;l#RaUfI{8D97A{yq5qZCZ^w+>i?g61T;L5dY>DuAFzK4b=Cp-1_1puw;G$0!r#a z&*dF(VZT88id%|0o8LN~;g>1bjD@8U47NSRmz#~a4G>!$_i;wV9BjoNNdSm%idIzx zvogt7##+ZkFRvI?v8+otp=wRx15fJV?yQP|X{#c0pz$^*U2gZI)M}#_m4u7}Njl0C zE)(bHL}l-%@1*mNGwLsBY9B*OG-QBzu}=R5?J(!|DUv?h4H1y%j9!L93S$y5veW`( zkM;iwn1xc!Y z=bx!;fLI;md6FP-0Dv}&rU0;u-H4Nz-z9ZpbVktNnYt@Ud`!WvLCu7JIh8d z^-t8WSp~&S2P;>`@|_LESS~)<28_$g3@XtdY2Bc%0;Zh20PjrT&5lB@d~hv~Nlm`O zX^S?%>fq_|q`T>1!%3gh4rxVrmd;ou{S}jEmov9C5U=i0i>hWkC(OQAjeSNX{#@gw zn0lS$RDNY!CE0wqz!-yB;Xgmx@3XYR79}njy=eprFI}VE>B>X*=%lTL%73hgE8k%e zb(P9=bn(}4a6X%88{5B~hD^QczMnB?Vm}U(+-dUM-POvzJV~; zr}@xgHR6ax-N}nj(?uJ3IQuF=r(g>{FX=TG)myNhDjg816(`RRe;EMA{KcFm8h{yx z1*-tvAV-gpa>F<7E&0rvqF)g$w18?oqXWvsN(qWTCbXriet)Z5t`nbWoX4l6(9=Bh zR+4W1*5T*uC7dUpm3u+ZL6ibTy{w^QOB{h20@QOr*^p!n zqM--#i0o5G-5G{Yu%hq^!ANF zzAe2KjZTPtAEkcobA!Xubk$;SyL40TaV1q1Wo-cVg5VvA~C? zfn`uGiZ4UE;ia%MSHa8 zdRcMyDKZTl!dq3#syj00LOB)f$~M3e8@11ItCP@l-dtuh;Aa_)G#w@Q&1x{F37h~6 zY)&K~T!qa-E1NC2+wvO#ZMb!fYDciFQ)JGZAo{~z3A*uv$=QV112+^q#J6)gT#nvF zP8#`9StR{6d z;7!tBV%$xtGvka9bZ;6biC+Ol(X!p%SG92qLk5+~fAz!BHW%;KOWSvfzJ87vLR@-gLg~4_zIk>WI*RHnTHmO;Jt|i1%(d1&nAmL9=n>ZD z`SI+W6t~}0I>I4J;K3>I;7<`Vu%t-r+R3WU+#LU7eOxc905jdw+*z|w;9EnHuqzpHnU##E;hqX2s z_N<`;r#B-I5`GBJc`h87>DU=~TS7CpgP43fd`;erv*Tk8CJ3m$jNR_`I`b3cQz%#G za(0HUff6D_?%yriYvQB=AkjzV;T`LjdwI_xat!BQ(cq5y;KQ2P%-$?oo>Us$OznGYS@eVaQhAXqK4@-nR;f{t8 z@8Cs%msGO0lu`v@XD-OZ8V;0}a(c~~| zxv63cTa_)gEekGDt!QH-wDJKDR|duKzbz1MP)nk0O>1~6;>r6f-ahZ&tGuS5{16(Q z*MjF6|XL5KI%8gd9xbg_pwM;6IeH7S8!qA2G#(5byVDHB^Hm2r3X+6HnLjCCMO)DFx% zetT-^q`_Lrg?oRo`u8udlDZ`84rSuc-;qK%)ShHY;|m@K_i~)MUofl4uq-iZ>Aw8F zC6|u-mDC|;AzeeCf83X*bIgMC*;X!hn30ocB zY9%e%4c%n=_jjP&WJTR?JLd^zsv8 z1oG0M{m$YfOQmwr^_b+p?>I($7Wq~5=Hhw5p0;ZB$R{;b7r$E3uLsbRp&+BSC=L=D zt600`)f@|Z9bFpFeybo&fDH1=(kNI-fpqOHJP=@%o^ICnh}1g|AHUX~}SnBQC;^CzO@3d-qyX|yh8FktZ^DBWsK z3KpVmokaMhmOm9QJuhfwpKUW|c5QS@C^1Wh2KR2i!(A;EIh44P;t*Bahgh0dxFW#x zedah;)7oM7Dlkx-B$*J&ff^cKP{=czbyGuX&0Wf(0Y&lNaH*2xj~$Yx$DVuD?FdV} z5%I-gERH&36tQAHn^u2R_nQ7RC>+g*nHkQVJyJ^4R%*}}!Noa)?!jD-e|oL*rv?n} zgi90 zgv@uQ#Q{?$Tq1iEv^Jj=PfJxV(bWZYD35!t4R;9X^ZWanf`5B!bCh^mu+ZGvNpX^{ zN&O3sY!x^4$V^UL>93B?d>&{KBp|twfDkgLrE?3W8YhB`@#VMXaeLe6Aggf~WCxA&Ws;J#cTxqii znli=i8N8%Y3i#Dqp3xb2uIJ#;Y|~(L1k9yNHL5TO=m1N6K(Xi2{4Y?7B~;Jdae}w} zl;9CGzh0k7{R?qTZPXI51KwlUm_$S{ z$9p5KM`z&eAZZEMrzO{$D5x5%d9XO~%D59aaw*zYT5!VYvV4uRMO4b@yQoh=k$)5* zS;fn7a7w*|m)HNdJV+Y0Chr#JRzGoBtE~St=_t4Y*bfBpG$*SE`d=!BP*{ua9X@_SL3F`ueP^bM5+;bD}!>R{N)~?D1{~%{DC%pVB{FSVjIbR4+thglH608z4^+4lOG|!LK2(L-- z`(GsRM5oh!x!r2>RBG{o6&-w9whBl>=`jz|G1aR3JML)zZ6u;|b##`F91dBb?7o4sYccIl_^_?!owvxy6N;>?l{%y8L#)U z3u=>E_WAyFzt6XwQ#I^p_^9q316F8Z=`VrcE`I>>wHezjapYeDS=ok%tTy^lE+@;OB- z9wV+$6xeU*aMEYjpFSe7uzc*W`ol)L!XCR7$W*h^q}F-NypkDdx16K z*9zFRJ$nQy=bH{$K)OSq9AzSX@_tx`PL;ML!>ABoK~K6P(vYTXZ4Dc9Ye4BXX7`AG zJrJd}KVEol)(VjEO1mt1PtmGLj<0fUuCcg_=h8^i+2SvnJN5_(T}Ha1oLbcDJX8|I z$#dpRYX>dY83T;pk-Uk3s!3tG;)%sswj$Xh@vmkKxz3uR0{4N~t2OMDSV5*%&9cP< z_vqybIkrcf?1%ID&mZV*l$Kn5a6J zXte|iVTb0|Ff7^H3vR$|;eVA1U3G(CS>LR;==!FD(e9#JL5rIdB`)#wdwFcbmoCan z3KqUJ&)fM1LmJ6I3LMx7s%77+F>#g%Eki4`S)R-XswMjXIROQp8W{Dze*e9pDYSW!2*1YZ=Bng&WQ0Hx{|Cf3++P$_n6eZ?%! z)H$wxIX?#OS}8tC3J?S{42r-GG2;#*8g=u3WO_zO10+v?>shw1TPdAb`mxae$@gs$ zA(^;*c;Cx>`5;;%S0$k~f?VW8ZG$0rHqw^T4C`tUQk)~@8V9~Df@-Htv>x5G2)ZHd zU9Z~$F7wE`Ddyn3P+TZYdmN$);t?JWtVLF|bKx7Qv9Z1+TqzX}YBVS-+#^$IlBOP)u@XIboO%eqL*(yO zyLHLG*dnlCOR2Q2x%gHzV@8YbsD|_vi=gn$*!XN*JlwAqn(CJrO{A%DCgAvXR$E{Y zM?+!x4hQlJ1Q}xYMkV)U-R8g~s&dtuLII4s?Hebw{f$lZE=Kz#%MN2qs z$0O+w&GQO%P-v4iWh>k@w!WMp(7FK*sVC2tnu6~i{N2`dK4nxFW?vkVe9M%E z!W&0cJClcz{)MgXsBSL=zTw9f4=P zv>RZ)e{nA!nJ_-1U22KRQj_G*m@sf=W%cF4W%M9=IvTK{61ZI>e4A(Mb=XOzbjPUy zLigZEwsBg#z}xis zu+wqCepKC?@?&EFi5?L*PxU=C80vd~%cXHOUV=KfF%_NFSGV~;d16~LLZ9Wx+hmYx z2eh_~I%XBgh{@IG2YvB%uwxH>%89^RB5UNlv5Ii_Q79MQM&o_c`wEa`El|^IcxFa~ zrT;^dQ@+ELmDdtv3f-`L;;QYE^@*^ab1Dq~C*p5)`X%630ZygM2XkzYCT%MNTaSNN zILH$!qP+`Va1vm*>W`6Ym0w`ERK^|WcG0<+6XL;Eu9V`x$*8TZn!#{6W6(B{Dfp8e zCAja1c;X01t3_MX+RW-#;n)E2G~~OsZLq>*g7g~AiB9v(Q4{!)bsHZ1qlb*_UDz(L z0aJ|?V{V^!7^C*$y}>23ZW;J6wzWNM+araX$^5oU)h&QeSmwe`x#1_!FCN8JI-Fz( zmyi;LH*4PQ#v@y@8y-52IqqBX$Yu@SpPKCG@_X_<+o{xrqfXC)L^~Mdkd=L6*`b+7*Tb5ApaLgiieiZdghy7q@0 z`Md!4AITvC6bDxh(M?TK|mb^b#+Hvx-@wAZJu1 zv;bQe)uOcPOnPrHLianN#XaJyn~FV0<@ zB;f$LS>UfU_ER;l=53`758z{Xc_Ktg(WQEk->m4nb`-4l*CsIwhY&y5Cw}+{rG_fp zV!M=v?8R@QM-h|bEP{UC%%iS%(eiLL;v}mYVUrrsYU!ilqHBJ-w>I-k7eHE&6f$1X zd0ubbPZFc|;R&c+e?QYCv^4mzzl=!w5=`z8Rf&4tm-{*(XBb9i_{M9tlxYmjaOuaz z8RikS#g3vi-Wk@Bq7m;>gHPAAebztv!L}@-D1X&Uyh#%Fo!~JTdt0e@l{{x?#826EKxOaWTHH6zj#JPc(p4+mye!XY??=~^FbJhT#e0AF~P`W<% z^=;hO+&6@60+rAAjLbvs&r@)wZZE9hngmOQ4_4g1HDJrN&`r3b{_b)Ix2HJ>A8Moi zbHSDSGYI}#@n-4NNp6@{3INKM<&!MpwUM*+Nppkh4*$_x|CC6XEB`E<-3v+UADM8u z!g}&IGYkxbGiKrsO=&xvy4;q% zkpyg!qH}3DaNc|kaL-t*VKY;M zfBJM*Tj>nl-xZH^kl(YDAMop$)h*onS75;#_(?fuk22ad1?mPuu^T-7yc_AQdF&WM zOMGtqgRUSPWe7znmk6BPOOj{J#JNV!zV|Et{j{KLI9Ye0#i(-&B!vjZ8crGhyMH32 zg2=Up3f5NIT?n%cJL1m>BD8*bXBJ3XFKPG{B1R2cyR*3~-60|EfNW{nZvp-MI`?{g z@$kmIR+HQj?r^RcV9EvW)_ur{4X@&CIO*vEB6w=)5T}PvHU%NLUAXeQ!~b3Szf1pj z>HqJSiUuA$fFK@s_$ACK zpx3E1(BmMH6&bzS)pzdFNkSFF$^UiR%RcsOJaO==iTtT^g(-w;ooJqfMLXIoheEwm z0uVeiQzx1u1JxnN=GD9|bx+H~4YwmsAb@o`q(AS077rb+V+-_THbZ zr0xtJE*-@h!hNqX4MPs#oMuRHfO=L6usu=AuK`n@954oOkhaI_LXJrb2f!`kMsPjM2q=Ir@rBOvx@V%0&98X zJ1B=*71PA2vXPf7WBIC^f8SKCe$>VXe|q6Trkkrgf5%##&gj_!xR*bU^C20$Eev<% zT*H57`#24Tz&*@GrizQwpLqtAsCP`DuzKZuZ|H#V9sQM2KVcf+6z7mF<`R*&xex0} z!cHB_&HNT8fyRu;_~&F9X4FP=!Im<_g$p@ V^3MIK27!Ofj#wHO8sh){e*o#Bn}+}Z diff --git a/test/specs/controller.line.tests.js b/test/specs/controller.line.tests.js index 7210367ca..684b1919b 100644 --- a/test/specs/controller.line.tests.js +++ b/test/specs/controller.line.tests.js @@ -59,6 +59,32 @@ describe('Chart.controllers.line', function() { expect(createChart).not.toThrow(); }); + it('should find min and max for stacked chart', function() { + var chart = window.acquireChart({ + type: 'line', + data: { + datasets: [{ + data: [10, 11, 12, 13] + }, { + data: [1, 2, 3, 4] + }], + labels: ['a', 'b', 'c', 'd'] + }, + options: { + scales: { + y: { + stacked: true + } + } + } + }); + expect(chart.getDatasetMeta(0).controller.getMinMax(chart.scales.y, true)).toEqual({min: 10, max: 13}); + expect(chart.getDatasetMeta(1).controller.getMinMax(chart.scales.y, true)).toEqual({min: 11, max: 17}); + chart.hide(0); + expect(chart.getDatasetMeta(0).controller.getMinMax(chart.scales.y, true)).toEqual({min: 10, max: 13}); + expect(chart.getDatasetMeta(1).controller.getMinMax(chart.scales.y, true)).toEqual({min: 1, max: 4}); + }); + it('Should create line elements and point elements for each data item during initialization', function() { var chart = window.acquireChart({ type: 'line', -- 2.47.3