From f7dfed3b6b7179b6d44dcc7941db7f2356d84412 Mon Sep 17 00:00:00 2001 From: Damian Legawiec Date: Tue, 16 Jun 2026 22:15:31 +0200 Subject: [PATCH 1/3] Upgrade @spree/sdk to 1.1.0 and migrate custom field rendering. Co-authored-by: Cursor --- package-lock.json | 8 ++--- package.json | 2 +- .../products/ProductCustomFields.tsx | 36 ++++++++----------- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 489432db..0878c4c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@next/third-parties": "^16.1.6", "@paypal/react-paypal-js": "^9.1.1", "@sentry/nextjs": "^10.38.0", - "@spree/sdk": "^1.0.0", + "@spree/sdk": "^1.1.0", "@stripe/react-stripe-js": "^5.6.0", "@stripe/stripe-js": "^8.7.0", "@swc/helpers": "^0.5.21", @@ -5689,9 +5689,9 @@ } }, "node_modules/@spree/sdk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@spree/sdk/-/sdk-1.0.1.tgz", - "integrity": "sha512-Nywp5m0VZQRHJC5UIKkMBZgf4+9LPUteCaQCNKJ63mdSjpTi15IwuyCVFU/F1nikV9YBraWNoMoQkY6AKDWqdQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@spree/sdk/-/sdk-1.1.0.tgz", + "integrity": "sha512-xPLoi4FzwH4VnuoJs4xePfynq0SF1Cth0oRbAYzoqC80adKd3ZG0jGzlGNuYnjO7zYrYW7Y4YHwHkJoo0iVr/w==", "license": "MIT", "engines": { "node": ">=18.0.0" diff --git a/package.json b/package.json index 6724f933..51de7f05 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@next/third-parties": "^16.1.6", "@paypal/react-paypal-js": "^9.1.1", "@sentry/nextjs": "^10.38.0", - "@spree/sdk": "^1.0.0", + "@spree/sdk": "^1.1.0", "@stripe/react-stripe-js": "^5.6.0", "@stripe/stripe-js": "^8.7.0", "@swc/helpers": "^0.5.21", diff --git a/src/components/products/ProductCustomFields.tsx b/src/components/products/ProductCustomFields.tsx index 7d6ba374..08b5cf4d 100644 --- a/src/components/products/ProductCustomFields.tsx +++ b/src/components/products/ProductCustomFields.tsx @@ -5,10 +5,6 @@ interface ProductCustomFieldsProps { customFields?: Array; } -function normalizeType(type: string): string { - return type.split("::").pop() || type; -} - function renderBooleanValue( value: unknown, t: ReturnType>, @@ -18,17 +14,16 @@ function renderBooleanValue( function renderValue( field: CustomField, - normalizedType: string, t: ReturnType>, ): React.ReactNode { - switch (normalizedType) { - case "Boolean": + switch (field.field_type) { + case "boolean": return renderBooleanValue(field.value, t); - case "Json": + case "json": return typeof field.value === "string" ? field.value : JSON.stringify(field.value); - case "RichText": + case "rich_text": // Value is admin-authored HTML from the Spree CMS backend (trusted source) return ; default: @@ -51,19 +46,16 @@ export function ProductCustomFields({ {t("properties")}
- {customFields.map((field) => { - const type = normalizeType(field.type); - return ( -
-
- {field.label} -
-
- {renderValue(field, type, t)} -
-
- ); - })} + {customFields.map((field) => ( +
+
+ {field.label} +
+
+ {renderValue(field, t)} +
+
+ ))}
); From 225bbb6408c8864fc510369fd3db2e2d943afe67 Mon Sep 17 00:00:00 2001 From: Damian Legawiec Date: Tue, 16 Jun 2026 22:16:27 +0200 Subject: [PATCH 2/3] Use product meta_title for page SEO metadata. Co-authored-by: Cursor --- src/lib/metadata/product.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/metadata/product.ts b/src/lib/metadata/product.ts index 279ee3be..67e8d1ab 100644 --- a/src/lib/metadata/product.ts +++ b/src/lib/metadata/product.ts @@ -21,7 +21,7 @@ export async function generateProductMetadata({ return { title: "Product Not Found" }; } - const title = product.name; + const title = product.meta_title || product.name; const description = product.meta_description ? product.meta_description : product.description From 0474b7bc55afae7030e4b3e9629c5f38fb5c2212 Mon Sep 17 00:00:00 2001 From: Damian Legawiec Date: Tue, 16 Jun 2026 22:35:59 +0200 Subject: [PATCH 3/3] Address CodeRabbit review feedback on custom field rendering. Co-authored-by: Cursor --- src/components/products/ProductCustomFields.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/products/ProductCustomFields.tsx b/src/components/products/ProductCustomFields.tsx index 08b5cf4d..b7cf4633 100644 --- a/src/components/products/ProductCustomFields.tsx +++ b/src/components/products/ProductCustomFields.tsx @@ -25,7 +25,11 @@ function renderValue( : JSON.stringify(field.value); case "rich_text": // Value is admin-authored HTML from the Spree CMS backend (trusted source) - return ; + return ; + case "short_text": + case "long_text": + case "number": + return String(field.value); default: return String(field.value); }