Skip to content

Commit

Permalink
docs(Dropdown): expose menuAppendTo in Dropdown prop docs (#7173)
Browse files Browse the repository at this point in the history
* expose menuAppendTo in Dropdown prop docs

* pr feedback from Eric

* fix circular dependency error
  • Loading branch information
jenny-s51 authored Apr 13, 2022
1 parent be595a2 commit fdbf6f9
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@ import { ApplicationLauncherGroup } from './ApplicationLauncherGroup';
import { ApplicationLauncherSeparator } from './ApplicationLauncherSeparator';
import { ApplicationLauncherItem } from './ApplicationLauncherItem';
import { ApplicationLauncherContext } from './ApplicationLauncherContext';
import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper';
import { createRenderableFavorites, extendItemsWithFavorite } from '../../helpers/favorites';

export interface ApplicationLauncherProps extends ToggleMenuBaseProps, React.HTMLProps<HTMLDivElement> {
export interface ApplicationLauncherProps extends React.HTMLProps<HTMLDivElement> {
/** Additional element css classes */
className?: string;
/** Display menu above or below dropdown toggle */
Expand All @@ -35,6 +34,14 @@ export interface ApplicationLauncherProps extends ToggleMenuBaseProps, React.HTM
isGrouped?: boolean;
/** Toggle Icon, optional to override the icon used for the toggle */
toggleIcon?: React.ReactNode;
/** The container to append the menu to. Defaults to 'inline'.
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'inline' | 'parent';
/** ID list of favorited ApplicationLauncherItems */
favorites?: string[];
/** Enables favorites. Callback called when an ApplicationLauncherItem's favorite button is clicked */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,14 @@ import { TextInput } from '../TextInput';
import { InputGroup } from '../InputGroup';
import { KEY_CODES } from '../../helpers/constants';
import { FocusTrap } from '../../helpers';
import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper';
import { Popper } from '../../helpers/Popper/Popper';
import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';

// seed for the aria-labelledby ID
let currentId = 0;
const newId = currentId++;

export interface ContextSelectorProps extends ToggleMenuBaseProps, OUIAProps {
export interface ContextSelectorProps extends OUIAProps {
/** content rendered inside the Context Selector */
children?: React.ReactNode;
/** Classes applied to root element of Context Selector */
Expand All @@ -29,6 +28,14 @@ export interface ContextSelectorProps extends ToggleMenuBaseProps, OUIAProps {
onToggle?: (event: any, value: boolean) => void;
/** Function callback called when user selects item */
onSelect?: (event: any, value: React.ReactNode) => void;
/** The container to append the menu to. Defaults to 'inline'.
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'inline' | 'parent';
/** Flag indicating that the context selector should expand to full height */
isFullHeight?: boolean;
/** Labels the Context Selector for Screen Readers */
Expand Down
14 changes: 11 additions & 3 deletions packages/react-core/src/components/Dropdown/Dropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ import * as React from 'react';
import styles from '@patternfly/react-styles/css/components/Dropdown/dropdown';
import { DropdownPosition, DropdownDirection, DropdownContext } from './dropdownConstants';
import { DropdownWithContext } from './DropdownWithContext';
import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper';
import { OUIAProps, useOUIAId } from '../../helpers';

export interface DropdownProps extends ToggleMenuBaseProps, React.HTMLProps<HTMLDivElement>, OUIAProps {
export interface DropdownProps extends React.HTMLProps<HTMLDivElement>, OUIAProps {
/** Anything which can be rendered in a dropdown */
children?: React.ReactNode;
/** Classes applied to root element of dropdown */
Expand All @@ -32,6 +31,14 @@ export interface DropdownProps extends ToggleMenuBaseProps, React.HTMLProps<HTML
};
/** Display menu above or below dropdown toggle */
direction?: DropdownDirection | 'up' | 'down';
/** The container to append the menu to. Defaults to 'inline'.
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'inline' | 'parent';
/** Flag to indicate if dropdown has groups */
isGrouped?: boolean;
/** Toggle for the dropdown, examples: <DropdownToggle> or <DropdownToggleCheckbox> */
Expand All @@ -54,6 +61,7 @@ export const Dropdown: React.FunctionComponent<DropdownProps> = ({
ouiaSafe,
alignments,
contextProps,
menuAppendTo = 'inline',
...props
}: DropdownProps) => (
<DropdownContext.Provider
Expand All @@ -79,7 +87,7 @@ export const Dropdown: React.FunctionComponent<DropdownProps> = ({
...contextProps
}}
>
<DropdownWithContext {...props} />
<DropdownWithContext menuAppendTo={menuAppendTo} {...props} />
</DropdownContext.Provider>
);
Dropdown.displayName = 'Dropdown';
11 changes: 9 additions & 2 deletions packages/react-core/src/components/OptionsMenu/OptionsMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import styles from '@patternfly/react-styles/css/components/OptionsMenu/options-
import { DropdownContext } from '../Dropdown';
import { DropdownWithContext } from '../Dropdown/DropdownWithContext';
import { OUIAProps, useOUIAId } from '../../helpers';
import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper';

export enum OptionsMenuPosition {
right = 'right',
Expand All @@ -15,7 +14,7 @@ export enum OptionsMenuDirection {
down = 'down'
}

export interface OptionsMenuProps extends ToggleMenuBaseProps, React.HTMLProps<HTMLDivElement>, OUIAProps {
export interface OptionsMenuProps extends React.HTMLProps<HTMLDivElement>, OUIAProps {
/** Classes applied to root element of the options menu */
className?: string;
/** Id of the root element of the options menu */
Expand All @@ -36,6 +35,14 @@ export interface OptionsMenuProps extends ToggleMenuBaseProps, React.HTMLProps<H
position?: 'right' | 'left';
/** Menu will open up or open down from the options menu toggle */
direction?: 'up' | 'down';
/** The container to append the menu to. Defaults to 'inline'.
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'inline' | 'parent';
}

export const OptionsMenu: React.FunctionComponent<OptionsMenuProps> = ({
Expand Down
13 changes: 10 additions & 3 deletions packages/react-core/src/components/Select/Select.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import {
} from '../../helpers';
import { KeyTypes } from '../../helpers/constants';
import { Divider } from '../Divider';
import { ToggleMenuBaseProps, Popper } from '../../helpers/Popper/Popper';
import { Popper } from '../../helpers/Popper/Popper';
import { createRenderableFavorites, extendItemsWithFavorite } from '../../helpers/favorites';
import { ValidatedOptions } from '../../helpers/constants';
import { findTabbableElements } from '../../helpers/util';
Expand All @@ -48,8 +48,7 @@ export interface SelectViewMoreObject {
onClick: (event: React.MouseEvent | React.ChangeEvent) => void;
}
export interface SelectProps
extends ToggleMenuBaseProps,
Omit<React.HTMLProps<HTMLDivElement>, 'onSelect' | 'ref' | 'checked' | 'selected'>,
extends Omit<React.HTMLProps<HTMLDivElement>, 'onSelect' | 'ref' | 'checked' | 'selected'>,
OUIAProps {
/** Content rendered inside the Select. Must be React.ReactElement<SelectGroupProps>[] */
children?: React.ReactElement[];
Expand Down Expand Up @@ -165,6 +164,14 @@ export interface SelectProps
shouldResetOnSelect?: boolean;
/** Content rendered in the footer of the select menu */
footer?: React.ReactNode;
/** The container to append the menu to. Defaults to 'inline'.
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'inline' | 'parent';
}

export interface SelectState {
Expand Down
11 changes: 0 additions & 11 deletions packages/react-core/src/helpers/Popper/Popper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,6 @@ const getOppositePlacement = (placement: Placement): any =>
(matched: string) => hash[matched as 'left' | 'right' | 'bottom' | 'top'] as BasePlacement
);

export interface ToggleMenuBaseProps {
/** The container to append the menu to. Defaults to 'inline'
* If your menu is being cut off you can append it to an element higher up the DOM tree.
* Some examples:
* menuAppendTo="parent"
* menuAppendTo={() => document.body}
* menuAppendTo={document.getElementById('target')}
*/
menuAppendTo?: HTMLElement | (() => HTMLElement) | 'parent' | 'inline';
}

export const getOpacityTransition = (animationDuration: number) =>
`opacity ${animationDuration}ms cubic-bezier(.54, 1.5, .38, 1.11)`;

Expand Down

0 comments on commit fdbf6f9

Please sign in to comment.