From 6c1c4914d8e8040ce7bdd0b73fc3443b3d0d7f1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Oliveira?=
Date: Mon, 29 Jul 2024 13:40:01 -0300
Subject: [PATCH 1/9] feat: link block
---
.../react/components/BaseBlocksRenderer.tsx | 17 +++++-
.../src/react/components/BlocksRenderer.tsx | 4 +-
packages/next/src/rsc/blocks/LinkBlock.tsx | 55 +++++++++++++++++++
.../src/rsc/data/queries/queryAppSettings.ts | 2 +-
.../rsc/data/queries/queryAuthorArchive.ts | 1 +
.../next/src/rsc/data/queries/queryPost.ts | 1 +
.../src/rsc/data/queries/queryPostOrPosts.ts | 1 +
.../next/src/rsc/data/queries/queryPosts.ts | 1 +
.../next/src/rsc/data/queries/querySearch.ts | 1 +
.../next/src/rsc/data/queries/queryTerms.ts | 2 +-
packages/next/src/rsc/index.ts | 3 +
.../src/app/(single)/[...path]/page.tsx | 4 +-
projects/wp-nextjs-app/src/app/page.tsx | 9 +--
.../wp-nextjs-app/src/components/Blocks.tsx | 12 +++-
14 files changed, 96 insertions(+), 17 deletions(-)
create mode 100644 packages/next/src/rsc/blocks/LinkBlock.tsx
diff --git a/packages/core/src/react/components/BaseBlocksRenderer.tsx b/packages/core/src/react/components/BaseBlocksRenderer.tsx
index f28e8e7a8..3148f2820 100644
--- a/packages/core/src/react/components/BaseBlocksRenderer.tsx
+++ b/packages/core/src/react/components/BaseBlocksRenderer.tsx
@@ -11,12 +11,14 @@ import { IDataWPBlock, parseBlockAttributes, ParsedBlock } from '../../dom/parse
const { default: parse, domToReact } = HtmlReactParser;
+export type BlockContext = { settings?: HeadlessConfig; [key: string]: unknown };
+
/**
* The interface any children of {@link BlocksRenderer} must implement.
*/
export interface BlockProps<
BlockAttributes extends IDataWPBlock = IDataWPBlock,
- Context extends Record = Record,
+ Context extends BlockContext = BlockContext,
> {
/**
* A test function receives a domNode and returns a boolean value indicating
@@ -74,6 +76,10 @@ export interface BlockProps<
blockContext?: Context;
}
+export type BlockFC = React.FC & {
+ test?: BlockProps['test'];
+};
+
/**
* The common interface for a block transform component
*/
@@ -125,6 +131,11 @@ export interface BlockRendererProps {
*/
children?: ReactNode;
+ /**
+ * The headless config
+ */
+ settings?: HeadlessConfig;
+
/**
* Whether to forward the block attributes to the children components.
*/
@@ -241,7 +252,9 @@ export function BaseBlocksRenderer({
}
if (typeof blockContext !== 'undefined') {
- blockProps.blockContext = { ...blockContext };
+ blockProps.blockContext = { ...blockContext, settings };
+ } else {
+ blockProps.blockContext = { settings };
}
component = React.createElement(
diff --git a/packages/core/src/react/components/BlocksRenderer.tsx b/packages/core/src/react/components/BlocksRenderer.tsx
index e8e73fe08..1b53c0645 100644
--- a/packages/core/src/react/components/BlocksRenderer.tsx
+++ b/packages/core/src/react/components/BlocksRenderer.tsx
@@ -34,11 +34,11 @@ import { BlockRendererProps, BaseBlocksRenderer } from './BaseBlocksRenderer';
*
* @category React Components
*/
-export function BlocksRenderer({ children, ...props }: BlockRendererProps) {
+export function BlocksRenderer({ children, settings: propSettings, ...props }: BlockRendererProps) {
const settings = useSettings();
return (
-
+
{children}
);
diff --git a/packages/next/src/rsc/blocks/LinkBlock.tsx b/packages/next/src/rsc/blocks/LinkBlock.tsx
new file mode 100644
index 000000000..5b81c43d0
--- /dev/null
+++ b/packages/next/src/rsc/blocks/LinkBlock.tsx
@@ -0,0 +1,55 @@
+import Link from 'next/link.js';
+import { removeSourceUrl } from '@headstartwp/core/utils';
+import { BlockFC, BlockProps, IDataWPBlock } from '@headstartwp/core/react';
+import { getAttributes, HeadlessConfig, isAnchorTag } from '@headstartwp/core';
+import React from 'react';
+
+interface LinkBlockProps extends BlockProps {
+ children?: React.ReactNode;
+}
+
+/**
+ * The Link Block converts a anchor tag node into a next/link component if it's an internal link
+ *
+ * #### Usage
+ *
+ * ```tsx
+ * import { BlocksRenderer } from "@headstartwp/core/react";
+ * import { LinkBlock } from "@headstartwp/next/app";
+ *
+ *
+ *
+ *
+ * ```
+ *
+ * @param props Link Block Props
+ * @param props.domNode The domNode element
+ * @param props.children Children prop
+ *
+ * @returns The next/link component
+ *
+ * @category React Components
+ */
+export const LinkBlock: BlockFC = ({ domNode, children, blockContext }) => {
+ const settings =
+ typeof blockContext?.settings !== 'undefined'
+ ? blockContext.settings
+ : ({} as HeadlessConfig);
+
+ // Links might not always be an actual block since it can be just regular links
+ const { href, rel, className } = getAttributes(domNode?.attribs ?? {});
+
+ const link = removeSourceUrl({
+ link: href,
+ backendUrl: settings.sourceUrl || '',
+ publicUrl: settings.hostUrl ?? '/',
+ });
+
+ return (
+
+ {children}
+
+ );
+};
+
+LinkBlock.test = (node, site) => isAnchorTag(node, { isInternalLink: true }, site);
diff --git a/packages/next/src/rsc/data/queries/queryAppSettings.ts b/packages/next/src/rsc/data/queries/queryAppSettings.ts
index 963f64376..bbb982568 100644
--- a/packages/next/src/rsc/data/queries/queryAppSettings.ts
+++ b/packages/next/src/rsc/data/queries/queryAppSettings.ts
@@ -18,7 +18,7 @@ export async function queryAppSettings<
try {
const result = await fetchAppSettings(query, config);
- return result;
+ return { ...result, config };
} catch (error) {
if (error instanceof Error && handleError) {
await handleFetchError(error, config, query.path);
diff --git a/packages/next/src/rsc/data/queries/queryAuthorArchive.ts b/packages/next/src/rsc/data/queries/queryAuthorArchive.ts
index db3f0d7f0..4c9492d7f 100644
--- a/packages/next/src/rsc/data/queries/queryAuthorArchive.ts
+++ b/packages/next/src/rsc/data/queries/queryAuthorArchive.ts
@@ -20,6 +20,7 @@ export async function queryAuthorArchive<
return {
...result,
+ config,
seo: prepareSEOMetadata(result.data.queriedObject, config),
};
} catch (error) {
diff --git a/packages/next/src/rsc/data/queries/queryPost.ts b/packages/next/src/rsc/data/queries/queryPost.ts
index 3e4c56730..e49d3ecfc 100644
--- a/packages/next/src/rsc/data/queries/queryPost.ts
+++ b/packages/next/src/rsc/data/queries/queryPost.ts
@@ -43,6 +43,7 @@ export async function queryPost<
return {
...result,
+ config,
seo: prepareSEOMetadata(result.data.post, config),
};
} catch (error) {
diff --git a/packages/next/src/rsc/data/queries/queryPostOrPosts.ts b/packages/next/src/rsc/data/queries/queryPostOrPosts.ts
index 6e7cf157d..ce6e23cb4 100644
--- a/packages/next/src/rsc/data/queries/queryPostOrPosts.ts
+++ b/packages/next/src/rsc/data/queries/queryPostOrPosts.ts
@@ -22,6 +22,7 @@ export async function queryPostOrPosts<
return {
...result,
+ config,
seo: prepareSEOMetadata(result.data.queriedObject, config),
};
} catch (error) {
diff --git a/packages/next/src/rsc/data/queries/queryPosts.ts b/packages/next/src/rsc/data/queries/queryPosts.ts
index dae2c45b9..b05df3ccc 100644
--- a/packages/next/src/rsc/data/queries/queryPosts.ts
+++ b/packages/next/src/rsc/data/queries/queryPosts.ts
@@ -15,6 +15,7 @@ export async function queryPosts<
return {
...result,
+ config,
seo: prepareSEOMetadata(result.data.queriedObject, config),
};
} catch (error) {
diff --git a/packages/next/src/rsc/data/queries/querySearch.ts b/packages/next/src/rsc/data/queries/querySearch.ts
index 72f68b1ba..a35c11f0e 100644
--- a/packages/next/src/rsc/data/queries/querySearch.ts
+++ b/packages/next/src/rsc/data/queries/querySearch.ts
@@ -21,6 +21,7 @@ export async function querySearch<
return {
...result,
+ config,
seo: prepareSEOMetadata(result.data.queriedObject, config),
};
} catch (error) {
diff --git a/packages/next/src/rsc/data/queries/queryTerms.ts b/packages/next/src/rsc/data/queries/queryTerms.ts
index 45d8f7b50..c528e6dea 100644
--- a/packages/next/src/rsc/data/queries/queryTerms.ts
+++ b/packages/next/src/rsc/data/queries/queryTerms.ts
@@ -12,7 +12,7 @@ export async function queryTerms<
try {
const result = await fetchTerms(query, config);
- return result;
+ return { ...result, config };
} catch (error) {
if (error instanceof Error && handleError) {
await handleFetchError(error, config, query.path);
diff --git a/packages/next/src/rsc/index.ts b/packages/next/src/rsc/index.ts
index 1b5b18090..c07784b95 100644
--- a/packages/next/src/rsc/index.ts
+++ b/packages/next/src/rsc/index.ts
@@ -9,3 +9,6 @@ export * from './handlers/revalidateRouterHandler';
// components
export * from './components/PreviewIndicator';
export * from './components/JSONLD';
+
+// blocks
+export * from './blocks/LinkBlock';
diff --git a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
index da37bc487..8f3ccfe8f 100644
--- a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
+++ b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
@@ -48,7 +48,7 @@ export async function generateMetadata({ params }: HeadstartWPRoute): Promise {
- const { data, seo } = await query({ params });
+ const { data, seo, config } = await query({ params });
return (
@@ -56,7 +56,7 @@ const Single = async ({ params }: HeadstartWPRoute) => {
-
+
{seo.schema && }
diff --git a/projects/wp-nextjs-app/src/app/page.tsx b/projects/wp-nextjs-app/src/app/page.tsx
index d34cb379f..944904679 100644
--- a/projects/wp-nextjs-app/src/app/page.tsx
+++ b/projects/wp-nextjs-app/src/app/page.tsx
@@ -1,6 +1,6 @@
-import { BlocksRenderer } from '@headstartwp/core/react';
import { HeadstartWPRoute, JSONLD, queryPost } from '@headstartwp/next/app';
import { Metadata } from 'next';
+import Blocks from '../components/Blocks';
async function query({ params }: HeadstartWPRoute) {
return queryPost({
@@ -9,9 +9,6 @@ async function query({ params }: HeadstartWPRoute) {
slug: 'sample-page',
postType: 'page',
},
- options: {
- cache: 'force-cache',
- },
});
}
@@ -22,12 +19,12 @@ export async function generateMetadata({ params }: HeadstartWPRoute): Promise {
- const { data, seo } = await query({ params });
+ const { data, seo, config } = await query({ params });
return (
-
+
{seo?.schema && }
diff --git a/projects/wp-nextjs-app/src/components/Blocks.tsx b/projects/wp-nextjs-app/src/components/Blocks.tsx
index 8c6d23424..61f821c41 100644
--- a/projects/wp-nextjs-app/src/components/Blocks.tsx
+++ b/projects/wp-nextjs-app/src/components/Blocks.tsx
@@ -1,16 +1,22 @@
import { BlocksRenderer } from '@headstartwp/core/react';
import React from 'react';
-import { isBlockByName } from '@headstartwp/core';
+import { HeadlessConfig, isBlockByName } from '@headstartwp/core';
+import { LinkBlock } from '@headstartwp/next/app';
import { PostList } from './Blocks/PostList';
type BlockProps = {
html: string;
+ settings: HeadlessConfig;
};
-const Blocks: React.FC = ({ html }) => {
+const Blocks: React.FC = ({ html, settings }) => {
+ // we need to pass settings as a prop since there's no context in server components
+ // and BlocksRenderer needs the settings for the LinkBlock
+ // the settings is automatically passed to the children components via blockContext
return (
-
+
isBlockByName(node, 'core/query')} />
+
);
};
From 69023f876f2d6db0ef06cbd2b0ee39b2d1e3b4af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?=
Date: Mon, 29 Jul 2024 18:43:53 +0000
Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=C2=A0types=20confusion?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package-lock.json | 657 ++----------------
.../__snapshots__/BlocksRenderer.tsx.snap | 2 +-
packages/next/src/middlewares/appMidleware.ts | 3 +-
.../wp-multisite-i18n-nextjs/package.json | 2 +-
projects/wp-multisite-nextjs-app/package.json | 2 +-
.../src/app/api/preview/route.ts | 1 -
.../src/app/api/revalidate/route.ts | 1 -
.../wp-multisite-nextjs-app/src/middleware.ts | 1 -
projects/wp-multisite-nextjs/package.json | 2 +-
projects/wp-nextjs-app/package.json | 2 +-
.../src/app/api/preview/route.ts | 1 -
.../src/app/api/revalidate/route.ts | 1 -
projects/wp-nextjs-app/src/middleware.ts | 1 -
projects/wp-nextjs/package.json | 2 +-
projects/wp-polylang-nextjs-app/package.json | 2 +-
.../src/app/api/preview/route.ts | 1 -
.../src/app/api/revalidate/route.ts | 1 -
.../wp-polylang-nextjs-app/src/middleware.ts | 1 -
18 files changed, 57 insertions(+), 626 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 1258b3857..99deabcec 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4567,8 +4567,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.2.4",
- "license": "MIT"
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
+ "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "14.2.3",
@@ -4600,9 +4601,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz",
- "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
+ "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
"cpu": [
"arm64"
],
@@ -4615,9 +4616,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz",
- "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
+ "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
"cpu": [
"x64"
],
@@ -4630,9 +4631,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz",
- "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
+ "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
"cpu": [
"arm64"
],
@@ -4645,9 +4646,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz",
- "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
+ "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
"cpu": [
"arm64"
],
@@ -4660,11 +4661,12 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.4",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz",
+ "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==",
"cpu": [
"x64"
],
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -4674,11 +4676,12 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.4",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz",
+ "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==",
"cpu": [
"x64"
],
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -4688,9 +4691,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz",
- "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
+ "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
"cpu": [
"arm64"
],
@@ -4703,9 +4706,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz",
- "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
+ "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
"cpu": [
"ia32"
],
@@ -4718,9 +4721,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz",
- "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
+ "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
"cpu": [
"x64"
],
@@ -15411,10 +15414,11 @@
"peer": true
},
"node_modules/next": {
- "version": "14.2.4",
- "license": "MIT",
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz",
+ "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==",
"dependencies": {
- "@next/env": "14.2.4",
+ "@next/env": "14.2.5",
"@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
@@ -15429,15 +15433,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.4",
- "@next/swc-darwin-x64": "14.2.4",
- "@next/swc-linux-arm64-gnu": "14.2.4",
- "@next/swc-linux-arm64-musl": "14.2.4",
- "@next/swc-linux-x64-gnu": "14.2.4",
- "@next/swc-linux-x64-musl": "14.2.4",
- "@next/swc-win32-arm64-msvc": "14.2.4",
- "@next/swc-win32-ia32-msvc": "14.2.4",
- "@next/swc-win32-x64-msvc": "14.2.4"
+ "@next/swc-darwin-arm64": "14.2.5",
+ "@next/swc-darwin-x64": "14.2.5",
+ "@next/swc-linux-arm64-gnu": "14.2.5",
+ "@next/swc-linux-arm64-musl": "14.2.5",
+ "@next/swc-linux-x64-gnu": "14.2.5",
+ "@next/swc-linux-x64-musl": "14.2.5",
+ "@next/swc-win32-arm64-msvc": "14.2.5",
+ "@next/swc-win32-ia32-msvc": "14.2.5",
+ "@next/swc-win32-x64-msvc": "14.2.5"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -15467,111 +15471,6 @@
"react": ">=17.0.0"
}
},
- "node_modules/next/node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz",
- "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-darwin-x64": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz",
- "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz",
- "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz",
- "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz",
- "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz",
- "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next/node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz",
- "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/node-fetch": {
"version": "2.7.0",
"dev": true,
@@ -21128,7 +21027,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"prop-types": "^15.7.2",
"react": "^18.2.0",
@@ -21157,7 +21056,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"prop-types": "^15.7.2",
"react": "^18.2.0",
@@ -21182,7 +21081,7 @@
"dependencies": {
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2",
- "next": "14.2.3",
+ "next": "^14.2.5",
"react": "^18",
"react-dom": "^18"
},
@@ -21196,41 +21095,6 @@
"typescript": "^5"
}
},
- "projects/wp-multisite-nextjs-app/node_modules/@next/env": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz",
- "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA=="
- },
- "projects/wp-multisite-nextjs-app/node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz",
- "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-multisite-nextjs-app/node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz",
- "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"projects/wp-multisite-nextjs-app/node_modules/@types/node": {
"version": "20.14.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
@@ -21240,55 +21104,6 @@
"undici-types": "~5.26.4"
}
},
- "projects/wp-multisite-nextjs-app/node_modules/next": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz",
- "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==",
- "dependencies": {
- "@next/env": "14.2.3",
- "@swc/helpers": "0.5.5",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=18.17.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.3",
- "@next/swc-darwin-x64": "14.2.3",
- "@next/swc-linux-arm64-gnu": "14.2.3",
- "@next/swc-linux-arm64-musl": "14.2.3",
- "@next/swc-linux-x64-gnu": "14.2.3",
- "@next/swc-linux-x64-musl": "14.2.3",
- "@next/swc-win32-arm64-msvc": "14.2.3",
- "@next/swc-win32-ia32-msvc": "14.2.3",
- "@next/swc-win32-x64-msvc": "14.2.3"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
"projects/wp-multisite-nextjs-app/node_modules/typescript": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
@@ -21313,7 +21128,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
@@ -21341,7 +21156,7 @@
"dependencies": {
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2",
- "next": "14.2.3",
+ "next": "^14.2.5",
"react": "^18",
"react-dom": "^18"
},
@@ -21355,143 +21170,6 @@
"typescript": "^5"
}
},
- "projects/wp-nextjs-app/node_modules/@next/env": {
- "version": "14.2.3",
- "license": "MIT"
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz",
- "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-darwin-x64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz",
- "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz",
- "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz",
- "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.3",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.3",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz",
- "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz",
- "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-nextjs-app/node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz",
- "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"projects/wp-nextjs-app/node_modules/@types/node": {
"version": "20.12.12",
"dev": true,
@@ -21500,54 +21178,6 @@
"undici-types": "~5.26.4"
}
},
- "projects/wp-nextjs-app/node_modules/next": {
- "version": "14.2.3",
- "license": "MIT",
- "dependencies": {
- "@next/env": "14.2.3",
- "@swc/helpers": "0.5.5",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=18.17.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.3",
- "@next/swc-darwin-x64": "14.2.3",
- "@next/swc-linux-arm64-gnu": "14.2.3",
- "@next/swc-linux-arm64-musl": "14.2.3",
- "@next/swc-linux-x64-gnu": "14.2.3",
- "@next/swc-linux-x64-musl": "14.2.3",
- "@next/swc-win32-arm64-msvc": "14.2.3",
- "@next/swc-win32-ia32-msvc": "14.2.3",
- "@next/swc-win32-x64-msvc": "14.2.3"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
"projects/wp-nextjs-app/node_modules/typescript": {
"version": "5.4.5",
"dev": true,
@@ -21579,7 +21209,7 @@
"dependencies": {
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2",
- "next": "14.2.3",
+ "next": "^14.2.5",
"react": "^18",
"react-dom": "^18"
},
@@ -21593,146 +21223,6 @@
"typescript": "^5"
}
},
- "projects/wp-polylang-nextjs-app/node_modules/@next/env": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz",
- "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA=="
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz",
- "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-darwin-x64": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz",
- "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz",
- "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz",
- "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz",
- "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz",
- "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz",
- "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz",
- "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "projects/wp-polylang-nextjs-app/node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz",
- "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"projects/wp-polylang-nextjs-app/node_modules/@types/node": {
"version": "20.14.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz",
@@ -21742,55 +21232,6 @@
"undici-types": "~5.26.4"
}
},
- "projects/wp-polylang-nextjs-app/node_modules/next": {
- "version": "14.2.3",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz",
- "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==",
- "dependencies": {
- "@next/env": "14.2.3",
- "@swc/helpers": "0.5.5",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=18.17.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.3",
- "@next/swc-darwin-x64": "14.2.3",
- "@next/swc-linux-arm64-gnu": "14.2.3",
- "@next/swc-linux-arm64-musl": "14.2.3",
- "@next/swc-linux-x64-gnu": "14.2.3",
- "@next/swc-linux-x64-musl": "14.2.3",
- "@next/swc-win32-arm64-msvc": "14.2.3",
- "@next/swc-win32-ia32-msvc": "14.2.3",
- "@next/swc-win32-x64-msvc": "14.2.3"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
"projects/wp-polylang-nextjs-app/node_modules/typescript": {
"version": "5.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
diff --git a/packages/core/src/react/components/__tests__/__snapshots__/BlocksRenderer.tsx.snap b/packages/core/src/react/components/__tests__/__snapshots__/BlocksRenderer.tsx.snap
index 548076689..8e4272223 100644
--- a/packages/core/src/react/components/__tests__/__snapshots__/BlocksRenderer.tsx.snap
+++ b/packages/core/src/react/components/__tests__/__snapshots__/BlocksRenderer.tsx.snap
@@ -17,7 +17,7 @@ exports[`BlocksRenderer forward context to the component 1`] = `
>
{"attributes":{"blockAttribute":"this is a block attribute"},"name":"10up/custom-block","className":"my-class"}
-
- {"contextProp":"this is a context prop"}
+ {"contextProp":"this is a context prop","settings":{}}
`;
diff --git a/packages/next/src/middlewares/appMidleware.ts b/packages/next/src/middlewares/appMidleware.ts
index df0b0e3d2..d0d12a882 100644
--- a/packages/next/src/middlewares/appMidleware.ts
+++ b/packages/next/src/middlewares/appMidleware.ts
@@ -1,5 +1,4 @@
-import { NextResponse } from 'next/server';
-import type { NextRequest } from 'next/server';
+import { NextResponse, NextRequest } from 'next/server';
import { fetchRedirect, getHeadstartWPConfig, getSiteByHost } from '@headstartwp/core/utils';
import Negotiator from 'negotiator';
import { match as matchLocale } from '@formatjs/intl-localematcher';
diff --git a/projects/wp-multisite-i18n-nextjs/package.json b/projects/wp-multisite-i18n-nextjs/package.json
index e9964ad99..e6694c3b3 100644
--- a/projects/wp-multisite-i18n-nextjs/package.json
+++ b/projects/wp-multisite-i18n-nextjs/package.json
@@ -19,7 +19,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"prop-types": "^15.7.2",
"react": "^18.2.0",
diff --git a/projects/wp-multisite-nextjs-app/package.json b/projects/wp-multisite-nextjs-app/package.json
index 9300c806b..6ff01d41e 100644
--- a/projects/wp-multisite-nextjs-app/package.json
+++ b/projects/wp-multisite-nextjs-app/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"react": "^18",
"react-dom": "^18",
- "next": "14.2.3",
+ "next": "^14.2.5",
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2"
},
diff --git a/projects/wp-multisite-nextjs-app/src/app/api/preview/route.ts b/projects/wp-multisite-nextjs-app/src/app/api/preview/route.ts
index 9ec544fff..cdf657430 100644
--- a/projects/wp-multisite-nextjs-app/src/app/api/preview/route.ts
+++ b/projects/wp-multisite-nextjs-app/src/app/api/preview/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return previewRouteHandler(request);
}
diff --git a/projects/wp-multisite-nextjs-app/src/app/api/revalidate/route.ts b/projects/wp-multisite-nextjs-app/src/app/api/revalidate/route.ts
index 324e9b272..37556984d 100644
--- a/projects/wp-multisite-nextjs-app/src/app/api/revalidate/route.ts
+++ b/projects/wp-multisite-nextjs-app/src/app/api/revalidate/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return revalidateRouteHandler(request);
}
diff --git a/projects/wp-multisite-nextjs-app/src/middleware.ts b/projects/wp-multisite-nextjs-app/src/middleware.ts
index f73062bbd..1fb773757 100644
--- a/projects/wp-multisite-nextjs-app/src/middleware.ts
+++ b/projects/wp-multisite-nextjs-app/src/middleware.ts
@@ -15,6 +15,5 @@ export const config = {
};
export async function middleware(req: NextRequest) {
- // @ts-expect-error
return AppMiddleware(req, { appRouter: true });
}
diff --git a/projects/wp-multisite-nextjs/package.json b/projects/wp-multisite-nextjs/package.json
index bda988843..580864dc3 100644
--- a/projects/wp-multisite-nextjs/package.json
+++ b/projects/wp-multisite-nextjs/package.json
@@ -19,7 +19,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"prop-types": "^15.7.2",
"react": "^18.2.0",
diff --git a/projects/wp-nextjs-app/package.json b/projects/wp-nextjs-app/package.json
index d3d8ca1c8..5a0d6806b 100644
--- a/projects/wp-nextjs-app/package.json
+++ b/projects/wp-nextjs-app/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"react": "^18",
"react-dom": "^18",
- "next": "14.2.3",
+ "next": "^14.2.5",
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2"
},
diff --git a/projects/wp-nextjs-app/src/app/api/preview/route.ts b/projects/wp-nextjs-app/src/app/api/preview/route.ts
index 9ec544fff..cdf657430 100644
--- a/projects/wp-nextjs-app/src/app/api/preview/route.ts
+++ b/projects/wp-nextjs-app/src/app/api/preview/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return previewRouteHandler(request);
}
diff --git a/projects/wp-nextjs-app/src/app/api/revalidate/route.ts b/projects/wp-nextjs-app/src/app/api/revalidate/route.ts
index 324e9b272..37556984d 100644
--- a/projects/wp-nextjs-app/src/app/api/revalidate/route.ts
+++ b/projects/wp-nextjs-app/src/app/api/revalidate/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return revalidateRouteHandler(request);
}
diff --git a/projects/wp-nextjs-app/src/middleware.ts b/projects/wp-nextjs-app/src/middleware.ts
index f73062bbd..1fb773757 100644
--- a/projects/wp-nextjs-app/src/middleware.ts
+++ b/projects/wp-nextjs-app/src/middleware.ts
@@ -15,6 +15,5 @@ export const config = {
};
export async function middleware(req: NextRequest) {
- // @ts-expect-error
return AppMiddleware(req, { appRouter: true });
}
diff --git a/projects/wp-nextjs/package.json b/projects/wp-nextjs/package.json
index 466d88b7b..b3a6b24e3 100644
--- a/projects/wp-nextjs/package.json
+++ b/projects/wp-nextjs/package.json
@@ -21,7 +21,7 @@
"@linaria/core": "^5.0.2",
"@linaria/react": "^5.0.3",
"clsx": "^1.1.1",
- "next": "^14.1.0",
+ "next": "^14.2.5",
"nprogress": "^0.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/projects/wp-polylang-nextjs-app/package.json b/projects/wp-polylang-nextjs-app/package.json
index 9e01db510..52395b20d 100644
--- a/projects/wp-polylang-nextjs-app/package.json
+++ b/projects/wp-polylang-nextjs-app/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"react": "^18",
"react-dom": "^18",
- "next": "14.2.3",
+ "next": "^14.2.5",
"@headstartwp/core": "^1.4.3",
"@headstartwp/next": "^1.4.2"
},
diff --git a/projects/wp-polylang-nextjs-app/src/app/api/preview/route.ts b/projects/wp-polylang-nextjs-app/src/app/api/preview/route.ts
index 9ec544fff..cdf657430 100644
--- a/projects/wp-polylang-nextjs-app/src/app/api/preview/route.ts
+++ b/projects/wp-polylang-nextjs-app/src/app/api/preview/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return previewRouteHandler(request);
}
diff --git a/projects/wp-polylang-nextjs-app/src/app/api/revalidate/route.ts b/projects/wp-polylang-nextjs-app/src/app/api/revalidate/route.ts
index 324e9b272..37556984d 100644
--- a/projects/wp-polylang-nextjs-app/src/app/api/revalidate/route.ts
+++ b/projects/wp-polylang-nextjs-app/src/app/api/revalidate/route.ts
@@ -4,6 +4,5 @@ import type { NextRequest } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
- // @ts-expect-error
return revalidateRouteHandler(request);
}
diff --git a/projects/wp-polylang-nextjs-app/src/middleware.ts b/projects/wp-polylang-nextjs-app/src/middleware.ts
index f73062bbd..1fb773757 100644
--- a/projects/wp-polylang-nextjs-app/src/middleware.ts
+++ b/projects/wp-polylang-nextjs-app/src/middleware.ts
@@ -15,6 +15,5 @@ export const config = {
};
export async function middleware(req: NextRequest) {
- // @ts-expect-error
return AppMiddleware(req, { appRouter: true });
}
From fe71e15cf2223ef61f42fe5dca8f0f6732ceaf37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?=
Date: Mon, 29 Jul 2024 17:28:11 -0300
Subject: [PATCH 3/9] chore: remove middleware from wrong location
---
projects/wp-nextjs-app/src/app/middleware.ts | 20 --------------------
1 file changed, 20 deletions(-)
delete mode 100644 projects/wp-nextjs-app/src/app/middleware.ts
diff --git a/projects/wp-nextjs-app/src/app/middleware.ts b/projects/wp-nextjs-app/src/app/middleware.ts
deleted file mode 100644
index f73062bbd..000000000
--- a/projects/wp-nextjs-app/src/app/middleware.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { AppMiddleware } from '@headstartwp/next/middlewares';
-import { NextRequest } from 'next/server';
-
-export const config = {
- matcher: [
- /*
- * Match all paths except for:
- * 1. /api routes
- * 2. /_next (Next.js internals)
- * 3. /fonts (inside /public)
- * 4. all root files inside /public (e.g. /favicon.ico)
- */
- '/((?!api|cache-healthcheck|_next|fonts[\\w-]+\\.\\w+).*)',
- ],
-};
-
-export async function middleware(req: NextRequest) {
- // @ts-expect-error
- return AppMiddleware(req, { appRouter: true });
-}
From f5a79856245c3f84b72d3d927e4c9fcf6ce46f2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Oliveira?=
Date: Wed, 31 Jul 2024 17:33:19 -0300
Subject: [PATCH 4/9] feat: add example of client-side data fetching
---
packages/next/src/rsc/blocks/LinkBlock.tsx | 11 ++++----
packages/next/src/rsc/index.ts | 1 +
.../src/app/[site]/layout.tsx | 7 ++---
.../src/app/(single)/[...path]/page.tsx | 12 ++++++++
projects/wp-nextjs-app/src/app/layout.tsx | 5 ++--
.../wp-nextjs-app/src/components/Blocks.tsx | 3 +-
.../src/components/RelatedPosts.tsx | 28 +++++++++++++++++++
.../app/[lang]/(single)/[...path]/page.tsx | 7 +++--
.../src/app/[lang]/layout.tsx | 5 ++--
.../src/components/Blocks.tsx | 22 +++++++++++++++
10 files changed, 81 insertions(+), 20 deletions(-)
create mode 100644 projects/wp-nextjs-app/src/components/RelatedPosts.tsx
create mode 100644 projects/wp-polylang-nextjs-app/src/components/Blocks.tsx
diff --git a/packages/next/src/rsc/blocks/LinkBlock.tsx b/packages/next/src/rsc/blocks/LinkBlock.tsx
index 5b81c43d0..ff0d5a8af 100644
--- a/packages/next/src/rsc/blocks/LinkBlock.tsx
+++ b/packages/next/src/rsc/blocks/LinkBlock.tsx
@@ -1,7 +1,7 @@
import Link from 'next/link.js';
import { removeSourceUrl } from '@headstartwp/core/utils';
import { BlockFC, BlockProps, IDataWPBlock } from '@headstartwp/core/react';
-import { getAttributes, HeadlessConfig, isAnchorTag } from '@headstartwp/core';
+import { getAttributes, isAnchorTag } from '@headstartwp/core';
import React from 'react';
interface LinkBlockProps extends BlockProps {
@@ -31,10 +31,11 @@ interface LinkBlockProps extends BlockProps {
* @category React Components
*/
export const LinkBlock: BlockFC = ({ domNode, children, blockContext }) => {
- const settings =
- typeof blockContext?.settings !== 'undefined'
- ? blockContext.settings
- : ({} as HeadlessConfig);
+ if (typeof blockContext?.settings === 'undefined') {
+ return children;
+ }
+
+ const { settings } = blockContext;
// Links might not always be an actual block since it can be just regular links
const { href, rel, className } = getAttributes(domNode?.attribs ?? {});
diff --git a/packages/next/src/rsc/index.ts b/packages/next/src/rsc/index.ts
index c07784b95..fa87458f8 100644
--- a/packages/next/src/rsc/index.ts
+++ b/packages/next/src/rsc/index.ts
@@ -12,3 +12,4 @@ export * from './components/JSONLD';
// blocks
export * from './blocks/LinkBlock';
+export * from '../blocks/TwitterBlock';
diff --git a/projects/wp-multisite-nextjs-app/src/app/[site]/layout.tsx b/projects/wp-multisite-nextjs-app/src/app/[site]/layout.tsx
index 20ab08c6b..ce6b985e4 100644
--- a/projects/wp-multisite-nextjs-app/src/app/[site]/layout.tsx
+++ b/projects/wp-multisite-nextjs-app/src/app/[site]/layout.tsx
@@ -1,15 +1,12 @@
import { HeadstartWPLayout, PreviewIndicator, queryAppSettings } from '@headstartwp/next/app';
import { Menu, SettingsProvider, ThemeSettingsProvider } from '@headstartwp/core/react';
-import { getHeadstartWPConfig } from '@headstartwp/core';
const RootLayout = async ({ children, params }: Readonly) => {
- console.log('SITE ROOT LAYOUT');
-
- const { menu, data } = await queryAppSettings({ menu: 'primary', routeParams: params });
+ const { menu, data, config } = await queryAppSettings({ menu: 'primary', routeParams: params });
return (
-
+
{menu ? : null}
{children}
diff --git a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
index 8f3ccfe8f..665d61aaa 100644
--- a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
+++ b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
@@ -8,8 +8,13 @@ import {
} from '@headstartwp/next/app';
import { Metadata } from 'next';
import { removeSourceUrl } from '@headstartwp/core';
+import dynamic from 'next/dynamic';
import Blocks from '../../../components/Blocks';
+const ClientRelatedPosts = dynamic(() =>
+ import('../../../components/RelatedPosts').then((mod) => mod.RelatedPosts),
+);
+
export async function generateStaticParams({ params }: HeadstartWPRoute) {
// loads the right config based on route params (this is needed over getHeadstartWP for sites using polylang integration or multisite)
const { sourceUrl = '', hostUrl = '/' } = loadHeadstartWPConfig(params);
@@ -59,6 +64,13 @@ const Single = async ({ params }: HeadstartWPRoute) => {
{seo.schema && }
+
+ {data.post.terms.category && (
+
+ )}
);
};
diff --git a/projects/wp-nextjs-app/src/app/layout.tsx b/projects/wp-nextjs-app/src/app/layout.tsx
index 4455de74b..a33cbe9eb 100644
--- a/projects/wp-nextjs-app/src/app/layout.tsx
+++ b/projects/wp-nextjs-app/src/app/layout.tsx
@@ -2,7 +2,6 @@ import { Inter } from 'next/font/google';
import './globals.css';
import { PreviewIndicator, queryAppSettings } from '@headstartwp/next/app';
import { Menu, SettingsProvider, ThemeSettingsProvider } from '@headstartwp/core/react';
-import { getHeadstartWPConfig } from '@headstartwp/core';
const inter = Inter({ subsets: ['latin'] });
@@ -11,13 +10,13 @@ const RootLayout = async ({
}: Readonly<{
children: React.ReactNode;
}>) => {
- const { menu, data } = await queryAppSettings({ menu: 'primary' });
+ const { menu, data, config } = await queryAppSettings({ menu: 'primary' });
return (
-
+
{menu ? : null}
{children}
diff --git a/projects/wp-nextjs-app/src/components/Blocks.tsx b/projects/wp-nextjs-app/src/components/Blocks.tsx
index 61f821c41..1c086e9ca 100644
--- a/projects/wp-nextjs-app/src/components/Blocks.tsx
+++ b/projects/wp-nextjs-app/src/components/Blocks.tsx
@@ -1,7 +1,7 @@
import { BlocksRenderer } from '@headstartwp/core/react';
import React from 'react';
import { HeadlessConfig, isBlockByName } from '@headstartwp/core';
-import { LinkBlock } from '@headstartwp/next/app';
+import { LinkBlock, TwitterBlock } from '@headstartwp/next/app';
import { PostList } from './Blocks/PostList';
type BlockProps = {
@@ -16,6 +16,7 @@ const Blocks: React.FC = ({ html, settings }) => {
return (
isBlockByName(node, 'core/query')} />
+
);
diff --git a/projects/wp-nextjs-app/src/components/RelatedPosts.tsx b/projects/wp-nextjs-app/src/components/RelatedPosts.tsx
new file mode 100644
index 000000000..fff864f15
--- /dev/null
+++ b/projects/wp-nextjs-app/src/components/RelatedPosts.tsx
@@ -0,0 +1,28 @@
+'use client';
+
+import { useFetchPosts } from '@headstartwp/core/react';
+import React from 'react';
+
+type Props = {
+ category: string;
+ post_id: number;
+};
+
+export const RelatedPosts: React.FC = ({ category, post_id }) => {
+ const { data, loading } = useFetchPosts({ per_page: 3, category, exclude: post_id });
+
+ if (loading) {
+ return Loading...
;
+ }
+
+ return (
+
+
Related Posts (Loaded Client-side)
+
+ {data.posts.map((post) => (
+ - {post.title.rendered}
+ ))}
+
+
+ );
+};
diff --git a/projects/wp-polylang-nextjs-app/src/app/[lang]/(single)/[...path]/page.tsx b/projects/wp-polylang-nextjs-app/src/app/[lang]/(single)/[...path]/page.tsx
index 27f40aa02..faff8fba6 100644
--- a/projects/wp-polylang-nextjs-app/src/app/[lang]/(single)/[...path]/page.tsx
+++ b/projects/wp-polylang-nextjs-app/src/app/[lang]/(single)/[...path]/page.tsx
@@ -1,11 +1,12 @@
import { removeSourceUrl } from '@headstartwp/core';
-import { BlocksRenderer, HtmlDecoder } from '@headstartwp/core/react';
+import { HtmlDecoder } from '@headstartwp/core/react';
import {
HeadstartWPRoute,
loadHeadstartWPConfig,
queryPost,
queryPosts,
} from '@headstartwp/next/app';
+import Blocks from '../../../../components/Blocks';
export async function generateStaticParams({ params }: HeadstartWPRoute) {
// loads the right config based on route params (this is needed over getHeadstartWPConfig() for sites using multisite)
@@ -32,7 +33,7 @@ export async function generateStaticParams({ params }: HeadstartWPRoute) {
}
const Single = async ({ params }: HeadstartWPRoute) => {
- const { data } = await queryPost({
+ const { data, config } = await queryPost({
routeParams: params,
params: {
postType: ['post', 'page'],
@@ -45,7 +46,7 @@ const Single = async ({ params }: HeadstartWPRoute) => {
-
+
);
};
diff --git a/projects/wp-polylang-nextjs-app/src/app/[lang]/layout.tsx b/projects/wp-polylang-nextjs-app/src/app/[lang]/layout.tsx
index b31edd097..9a4c1b9de 100644
--- a/projects/wp-polylang-nextjs-app/src/app/[lang]/layout.tsx
+++ b/projects/wp-polylang-nextjs-app/src/app/[lang]/layout.tsx
@@ -1,6 +1,5 @@
import { HeadstartWPLayout, PreviewIndicator, queryAppSettings } from '@headstartwp/next/app';
import { Menu, SettingsProvider, ThemeSettingsProvider } from '@headstartwp/core/react';
-import { getHeadstartWPConfig } from '@headstartwp/core';
export async function generateStaticParams() {
// pre-render en and es posts
@@ -8,11 +7,11 @@ export async function generateStaticParams() {
}
const RootLayout = async ({ children, params }: Readonly) => {
- const { menu, data } = await queryAppSettings({ menu: 'primary', routeParams: params });
+ const { menu, data, config } = await queryAppSettings({ menu: 'primary', routeParams: params });
return (
-
+
{menu ? : null}
{children}
diff --git a/projects/wp-polylang-nextjs-app/src/components/Blocks.tsx b/projects/wp-polylang-nextjs-app/src/components/Blocks.tsx
new file mode 100644
index 000000000..ef6bb660a
--- /dev/null
+++ b/projects/wp-polylang-nextjs-app/src/components/Blocks.tsx
@@ -0,0 +1,22 @@
+import { BlocksRenderer } from '@headstartwp/core/react';
+import React from 'react';
+import { HeadlessConfig } from '@headstartwp/core';
+import { LinkBlock } from '@headstartwp/next/app';
+
+type BlockProps = {
+ html: string;
+ settings: HeadlessConfig;
+};
+
+const Blocks: React.FC = ({ html, settings }) => {
+ // we need to pass settings as a prop since there's no context in server components
+ // and BlocksRenderer needs the settings for the LinkBlock
+ // the settings is automatically passed to the children components via blockContext
+ return (
+
+
+
+ );
+};
+
+export default Blocks;
From eba01927a3519530d454da3a09af19b1f9415233 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Oliveira?=
Date: Wed, 31 Jul 2024 20:34:08 -0300
Subject: [PATCH 5/9] feat: client and server (streaming) examples
---
.../src/app/(single)/[...path]/page.tsx | 37 +++++++++++++++++--
.../src/components/RelatedPosts.tsx | 2 +-
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
index 665d61aaa..23b1c92df 100644
--- a/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
+++ b/projects/wp-nextjs-app/src/app/(single)/[...path]/page.tsx
@@ -9,6 +9,7 @@ import {
import { Metadata } from 'next';
import { removeSourceUrl } from '@headstartwp/core';
import dynamic from 'next/dynamic';
+import { FC, Suspense } from 'react';
import Blocks from '../../../components/Blocks';
const ClientRelatedPosts = dynamic(() =>
@@ -52,6 +53,26 @@ export async function generateMetadata({ params }: HeadstartWPRoute): Promise = async ({
+ post_id,
+ category,
+}) => {
+ const { data } = await queryPosts({
+ params: { postType: 'post', per_page: 3, category, exclude: [post_id] },
+ });
+
+ return (
+
+
Related Posts (Streamed from Server)
+
+ {data.posts.map((post) => (
+ - {post.title.rendered}
+ ))}
+
+
+ );
+};
+
const Single = async ({ params }: HeadstartWPRoute) => {
const { data, seo, config } = await query({ params });
@@ -66,10 +87,18 @@ const Single = async ({ params }: HeadstartWPRoute) => {
{seo.schema && }
{data.post.terms.category && (
-
+ <>
+
+
+
+
+ >
)}
);
diff --git a/projects/wp-nextjs-app/src/components/RelatedPosts.tsx b/projects/wp-nextjs-app/src/components/RelatedPosts.tsx
index fff864f15..82b7488e5 100644
--- a/projects/wp-nextjs-app/src/components/RelatedPosts.tsx
+++ b/projects/wp-nextjs-app/src/components/RelatedPosts.tsx
@@ -9,7 +9,7 @@ type Props = {
};
export const RelatedPosts: React.FC = ({ category, post_id }) => {
- const { data, loading } = useFetchPosts({ per_page: 3, category, exclude: post_id });
+ const { data, loading } = useFetchPosts({ per_page: 3, category, exclude: [post_id] });
if (loading) {
return Loading...
;
From 033b97e4045032c68b3fbae7165d2fc2e63c408d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?=
Date: Fri, 2 Aug 2024 23:34:09 -0300
Subject: [PATCH 6/9] feat: introducing Link component
---
packages/next/src/rsc/components/Link.tsx | 31 +++++++++++++++++++++++
packages/next/src/rsc/index.ts | 1 +
projects/wp-nextjs-app/src/app/layout.tsx | 5 ++--
3 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 packages/next/src/rsc/components/Link.tsx
diff --git a/packages/next/src/rsc/components/Link.tsx b/packages/next/src/rsc/components/Link.tsx
new file mode 100644
index 000000000..dc714ecc8
--- /dev/null
+++ b/packages/next/src/rsc/components/Link.tsx
@@ -0,0 +1,31 @@
+'use client';
+
+import { removeSourceUrl } from '@headstartwp/core';
+import { useSettings } from '@headstartwp/core/react';
+import { FC } from 'react';
+import NextLink from 'next/link.js';
+
+type LinkProps = React.ComponentProps;
+
+export const Link: FC = ({ children, href, ...props }) => {
+ const settings = useSettings();
+
+ if (typeof settings === 'undefined') {
+ throw new Error('The Link component must be used within the SettingsProvider');
+ }
+
+ const link =
+ typeof href === 'string'
+ ? removeSourceUrl({
+ link: href,
+ backendUrl: settings.sourceUrl || '',
+ publicUrl: settings.hostUrl ?? '/',
+ })
+ : href;
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/packages/next/src/rsc/index.ts b/packages/next/src/rsc/index.ts
index fa87458f8..d9fb7666d 100644
--- a/packages/next/src/rsc/index.ts
+++ b/packages/next/src/rsc/index.ts
@@ -9,6 +9,7 @@ export * from './handlers/revalidateRouterHandler';
// components
export * from './components/PreviewIndicator';
export * from './components/JSONLD';
+export * from './components/Link';
// blocks
export * from './blocks/LinkBlock';
diff --git a/projects/wp-nextjs-app/src/app/layout.tsx b/projects/wp-nextjs-app/src/app/layout.tsx
index a33cbe9eb..6119a332c 100644
--- a/projects/wp-nextjs-app/src/app/layout.tsx
+++ b/projects/wp-nextjs-app/src/app/layout.tsx
@@ -1,6 +1,6 @@
import { Inter } from 'next/font/google';
import './globals.css';
-import { PreviewIndicator, queryAppSettings } from '@headstartwp/next/app';
+import { Link, PreviewIndicator, queryAppSettings } from '@headstartwp/next/app';
import { Menu, SettingsProvider, ThemeSettingsProvider } from '@headstartwp/core/react';
const inter = Inter({ subsets: ['latin'] });
@@ -17,7 +17,8 @@ const RootLayout = async ({
- {menu ? : null}
+ {/* @ts-expect-error */}
+ {menu ? : null}
{children}
From 91b04fd233a3bb46b910344904c1a601b0f54222 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?=
Date: Fri, 2 Aug 2024 23:34:35 -0300
Subject: [PATCH 7/9] chore: link handling
---
.changeset/fuzzy-cows-press.md | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 .changeset/fuzzy-cows-press.md
diff --git a/.changeset/fuzzy-cows-press.md b/.changeset/fuzzy-cows-press.md
new file mode 100644
index 000000000..d295e92a0
--- /dev/null
+++ b/.changeset/fuzzy-cows-press.md
@@ -0,0 +1,6 @@
+---
+"@headstartwp/core": minor
+"@headstartwp/next": minor
+---
+
+Link handling
From dc983287d995d672b2ed09436bd3e5a8b4e587f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?=
Date: Mon, 5 Aug 2024 14:32:26 -0300
Subject: [PATCH 8/9] chore: refactoring
---
package-lock.json | 119 +++++-------------
package.json | 2 +-
packages/next/src/rsc/actions/preview.ts | 12 ++
packages/next/src/rsc/blocks/LinkBlock.tsx | 2 +-
.../src/rsc/blocks/__tests__/LinkBlock.tsx | 25 ++++
.../__snapshots__/LinkBlock.tsx.snap | 17 +++
.../src/rsc/components/HeadstartWPApp.tsx | 33 +++++
.../src/rsc/components/PreviewIndicator.tsx | 15 +--
.../src/rsc/components/__tests__/Link.tsx | 21 ++++
.../__tests__/__snapshots__/Link.tsx.snap | 9 ++
packages/next/src/rsc/index.ts | 1 +
projects/wp-nextjs-app/src/app/layout.tsx | 23 ++--
turbo.json | 1 +
13 files changed, 164 insertions(+), 116 deletions(-)
create mode 100644 packages/next/src/rsc/actions/preview.ts
create mode 100644 packages/next/src/rsc/blocks/__tests__/LinkBlock.tsx
create mode 100644 packages/next/src/rsc/blocks/__tests__/__snapshots__/LinkBlock.tsx.snap
create mode 100644 packages/next/src/rsc/components/HeadstartWPApp.tsx
create mode 100644 packages/next/src/rsc/components/__tests__/Link.tsx
create mode 100644 packages/next/src/rsc/components/__tests__/__snapshots__/Link.tsx.snap
diff --git a/package-lock.json b/package-lock.json
index 99deabcec..9180eb693 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,7 +26,7 @@
"jest-environment-jsdom": "^29.0.3",
"lint-staged": "^11.1.2",
"prettier": "3.2.5",
- "turbo": "^2.0.3"
+ "turbo": "^2.0.11"
},
"engines": {
"node": ">=18.0.0",
@@ -19297,25 +19297,26 @@
"peer": true
},
"node_modules/turbo": {
- "version": "2.0.5",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.0.11.tgz",
+ "integrity": "sha512-imDlFFAvitbCm1JtDFJ6eG882qwxHUmVT2noPb3p2jq5o5DuXOchMbkVS9kUeC3/4WpY5N0GBZ3RvqNyjHZw1Q==",
"dev": true,
- "license": "MIT",
"bin": {
"turbo": "bin/turbo"
},
"optionalDependencies": {
- "turbo-darwin-64": "2.0.5",
- "turbo-darwin-arm64": "2.0.5",
- "turbo-linux-64": "2.0.5",
- "turbo-linux-arm64": "2.0.5",
- "turbo-windows-64": "2.0.5",
- "turbo-windows-arm64": "2.0.5"
+ "turbo-darwin-64": "2.0.11",
+ "turbo-darwin-arm64": "2.0.11",
+ "turbo-linux-64": "2.0.11",
+ "turbo-linux-arm64": "2.0.11",
+ "turbo-windows-64": "2.0.11",
+ "turbo-windows-arm64": "2.0.11"
}
},
"node_modules/turbo-darwin-64": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.0.6.tgz",
- "integrity": "sha512-XpgBwWj3Ggmz/gQVqXdMKXHC1iFPMDiuwugLwSzE7Ih0O13JuNtYZKhQnopvbDQnFQCeRq2Vsm5OTWabg/oB/g==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.0.11.tgz",
+ "integrity": "sha512-YlHEEhcm+jI1BSZoLugGHUWDfRXaNaQIv7tGQBfadYjo9kixBnqoTOU6s1ubOrQMID+lizZZQs79GXwqM6vohg==",
"cpu": [
"x64"
],
@@ -19325,9 +19326,9 @@
]
},
"node_modules/turbo-darwin-arm64": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.0.6.tgz",
- "integrity": "sha512-RfeZYXIAkiA21E8lsvfptGTqz/256YD+eI1x37fedfvnHFWuIMFZGAOwJxtZc6QasQunDZ9TRRREbJNI68tkIw==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.0.11.tgz",
+ "integrity": "sha512-K/YW+hWzRQ/wGmtffxllH4M1tgy8OlwgXODrIiAGzkSpZl9+pIsem/F86UULlhsIeavBYK/LS5+dzV3DPMjJ9w==",
"cpu": [
"arm64"
],
@@ -19337,20 +19338,21 @@
]
},
"node_modules/turbo-linux-64": {
- "version": "2.0.5",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.0.11.tgz",
+ "integrity": "sha512-mv8CwGP06UPweMh1Vlp6PI6OWnkuibxfIJ4Vlof7xqjohAaZU5FLqeOeHkjQflH/6YrCVuS9wrK0TFOu+meTtA==",
"cpu": [
"x64"
],
- "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/turbo-linux-arm64": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.0.6.tgz",
- "integrity": "sha512-eQKu6utCVUkIH2kqOzD8OS6E0ba6COjWm6PRDTNCHQRljZW503ycaTUIdMOiJrVg1MkEjDyOReUg8s8D18aJ4Q==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.0.11.tgz",
+ "integrity": "sha512-wLE5tl4oriTmHbuayc0ki0csaCplmVLj+uCWtecM/mfBuZgNS9ICNM9c4sB+Cfl5tlBBFeepqRNgvRvn8WeVZg==",
"cpu": [
"arm64"
],
@@ -19360,9 +19362,9 @@
]
},
"node_modules/turbo-windows-64": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.0.6.tgz",
- "integrity": "sha512-+9u4EPrpoeHYCQ46dRcou9kbkSoelhOelHNcbs2d86D6ruYD/oIAHK9qgYK8LeARRz0jxhZIA/dWYdYsxJJWkw==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.0.11.tgz",
+ "integrity": "sha512-tja3zvVCSWu3HizOoeQv0qDJ+GeWGWRFOOM6a8i3BYnXLgGKAaDZFcjwzgC50tWiAw4aowIVR4OouwIyRhLBaQ==",
"cpu": [
"x64"
],
@@ -19372,77 +19374,12 @@
]
},
"node_modules/turbo-windows-arm64": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.0.6.tgz",
- "integrity": "sha512-rdrKL+p+EjtdDVg0wQ/7yTbzkIYrnb0Pw4IKcjsy3M0RqUM9UcEi67b94XOAyTa5a0GqJL1+tUj2ebsFGPgZbg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/turbo/node_modules/turbo-darwin-64": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.0.5.tgz",
- "integrity": "sha512-t/9XpWYIjOhIHUdwiR47SYBGYHkR1zWLxTkTNKZwCSn8BN0cfjPZ1BR6kcwYGxLGBhtl5GBf6A29nq2K7iwAjg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/turbo/node_modules/turbo-darwin-arm64": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.0.5.tgz",
- "integrity": "sha512-//5y4RJvnal8CttOLBwlaBqblcQb1qTlIxLN+I8O3E3rPuvHOupNKB9ZJxYIQ8oWf8ns8Ec8cxQ0GSBLTJIMtA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/turbo/node_modules/turbo-linux-arm64": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.0.5.tgz",
- "integrity": "sha512-84wdrzntErBNxkHcwHxiTZdaginQAxGPnwLTyZj8lpUYI7okPoxy3jKpUeMHN3adm3iDedl/x0mYSIvVVkmOiA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/turbo/node_modules/turbo-windows-64": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.0.5.tgz",
- "integrity": "sha512-SgaFZ0VW6kHCJogLNuLEleAauAJx2Y48wazZGVRmBpgSUS2AylXesaBMhJaEScYqLz7mIRn6KOgwM8D4wTxI9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/turbo/node_modules/turbo-windows-arm64": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.0.5.tgz",
- "integrity": "sha512-foUxLOZoru0IRNIxm53fkfM4ubas9P0nTFjIcHtd+E8YHeogt8GqTweNre2e6ri1EHDo71emmuQgpuoFCOXZMg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.0.11.tgz",
+ "integrity": "sha512-sYjXP6k94Bqh99R+y3M1Ks6LRIEZybMz+7enA8GKl6JJ2ZFaXxTnS6q+/2+ii1+rRwxohj5OBb4gxODcF8Jd4w==",
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
diff --git a/package.json b/package.json
index c297aab63..f756336bd 100644
--- a/package.json
+++ b/package.json
@@ -50,7 +50,7 @@
"jest-environment-jsdom": "^29.0.3",
"lint-staged": "^11.1.2",
"prettier": "3.2.5",
- "turbo": "^2.0.3"
+ "turbo": "^2.0.11"
},
"nextBundleAnalysis": {
"buildOutputDirectory": "./projects/wp-nextjs/.next",
diff --git a/packages/next/src/rsc/actions/preview.ts b/packages/next/src/rsc/actions/preview.ts
new file mode 100644
index 000000000..c6e1eaa54
--- /dev/null
+++ b/packages/next/src/rsc/actions/preview.ts
@@ -0,0 +1,12 @@
+'use server';
+
+import { cookies, draftMode, headers } from 'next/headers';
+import { redirect } from 'next/navigation';
+import { COOKIE_NAME } from '../handlers/previewRouteHandler';
+
+export async function disableDraftMode() {
+ const currentUrl = headers().get('x-headstartwp-current-url') ?? '/';
+ draftMode().disable();
+ cookies().delete(COOKIE_NAME);
+ redirect(currentUrl);
+}
diff --git a/packages/next/src/rsc/blocks/LinkBlock.tsx b/packages/next/src/rsc/blocks/LinkBlock.tsx
index ff0d5a8af..2ec3138a5 100644
--- a/packages/next/src/rsc/blocks/LinkBlock.tsx
+++ b/packages/next/src/rsc/blocks/LinkBlock.tsx
@@ -17,7 +17,7 @@ interface LinkBlockProps extends BlockProps {
* import { BlocksRenderer } from "@headstartwp/core/react";
* import { LinkBlock } from "@headstartwp/next/app";
*
- *
+ *
*
*
* ```
diff --git a/packages/next/src/rsc/blocks/__tests__/LinkBlock.tsx b/packages/next/src/rsc/blocks/__tests__/LinkBlock.tsx
new file mode 100644
index 000000000..a4b927f54
--- /dev/null
+++ b/packages/next/src/rsc/blocks/__tests__/LinkBlock.tsx
@@ -0,0 +1,25 @@
+import { render } from '@testing-library/react';
+import React from 'react';
+import { BlocksRenderer } from '@headstartwp/core/react';
+import { getHeadstartWPConfig, setHeadstartWPConfig } from '@headstartwp/core';
+import { LinkBlock } from '../LinkBlock';
+
+describe('LinkBlock', () => {
+ it('shound replace internal links with next/link', () => {
+ setHeadstartWPConfig({
+ sourceUrl: 'http://wpadmin.com',
+ hostUrl: 'http://domain.com',
+ });
+
+ const { container } = render(
+
+
+ ,
+ );
+
+ expect(container).toMatchSnapshot();
+ });
+});
diff --git a/packages/next/src/rsc/blocks/__tests__/__snapshots__/LinkBlock.tsx.snap b/packages/next/src/rsc/blocks/__tests__/__snapshots__/LinkBlock.tsx.snap
new file mode 100644
index 000000000..e2759896e
--- /dev/null
+++ b/packages/next/src/rsc/blocks/__tests__/__snapshots__/LinkBlock.tsx.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`LinkBlock shound replace internal links with next/link 1`] = `
+
+`;
diff --git a/packages/next/src/rsc/components/HeadstartWPApp.tsx b/packages/next/src/rsc/components/HeadstartWPApp.tsx
new file mode 100644
index 000000000..ee76f4a04
--- /dev/null
+++ b/packages/next/src/rsc/components/HeadstartWPApp.tsx
@@ -0,0 +1,33 @@
+import {
+ SettingsContextProps,
+ SettingsProvider,
+ ThemeSettingsProvider,
+} from '@headstartwp/core/react';
+import React, { FC, ReactNode } from 'react';
+import { AppEntity } from '@headstartwp/core';
+
+type HeadstartWPAppProps = {
+ /**
+ * Supported settings by the framework. Such as custom image component, custom link component etc.
+ *
+ * @see {@link SettingsContextProps}
+ */
+ settings: SettingsContextProps;
+
+ /**
+ * Theme settings from the `theme.json`.
+ *
+ * Passing this will expose theme json through `useThemeSettings` hook.
+ */
+ themeJSON?: AppEntity['theme.json'];
+
+ children?: ReactNode;
+};
+
+export const HeadstartWPApp: FC = ({ settings, children, themeJSON = {} }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/packages/next/src/rsc/components/PreviewIndicator.tsx b/packages/next/src/rsc/components/PreviewIndicator.tsx
index fdb4d5f65..f1bc207e6 100644
--- a/packages/next/src/rsc/components/PreviewIndicator.tsx
+++ b/packages/next/src/rsc/components/PreviewIndicator.tsx
@@ -1,8 +1,6 @@
-import { cookies, draftMode, headers } from 'next/headers';
+import { draftMode } from 'next/headers';
import React from 'react';
-import { redirect } from 'next/navigation';
-
-import { COOKIE_NAME } from '../handlers/previewRouteHandler';
+import { disableDraftMode } from '../actions/preview';
export type PreviewIndicatorProps = {
className?: string;
@@ -15,15 +13,6 @@ export const PreviewIndicator: React.FC = ({ className })
return null;
}
- async function disableDraftMode() {
- 'use server';
-
- const currentUrl = headers().get('x-headstartwp-current-url') ?? '/';
- draftMode().disable();
- cookies().delete(COOKIE_NAME);
- redirect(currentUrl);
- }
-
return (