fix: apply announcement bar class if only needed (#5699)

This commit is contained in:
Alexey Pyltsyn 2021-10-14 12:10:59 +03:00 committed by GitHub
parent 54015de628
commit fee10c9e13
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 21 deletions

View file

@ -14,18 +14,14 @@ import IconClose from '@theme/IconClose';
import styles from './styles.module.css'; import styles from './styles.module.css';
function AnnouncementBar(): JSX.Element | null { function AnnouncementBar(): JSX.Element | null {
const {isClosed, close} = useAnnouncementBar(); const {isActive, close} = useAnnouncementBar();
const {announcementBar} = useThemeConfig(); const {announcementBar} = useThemeConfig();
if (!announcementBar) { if (!isActive) {
return null; return null;
} }
const {content, backgroundColor, textColor, isCloseable} = announcementBar; const {content, backgroundColor, textColor, isCloseable} = announcementBar!;
if (!content || (isCloseable && isClosed)) {
return null;
}
return ( return (
<div <div

View file

@ -25,14 +25,18 @@ import type {Props} from '@theme/DocSidebar';
import styles from './styles.module.css'; import styles from './styles.module.css';
function useShowAnnouncementBar() { function useShowAnnouncementBar() {
const {isClosed} = useAnnouncementBar(); const {isActive} = useAnnouncementBar();
const [showAnnouncementBar, setShowAnnouncementBar] = useState(!isClosed); const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
useScrollPosition(({scrollY}) => {
if (!isClosed) { useScrollPosition(
({scrollY}) => {
if (isActive) {
setShowAnnouncementBar(scrollY === 0); setShowAnnouncementBar(scrollY === 0);
} }
}); },
return showAnnouncementBar; [isActive],
);
return isActive && showAnnouncementBar;
} }
function HideableSidebarButton({onClick}: {onClick: React.MouseEventHandler}) { function HideableSidebarButton({onClick}: {onClick: React.MouseEventHandler}) {
@ -65,7 +69,6 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
navbar: {hideOnScroll}, navbar: {hideOnScroll},
hideableSidebar, hideableSidebar,
} = useThemeConfig(); } = useThemeConfig();
const {isClosed: isAnnouncementBarClosed} = useAnnouncementBar();
return ( return (
<div <div
@ -76,8 +79,7 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
{hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />} {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
<nav <nav
className={clsx('menu thin-scrollbar', styles.menu, { className={clsx('menu thin-scrollbar', styles.menu, {
[styles.menuWithAnnouncementBar]: [styles.menuWithAnnouncementBar]: showAnnouncementBar,
!isAnnouncementBarClosed && showAnnouncementBar,
})}> })}>
<ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}> <ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
<DocSidebarItems items={sidebar} activePath={path} level={1} /> <DocSidebarItems items={sidebar} activePath={path} level={1} />

View file

@ -269,7 +269,7 @@ const ThemeConfigSchema = Joi.object({
.default(DEFAULT_CONFIG.metadatas), .default(DEFAULT_CONFIG.metadatas),
announcementBar: Joi.object({ announcementBar: Joi.object({
id: Joi.string().default('announcement-bar'), id: Joi.string().default('announcement-bar'),
content: Joi.string(), content: Joi.string().required(),
backgroundColor: Joi.string(), backgroundColor: Joi.string(),
textColor: Joi.string(), textColor: Joi.string(),
isCloseable: Joi.bool().default(true), isCloseable: Joi.bool().default(true),

View file

@ -33,7 +33,7 @@ const setDismissedInStorage = (bool: boolean) =>
AnnouncementBarDismissStorage.set(String(bool)); AnnouncementBarDismissStorage.set(String(bool));
type AnnouncementBarAPI = { type AnnouncementBarAPI = {
readonly isClosed: boolean; readonly isActive: boolean;
readonly close: () => void; readonly close: () => void;
}; };
@ -87,7 +87,7 @@ const useAnnouncementBarContextValue = (): AnnouncementBarAPI => {
return useMemo(() => { return useMemo(() => {
return { return {
isClosed, isActive: !!announcementBar && !isClosed,
close: handleClose, close: handleClose,
}; };
}, [isClosed]); }, [isClosed]);