mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-02 19:57:25 +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';
|
||||
|
||||
function AnnouncementBar(): JSX.Element | null {
|
||||
const {isClosed, close} = useAnnouncementBar();
|
||||
const {isActive, close} = useAnnouncementBar();
|
||||
const {announcementBar} = useThemeConfig();
|
||||
|
||||
if (!announcementBar) {
|
||||
if (!isActive) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {content, backgroundColor, textColor, isCloseable} = announcementBar;
|
||||
|
||||
if (!content || (isCloseable && isClosed)) {
|
||||
return null;
|
||||
}
|
||||
const {content, backgroundColor, textColor, isCloseable} = announcementBar!;
|
||||
|
||||
return (
|
||||
<div
|
||||
|
|
|
@ -25,14 +25,18 @@ import type {Props} from '@theme/DocSidebar';
|
|||
import styles from './styles.module.css';
|
||||
|
||||
function useShowAnnouncementBar() {
|
||||
const {isClosed} = useAnnouncementBar();
|
||||
const [showAnnouncementBar, setShowAnnouncementBar] = useState(!isClosed);
|
||||
useScrollPosition(({scrollY}) => {
|
||||
if (!isClosed) {
|
||||
setShowAnnouncementBar(scrollY === 0);
|
||||
}
|
||||
});
|
||||
return showAnnouncementBar;
|
||||
const {isActive} = useAnnouncementBar();
|
||||
const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
|
||||
|
||||
useScrollPosition(
|
||||
({scrollY}) => {
|
||||
if (isActive) {
|
||||
setShowAnnouncementBar(scrollY === 0);
|
||||
}
|
||||
},
|
||||
[isActive],
|
||||
);
|
||||
return isActive && showAnnouncementBar;
|
||||
}
|
||||
|
||||
function HideableSidebarButton({onClick}: {onClick: React.MouseEventHandler}) {
|
||||
|
@ -65,7 +69,6 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
|
|||
navbar: {hideOnScroll},
|
||||
hideableSidebar,
|
||||
} = useThemeConfig();
|
||||
const {isClosed: isAnnouncementBarClosed} = useAnnouncementBar();
|
||||
|
||||
return (
|
||||
<div
|
||||
|
@ -76,8 +79,7 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}: Props) {
|
|||
{hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
|
||||
<nav
|
||||
className={clsx('menu thin-scrollbar', styles.menu, {
|
||||
[styles.menuWithAnnouncementBar]:
|
||||
!isAnnouncementBarClosed && showAnnouncementBar,
|
||||
[styles.menuWithAnnouncementBar]: showAnnouncementBar,
|
||||
})}>
|
||||
<ul className={clsx(ThemeClassNames.docs.docSidebarMenu, 'menu__list')}>
|
||||
<DocSidebarItems items={sidebar} activePath={path} level={1} />
|
||||
|
|
|
@ -269,7 +269,7 @@ const ThemeConfigSchema = Joi.object({
|
|||
.default(DEFAULT_CONFIG.metadatas),
|
||||
announcementBar: Joi.object({
|
||||
id: Joi.string().default('announcement-bar'),
|
||||
content: Joi.string(),
|
||||
content: Joi.string().required(),
|
||||
backgroundColor: Joi.string(),
|
||||
textColor: Joi.string(),
|
||||
isCloseable: Joi.bool().default(true),
|
||||
|
|
|
@ -33,7 +33,7 @@ const setDismissedInStorage = (bool: boolean) =>
|
|||
AnnouncementBarDismissStorage.set(String(bool));
|
||||
|
||||
type AnnouncementBarAPI = {
|
||||
readonly isClosed: boolean;
|
||||
readonly isActive: boolean;
|
||||
readonly close: () => void;
|
||||
};
|
||||
|
||||
|
@ -87,7 +87,7 @@ const useAnnouncementBarContextValue = (): AnnouncementBarAPI => {
|
|||
|
||||
return useMemo(() => {
|
||||
return {
|
||||
isClosed,
|
||||
isActive: !!announcementBar && !isClosed,
|
||||
close: handleClose,
|
||||
};
|
||||
}, [isClosed]);
|
||||
|
|
Loading…
Add table
Reference in a new issue