Загрузка данных


import classNames from 'classnames';
import { PropsWithChildren, RefObject } from 'react';

import { Button } from '@src/components/Button';
import { DropdownPosition } from '@src/components/Dropdown/types';
import SmallChevronLeftIcon from '@src/components/Icon/SmallChevronLeft';
import { Tooltip } from '@src/components/Tooltip';

import { Dropdown } from '../Dropdown';

import styles from './index.module.scss';

interface SplitDropdownProps extends PropsWithChildren {
  position?: DropdownPosition;

  mainContent: JSX.Element;
  menuButtonContent?: JSX.Element;

  mainTooltip?: string;
  menuTooltip?: string;

  anchorRef?: RefObject<HTMLDivElement>;
  onMainClick?: () => void;

  mainButtonClassName?: string;
  mainButtonPressed?: boolean;
  tooltipClassName?: string;
}

export default function SplitDropdown({
  position = 'right',
  mainContent,
  menuButtonContent = <SmallChevronLeftIcon />,
  mainTooltip,
  menuTooltip,
  anchorRef,
  onMainClick,
  mainButtonClassName = '',
  mainButtonPressed = false,
  tooltipClassName,
  children,
}: SplitDropdownProps) {
  return (
    <Dropdown
      position={position}
      anchorRef={anchorRef}
      buttonClassName={mainButtonClassName}
      renderTrigger={({ isOpen, onToggle }) => (
        <div
          className={classNames(styles.dropdown, {
            [styles.open]: isOpen,
          })}
        >
          <Tooltip
            tooltipClassName={classNames(styles.tooltip__main, tooltipClassName)}
            showMessageOnFocus={!isOpen}
            location="right"
            label={mainTooltip}
          >
            <Button
              className={mainButtonClassName}
              pressed={mainButtonPressed || isOpen}
              onClick={onMainClick}
              label={mainContent}
            />
          </Tooltip>

          <Tooltip
            tooltipClassName={tooltipClassName}
            showMessageOnFocus={!isOpen}
            location="right"
            label={menuTooltip}
          >
            <Button
              className={styles.menu_button}
              pressed={isOpen}
              onClick={onToggle}
              label={menuButtonContent}
            />
          </Tooltip>
        </div>
      )}
    >
      {children}
    </Dropdown>
  );
}

















.dropdown {
  position: relative;
  display: flex;
  align-items: stretch;
  width: var(--space-2000);
  height: var(--space-2000);

  &:hover .menu_button,
  &:focus-within .menu_button,
  &.open .menu_button {
    opacity: 1;
    pointer-events: auto;
  }

  &.open {
    .menu_button {
      div {
        p {
          svg {
            transform: rotate(0deg);
          }
        }
      }
    }
  }

  .menu_button {
    min-width: var(--space-0625);
    padding: 0;
    opacity: 0;
    border-radius: var(--space-0125);
    pointer-events: none;

    div {
      p {
        svg {
          width: var(--space-0625);
          height: var(--space-0625);
          transform: rotate(-180deg);
        }
      }
    }
  }
}

.tooltip__main {
  margin-left: var(--space-0375);
}