From 365acee663f7942ba7d8dfd0e4cf72c4cecb7a2d Mon Sep 17 00:00:00 2001 From: Diego Medina Date: Wed, 25 May 2022 06:04:04 -0400 Subject: [PATCH] fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (#20173) --- .../src/dimension/computeMaxFontSize.ts | 16 ++++++++++++++-- .../test/dimension/computeMaxFontSize.test.ts | 9 +++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/superset-frontend/packages/superset-ui-core/src/dimension/computeMaxFontSize.ts b/superset-frontend/packages/superset-ui-core/src/dimension/computeMaxFontSize.ts index a762d8b1f..ebd1f6e56 100644 --- a/superset-frontend/packages/superset-ui-core/src/dimension/computeMaxFontSize.ts +++ b/superset-frontend/packages/superset-ui-core/src/dimension/computeMaxFontSize.ts @@ -27,8 +27,20 @@ function decreaseSizeUntil( ): number { let size = startSize; let dimension = computeDimension(size); + while (!condition(dimension)) { size -= 1; + + // Here if the size goes below zero most likely is because it + // has additional style applied in which case we assume the user + // knows what it's doing and we just let them use that. + // Visually it works, although it could have another + // check in place. + if (size < 0) { + size = startSize; + break; + } + dimension = computeDimension(size); } @@ -66,7 +78,7 @@ export default function computeMaxFontSize( size = decreaseSizeUntil( size, computeDimension, - dim => dim.width <= maxWidth, + dim => dim.width > 0 && dim.width <= maxWidth, ); } @@ -74,7 +86,7 @@ export default function computeMaxFontSize( size = decreaseSizeUntil( size, computeDimension, - dim => dim.height <= maxHeight, + dim => dim.height > 0 && dim.height <= maxHeight, ); } diff --git a/superset-frontend/packages/superset-ui-core/test/dimension/computeMaxFontSize.test.ts b/superset-frontend/packages/superset-ui-core/test/dimension/computeMaxFontSize.test.ts index 99574f4cc..a64d81953 100644 --- a/superset-frontend/packages/superset-ui-core/test/dimension/computeMaxFontSize.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/dimension/computeMaxFontSize.test.ts @@ -59,5 +59,14 @@ describe('computeMaxFontSize(input)', () => { }), ).toEqual(25); }); + it('ensure idealFontSize is used if the maximum font size calculation goes below zero', () => { + expect( + computeMaxFontSize({ + maxWidth: 5, + idealFontSize: 34, + text: SAMPLE_TEXT[0], + }), + ).toEqual(34); + }); }); });