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

OSCHINA-MIRROR/open-hand-choerodon-ui

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
TriggerChild.tsx 2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Joshua Chen Отправлено 4 лет назад b6575d1
import { Children, cloneElement, PureComponent, ReactElement } from 'react';
export type hook = (eventName: string, child: ReactElement<any>, e) => void;
export interface TriggerChildProps {
onContextMenu?: hook;
onClick?: hook;
onMouseDown?: hook;
onMouseEnter?: hook;
onMouseLeave?: hook;
onFocus?: hook;
onBlur?: hook;
isClickScrollbar?: {
value: boolean | undefined;
};
popupHidden?: boolean;
}
export default class TriggerChild extends PureComponent<TriggerChildProps> {
static displayName = 'TriggerChild';
handleContextMenu;
handleClick;
handleMouseDown;
handleMouseEnter;
handleMouseLeave;
handleFocus;
handleBlur;
handleKeyDown;
constructor(props, context) {
super(props, context);
const createChains = eventName => e => {
const { [`on${eventName}`]: handle, children } = this.props as { [key: string]: any };
const child = Children.only(children);
if (handle) {
return handle(eventName, child, e);
}
if (child) {
const { [`on${eventName}`]: childHandle } = child.props;
if (childHandle) {
return childHandle(e);
}
}
};
this.handleContextMenu = createChains('ContextMenu');
this.handleClick = createChains('Click');
this.handleMouseDown = createChains('MouseDown');
this.handleMouseEnter = createChains('MouseEnter');
this.handleMouseLeave = createChains('MouseLeave');
this.handleFocus = createChains('Focus');
this.handleBlur = createChains('Blur');
this.handleKeyDown = createChains('KeyDown');
}
render() {
const { children } = this.props;
return cloneElement(Children.only(children as ReactElement), {
onContextMenu: this.handleContextMenu,
onClick: this.handleClick,
onMouseDown: this.handleMouseDown,
onMouseEnter: this.handleMouseEnter,
onMouseLeave: this.handleMouseLeave,
onFocus: this.handleFocus,
onBlur: this.handleBlur,
onKeyDown: this.handleKeyDown,
});
}
}

Опубликовать ( 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