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;