next.js/test/e2e/app-dir/segment-cache/prefetch-scheduling/app/cancellation/page.tsx
page.tsx65 lines1.6 KB
'use client'

import Link from 'next/link'
import { useState } from 'react'

type PaginationConfig = {
  start: number
  end: number
}

export default function LinkCancellationPage() {
  const [areLinksVisible, setLinksVisibility] = useState(false)
  const [showMoreLinks, setShowMoreLinks] = useState(false)

  return (
    <>
      <p>
        This page is used to test that a prefetch scheduled when a Link enters
        the viewport is cancelled when the Link exits. The visibility toggle
        does not affect whether the links are mounted, only whether they are
        visible (using the `hidden` attribute).
      </p>
      <label>
        <input
          type="checkbox"
          checked={areLinksVisible}
          onChange={() => setLinksVisibility(!areLinksVisible)}
        />
        {areLinksVisible ? 'Hide' : 'Show'} Links
      </label>
      <ul id="links-container" hidden={!areLinksVisible}>
        <Links start={1} end={7} />
        {showMoreLinks ? (
          <Links start={8} end={10} />
        ) : (
          <li>
            <form>
              <button
                id="show-more-links"
                formAction={() => setShowMoreLinks(true)}
              >
                Show more links
              </button>
            </form>
          </li>
        )}
      </ul>
    </>
  )
}

function Links({ start, end }: PaginationConfig) {
  const links: Array<React.ReactNode> = []
  for (let pageNumber = start; pageNumber <= end; pageNumber++) {
    links.push(
      <li key={pageNumber}>
        <Link href={'/cancellation/' + pageNumber}>
          Link to page {pageNumber}
        </Link>
      </li>
    )
  }
  return links
}
Quest for Codev2.0.0
/
SIGN IN