ant-design/components/typography/Base/util.ts
二货爱吃白萝卜 b9d5933975
fix: ellipsis check for over (#50514)
* fix: ellipsis check for over

* chore: use another way

* refactor: measure update

* chore: no measure if native

* chore: clean up
2024-08-21 14:27:40 +08:00

51 lines
1.2 KiB
TypeScript

export function toList<T>(val: T | T[]): T[] {
if (val === false) {
return [false, false] as T[];
}
return Array.isArray(val) ? val : [val];
}
export function getNode(dom: React.ReactNode, defaultNode: React.ReactNode, needDom?: boolean) {
if (dom === true || dom === undefined) {
return defaultNode;
}
return dom || (needDom && defaultNode);
}
/**
* Check for element is native ellipsis
* ref:
* - https://github.com/ant-design/ant-design/issues/50143
* - https://github.com/ant-design/ant-design/issues/50414
*/
export function isEleEllipsis(ele: HTMLElement): boolean {
// Create a new div to get the size
const childDiv = document.createElement('em');
ele.appendChild(childDiv);
// For test case
if (process.env.NODE_ENV !== 'production') {
childDiv.className = 'ant-typography-css-ellipsis-content-measure';
}
const rect = ele.getBoundingClientRect();
const childRect = childDiv.getBoundingClientRect();
// Reset
ele.removeChild(childDiv);
// Range checker
if (
// Horizontal in range
rect.left <= childRect.left &&
childRect.right <= rect.right &&
// Vertical in range
rect.top <= childRect.top &&
childRect.bottom <= rect.bottom
) {
return false;
}
return true;
}