Skip to content

Commit 81b438c

Browse files
committed
better error handling in client side routing, pass response headers back from server
1 parent ae8066f commit 81b438c

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

app/app.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ async function callServer({
116116
serverUrl.search = requestUrl.search;
117117

118118
request.headers.delete("Host");
119+
request.headers.set(gooeyGuiRouteHeader, "1");
119120

120121
let response = await fetch(serverUrl, {
121122
method: request.method,
@@ -137,7 +138,7 @@ async function callServer({
137138
return response;
138139
} else {
139140
return json({
140-
body: Buffer.from(await response.arrayBuffer()).toString("base64"),
141+
base64Body: Buffer.from(await response.arrayBuffer()).toString("base64"),
141142
headers: Object.fromEntries(response.headers),
142143
status: response.status,
143144
statusText: response.statusText,
@@ -184,11 +185,16 @@ function App() {
184185
const loaderData = useLoaderData<typeof loader>();
185186
const actionData = useActionData<typeof action>();
186187
const submit = useSubmit();
187-
const { children, state, channels } = actionData ?? loaderData;
188+
const { base64Body, children, state, channels } = actionData ?? loaderData;
188189
const formRef = useRef<HTMLFormElement>(null);
189190
const realtimeEvent = useRealtimeChannels({ channels });
190191
const fetcher = useFetcher();
191192

193+
useEffect(() => {
194+
if (!base64Body) return;
195+
document.documentElement.innerHTML = atob(base64Body);
196+
}, [base64Body]);
197+
192198
useEffect(() => {
193199
if (realtimeEvent && fetcher.state === "idle" && formRef.current) {
194200
submit(formRef.current);

app/entry.server.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,19 @@ export default function handleDocumentRequestFunction(
4242
<RemixServer context={remixContext} url={request.url} />
4343
);
4444

45+
for (let [key, value] of loaderHeaders.entries()) {
46+
responseHeaders.set(key, value);
47+
}
48+
responseHeaders.delete("Content-Length");
4549
responseHeaders.set("Content-Type", "text/html");
4650

4751
return new Response("<!DOCTYPE html>" + markup, {
4852
status: responseStatusCode,
4953
headers: responseHeaders,
5054
});
5155
} else {
52-
let { body, ...options } = loaderData;
53-
let buffer = body && Buffer.from(body, "base64");
56+
let { base64Body, ...options } = loaderData;
57+
let buffer = base64Body && Buffer.from(base64Body, "base64");
5458
return new Response(buffer, options);
5559
}
5660
} catch (error) {

app/renderedHTML.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,10 @@ function RenderLocalDt({
5252
}
5353
const localeDateString = date.toLocaleDateString(
5454
"en-IN",
55-
renderLocalDtDateOptions,
55+
renderLocalDtDateOptions
5656
);
5757
let result = localeDateString + yearToShow;
5858
if (renderLocalDtTimeOptions) {
59-
console.log(renderLocalDtTimeOptions);
6059
const localTimeString = date
6160
.toLocaleTimeString("en-IN", renderLocalDtTimeOptions)
6261
.toUpperCase();
@@ -138,7 +137,7 @@ function LineClamp({
138137
function handleResize() {
139138
if (contentRef && contentRef.current) {
140139
setClamped(
141-
contentRef.current.scrollHeight > contentRef.current.clientHeight,
140+
contentRef.current.scrollHeight > contentRef.current.clientHeight
142141
);
143142
}
144143
}
@@ -163,12 +162,12 @@ function LineClamp({
163162
...(isExpanded
164163
? {}
165164
: {
166-
display: "-webkit-box",
167-
WebkitLineClamp: lines,
168-
WebkitBoxOrient: "vertical",
169-
overflow: "hidden",
170-
position: "relative",
171-
}),
165+
display: "-webkit-box",
166+
WebkitLineClamp: lines,
167+
WebkitBoxOrient: "vertical",
168+
overflow: "hidden",
169+
position: "relative",
170+
}),
172171
}}
173172
>
174173
{children}

0 commit comments

Comments
 (0)