Skip to content

Commit 3607bb6

Browse files
committed
refactor: DRY up Omit types
1 parent cc5657d commit 3607bb6

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
@@ -47,24 +47,8 @@ const getOppositePlacement = (placement: Placement): any =>
4747
export const getOpacityTransition = (animationDuration: number) =>
4848
`opacity ${animationDuration}ms cubic-bezier(.54, 1.5, .38, 1.11)`;
4949

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

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

0 commit comments

Comments
 (0)