Files
StevenandGitHub 4466ba436b chore(examples): use default prettier for examples/templates (#60530)
## Description
This PR ensures that the default prettier config is used for examples
and templates.

This config is compatible with `prettier@3` as well (upgrading prettier
is bigger change that can be a future PR).

## Changes
- Updated `.prettierrc.json` in root with `"trailingComma": "es5"` (will
be needed upgrading to prettier@3)
- Added `examples/.prettierrc.json` with default config (this will
change every example)
- Added `packages/create-next-app/templates/.prettierrc.json` with
default config (this will change every template)

## Related

- Fixes #54402
- Closes #54409
2024-01-11 16:01:44 -07:00

96 lines
2.5 KiB
JavaScript

import { useEffect, useState, useRef } from "react";
import MainMenuLink from "./main-menu-link";
export default function ManiMenu({ mainMenuLinks }) {
const [activeMenuLink, setActiveMenuLink] = useState(
mainMenuLinks.length ? mainMenuLinks[0].url : "",
);
function highlightLinks() {
const sections = document.querySelectorAll(".page-scroll");
const scrollPos =
window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop;
sections.forEach((currLink) => {
const val = currLink.getAttribute("href").slice(1);
if (val[0] !== "#") {
return;
}
const refElement = document.querySelector(val);
if (!refElement) {
return;
}
const scrollTopMinus = scrollPos + 73;
if (
refElement.offsetTop <= scrollTopMinus &&
refElement.offsetTop + refElement.offsetHeight > scrollTopMinus
) {
setActiveMenuLink(val);
}
});
}
useEffect(() => {
window.addEventListener("scroll", highlightLinks);
return () => {
window.removeEventListener("scroll", highlightLinks);
};
}, []);
const [isMenuActive, setMenuActive] = useState(false);
const menuLinksEl = useRef(null);
function inactivateMenu() {
setMenuActive(false);
if (menuLinksEl.current) {
menuLinksEl.current.classList.remove("show");
}
}
return (
<>
<button
className={`navbar-toggler ${isMenuActive ? "active" : ""}`}
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
onClick={() => setMenuActive(!isMenuActive)}
>
<span className="toggler-icon"></span>
<span className="toggler-icon"></span>
<span className="toggler-icon"></span>
</button>
<div
className="collapse navbar-collapse sub-menu-bar"
ref={menuLinksEl}
id="navbarSupportedContent"
>
<div className="ms-auto">
<ul id="nav" className="navbar-nav ms-auto">
{mainMenuLinks.map((navLink) => (
<MainMenuLink
key={navLink.url}
url={navLink.url}
label={navLink.label}
active={navLink.url === activeMenuLink}
callbackOnClick={inactivateMenu}
/>
))}
</ul>
</div>
</div>
</>
);
}