forked from apache/superset
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add mergeMargin() function (#114)
* feat: add mergeMargin() * fix: typings * refactor: address chris' comments
- Loading branch information
1 parent
4a97740
commit 747368c
Showing
4 changed files
with
193 additions
and
0 deletions.
There are no files selected for viewing
1 change: 1 addition & 0 deletions
1
...et-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-dimension/src/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
export { default as getTextDimension } from './getTextDimension'; | ||
export { default as computeMaxFontSize } from './computeMaxFontSize'; | ||
export { default as mergeMargin } from './mergeMargin'; |
19 changes: 19 additions & 0 deletions
19
...ntend/temporary_superset_ui/superset-ui/packages/superset-ui-dimension/src/mergeMargin.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { Margin } from './types'; | ||
|
||
export default function mergeMargin( | ||
margin1: Partial<Margin> = {}, | ||
margin2: Partial<Margin> = {}, | ||
mode: 'expand' | 'shrink' = 'expand', | ||
) { | ||
const { top = 0, left = 0, bottom = 0, right = 0 } = margin1; | ||
const { top: top2 = 0, left: left2 = 0, bottom: bottom2 = 0, right: right2 = 0 } = margin2; | ||
|
||
const func = mode === 'expand' ? Math.max : Math.min; | ||
|
||
return { | ||
bottom: func(bottom, bottom2), | ||
left: func(left, left2), | ||
right: func(right, right2), | ||
top: func(top, top2), | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
166 changes: 166 additions & 0 deletions
166
...temporary_superset_ui/superset-ui/packages/superset-ui-dimension/test/mergeMargin.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
import { mergeMargin } from '../src'; | ||
|
||
describe('mergeMargin(margin1, margin2, mode?)', () => { | ||
it('combines two given margin', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}, | ||
{ | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}, | ||
), | ||
).toEqual({ | ||
top: 2, | ||
left: 2, | ||
bottom: 2, | ||
right: 2, | ||
}); | ||
}); | ||
describe('default values', () => { | ||
it('works if margin1 is not defined', () => { | ||
expect( | ||
mergeMargin(undefined, { | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}), | ||
).toEqual({ | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}); | ||
}); | ||
it('works if margin2 is not defined', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}, | ||
undefined, | ||
), | ||
).toEqual({ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}); | ||
}); | ||
it('use 0 for the side that is not specified', () => { | ||
expect(mergeMargin({}, {})).toEqual({ | ||
top: 0, | ||
left: 0, | ||
bottom: 0, | ||
right: 0, | ||
}); | ||
}); | ||
}); | ||
describe('mode', () => { | ||
it('if mode=expand, returns the larger margin for each side', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}, | ||
{ | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}, | ||
'expand', | ||
), | ||
).toEqual({ | ||
top: 2, | ||
left: 2, | ||
bottom: 2, | ||
right: 2, | ||
}); | ||
}); | ||
it('if mode=shrink, returns the smaller margin for each side', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}, | ||
{ | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}, | ||
'shrink', | ||
), | ||
).toEqual({ | ||
top: 1, | ||
left: 1, | ||
bottom: 1, | ||
right: 1, | ||
}); | ||
}); | ||
it('expand by default', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: 1, | ||
left: 1, | ||
bottom: 2, | ||
right: 2, | ||
}, | ||
{ | ||
top: 2, | ||
left: 2, | ||
bottom: 1, | ||
right: 1, | ||
}, | ||
), | ||
).toEqual({ | ||
top: 2, | ||
left: 2, | ||
bottom: 2, | ||
right: 2, | ||
}); | ||
}); | ||
}); | ||
it('works correctly for negative margins', () => { | ||
expect( | ||
mergeMargin( | ||
{ | ||
top: -3, | ||
left: -3, | ||
bottom: -2, | ||
right: -2, | ||
}, | ||
{ | ||
top: -2, | ||
left: -2, | ||
bottom: 0, | ||
right: -1, | ||
}, | ||
), | ||
).toEqual({ | ||
top: -2, | ||
left: -2, | ||
bottom: 0, | ||
right: -1, | ||
}); | ||
}); | ||
}); |