UNPKG

@wener/console

Version:

Base console UI toolkit

40 lines (39 loc) 1.53 kB
import React, { Children, cloneElement, useEffect, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/router"; export const ActiveLink = ({ children, activeClassName, ...props })=>{ const { asPath, isReady } = useRouter(); const child = Children.only(children); const childClassName = child.props.className || ''; const [className, setClassName] = useState(childClassName); useEffect(()=>{ // Check if the router fields are updated client-side if (isReady) { // Dynamic route will be matched via props.as // Static route will be matched via props.href const linkPathname = new URL(props.as || props.href, location.href).pathname; // Using URL().pathname to get rid of query and hash const activePathname = new URL(asPath, location.href).pathname; const newClassName = linkPathname === activePathname ? `${childClassName} ${activeClassName}`.trim() : childClassName; if (newClassName !== className) { setClassName(newClassName); } } }, [ asPath, isReady, props.as, props.href, childClassName, activeClassName, setClassName, className ]); return /*#__PURE__*/ React.createElement(Link, { ...props, legacyBehavior: true }, /*#__PURE__*/ cloneElement(child, { className: className || null })); }; //# sourceMappingURL=ActiveLink.js.map