Fix scrolling menu

This commit is contained in:
Saoud Rizwan
2024-09-16 18:04:02 -04:00
parent 82490108c5
commit f13850e739

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useState } from "react" import React, { useEffect, useState, useRef } from "react"
import { getContextMenuOptions } from "../utils/mention-context" import { getContextMenuOptions } from "../utils/mention-context"
interface ContextMenuProps { interface ContextMenuProps {
@@ -21,11 +21,28 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
selectedType, selectedType,
}) => { }) => {
const [filteredOptions, setFilteredOptions] = useState(getContextMenuOptions(searchQuery, selectedType)) const [filteredOptions, setFilteredOptions] = useState(getContextMenuOptions(searchQuery, selectedType))
const menuRef = useRef<HTMLDivElement>(null)
useEffect(() => { useEffect(() => {
setFilteredOptions(getContextMenuOptions(searchQuery, selectedType)) setFilteredOptions(getContextMenuOptions(searchQuery, selectedType))
}, [searchQuery, selectedType]) }, [searchQuery, selectedType])
useEffect(() => {
if (menuRef.current) {
const selectedElement = menuRef.current.children[selectedIndex] as HTMLElement
if (selectedElement) {
const menuRect = menuRef.current.getBoundingClientRect()
const selectedRect = selectedElement.getBoundingClientRect()
if (selectedRect.bottom > menuRect.bottom) {
menuRef.current.scrollTop += selectedRect.bottom - menuRect.bottom
} else if (selectedRect.top < menuRect.top) {
menuRef.current.scrollTop -= menuRect.top - selectedRect.top
}
}
}
}, [selectedIndex])
return ( return (
<div <div
style={{ style={{
@@ -36,6 +53,7 @@ const ContextMenu: React.FC<ContextMenuProps> = ({
}} }}
onMouseDown={onMouseDown}> onMouseDown={onMouseDown}>
<div <div
ref={menuRef}
style={{ style={{
backgroundColor: "var(--vscode-dropdown-background)", backgroundColor: "var(--vscode-dropdown-background)",
border: "1px solid var(--vscode-dropdown-border)", border: "1px solid var(--vscode-dropdown-border)",