# All files / layout useResizableLayout.ts

100% Statements 81/81
100% Branches 1/1
100% Functions 1/1
100% Lines 81/81

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    821x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
    26x
     import { useEnsuredId } from "../useEnsuredId.js";
    import type { LayoutWindowSplitterProps } from "./LayoutWindowSplitter.js";
    import type {
      ExpandableLayoutImplementation,
      ExpandableLayoutOptions,
      ProvidedLayoutNavProps,
    } from "./useExpandableLayout.js";
    import { useExpandableLayout } from "./useExpandableLayout.js";
    import {
      useLayoutWindowSplitter,
      type LayoutWindowSplitterOptions,
    } from "./useLayoutWindowSplitter.js";

    /**
     * @remarks \@since 6.0.0
     */
    export interface ResizableLayoutOptions
      extends ExpandableLayoutOptions,
        LayoutWindowSplitterOptions {
      navId?: string;
    }

    /**
     * @remarks \@since 6.0.0
     */
    export interface ProvidedResizableLayoutNavProps
      extends ProvidedLayoutNavProps {
      id: string;
    }

    /**
     * @remarks \@since 6.0.0
     */
    export interface ResizableLayoutImplementation
      extends ExpandableLayoutImplementation {
      expandableNavProps: ProvidedResizableLayoutNavProps;
      windowSplitterProps: LayoutWindowSplitterProps;
    }

    /**
     * @remarks \@since 6.0.0
     */
    export function useResizableLayout(
      options: ResizableLayoutOptions
    ): ResizableLayoutImplementation {
      const {
        navId: propNavId,
        pathname,
        appBarPosition = "fixed",
        fullHeightNav = false,
        defaultVisible,
        defaultExpanded,
        ...splitterOptions
      } = options;
      const navId = useEnsuredId(propNavId, "layout-nav");
      const { splitterProps, ...windowSplitter } =
        useLayoutWindowSplitter(splitterOptions);
      const expandableLayout = useExpandableLayout({
        pathname,
        appBarPosition,
        fullHeightNav,
        defaultExpanded,
        defaultVisible,
      });
      const { expandableNavProps, expanded } = expandableLayout;

      return {
        ...expandableLayout,
        ...windowSplitter,
        expandableNavProps: {
          id: navId,
          ...expandableNavProps,
        },
        windowSplitterProps: {
          ...splitterProps,
          "aria-controls": navId,
          hidden: !expanded,
          appBarOffset: !fullHeightNav,
        },
      };
    }