import React, { useCallback, useEffect, useState } from 'react';
import { Transition, TransitionStatus } from 'react-transition-group';
import { css, cx } from '@leafygreen-ui/emotion';
import { useIdAllocator } from '@leafygreen-ui/hooks';
import ChevronRight from '@leafygreen-ui/icon/dist/ChevronRight';
import { useUsingKeyboardContext } from '@leafygreen-ui/leafygreen-provider';
import { palette } from '@leafygreen-ui/palette';
import { ulStyleOverrides, useSideNavContext } from '../SideNav';
import {
baseStyle,
buttonClassName,
indentedStyle,
themeStyle,
} from '../SideNavGroup/SideNavGroup.styles';
import { SideNavGroupHeader } from '../SideNavGroupHeader';
import {
collapsibleBaseStyle,
collapsibleFocusThemeStyle,
collapsibleGroupBaseStyles,
collapsibleThemeStyle,
expandIconStyle,
openExpandIconStyle,
transitionStyles,
ulStyles,
ulTransitionStyles,
} from './SideNavGroupCollapsed.styles';
import { SideNavGroupCollapsedProps } from './SideNavGroupCollapsed.types';
/**
* @internal
*/
export function SideNavGroupCollapsed({
groupHeaderProps,
open,
setOpen,
menuGroupLabelId,
indentLevel,
children,
isActiveGroup,
accessibleGlyph,
header,
}: SideNavGroupCollapsedProps) {
const { width, theme, darkMode } = useSideNavContext();
const { usingKeyboard } = useUsingKeyboardContext();
const [ulHeight, setUlHeight] = useState(0);
const menuId = useIdAllocator({ prefix: 'menu' });
const nodeRef = React.useRef(null);
const ulRef = useCallback((node: HTMLUListElement) => {
if (node !== null) {
setUlHeight(node.getBoundingClientRect().height);
}
}, []);
// compute the entered ul wrapper styles based on the ul height
useEffect(() => {
transitionStyles['entered'] = css`
opacity: 1;
max-height: ${ulHeight + 1}px; // +1 for border
border-bottom: 1px solid
${darkMode ? palette.gray.dark1 : palette.gray.light2};
`;
}, [open, ulHeight, darkMode]);
return (
<>
{(state: TransitionStatus) => (
)}
>
);
}