Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
117 lines
3.0 KiB
TypeScript
117 lines
3.0 KiB
TypeScript
import Link from 'next/link'
|
|
import { useState } from 'react'
|
|
import React from 'react'
|
|
|
|
interface OnNavigateProps {
|
|
children: React.ReactNode
|
|
rootPath: string
|
|
}
|
|
|
|
export default function OnNavigate({ children, rootPath }: OnNavigateProps) {
|
|
const [isClicked, setIsClicked] = useState(false)
|
|
const [isNavigated, setIsNavigated] = useState(false)
|
|
const [isLocked, setIsLocked] = useState(false)
|
|
|
|
return (
|
|
<div>
|
|
<nav>
|
|
<div id="navigation-state">
|
|
<p id="is-clicked">isClicked: {isClicked ? 'true' : 'false'}</p>
|
|
<p id="is-navigated">isNavigated: {isNavigated ? 'true' : 'false'}</p>
|
|
<p id="is-locked">isLocked: {isLocked ? 'true' : 'false'}</p>
|
|
</div>
|
|
<button id="toggle-lock" onClick={() => setIsLocked(!isLocked)}>
|
|
{isLocked ? 'Unlock' : 'Lock'}
|
|
</button>
|
|
|
|
<div>
|
|
<Link
|
|
href={rootPath}
|
|
id="link-to-main"
|
|
onClick={() => setIsClicked(true)}
|
|
onNavigate={(e: any) => {
|
|
if (isLocked) {
|
|
e.preventDefault()
|
|
} else {
|
|
setIsNavigated(true)
|
|
}
|
|
}}
|
|
>
|
|
Client Side Navigation to Main Page
|
|
</Link>
|
|
</div>
|
|
|
|
<div>
|
|
<Link
|
|
href={`${rootPath}/subpage`}
|
|
id="link-to-subpage"
|
|
onClick={() => setIsClicked(true)}
|
|
onNavigate={(e: any) => {
|
|
if (isLocked) {
|
|
e.preventDefault()
|
|
} else {
|
|
setIsNavigated(true)
|
|
}
|
|
}}
|
|
>
|
|
Client Side Navigation to Subpage
|
|
</Link>
|
|
</div>
|
|
|
|
<div>
|
|
<Link
|
|
href="https://nextjs.org"
|
|
id="external-link-with-target"
|
|
onClick={() => setIsClicked(true)}
|
|
onNavigate={() => setIsNavigated(true)}
|
|
target="_blank"
|
|
>
|
|
External Link with Target
|
|
</Link>
|
|
</div>
|
|
|
|
<div>
|
|
<Link
|
|
href="https://nextjs.org"
|
|
id="external-link"
|
|
onClick={() => alert('onClick')}
|
|
onNavigate={() => alert('onNavigate')}
|
|
>
|
|
External Link
|
|
</Link>
|
|
</div>
|
|
|
|
<div>
|
|
<Link
|
|
href="https://nextjs.org"
|
|
id="external-link-with-replace"
|
|
onClick={() => alert('onClick')}
|
|
onNavigate={() => alert('onNavigate')}
|
|
replace
|
|
>
|
|
External Link with replace
|
|
</Link>
|
|
</div>
|
|
|
|
<div>
|
|
<Link
|
|
download
|
|
href="/zip.zip"
|
|
id="download-link"
|
|
onClick={() => setIsClicked(true)}
|
|
onNavigate={() => {
|
|
setIsNavigated(true)
|
|
}}
|
|
>
|
|
Download Link with download attribute
|
|
</Link>
|
|
</div>
|
|
</nav>
|
|
|
|
<div id="content" style={{ border: '1px solid red' }}>
|
|
{children}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|