import { Button, ButtonProps, DropdownMenu, DropdownMenuItem, useModal, } from '@gouvfr-lasuite/ui-components'; import { useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { createGlobalStyle, css } from 'styled-components'; import BubbleTextIcon from '@/assets/icons/ui-kit/bubble-text.svg'; import DocIcon from '@/assets/icons/ui-kit/doc.svg'; import LegalIcon from '@/assets/icons/ui-kit/legal.svg'; import HelpIcon from '@/assets/icons/ui-kit/question-mark.svg'; import WandAndStarsIcon from '@/assets/icons/ui-kit/wand-and-stars.svg'; import { Box } from '@/components'; import { useConfig } from '@/core'; import { OnBoarding } from './OnBoarding'; // HelpMenuStyle is mounted only when isMenuOpen is true so this global // `.c__dropdown-menu { overflow: visible; }` rule does not affect other dropdowns. const HelpMenuStyle = createGlobalStyle` .c__dropdown-menu { overflow: visible; } `; export const HelpMenu = ({ colorButton, }: { colorButton?: ButtonProps['color']; }) => { const { t } = useTranslation(); const [isMenuOpen, setIsMenuOpen] = useState(false); const modalOnbording = useModal(); const { data: config } = useConfig(); const onboardingEnabled = config?.theme_customization?.onboarding?.enabled; const documentationUrl = config?.theme_customization?.help?.documentation_url; const supportMailto = config?.theme_customization?.help?.support_mailto; const legalLinks = config?.theme_customization?.help?.legal_links; /** * The onboarding can be disable, so we need to check if it's enabled before displaying the help menu. * TODO: As soon as we get more than one fixed element in the help menu, * we should remove this condition and display the help menu even if the onboarding is disabled */ const showHelpMenu = onboardingEnabled || !!documentationUrl || !!supportMailto || !!legalLinks?.personal_data || !!legalLinks?.terms_of_use || !!legalLinks?.accessibility_statement || !!legalLinks?.legal_notice; const toggleMenu = useCallback(() => { setIsMenuOpen((open) => !open); }, []); const openExternalLink = useCallback((url: string) => { window.open(url, '_blank', 'noopener,noreferrer'); }, []); const openMailto = useCallback((mailto: string) => { window.location.href = mailto; }, []); const hasLegalLinks = !!legalLinks?.personal_data || !!legalLinks?.terms_of_use || !!legalLinks?.accessibility_statement || !!legalLinks?.legal_notice; const options = useMemo( () => [ { label: t('Get Support'), icon: