diff --git a/app/entry.client.tsx b/app/entry.client.tsx
index 8338545..af41138 100644
--- a/app/entry.client.tsx
+++ b/app/entry.client.tsx
@@ -1,19 +1,22 @@
-import { RemixBrowser } from "@remix-run/react";
-import { startTransition, StrictMode } from "react";
-import { hydrateRoot } from "react-dom/client";
+import { RemixBrowser } from '@remix-run/react';
+import { startTransition, StrictMode } from 'react';
+import { hydrateRoot } from 'react-dom/client';
+import { ClientProvider } from '@mantine/remix';
function hydrate() {
startTransition(() => {
hydrateRoot(
document,
-
+
+
+
);
});
}
-if (typeof requestIdleCallback === "function") {
+if (typeof requestIdleCallback === 'function') {
requestIdleCallback(hydrate);
} else {
// Safari doesn't support requestIdleCallback
diff --git a/app/entry.server.tsx b/app/entry.server.tsx
index d349f8e..5fcb97b 100644
--- a/app/entry.server.tsx
+++ b/app/entry.server.tsx
@@ -1,11 +1,10 @@
-import { PassThrough } from "stream";
-import type { EntryContext } from "@remix-run/node";
-import { Response } from "@remix-run/node";
-import { RemixServer } from "@remix-run/react";
-import isbot from "isbot";
-import { renderToPipeableStream } from "react-dom/server";
+import type { EntryContext } from '@remix-run/node';
+import { Response } from '@remix-run/node';
+import { RemixServer } from '@remix-run/react';
+import { renderToString } from 'react-dom/server';
+import { injectStyles, createStylesServer } from '@mantine/remix';
-const ABORT_DELAY = 5000;
+const server = createStylesServer();
export default function handleRequest(
request: Request,
@@ -13,99 +12,13 @@ export default function handleRequest(
responseHeaders: Headers,
remixContext: EntryContext
) {
- return isbot(request.headers.get("user-agent"))
- ? handleBotRequest(
- request,
- responseStatusCode,
- responseHeaders,
- remixContext
- )
- : handleBrowserRequest(
- request,
- responseStatusCode,
- responseHeaders,
- remixContext
- );
-}
+ let markup = renderToString(
+
+ );
+ responseHeaders.set('Content-Type', 'text/html');
-function handleBotRequest(
- request: Request,
- responseStatusCode: number,
- responseHeaders: Headers,
- remixContext: EntryContext
-) {
- return new Promise((resolve, reject) => {
- let didError = false;
-
- const { pipe, abort } = renderToPipeableStream(
- ,
- {
- onAllReady() {
- const body = new PassThrough();
-
- responseHeaders.set("Content-Type", "text/html");
-
- resolve(
- new Response(body, {
- headers: responseHeaders,
- status: didError ? 500 : responseStatusCode,
- })
- );
-
- pipe(body);
- },
- onShellError(error: unknown) {
- reject(error);
- },
- onError(error: unknown) {
- didError = true;
-
- console.error(error);
- },
- }
- );
-
- setTimeout(abort, ABORT_DELAY);
- });
-}
-
-function handleBrowserRequest(
- request: Request,
- responseStatusCode: number,
- responseHeaders: Headers,
- remixContext: EntryContext
-) {
- return new Promise((resolve, reject) => {
- let didError = false;
-
- const { pipe, abort } = renderToPipeableStream(
- ,
- {
- onShellReady() {
- const body = new PassThrough();
-
- responseHeaders.set("Content-Type", "text/html");
-
- resolve(
- new Response(body, {
- headers: responseHeaders,
- status: didError ? 500 : responseStatusCode,
- })
- );
-
- pipe(body);
- },
- onShellError(err: unknown) {
- reject(err);
- },
- onError(error: unknown) {
- didError = true;
-
- console.error(error);
- },
- }
- );
-
- setTimeout(abort, ABORT_DELAY);
+ return new Response(`${injectStyles(markup, server)}`, {
+ status: responseStatusCode,
+ headers: responseHeaders
});
}