import { SignOut } from '@aws-amplify/ui-react/dist/types/components/Authenticator/Authenticator'; import { faCaretDown, faCaretUp } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import React, { useRef, useState } from 'react'; import { useEffect } from 'react'; import useLoginUser from '../lib/useLoginUser'; type Props = { onSignOut: SignOut; }; // [Auth 拡張実装] 認証時に表示するメニューコンポーネント const Menu: React.FC = ({ onSignOut }) => { const [open, setOpen] = useState(false); const buttonRef = useRef(null); const menuRef = useRef(null); const { userGroup, email } = useLoginUser(); useEffect(() => { // メニューの外側をクリックした際のハンドリング const handleClickOutside = (event: any) => { // メニューボタンとメニュー以外をクリックしていたらメニューを閉じる if ( menuRef.current && !menuRef.current.contains(event.target) && !buttonRef.current?.contains(event.target) ) { setOpen(false); } }; // イベントリスナーを設定 document.addEventListener('mousedown', handleClickOutside); return () => { // 後処理でイベントリスナーを削除 document.removeEventListener('mousedown', handleClickOutside); }; }, [menuRef]); return (
{open ? (
所属グループ:{userGroup ?? '[未所属]'}
{ onSignOut(); }} > サインアウト
) : null}
); }; export default Menu;