UNPKG

@awsui/components-react

Version:

On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en

34 lines 1.69 kB
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { useCallback, useEffect, useRef, useState } from 'react'; import { useResizeObserver } from '@awsui/component-toolkit/internal'; import { getLogicalBoundingClientRect } from '@awsui/component-toolkit/internal'; import { useObservedElement } from './use-observed-element'; export function useAppLayoutPlacement(headerSelector, footerSelector) { const mainElementRef = useRef(null); const headerHeight = useObservedElement(mainElementRef, headerSelector); const footerHeight = useObservedElement(mainElementRef, footerSelector); const [offsets, setOffsets] = useState({ insetInlineStart: 0, insetInlineEnd: 0, inlineSize: Number.POSITIVE_INFINITY, }); const updatePosition = useCallback(() => { if (!mainElementRef.current) { return; } const { insetInlineStart, insetInlineEnd, inlineSize } = getLogicalBoundingClientRect(mainElementRef.current); // skip reading sizes in JSDOM if (inlineSize === 0) { return; } setOffsets({ insetInlineStart, insetInlineEnd: inlineSize - insetInlineEnd, inlineSize }); }, []); useEffect(() => { window.addEventListener('resize', updatePosition); return () => window.removeEventListener('resize', updatePosition); }, [updatePosition]); useResizeObserver(mainElementRef, updatePosition); return [mainElementRef, Object.assign(Object.assign({}, offsets), { insetBlockStart: headerHeight, insetBlockEnd: footerHeight })]; } //# sourceMappingURL=use-app-layout-placement.js.map