Skip to content

Commit b6e1db2

Browse files
Brianna HallBrianna Hall
authored andcommitted
Refactored scroll method inside of EuiPopover to resolve positioning errors when components the popover are nested inside of containers like EuiFlyout
1 parent cef36de commit b6e1db2

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src-docs/src/views/flyout/flyout_complicated.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ export default () => {
221221
valueOfSelected={superSelectvalue}
222222
onChange={(value) => onSuperSelectChange(value)}
223223
itemLayoutAlign="top"
224+
repositionOnScroll={true}
224225
hasDividers
225226
/>
226227
</EuiFormRow>

src/components/form/super_select/super_select.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ export type EuiSuperSelectProps<T extends string> = CommonProps &
7777
* Controls whether the options are shown. Default: false
7878
*/
7979
isOpen?: boolean;
80+
81+
/**
82+
* When `true`, the popover's position is re-calculated when the user
83+
* scrolls, this supports having fixed-position popover anchors. This value is passed
84+
* to the EuiInputPopover component
85+
*/
86+
repositionOnScroll?: boolean;
8087
};
8188

8289
export class EuiSuperSelect<T extends string> extends Component<
@@ -252,6 +259,7 @@ export class EuiSuperSelect<T extends string> extends Component<
252259
fullWidth,
253260
popoverClassName,
254261
compressed,
262+
repositionOnScroll,
255263
...rest
256264
} = this.props;
257265

@@ -318,6 +326,7 @@ export class EuiSuperSelect<T extends string> extends Component<
318326
closePopover={this.closePopover}
319327
panelPaddingSize="none"
320328
fullWidth={fullWidth}
329+
repositionOnScroll={repositionOnScroll}
321330
>
322331
<EuiScreenReaderOnly>
323332
<p role="alert">

src/components/popover/popover.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ export class EuiPopover extends Component<Props, State> {
510510
}
511511

512512
if (this.props.repositionOnScroll) {
513-
window.addEventListener('scroll', this.positionPopoverFixed);
513+
window.addEventListener('scroll', this.positionPopoverFixed, true);
514514
}
515515
}
516516

@@ -523,9 +523,10 @@ export class EuiPopover extends Component<Props, State> {
523523
// update scroll listener
524524
if (prevProps.repositionOnScroll !== this.props.repositionOnScroll) {
525525
if (this.props.repositionOnScroll) {
526-
window.addEventListener('scroll', this.positionPopoverFixed);
526+
console.log('running');
527+
window.addEventListener('scroll', this.positionPopoverFixed, true);
527528
} else {
528-
window.removeEventListener('scroll', this.positionPopoverFixed);
529+
window.removeEventListener('scroll', this.positionPopoverFixed, true);
529530
}
530531
}
531532

0 commit comments

Comments
 (0)