components/HeaderLink.js (26 lines of code) (raw):

import { useRouter } from 'next/router'; import Link from 'next/link'; export default function HeaderLink(props) { const router = useRouter(); const { columnKey, linkText } = props; const { sort, dir } = router.query; const classDir = dir === 'asc' ? 'asc' : 'desc'; let linkDir = 'desc'; let className = 'sort-direction'; if (sort === columnKey) { linkDir = dir === 'desc' ? 'asc' : 'desc'; className = `${className} ${classDir}`; } const query = { // Keep existing query params. ...router.query, // Override ones related to sort. dir: linkDir, sort: columnKey, }; return ( <Link href={{ pathname: router.pathname, query }} passHref className={className} > {linkText} </Link> ); }