mirror of
https://github.com/logto-io/logto.git
synced 2024-12-30 20:33:54 -05:00
fix(console): language dropdown height should be calculated properly on first load (#3763)
This commit is contained in:
parent
97d0ca6d9f
commit
9a795c8ecd
1 changed files with 4 additions and 15 deletions
|
@ -1,6 +1,6 @@
|
|||
import type { AdminConsoleKey } from '@logto/phrases';
|
||||
import classNames from 'classnames';
|
||||
import { type ReactNode, useCallback, useEffect, useState, useRef } from 'react';
|
||||
import { type ReactNode, useCallback, useState, useRef } from 'react';
|
||||
|
||||
import ArrowRight from '@/assets/images/arrow-right.svg';
|
||||
import Tick from '@/assets/images/tick.svg';
|
||||
|
@ -26,7 +26,7 @@ type Props<T> = {
|
|||
const menuItemHeight = 40;
|
||||
const menuItemMargin = 4;
|
||||
const menuBorderSize = 1;
|
||||
const menuBottomPadding = 16;
|
||||
const menuBottomMargin = 16;
|
||||
|
||||
function SubMenu<T extends string>({
|
||||
className,
|
||||
|
@ -50,24 +50,12 @@ function SubMenu<T extends string>({
|
|||
options.length * menuItemHeight +
|
||||
(options.length + 1) * menuItemMargin +
|
||||
2 * menuBorderSize;
|
||||
const availableHeight = window.innerHeight - anchorRect.top - menuBottomPadding;
|
||||
const availableHeight = window.innerHeight - anchorRect.top - menuBottomMargin;
|
||||
|
||||
setMenuHeight(Math.min(originalMenuHeight, availableHeight));
|
||||
}
|
||||
}, [options.length]);
|
||||
|
||||
useEffect(() => {
|
||||
calculateDropdownHeight();
|
||||
|
||||
window.addEventListener('resize', calculateDropdownHeight);
|
||||
window.addEventListener('scroll', calculateDropdownHeight);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('resize', calculateDropdownHeight);
|
||||
window.removeEventListener('scroll', calculateDropdownHeight);
|
||||
};
|
||||
}, [calculateDropdownHeight]);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={anchorRef}
|
||||
|
@ -79,6 +67,7 @@ function SubMenu<T extends string>({
|
|||
})}
|
||||
onMouseEnter={() => {
|
||||
window.clearTimeout(mouseLeaveTimeoutRef.current);
|
||||
calculateDropdownHeight();
|
||||
// eslint-disable-next-line @silverhand/fp/no-mutation
|
||||
mouseEnterTimeoutRef.current = window.setTimeout(() => {
|
||||
setShowMenu(true);
|
||||
|
|
Loading…
Reference in a new issue