File tree Expand file tree Collapse file tree 4 files changed +60
-9
lines changed
Expand file tree Collapse file tree 4 files changed +60
-9
lines changed Original file line number Diff line number Diff line change 1+ "use client" ; // Error boundaries must be Client Components
2+
3+ import clsx from "clsx" ;
4+ import { ChatAreaContainer } from "./chat/[chatId]/chatArea" ;
5+
6+ export default function Error ( {
7+ error,
8+ // reset,
9+ } : {
10+ error : Error & { digest ?: string } ;
11+ reset : ( ) => void ;
12+ } ) {
13+ return (
14+ < ChatAreaContainer chatId = { "error" } >
15+ < p > ページの読み込み中にエラーが発生しました。</ p >
16+ < pre
17+ className = { clsx (
18+ "border-2 border-current/20 mt-4 rounded-box p-4! bg-base-300! text-base-content!" ,
19+ "max-w-full whitespace-pre-wrap"
20+ ) }
21+ >
22+ { error . message }
23+ </ pre >
24+ { error . digest && (
25+ < p className = "mt-2 text-sm text-base-content/50" >
26+ Digest: { error . digest }
27+ </ p >
28+ ) }
29+ </ ChatAreaContainer >
30+ ) ;
31+ }
Original file line number Diff line number Diff line change 11"use client" ;
22
3- import { useEffect } from "react" ;
3+ import { useEffect , useState } from "react" ;
44import Loading from "./[lang]/[pageId]/loading" ;
55import { getRedirectFromChat } from "@/actions/getRedirectFromChat" ;
66import { usePathname , useRouter } from "next/navigation" ;
7+ import ErrorPage from "@/error" ;
78
89// /chat/チャットid に直接アクセスした場合には、
910// チャットからそれに対応するページidを取得し、そのドキュメントに自動でリダイレクトする。
1011export default function DocsDefaultPage ( ) {
1112 const pathname = usePathname ( ) ;
1213 const router = useRouter ( ) ;
14+ const [ error , setError ] = useState < unknown > ( null ) ;
1315 useEffect ( ( ) => {
1416 if ( pathname . startsWith ( "/chat/" ) ) {
1517 const chatId = pathname . split ( "/chat/" ) [ 1 ] ;
16- getRedirectFromChat ( chatId ) . then ( ( path ) => {
17- router . replace ( path ) ;
18- } ) ;
18+ getRedirectFromChat ( chatId )
19+ . then ( ( path ) => {
20+ router . replace ( path ) ;
21+ } )
22+ . catch ( ( err ) => {
23+ console . error ( "Failed to get redirect path from chat:" , err ) ;
24+ setError ( err ) ;
25+ } ) ;
26+ } else if ( pathname === "/chat" ) {
27+ router . replace ( "/" ) ;
28+ } else {
29+ throw new Error ( `Invalid path: ${ pathname } ` ) ;
1930 }
2031 } , [ pathname , router ] ) ;
2132
33+ if ( error ) {
34+ return < ErrorPage error = { error } reset = { ( ) => router . refresh ( ) } /> ;
35+ }
36+
2237 return < Loading /> ;
2338}
Original file line number Diff line number Diff line change 1+ "use client" ;
2+
3+ import Error from "@/error" ;
4+
5+ export default Error ;
Original file line number Diff line number Diff line change 33import clsx from "clsx" ;
44import Link from "next/link" ;
55
6- export default function Error ( {
6+ export default function ErrorPage ( {
77 error,
88 reset,
99} : {
10- error : Error & { digest ?: string } ;
10+ error : unknown ;
1111 reset : ( ) => void ;
1212} ) {
1313 return (
@@ -20,11 +20,11 @@ export default function Error({
2020 "max-w-full whitespace-pre-wrap"
2121 ) }
2222 >
23- { error . message }
23+ { error instanceof Error ? error . message : String ( error ) }
2424 </ pre >
25- { error . digest && (
25+ { "digest" in ( error as { digest : string } ) && (
2626 < p className = "mt-2 text-sm text-base-content/50" >
27- Digest: { error . digest }
27+ Digest: { ( error as { digest : string } ) . digest }
2828 </ p >
2929 ) }
3030 < div className = "divider w-full self-auto!" />
You can’t perform that action at this time.
0 commit comments