Skip to content

Commit

Permalink
feat: ClientOnly component
Browse files Browse the repository at this point in the history
  • Loading branch information
magne4000 committed Nov 27, 2023
1 parent 121c0c7 commit 3511fe9
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 7 deletions.
36 changes: 36 additions & 0 deletions vike-solid/components/ClientOnly.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import type { Component, JSX } from "solid-js";
import { createEffect, createSignal, lazy, Suspense } from "solid-js";
import { Dynamic } from "solid-js/web";

function ClientOnlyError() {
return <p>Error loading component.</p>
}

export function ClientOnly<T>(props: {
load: () => Promise<{ default: Component<T> } | Component<T>>
children: (Component: Component<T>) => JSX.Element
fallback: JSX.Element
deps?: Parameters<typeof createSignal>[1]
}) {
const [getComponent, setComponent] = createSignal<Component<unknown> | undefined>(undefined);

createEffect(() => {
const loadComponent = () => {
const Component = lazy(() =>
props.load()
.then((LoadedComponent) => {
return { default: () => props.children("default" in LoadedComponent ? LoadedComponent.default : LoadedComponent) };
})
.catch((error) => {
console.error("Component loading failed:", error);
return { default: ClientOnlyError };
})
);
setComponent(() => Component);
};

loadComponent();
});

return <Suspense fallback={props.fallback}><Dynamic component={getComponent()} /></Suspense>;
}
18 changes: 11 additions & 7 deletions vike-solid/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,6 @@
"name": "vike-solid",
"version": "0.2.5",
"type": "module",
"exports": {
".": "./dist/+config.js",
"./vite": "./dist/vite-plugin-vike-solid.js",
"./usePageContext": "./dist/usePageContext.js",
"./renderer/onRenderHtml": "./dist/+onRenderHtml.js",
"./renderer/onRenderClient": "./dist/+onRenderClient.js"
},
"scripts": {
"dev": "rollup -c rollup.config.js --watch",
"build": "tsc --noEmit && rollup -c rollup.config.js",
Expand Down Expand Up @@ -39,6 +32,14 @@
"vite": "^4.5.0",
"vike": "^0.4.147"
},
"exports": {
".": "./dist/+config.js",
"./vite": "./dist/vite-plugin-vike-solid.js",
"./usePageContext": "./dist/usePageContext.js",
"./ClientOnly": "./dist/ClientOnly.js",
"./renderer/onRenderHtml": "./dist/+onRenderHtml.js",
"./renderer/onRenderClient": "./dist/+onRenderClient.js"
},
"typesVersions": {
"*": {
".": [
Expand All @@ -52,6 +53,9 @@
],
"usePageContext": [
"dist/components/usePageContext.d.ts"
],
"ClientOnly": [
"dist/components/ClientOnly.d.ts"
]
}
},
Expand Down
2 changes: 2 additions & 0 deletions vike-solid/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export default [
"./renderer/+onRenderHtml.tsx",
"./renderer/+config.ts",
"./components/usePageContext.tsx",
"./components/ClientOnly.tsx",
"./cli/index.ts",
],
ssr: true,
Expand All @@ -26,6 +27,7 @@ export default [
input: [
"./renderer/+config.ts",
"./components/usePageContext.tsx",
"./components/ClientOnly.tsx",
"./vite-plugin-vike-solid.ts",
],
output: [{ dir: "dist", format: "es", sanitizeFileName: false }],
Expand Down

0 comments on commit 3511fe9

Please sign in to comment.