mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-03 04:07:32 +02:00
fix: apply announcement bar class if only needed (#5699)
This commit is contained in:
parent
54015de628
commit
fee10c9e13
4 changed files with 19 additions and 21 deletions
|
@ -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
|
||||||
|
|
|
@ -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} />
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue