portal-www
Version:
Nova Portal Website. Based on Next starter by Ueno
40 lines (32 loc) • 910 B
text/typescript
import { NextRouter } from 'next/router';
import { ParsedUrlQuery } from 'querystring';
type UpdateQueryInput = {
query: ParsedUrlQuery;
params: ParsedUrlQuery;
};
type ReplaceQueryInput = {
router: NextRouter;
params: ParsedUrlQuery;
newPath?: string;
};
export function updateQuery({ query, params = {} }: UpdateQueryInput) {
Object.entries(params).forEach(([key, value]) => {
if (key && value) {
query[key] = value;
} else if (key) {
delete query[key];
}
});
return query;
}
export function replaceQuery({ router, params, newPath }: ReplaceQueryInput) {
const { query, pathname } = router;
let p = pathname;
Object.entries(query).forEach(([k, v]) => {
if (p.includes(`[${k}]`)) {
p = p.replace(`[${k}]`, v as string);
delete query[k];
}
});
return router.push({ pathname: newPath || p, query: updateQuery({ query, params }) });
}