From 0afca5e9d4cf654a9a8abb79425fc0f4ee75e795 Mon Sep 17 00:00:00 2001 From: Egor Pogadaev Date: Mon, 1 Apr 2019 17:21:34 +0500 Subject: [PATCH] fix(Button): add robust ReactElements comparison react-hot-loader issue #1267 --- packages/retail-ui/components/Button/Button.tsx | 6 ++++++ packages/retail-ui/components/Button/index.ts | 2 +- packages/retail-ui/components/Group/Group.tsx | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/retail-ui/components/Button/Button.tsx b/packages/retail-ui/components/Button/Button.tsx index 19e02cabf69..fcd9ddd691e 100644 --- a/packages/retail-ui/components/Button/Button.tsx +++ b/packages/retail-ui/components/Button/Button.tsx @@ -27,6 +27,10 @@ function listenTabPresses() { } } +export const isButton = (child: React.ReactChild): child is React.ReactElement => { + return React.isValidElement(child) ? child.type.hasOwnProperty('__BUTTON__') : false; +}; + export type ButtonSize = 'small' | 'medium' | 'large'; export type ButtonType = 'button' | 'submit' | 'reset'; @@ -127,6 +131,8 @@ export interface ButtonState { } class Button extends React.Component { + public static __BUTTON__ = true; + public static TOP_LEFT = Corners.TOP_LEFT; public static TOP_RIGHT = Corners.TOP_RIGHT; public static BOTTOM_RIGHT = Corners.BOTTOM_RIGHT; diff --git a/packages/retail-ui/components/Button/index.ts b/packages/retail-ui/components/Button/index.ts index 5097f99c632..0ed0905132a 100644 --- a/packages/retail-ui/components/Button/index.ts +++ b/packages/retail-ui/components/Button/index.ts @@ -1 +1 @@ -export { default, ButtonProps, ButtonState, ButtonSize, ButtonType, ButtonUse } from './Button'; +export { default, ButtonProps, ButtonState, ButtonSize, ButtonType, ButtonUse, isButton } from './Button'; diff --git a/packages/retail-ui/components/Group/Group.tsx b/packages/retail-ui/components/Group/Group.tsx index 5fef0212dc6..8a19e92200d 100644 --- a/packages/retail-ui/components/Group/Group.tsx +++ b/packages/retail-ui/components/Group/Group.tsx @@ -8,7 +8,7 @@ import Corners from '../Button/Corners'; import '../ensureOldIEClassName'; import styles from './Group.less'; import { Nullable } from '../../typings/utility-types'; -import Button from '../Button'; +import { isButton } from '../Button'; export interface GroupProps { width?: React.CSSProperties['width']; @@ -83,7 +83,7 @@ class Group extends React.Component { corners, }; - if (child.type !== Button) { + if (!isButton(child)) { delete cloneProps.corners; }