diff options
Diffstat (limited to 'src/components/molecules')
| -rw-r--r-- | src/components/molecules/buttons/help-button.tsx | 12 | ||||
| -rw-r--r-- | src/components/molecules/forms/select-with-tooltip.tsx | 11 | 
2 files changed, 17 insertions, 6 deletions
| diff --git a/src/components/molecules/buttons/help-button.tsx b/src/components/molecules/buttons/help-button.tsx index f19322f..e351453 100644 --- a/src/components/molecules/buttons/help-button.tsx +++ b/src/components/molecules/buttons/help-button.tsx @@ -1,5 +1,5 @@  import Button, { type ButtonProps } from '@components/atoms/buttons/button'; -import { FC } from 'react'; +import { forwardRef, ForwardRefRenderFunction } from 'react';  import { useIntl } from 'react-intl';  import styles from './help-button.module.scss'; @@ -15,7 +15,10 @@ export type HelpButtonProps = Pick<ButtonProps, 'onClick'> & {   *   * Render a button with an interrogation mark icon.   */ -const HelpButton: FC<HelpButtonProps> = ({ className = '', onClick }) => { +const HelpButton: ForwardRefRenderFunction< +  HTMLButtonElement, +  HelpButtonProps +> = ({ className = '', onClick }, ref) => {    const intl = useIntl();    const text = intl.formatMessage({      defaultMessage: 'Help', @@ -25,9 +28,10 @@ const HelpButton: FC<HelpButtonProps> = ({ className = '', onClick }) => {    return (      <Button -      shape="circle"        className={`${styles.btn} ${className}`}        onClick={onClick} +      ref={ref} +      shape="circle"      >        <span className="screen-reader-text">{text}</span>        <span className={styles.icon}>?</span> @@ -35,4 +39,4 @@ const HelpButton: FC<HelpButtonProps> = ({ className = '', onClick }) => {    );  }; -export default HelpButton; +export default forwardRef(HelpButton); diff --git a/src/components/molecules/forms/select-with-tooltip.tsx b/src/components/molecules/forms/select-with-tooltip.tsx index f576a15..29e2563 100644 --- a/src/components/molecules/forms/select-with-tooltip.tsx +++ b/src/components/molecules/forms/select-with-tooltip.tsx @@ -29,15 +29,21 @@ const SelectWithTooltip: FC<SelectWithTooltipProps> = ({    ...props  }) => {    const [isTooltipOpened, setIsTooltipOpened] = useState<boolean>(false); +  const buttonRef = useRef<HTMLButtonElement>(null);    const tooltipRef = useRef<HTMLDivElement>(null);    const buttonModifier = isTooltipOpened ? styles['btn--activated'] : '';    const tooltipModifier = isTooltipOpened      ? styles['tooltip--visible']      : styles['tooltip--hidden']; +  const closeTooltip = (target: EventTarget) => { +    if (buttonRef.current && !buttonRef.current.contains(target as Node)) +      setIsTooltipOpened(false); +  }; +    useClickOutside(      tooltipRef, -    () => isTooltipOpened && setIsTooltipOpened(false) +    (target) => isTooltipOpened && closeTooltip(target)    );    return ( @@ -49,8 +55,9 @@ const SelectWithTooltip: FC<SelectWithTooltipProps> = ({          {...props}        />        <HelpButton -        onClick={() => setIsTooltipOpened(!isTooltipOpened)}          className={`${styles.btn} ${buttonModifier}`} +        onClick={() => setIsTooltipOpened(!isTooltipOpened)} +        ref={buttonRef}        />        <Tooltip          title={title} | 
