Skip to content

Commit 6ac728c

Browse files
committed
refactor: DRY up Omit types
1 parent a794f8f commit 6ac728c

File tree

5 files changed

+33
-31
lines changed

5 files changed

+33
-31
lines changed

packages/react-core/src/components/Dropdown/Dropdown.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { forwardRef, useEffect, useRef } from 'react';
22
import { css } from '@patternfly/react-styles';
33
import { Menu, MenuContent, MenuProps } from '../Menu';
4-
import { Popper, PopperProps } from '../../helpers/Popper/Popper';
4+
import { Popper, PopperOptions } from '../../helpers/Popper/Popper';
55
import { useOUIAProps, OUIAProps, onToggleArrowKeydownDefault } from '../../helpers';
66

7-
export type DropdownPopperProps = Omit<PopperProps, 'trigger' | 'triggerRef' | 'popper' | 'popperRef' | 'isVisible'>;
7+
export type DropdownPopperProps = PopperOptions;
88

99
export interface DropdownToggleProps {
1010
/** Dropdown toggle node. */

packages/react-core/src/components/Menu/MenuContainer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useEffect, useRef } from 'react';
22
import { onToggleArrowKeydownDefault, Popper } from '../../helpers';
3-
import type { PopperProps } from '../../helpers/Popper/Popper';
3+
import type { PopperOptions } from '../../helpers/Popper/Popper';
44

5-
export type MenuPopperProps = Omit<PopperProps, 'trigger' | 'triggerRef' | 'popper' | 'popperRef' | 'isVisible'>;
5+
export type MenuPopperProps = PopperOptions;
66

77
export interface MenuContainerProps {
88
/** Menu to be rendered */

packages/react-core/src/components/Select/Select.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { forwardRef, useEffect, useRef } from 'react';
22
import { css } from '@patternfly/react-styles';
33
import { Menu, MenuContent, MenuProps } from '../Menu';
4-
import { Popper, PopperProps } from '../../helpers/Popper/Popper';
4+
import { Popper, PopperOptions } from '../../helpers/Popper/Popper';
55
import { getOUIAProps, OUIAProps, getDefaultOUIAId, onToggleArrowKeydownDefault } from '../../helpers';
66

7-
export type SelectPopperProps = Omit<PopperProps, 'trigger' | 'triggerRef' | 'popper' | 'popperRef' | 'isVisible'>;
7+
export type SelectPopperProps = PopperOptions;
88

99
export interface SelectToggleProps {
1010
/** Select toggle node. */

packages/react-core/src/components/Tabs/OverflowTab.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@ import { Fragment, useContext, useEffect, useRef, useState } from 'react';
22
import styles from '@patternfly/react-styles/css/components/Tabs/tabs';
33
import { css } from '@patternfly/react-styles';
44
import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
5-
import { Popper, PopperProps } from '../../helpers';
5+
import { Popper, PopperOptions } from '../../helpers';
66
import { Menu, MenuContent, MenuList, MenuItem } from '../Menu';
77
import { TabsContext } from './TabsContext';
88
import { TabProps } from './Tab';
99
import { TabTitleText } from './TabTitleText';
1010

11-
export type HorizontalOverflowPopperProps = Omit<
12-
PopperProps,
13-
'trigger' | 'triggerRef' | 'popper' | 'popperRef' | 'isVisible'
14-
>;
11+
export type HorizontalOverflowPopperProps = PopperOptions;
1512

1613
export interface OverflowTabProps extends React.HTMLProps<HTMLLIElement> {
1714
/** Additional classes added to the overflow tab */

packages/react-core/src/helpers/Popper/Popper.tsx

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,8 @@ const getOppositePlacement = (placement: Placement): any =>
4646
export const getOpacityTransition = (animationDuration: number) =>
4747
`opacity ${animationDuration}ms cubic-bezier(.54, 1.5, .38, 1.11)`;
4848

49-
export interface PopperProps {
50-
/**
51-
* Trigger reference element to which the popper is relatively placed to.
52-
*/
53-
trigger?: React.ReactNode;
54-
/**
55-
* A reference to the trigger reference element that can be passed instead of or along
56-
* with the trigger prop. When passed along with the trigger prop, the div element that
57-
* wraps the trigger will be removed.
58-
*/
59-
triggerRef?: HTMLElement | (() => HTMLElement) | React.RefObject<any>;
60-
/** The popper (menu/tooltip/popover) element */
61-
popper: React.ReactElement<any>;
62-
/**
63-
* Reference to the popper (menu/tooltip/popover) element.
64-
* Passing this prop will remove the wrapper div element from the popper.
65-
*/
66-
popperRef?: HTMLElement | (() => HTMLElement) | React.RefObject<any>;
49+
/** Properties of Popper that can be used to customize its behavior. */
50+
export interface PopperOptions {
6751
/** popper direction */
6852
direction?: 'up' | 'down';
6953
/** popper position */
@@ -80,8 +64,6 @@ export interface PopperProps {
8064
appendTo?: HTMLElement | (() => HTMLElement) | 'inline';
8165
/** z-index of the popper element */
8266
zIndex?: number;
83-
/** True to make the popper visible */
84-
isVisible?: boolean;
8567
/**
8668
* Map class names to positions, for example:
8769
* {
@@ -176,6 +158,29 @@ export interface PopperProps {
176158
preventOverflow?: boolean;
177159
}
178160

161+
/** Extends PopperOptions */
162+
export interface PopperProps extends PopperOptions {
163+
/**
164+
* Trigger reference element to which the popper is relatively placed to.
165+
*/
166+
trigger?: React.ReactNode;
167+
/**
168+
* A reference to the trigger reference element that can be passed instead of or along
169+
* with the trigger prop. When passed along with the trigger prop, the div element that
170+
* wraps the trigger will be removed.
171+
*/
172+
triggerRef?: HTMLElement | (() => HTMLElement) | React.RefObject<any>;
173+
/** The popper (menu/tooltip/popover) element */
174+
popper: React.ReactElement<any>;
175+
/**
176+
* Reference to the popper (menu/tooltip/popover) element.
177+
* Passing this prop will remove the wrapper div element from the popper.
178+
*/
179+
popperRef?: HTMLElement | (() => HTMLElement) | React.RefObject<any>;
180+
/** True to make the popper visible */
181+
isVisible?: boolean;
182+
}
183+
179184
export const Popper: React.FunctionComponent<PopperProps> = ({
180185
trigger,
181186
popper,

0 commit comments

Comments
 (0)