mirror of
https://github.com/apache/superset.git
synced 2024-09-19 20:19:37 -04:00
feat: add parseLength function to @superset-ui/dimension (#171)
* feat: add parseLength function * feat: export * fix: address Kim's comment
This commit is contained in:
parent
4f23311813
commit
5a79a7000f
@ -1,5 +1,6 @@
|
|||||||
export { default as getTextDimension } from './getTextDimension';
|
export { default as getTextDimension } from './getTextDimension';
|
||||||
export { default as computeMaxFontSize } from './computeMaxFontSize';
|
export { default as computeMaxFontSize } from './computeMaxFontSize';
|
||||||
export { default as mergeMargin } from './mergeMargin';
|
export { default as mergeMargin } from './mergeMargin';
|
||||||
|
export { default as parseLength } from './parseLength';
|
||||||
|
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
@ -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 };
|
||||||
|
}
|
@ -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 });
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user