Skip to content

Commit

Permalink
fix(DropdownMenu): fix rtl behaviour
Browse files Browse the repository at this point in the history
  • Loading branch information
amje committed Feb 6, 2024
1 parent 94ed9f7 commit 3f3a805
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
28 changes: 21 additions & 7 deletions src/components/DropdownMenu/DropdownMenuItem.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import React from 'react';

import {ChevronRight} from '@gravity-ui/icons';
import {ChevronLeft, ChevronRight} from '@gravity-ui/icons';

import {Icon} from '../Icon';
import {Menu} from '../Menu';
import type {PopupProps} from '../Popup';
import type {PopupPlacement, PopupProps} from '../Popup';
import {useDirection} from '../theme';

import {cnDropdownMenu} from './DropdownMenu.classname';
import {DropdownMenuContext} from './DropdownMenuContext';
import {DropdownMenuPopup} from './DropdownMenuPopup';
import {subMenuPlacement} from './constants';
import {useSubmenu} from './hooks/useSubmenu';
import type {DropdownMenuListItem} from './types';

Expand All @@ -32,6 +32,7 @@ export const DropdownMenuItem = <T,>({
}: DropdownMenuItemProps<T>) => {
const {toggle, data} = React.useContext(DropdownMenuContext);
const menuItemRef = React.useRef(null);
const direction = useDirection();

const {hasSubmenu, isSubmenuOpen, closeSubmenu, openSubmenu} = useSubmenu({
items: subMenuItems,
Expand Down Expand Up @@ -92,10 +93,23 @@ export const DropdownMenuItem = <T,>({
};
}, [props.extraProps, closeSubmenu, hasSubmenu, openSubmenu]);

const iconEnd = hasSubmenu ? (
<Icon data={ChevronRight} size={10} className={cnDropdownMenu('sub-menu-arrow')} />
) : (
props.iconEnd
const subMenuPlacement = React.useMemo<PopupPlacement>(
() => (direction === 'rtl' ? ['left-start', 'right-start'] : ['right-start', 'left-start']),
[direction],
);

const iconEnd = React.useMemo(
() =>
hasSubmenu ? (
<Icon
data={direction === 'rtl' ? ChevronLeft : ChevronRight}
size={10}
className={cnDropdownMenu('sub-menu-arrow')}
/>
) : (
props.iconEnd
),
[hasSubmenu, direction, props.iconEnd],
);

return (
Expand Down
4 changes: 0 additions & 4 deletions src/components/DropdownMenu/constants.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
import type {PopperPlacement} from '../../hooks/private';

import type {DropdownMenuListItem} from './types';

export const subMenuPlacement: PopperPlacement = ['right-start', 'left-start'];

export const dropdownMenuSeparator: DropdownMenuListItem = {text: '', action: () => {}, path: []};

0 comments on commit 3f3a805

Please sign in to comment.