@workday/canvas-kit-react
Version:
The parent module that contains all Workday Canvas Kit React components
37 lines (31 loc) • 1.01 kB
text/typescript
import * as React from 'react';
import {
createElemPropsHook,
useMountLayout,
useResizeObserver,
useLocalRef,
} from '@workday/canvas-kit-react/common';
import {useOverflowListModel} from './useOverflowListModel';
/**
* This elemProps hook measures a list and reports it to an `OverflowListModel`. This is used in
* overflow detection.
*/
export const useOverflowListMeasure = createElemPropsHook(useOverflowListModel)((model, ref) => {
const {elementRef, localRef} = useLocalRef(ref as React.Ref<HTMLElement>);
const gapProperty = model.state.orientation === 'horizontal' ? 'columnGap' : 'rowGap';
useResizeObserver({
ref: localRef,
onResize: model.events.setContainerSize,
});
useMountLayout(() => {
if (localRef.current) {
const styles = getComputedStyle(localRef.current);
model.events.setContainerGap({
size: styles.gap === 'normal' ? 0 : Number(styles[gapProperty].replace('px', '')),
});
}
});
return {
ref: elementRef,
};
});