Skip to content

Commit

Permalink
feat: add parseLength function to @superset-ui/dimension (#171)
Browse files Browse the repository at this point in the history
* feat: add parseLength function

* feat: export

* fix: address Kim's comment
  • Loading branch information
kristw authored and zhaoyongjie committed Nov 26, 2021
1 parent 4f23311 commit 5a79a70
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export { default as getTextDimension } from './getTextDimension';
export { default as computeMaxFontSize } from './computeMaxFontSize';
export { default as mergeMargin } from './mergeMargin';
export { default as parseLength } from './parseLength';

export * from './types';
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const HUNDRED_PERCENT = { isDynamic: true, multiplier: 1 } as const;

export default function parseLength(
input: string | number,
): { isDynamic: true; multiplier: number } | { isDynamic: false; value: number } {
if (input === 'auto' || input === '100%') {
return HUNDRED_PERCENT;
} else if (typeof input === 'string' && input.length > 0 && input[input.length - 1] === '%') {
// eslint-disable-next-line no-magic-numbers
return { isDynamic: true, multiplier: parseFloat(input) / 100 };
}
const value = typeof input === 'number' ? input : parseFloat(input);

return { isDynamic: false, value };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import parseLength from '../src/parseLength';

describe('parseLength(input)', () => {
it('handles string "auto"', () => {
expect(parseLength('auto')).toEqual({ isDynamic: true, multiplier: 1 });
});

it('handles strings with % at the end', () => {
expect(parseLength('100%')).toEqual({ isDynamic: true, multiplier: 1 });
expect(parseLength('50%')).toEqual({ isDynamic: true, multiplier: 0.5 });
expect(parseLength('0%')).toEqual({ isDynamic: true, multiplier: 0 });
});

it('handles strings that are numbers with px at the end', () => {
expect(parseLength('100px')).toEqual({ isDynamic: false, value: 100 });
expect(parseLength('20.5px')).toEqual({ isDynamic: false, value: 20.5 });
});

it('handles strings that are numbers', () => {
expect(parseLength('100')).toEqual({ isDynamic: false, value: 100 });
expect(parseLength('40.5')).toEqual({ isDynamic: false, value: 40.5 });
expect(parseLength('20.0')).toEqual({ isDynamic: false, value: 20 });
});

it('handles numbers', () => {
expect(parseLength(100)).toEqual({ isDynamic: false, value: 100 });
expect(parseLength(0)).toEqual({ isDynamic: false, value: 0 });
});
});

0 comments on commit 5a79a70

Please sign in to comment.