vike-react 0.3.6 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,4 +8,4 @@ declare function ClientOnly<T>({ load, children, fallback, deps }: {
8
8
  children: (Component: React.ComponentType<T>) => ReactNode;
9
9
  fallback: ReactNode;
10
10
  deps?: Parameters<typeof useEffect>[1];
11
- }): React.JSX.Element;
11
+ }): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
@@ -1,12 +1,14 @@
1
1
  export { ClientOnly };
2
- import React, { Suspense, lazy, useEffect, useState } from 'react';
3
- function ClientOnly({ load, children, fallback, deps }) {
2
+ import React, { lazy, useEffect, useState, startTransition } from 'react';
3
+ function ClientOnly({ load, children, fallback, deps = [] }) {
4
4
  const [Component, setComponent] = useState(null);
5
5
  useEffect(() => {
6
6
  const loadComponent = () => {
7
7
  const Component = lazy(() => load()
8
8
  .then((LoadedComponent) => {
9
- return { default: () => children('default' in LoadedComponent ? LoadedComponent.default : LoadedComponent) };
9
+ return {
10
+ default: () => children('default' in LoadedComponent ? LoadedComponent.default : LoadedComponent)
11
+ };
10
12
  })
11
13
  .catch((error) => {
12
14
  console.error('Component loading failed:', error);
@@ -14,7 +16,9 @@ function ClientOnly({ load, children, fallback, deps }) {
14
16
  }));
15
17
  setComponent(Component);
16
18
  };
17
- loadComponent();
19
+ startTransition(() => {
20
+ loadComponent();
21
+ });
18
22
  }, deps);
19
- return React.createElement(Suspense, { fallback: fallback }, Component ? React.createElement(Component, null) : null);
23
+ return Component ? React.createElement(Component, null) : fallback;
20
24
  }
@@ -0,0 +1 @@
1
+ export { useData } from '../renderer/PageContextProvider.js';
@@ -0,0 +1 @@
1
+ export { useData } from '../renderer/PageContextProvider.js';
@@ -58,7 +58,7 @@ declare const _default: {
58
58
  };
59
59
  };
60
60
  export default _default;
61
- import type { Component } from './types';
61
+ import type { Component } from './types.d.ts';
62
62
  declare global {
63
63
  namespace VikePackages {
64
64
  interface ConfigVikeReact {
@@ -21,6 +21,8 @@ const toggleSsrRelatedConfig = ({ configDefinedAt, configValue }) => {
21
21
  export default {
22
22
  onRenderHtml: 'import:vike-react/renderer/onRenderHtml:onRenderHtml',
23
23
  onRenderClient: 'import:vike-react/renderer/onRenderClient:onRenderClient',
24
+ // TODO/next-major-release: remove pageProps (i.e. tell users to use data() instead of onBeforeRender() to fetch data)
25
+ // TODO/next-major-release: remove support for setting title over onBeforeRender()
24
26
  // A page can define an onBeforeRender() hook to be run on the server, which
25
27
  // can fetch data and return it as additional page context. Typically it will
26
28
  // return the page's root React component's props and additional data that can
@@ -1,5 +1,6 @@
1
1
  export { PageContextProvider };
2
2
  export { usePageContext };
3
+ export { useData };
3
4
  import React from 'react';
4
5
  import type { PageContext } from 'vike/types';
5
6
  declare function PageContextProvider({ pageContext, children }: {
@@ -8,3 +9,4 @@ declare function PageContextProvider({ pageContext, children }: {
8
9
  }): React.JSX.Element;
9
10
  /** Access the pageContext from any React component */
10
11
  declare function usePageContext(): PageContext;
12
+ declare function useData<Data>(): Data;
@@ -1,5 +1,6 @@
1
1
  export { PageContextProvider };
2
2
  export { usePageContext };
3
+ export { useData };
3
4
  import React, { useContext } from 'react';
4
5
  import { getGlobalObject } from './utils/getGlobalObject.js';
5
6
  const { Context } = getGlobalObject('PageContextProvider.ts', {
@@ -17,3 +18,7 @@ function usePageContext() {
17
18
  throw new Error('<PageContextProvider> is needed for being able to use usePageContext()');
18
19
  return pageContext;
19
20
  }
21
+ function useData() {
22
+ const { data } = usePageContext();
23
+ return data;
24
+ }
@@ -2,14 +2,14 @@ export { getPageElement };
2
2
  import React from 'react';
3
3
  import { PageContextProvider } from './PageContextProvider.js';
4
4
  function getPageElement(pageContext) {
5
- var _a, _b;
6
- const Layout = (_a = pageContext.config.Layout) !== null && _a !== void 0 ? _a : PassThrough;
5
+ const Layout = pageContext.config.Layout ?? PassThrough;
7
6
  const Wrapper =
8
7
  /* Should we implement this? Enabling users to defined a wrapper that is used across all layouts.
9
8
  pageContext.config.Wrapper ??
10
9
  */
11
10
  PassThrough;
12
- const VikeReactQueryWrapper = (_b = pageContext.config.VikeReactQueryWrapper) !== null && _b !== void 0 ? _b : PassThrough;
11
+ const VikeReactQueryWrapper = pageContext.config.VikeReactQueryWrapper ?? PassThrough;
12
+ // TODO/next-major-release: remove pageProps (i.e. tell users to use data() instead of onBeforeRender() to fetch data)
13
13
  const { Page, pageProps } = pageContext;
14
14
  const page = (React.createElement(React.StrictMode, null,
15
15
  React.createElement(PageContextProvider, { pageContext: pageContext },
@@ -2,6 +2,6 @@ export { getTitle };
2
2
  import type { PageContext } from 'vike/types';
3
3
  /**
4
4
  * Get the page's title if defined, either from the additional data fetched by
5
- * the page's onBeforeRender() hook or from the config.
5
+ * the page's data() and onBeforeRender() hooks or from the config.
6
6
  */
7
7
  declare function getTitle(pageContext: PageContext): null | string;
@@ -2,14 +2,19 @@ export { getTitle };
2
2
  import { isCallable } from './utils/isCallable.js';
3
3
  /**
4
4
  * Get the page's title if defined, either from the additional data fetched by
5
- * the page's onBeforeRender() hook or from the config.
5
+ * the page's data() and onBeforeRender() hooks or from the config.
6
6
  */
7
7
  function getTitle(pageContext) {
8
- var _a;
8
+ // from data() hook
9
+ if (pageContext.data?.title !== undefined) {
10
+ return pageContext.data.title;
11
+ }
12
+ // TODO/next-major-release: remove support for setting title over onBeforeRender()
13
+ // from onBeforeRender() hook
9
14
  if (pageContext.title !== undefined) {
10
15
  return pageContext.title;
11
16
  }
12
- const titleConfig = (_a = pageContext.configEntries.title) === null || _a === void 0 ? void 0 : _a[0];
17
+ const titleConfig = pageContext.configEntries.title?.[0];
13
18
  if (!titleConfig) {
14
19
  return null;
15
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike-react",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "type": "module",
5
5
  "main": "./dist/renderer/+config.js",
6
6
  "types": "./dist/renderer/+config.d.ts",
@@ -9,6 +9,7 @@
9
9
  "./renderer/onRenderHtml": "./dist/renderer/onRenderHtml.js",
10
10
  "./renderer/onRenderClient": "./dist/renderer/onRenderClient.js",
11
11
  "./usePageContext": "./dist/components/usePageContext.js",
12
+ "./useData": "./dist/components/useData.js",
12
13
  "./ClientOnly": "./dist/components/ClientOnly.js"
13
14
  },
14
15
  "scripts": {
@@ -20,21 +21,21 @@
20
21
  "peerDependencies": {
21
22
  "react": "18.x.x",
22
23
  "react-dom": "18.x.x",
23
- "vike": "^0.4.149",
24
+ "vike": "^0.4.151",
24
25
  "vite": "^4.3.8"
25
26
  },
26
27
  "devDependencies": {
27
- "@brillout/release-me": "^0.1.12",
28
- "@types/node": "^18.17.18",
29
- "@types/react": "^18.2.22",
30
- "@types/react-dom": "^18.2.7",
28
+ "@brillout/release-me": "^0.1.13",
29
+ "@types/node": "^18.19.3",
30
+ "@types/react": "^18.2.45",
31
+ "@types/react-dom": "^18.2.18",
31
32
  "react": "^18.2.0",
32
33
  "react-dom": "^18.2.0",
33
- "typescript": "^5.2.2",
34
- "vike": "^0.4.149"
34
+ "typescript": "^5.3.3",
35
+ "vike": "^0.4.151"
35
36
  },
36
37
  "dependencies": {
37
- "react-streaming": "^0.3.16"
38
+ "react-streaming": "^0.3.18"
38
39
  },
39
40
  "typesVersions": {
40
41
  "*": {
@@ -44,6 +45,9 @@
44
45
  "usePageContext": [
45
46
  "./dist/components/usePageContext.d.ts"
46
47
  ],
48
+ "useData": [
49
+ "./dist/components/useData.d.ts"
50
+ ],
47
51
  "renderer/onRenderHtml": [
48
52
  "./dist/renderer/onRenderHtml.d.ts"
49
53
  ],
@@ -1,15 +0,0 @@
1
- export type { Component };
2
- import type { ReactElement } from 'react';
3
- type Component = (props: any) => ReactElement;
4
- declare global {
5
- namespace Vike {
6
- interface PageContext {
7
- Page?: Component;
8
- /** Properties of the page's root React component. */
9
- pageProps?: Record<string, unknown>;
10
- /** &lt;title>${title}&lt;/title> - has precedence over the config */
11
- title?: string;
12
- userAgent?: string;
13
- }
14
- }
15
- }
@@ -1 +0,0 @@
1
- export {};