export function UserMenuDialog()

in translate/src/modules/user/components/UserMenu.tsx [56:290]


export function UserMenuDialog({
  onDiscard,
  user,
  onThemeChange,
}: UserMenuProps): React.ReactElement<'ul'> {
  const isTranslator = useTranslator();
  const { entity } = useContext(EntityView);

  const location = useContext(Location);
  const { locale, project, resource } = location;

  const canDownload =
    project !== 'all-projects' && resource !== 'all-resources';
  const canUpload = canDownload && isTranslator && !entity.readonly;

  const ref = useRef<HTMLUListElement>(null);
  useOnDiscard(ref, onDiscard);

  const applyTheme = useTheme();

  const handleThemeButtonClick = (selectedTheme: string) => {
    applyTheme(selectedTheme);
    onThemeChange(selectedTheme); // Save theme to the database
  };

  return (
    <ul ref={ref} className='menu'>
      {user.isAuthenticated && (
        <>
          <li className='details'>
            <a href={`/contributors/${user.username}/`}>
              <img src={user.gravatarURLBig} alt='' height='88' width='88' />
              <p className='name'>{user.nameOrEmail}</p>
              <p className='email'>{user.email}</p>
            </a>
          </li>
          <li className='horizontal-separator'></li>

          <div className='appearance'>
            <Localized id={`user-UserMenu--appearance-title`}>
              <p className='help'>Choose appearance</p>
            </Localized>
            <span className='toggle-button'>
              <ThemeButton
                value='dark'
                text='Dark'
                title='Use a dark theme'
                icon='far fa-moon'
                user={user}
                onClick={handleThemeButtonClick}
              />
              <ThemeButton
                value='light'
                text='Light'
                title='Use a light theme'
                icon='fas fa-sun'
                user={user}
                onClick={handleThemeButtonClick}
              />
              <ThemeButton
                value='system'
                text='System'
                title='Use a theme that matches your system settings'
                icon='fas fa-laptop'
                user={user}
                onClick={handleThemeButtonClick}
              />
            </span>
          </div>

          <li className='horizontal-separator'></li>
        </>
      )}

      <li>
        <Localized
          id='user-UserMenu--download-terminology'
          elems={{ glyph: <i className='fas fa-cloud-download-alt fa-fw' /> }}
        >
          <a href={`/terminology/${locale}.tbx`}>
            {'<glyph></glyph>Download Terminology'}
          </a>
        </Localized>
      </li>

      <li>
        <Localized
          id='user-UserMenu--download-tm'
          elems={{ glyph: <i className='fas fa-cloud-download-alt fa-fw' /> }}
        >
          <a href={`/translation-memory/${locale}.${project}.tmx`}>
            {'<glyph></glyph>Download Translation Memory'}
          </a>
        </Localized>
      </li>

      {canDownload && (
        <li>
          <Localized
            id='user-UserMenu--download-translations'
            elems={{ glyph: <i className='fas fa-cloud-download-alt fa-fw' /> }}
          >
            <a
              href={`/translations/?code=${locale}&slug=${project}&part=${resource}`}
            >
              {'<glyph></glyph>Download Translations'}
            </a>
          </Localized>
        </li>
      )}

      {canUpload && (
        <li>
          <FileUpload parameters={location} />
        </li>
      )}

      <li className='horizontal-separator'></li>

      <li>
        <Localized
          id='user-UserMenu--terms'
          elems={{ glyph: <i className='fas fa-gavel fa-fw' /> }}
        >
          <a href='/terms/' rel='noopener noreferrer' target='_blank'>
            {'<glyph></glyph>Terms of Use'}
          </a>
        </Localized>
      </li>

      <li>
        <Localized
          id='user-UserMenu--github'
          elems={{ glyph: <i className='fab fa-github fa-fw' /> }}
        >
          <a
            href='https://github.com/mozilla/pontoon/'
            rel='noopener noreferrer'
            target='_blank'
          >
            {'<glyph></glyph>Hack it on GitHub'}
          </a>
        </Localized>
      </li>

      <li>
        <Localized
          id='user-UserMenu--feedback'
          elems={{ glyph: <i className='fas fa-comment-dots fa-fw' /> }}
        >
          <a
            href='https://github.com/mozilla/pontoon/discussions'
            rel='noopener noreferrer'
            target='_blank'
          >
            {'<glyph></glyph>Give Feedback'}
          </a>
        </Localized>
      </li>

      <li>
        <Localized
          id='user-UserMenu--help'
          elems={{ glyph: <i className='fas fa-life-ring fa-fw' /> }}
        >
          <a
            href='https://mozilla-l10n.github.io/localizer-documentation/tools/pontoon/'
            rel='noopener noreferrer'
            target='_blank'
          >
            {'<glyph></glyph>Help'}
          </a>
        </Localized>
      </li>

      {user.isAuthenticated && <li className='horizontal-separator'></li>}

      {user.isPM && (
        <>
          <li>
            <Localized
              id='user-UserMenu--admin'
              elems={{ glyph: <i className='fas fa-wrench fa-fw' /> }}
            >
              <a href='/admin/'>{'<glyph></glyph>Admin'}</a>
            </Localized>
          </li>
          {project !== 'all-projects' && (
            <li>
              <Localized
                id='user-UserMenu--admin-project'
                elems={{ glyph: <i className='fas fa-wrench fa-fw' /> }}
              >
                <a href={`/admin/projects/${project}/`}>
                  {'<glyph></glyph>Admin · Current Project'}
                </a>
              </Localized>
            </li>
          )}
          <li>
            <Localized
              id='user-UserMenu--sync-log'
              elems={{ glyph: <i className='fas fa-sync-alt fa-fw' /> }}
            >
              <a href='/sync/'>{'<glyph></glyph>Sync Log'}</a>
            </Localized>
          </li>
        </>
      )}

      {user.isAuthenticated && (
        <>
          <li>
            <Localized
              id='user-UserMenu--settings'
              elems={{ glyph: <i className='fas fa-cog fa-fw' /> }}
            >
              <a href='/settings/'>{'<glyph></glyph>Settings'}</a>
            </Localized>
          </li>
          <li>
            <Localized
              id='user-SignOut--sign-out'
              elems={{ glyph: <i className='fas fa-sign-out-alt fa-fw' /> }}
            >
              <SignInOutForm url={user.signOutURL}>
                {'<glyph></glyph>Sign out'}
              </SignInOutForm>
            </Localized>
          </li>
        </>
      )}
    </ul>
  );
}