28 lines
1.4 KiB
JavaScript
28 lines
1.4 KiB
JavaScript
|
import { isHTMLElement } from '@fluentui/react-utilities';
|
||
|
import { listScrollParents } from './listScrollParents';
|
||
|
import { fromFloatingUIPlacement } from './fromFloatingUIPlacement';
|
||
|
export const devtoolsCallback = (options)=>(middlewareState)=>{
|
||
|
const { elements: { floating, reference } } = middlewareState;
|
||
|
const scrollParentsSet = new Set();
|
||
|
if (isHTMLElement(reference)) {
|
||
|
listScrollParents(reference).forEach((scrollParent)=>scrollParentsSet.add(scrollParent));
|
||
|
}
|
||
|
listScrollParents(floating).forEach((scrollParent)=>scrollParentsSet.add(scrollParent));
|
||
|
const flipBoundaries = Array.isArray(options.flipBoundary) ? options.flipBoundary : isHTMLElement(options.flipBoundary) ? [
|
||
|
options.flipBoundary
|
||
|
] : [];
|
||
|
const overflowBoundaries = Array.isArray(options.overflowBoundary) ? options.overflowBoundary : isHTMLElement(options.overflowBoundary) ? [
|
||
|
options.overflowBoundary
|
||
|
] : [];
|
||
|
return {
|
||
|
type: 'FluentUIMiddleware',
|
||
|
middlewareState,
|
||
|
options,
|
||
|
initialPlacement: fromFloatingUIPlacement(middlewareState.initialPlacement),
|
||
|
placement: fromFloatingUIPlacement(middlewareState.placement),
|
||
|
flipBoundaries,
|
||
|
overflowBoundaries,
|
||
|
scrollParents: Array.from(scrollParentsSet)
|
||
|
};
|
||
|
};
|