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..b7cf4633 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,19 +14,22 @@ 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 ; + return ; + case "short_text": + case "long_text": + case "number": + return String(field.value); default: return String(field.value); } @@ -51,19 +50,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)} +
+
+ ))}
); 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