diff --git a/src/app/page.tsx b/src/app/page.tsx index 82d47ea..67ea35c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,12 +1,12 @@ import * as React from 'react'; -import NextLink from 'next/link'; - import { unstable_noStore as noStore } from 'next/cache'; +import { Link } from '@/components/link'; + +import { cn } from '@/utils/cn'; import { api } from '@/trpc/server'; import { getServerAuthSession } from '@/server/auth'; -import { cn } from '@/utils/cn'; export default async function Page() { noStore(); @@ -31,7 +31,7 @@ export default async function Page() { ) : null}
- {session ? 'Sign out' : 'Sign in'} - +
diff --git a/src/components/link.tsx b/src/components/link.tsx new file mode 100644 index 0000000..84e1628 --- /dev/null +++ b/src/components/link.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; + +import NextLink, { type LinkProps } from 'next/link'; + +export type TLinkProps = { + openNewTab?: boolean; +} & React.ComponentPropsWithRef<'a'> & + LinkProps; + +export const Link = React.forwardRef(function _Link({ href, openNewTab = false, children, ...props }, ref) { + const isNewTab = openNewTab ? openNewTab : !href.startsWith('/') && !href.startsWith('#') && !href.startsWith('?'); + + if (!isNewTab) { + return ( + + {children} + + ); + } + + return ( + + {children} + + ); +});