import React, { FC, memo, useMemo } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { UncontrolledTooltip } from 'reactstrap'; import AppContainer from '~/client/services/AppContainer'; import { useIsSearchPage, useCurrentPagePath, useIsGuestUser, } from '~/stores/context'; import { usePageCreateModal } from '~/stores/modal'; import { useIsDeviceSmallerThanMd } from '~/stores/ui'; import GrowiLogo from '../Icons/GrowiLogo'; import InAppNotificationDropdown from '../InAppNotification/InAppNotificationDropdown'; import { withUnstatedContainers } from '../UnstatedUtils'; import { AppearanceModeDropdown } from './AppearanceModeDropdown'; import GlobalSearch from './GlobalSearch'; import PersonalDropdown from './PersonalDropdown'; const NavbarRight = memo((): JSX.Element => { const { t } = useTranslation(); const { data: currentPagePath } = useCurrentPagePath(); const { data: isGuestUser } = useIsGuestUser(); const { open: openCreateModal } = usePageCreateModal(); const isAuthenticated = isGuestUser === false; const authenticatedNavItem = useMemo(() => { return ( <>
  • ); }, [t, currentPagePath, openCreateModal, isAuthenticated]); const notAuthenticatedNavItem = useMemo(() => { return ( <>
  • Login
  • ; ); }, []); return ( <> {isAuthenticated ? authenticatedNavItem : notAuthenticatedNavItem} ); }); type ConfidentialProps = { confidential?: string, } const Confidential: FC = memo((props: ConfidentialProps) => { const { confidential } = props; if (confidential == null) { return null; } return (
  • {confidential} {confidential}
  • ); }); interface NavbarLogoProps { logoSrc?: string, } const GrowiNavbarLogo: FC = memo((props: NavbarLogoProps) => { const { logoSrc } = props; return logoSrc != null ? () : ; }); const GrowiNavbar = (props) => { const { appContainer } = props; const { crowi, isSearchServiceConfigured, customizedLogoSrc, } = appContainer.config; const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd(); const { data: isSearchPage } = useIsSearchPage(); return ( <> {/* Brand Logo */}
    {crowi.title}
    {/* Navbar Right */}
    { isSearchServiceConfigured && !isDeviceSmallerThanMd && !isSearchPage && (
    ) } ); }; /** * Wrapper component for using unstated */ const GrowiNavbarWrapper = withUnstatedContainers(GrowiNavbar, [AppContainer]); GrowiNavbar.propTypes = { appContainer: PropTypes.instanceOf(AppContainer).isRequired, }; export default GrowiNavbarWrapper;