1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/open-hand-choerodon-ui

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
FormItemLabel.tsx 2.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
huihuawk Отправлено 2 лет назад c5191ea
import React, { CSSProperties, FunctionComponent, memo, ReactNode, useCallback, useContext, useEffect, useRef } from 'react';
import ConfigContext from 'choerodon-ui/lib/config-provider/ConfigContext';
import { isArrayLike } from 'mobx';
import { Tooltip as LabelTooltip } from '../core/enum';
import isOverflow from '../overflow-tip/util';
import { hide, show } from '../tooltip/singleton';
import { TooltipProps } from '../tooltip/Tooltip';
export interface FormLabelProps {
className?: string;
rowSpan?: number;
children?: ReactNode;
style?: CSSProperties;
tooltip?: LabelTooltip | [LabelTooltip, TooltipProps];
help?: ReactNode;
}
const FormItemLabel: FunctionComponent<FormLabelProps> = function FormItemLabel(props) {
const { className, rowSpan, style, tooltip, children, help } = props;
const { getTooltipTheme, getTooltipPlacement } = useContext(ConfigContext);
const tooltipRef = useRef<boolean>(false);
const handleMouseEnter = useCallback((e) => {
const { currentTarget } = e;
if (tooltip === LabelTooltip.always || (tooltip === LabelTooltip.overflow && isOverflow(currentTarget))) {
show(currentTarget, {
title: children,
theme: getTooltipTheme('label'),
placement: getTooltipPlacement('label'),
});
tooltipRef.current = true;
} else if (isArrayLike(tooltip)) {
const tooltipType = tooltip[0];
const labelTooltipProps = tooltip[1] || {};
const duration: number = (labelTooltipProps.mouseEnterDelay || 0.1) * 1000;
if (tooltipType === LabelTooltip.always || (tooltipType === LabelTooltip.overflow && isOverflow(currentTarget))) {
show(currentTarget, {
theme: getTooltipTheme('label'),
placement: getTooltipPlacement('label'),
title: labelTooltipProps.title ? labelTooltipProps.title : children,
...labelTooltipProps,
}, duration);
tooltipRef.current = true;
}
}
}, [tooltip, children, tooltipRef]);
const handleMouseLeave = useCallback(() => {
if (tooltipRef.current) {
hide();
tooltipRef.current = false;
}
}, [tooltipRef]);
useEffect(() => () => {
if (tooltipRef.current) {
hide();
tooltipRef.current = false;
}
}, [tooltipRef]);
return (
<td
className={className}
rowSpan={rowSpan}
style={style}
>
<label>
<span
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
{children}
</span>
{help}
</label>
</td>
);
};
FormItemLabel.displayName = 'FormItemLabel';
export default memo(FormItemLabel);

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/open-hand-choerodon-ui.git
git@gitlife.ru:oschina-mirror/open-hand-choerodon-ui.git
oschina-mirror
open-hand-choerodon-ui
open-hand-choerodon-ui
master