next.js/test/e2e/app-dir/ppr/components/state.jsx
state.jsx78 lines1.7 KB
'use client'

import { usePathname } from 'next/navigation'
import React from 'react'
import { Suspense } from 'react'
import { useCallback } from 'react'

function Pathname() {
  const pathname = usePathname()
  return <pre id="pathname">{pathname}</pre>
}

export function Login({ signedIn = false, fallback }) {
  const onClick = useCallback(async () => {
    if (signedIn) {
      await fetch('/api/cookie?name=session', {
        method: 'DELETE',
        credentials: 'same-origin',
      })
    } else {
      await fetch('/api/cookie?name=session', {
        method: 'POST',
        credentials: 'same-origin',
      })
    }

    window.location.reload()
  }, [signedIn])

  return (
    <>
      <Suspense>
        <Pathname />
      </Suspense>
      <button
        id="login"
        className="bg-gray-400 hover:bg-gray-500 px-4 py-2 text-white rounded-md"
        onClick={onClick}
      >
        {fallback ? 'Sign ..' : signedIn ? 'Sign Out' : 'Sign In'}
      </button>
    </>
  )
}

export function Delay({ active = false, fallback }) {
  const onClick = useCallback(async () => {
    if (active) {
      await fetch('/api/cookie?name=delay', {
        method: 'DELETE',
        credentials: 'same-origin',
      })
    } else {
      await fetch('/api/cookie?name=delay', {
        method: 'POST',
        credentials: 'same-origin',
      })
    }

    window.location.reload()
  }, [active])

  return (
    <>
      <pre>
        delay: {fallback ? 'loading...' : active ? 'enabled' : 'disabled'}
      </pre>
      <button
        id="login"
        className="bg-gray-400 hover:bg-gray-500 px-4 py-2 text-white rounded-md"
        onClick={onClick}
      >
        {fallback ? 'Loading...' : active ? 'Disable Delay' : 'Enable Delay'}
      </button>
    </>
  )
}
Quest for Codev2.0.0
/
SIGN IN