diff --git a/react-components/src/components/Architecture/FilterButton.tsx b/react-components/src/components/Architecture/FilterButton.tsx index da617cab9a3..52c5c413cce 100644 --- a/react-components/src/components/Architecture/FilterButton.tsx +++ b/react-components/src/components/Architecture/FilterButton.tsx @@ -108,7 +108,7 @@ export const FilterButton = ({ diff --git a/react-components/src/components/Architecture/OptionButton.tsx b/react-components/src/components/Architecture/OptionButton.tsx index 6cebe365261..0df89cd5aad 100644 --- a/react-components/src/components/Architecture/OptionButton.tsx +++ b/react-components/src/components/Architecture/OptionButton.tsx @@ -96,7 +96,7 @@ export const OptionButton = ({ diff --git a/react-components/src/components/Architecture/SettingsButton.tsx b/react-components/src/components/Architecture/SettingsButton.tsx index 765ff212498..cee8dfeb65c 100644 --- a/react-components/src/components/Architecture/SettingsButton.tsx +++ b/react-components/src/components/Architecture/SettingsButton.tsx @@ -2,7 +2,15 @@ * Copyright 2024 Cognite AS */ -import { useCallback, useEffect, useMemo, useState, type ReactElement } from 'react'; +import { + type MouseEvent, + useCallback, + useEffect, + useMemo, + useRef, + useState, + type ReactElement +} from 'react'; import { Button, Dropdown, @@ -30,6 +38,7 @@ import { OptionButton } from './OptionButton'; import { BaseSliderCommand } from '../../architecture/base/commands/BaseSliderCommand'; import { BaseFilterCommand } from '../../architecture/base/commands/BaseFilterCommand'; import { FilterButton } from './FilterButton'; +import { useClickOutside } from './useClickOutside'; export const SettingsButton = ({ inputCommand, @@ -66,6 +75,22 @@ export const SettingsButton = ({ }; }, [command]); + const outsideAction = (): boolean => { + if (!isOpen) { + return false; + } + postAction(); + return false; + }; + + const postAction = (): void => { + setOpen(false); + renderTarget.domElement.focus(); + }; + + const menuRef = useRef(null); + useClickOutside(menuRef, outsideAction); + if (!isVisible || !command.hasChildren) { return <>; } @@ -83,18 +108,20 @@ export const SettingsButton = ({ - {children.map((child, _index): ReactElement | undefined => { - return createMenuItem(child, t); - })} - +
+ + {children.map((child, _index): ReactElement | undefined => { + return createMenuItem(child, t); + })} + +
}>