Skip to content

Commit d0020bc

Browse files
committed
feat: use ConsoleBlockMulti style for ErrorDecoder and add isCustom error page support
1 parent bd87c39 commit d0020bc

File tree

2 files changed

+55
-8
lines changed

2 files changed

+55
-8
lines changed

src/components/MDX/ErrorDecoder.tsx

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import {useEffect, useState} from 'react';
99
import {useErrorDecoderParams} from '../ErrorDecoderContext';
1010
import cn from 'classnames';
11+
import {IconError} from '../Icon/IconError';
1112

1213
function replaceArgs(
1314
msg: string,
@@ -108,12 +109,48 @@ export default function ErrorDecoder() {
108109
}, [errorCode, hasParams, errorMessage]);
109110

110111
return (
111-
<code
112+
<div
112113
className={cn(
113-
'whitespace-pre-line block bg-red-100 text-red-600 py-4 px-6 mt-5 rounded-lg',
114+
'console-block mb-4 text-secondary bg-wash dark:bg-wash-dark rounded-lg mt-5',
114115
isReady ? 'opacity-100' : 'opacity-0'
115-
)}>
116-
<b>{message}</b>
117-
</code>
116+
)}
117+
translate="no"
118+
dir="ltr">
119+
<div className="flex w-full rounded-t-lg bg-gray-200 dark:bg-gray-80">
120+
<div className="px-4 py-2 border-gray-300 dark:border-gray-90 border-r">
121+
<div
122+
className="bg-gray-300 dark:bg-gray-70"
123+
style={{width: '15px', height: '17px'}}
124+
/>
125+
</div>
126+
<div className="flex text-sm px-4">
127+
<div className="border-b-2 border-gray-300 dark:border-gray-90 text-tertiary dark:text-tertiary-dark">
128+
Console
129+
</div>
130+
<div className="px-4 py-2 flex">
131+
<div
132+
className="me-2 bg-gray-300 dark:bg-gray-70"
133+
style={{width: '60px', height: '17px'}}
134+
/>
135+
<div
136+
className="me-2 hidden md:block bg-gray-300 dark:bg-gray-70"
137+
style={{width: '60px', height: '17px'}}
138+
/>
139+
<div
140+
className="hidden md:block bg-gray-300 dark:bg-gray-70"
141+
style={{width: '60px', height: '17px'}}
142+
/>
143+
</div>
144+
</div>
145+
</div>
146+
<div className="grid grid-cols-1 divide-y divide-gray-300 dark:divide-gray-70 text-base">
147+
<div className="ps-4 pe-2 pt-1 pb-2 grid grid-cols-[18px_auto] font-mono rounded-b-md bg-red-30 text-red-50 dark:text-red-30 bg-opacity-5">
148+
<IconError className="self-start mt-1.5 text-[.7rem] w-6" />
149+
<div className="px-2 pt-1 whitespace-break-spaces text-code leading-tight">
150+
{message}
151+
</div>
152+
</div>
153+
</div>
154+
</div>
118155
);
119156
}

src/pages/errors/[errorCode].tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,33 @@ interface ErrorDecoderProps {
2020
content: string;
2121
toc: string;
2222
meta: any;
23+
isCustom: boolean;
2324
}
2425

2526
export default function ErrorDecoderPage({
2627
errorMessage,
2728
errorCode,
2829
content,
30+
toc,
31+
isCustom,
2932
}: InferGetStaticPropsType<typeof getStaticProps>) {
3033
const parsedContent = useMemo<React.ReactNode>(
3134
() => JSON.parse(content, reviveNodeOnClient),
3235
[content]
3336
);
37+
const parsedToc = useMemo(
38+
() => (isCustom ? JSON.parse(toc, reviveNodeOnClient) : []),
39+
[toc, isCustom]
40+
);
3441

3542
return (
3643
<ErrorDecoderContext value={{errorMessage, errorCode}}>
3744
<Page
38-
toc={[]}
45+
toc={parsedToc}
3946
meta={{
4047
title: errorCode
41-
? `Minified React error #${errorCode}`
42-
: 'Minified Error Decoder',
48+
? `React error #${errorCode}`
49+
: 'React Error Decoder',
4350
}}
4451
routeTree={sidebarLearn as RouteItem}
4552
section="unknown">
@@ -117,11 +124,13 @@ export const getStaticProps: GetStaticProps<ErrorDecoderProps> = async ({
117124
// Read MDX from the file.
118125
let path = params?.errorCode || 'index';
119126
let mdx;
127+
let isCustom = true;
120128
try {
121129
mdx = fs.readFileSync(rootDir + '/' + path + '.md', 'utf8');
122130
} catch {
123131
// if [errorCode].md is not found, fallback to generic.md
124132
mdx = fs.readFileSync(rootDir + '/generic.md', 'utf8');
133+
isCustom = false;
125134
}
126135

127136
const {content, toc, meta} = await compileMDX(mdx, path, {code, errorCodes});
@@ -131,6 +140,7 @@ export const getStaticProps: GetStaticProps<ErrorDecoderProps> = async ({
131140
content,
132141
toc,
133142
meta,
143+
isCustom,
134144
errorCode: code,
135145
errorMessage: code ? errorCodes[code] : null,
136146
},

0 commit comments

Comments
 (0)