feat(SW-200): Added other options for description and images
This commit is contained in:
@@ -113,7 +113,6 @@ export function nodeToHtml(
|
|||||||
if ("type" in node === false) {
|
if ("type" in node === false) {
|
||||||
return textNodeToHtml(node, fullRenderOptions)
|
return textNodeToHtml(node, fullRenderOptions)
|
||||||
} else {
|
} else {
|
||||||
console.log({ NODE: node, EMBEDS: embeds })
|
|
||||||
if (fullRenderOptions[node.type] !== undefined) {
|
if (fullRenderOptions[node.type] !== undefined) {
|
||||||
if (node.type === RTETypeEnum.doc) {
|
if (node.type === RTETypeEnum.doc) {
|
||||||
return null
|
return null
|
||||||
|
|||||||
13
lib/graphql/Fragments/MetaData.graphql
Normal file
13
lib/graphql/Fragments/MetaData.graphql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
fragment MetaDataImageConnection on SeoMetadata {
|
||||||
|
imageConnection {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
dimension {
|
||||||
|
height
|
||||||
|
width
|
||||||
|
}
|
||||||
|
url(transform: { width: "1200" })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
#import "../../Fragments/Image.graphql"
|
#import "../../Fragments/MetaData.graphql"
|
||||||
#import "../../Fragments/System.graphql"
|
#import "../../Fragments/System.graphql"
|
||||||
|
|
||||||
query GetAccountPageMetaData($locale: String!, $uid: String!) {
|
query GetAccountPageMetaData($locale: String!, $uid: String!) {
|
||||||
account_page(locale: $locale, uid: $uid) {
|
account_page(locale: $locale, uid: $uid) {
|
||||||
system {
|
|
||||||
...System
|
|
||||||
}
|
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
title
|
title
|
||||||
@@ -13,14 +10,11 @@ query GetAccountPageMetaData($locale: String!, $uid: String!) {
|
|||||||
seo_metadata {
|
seo_metadata {
|
||||||
description
|
description
|
||||||
title
|
title
|
||||||
imageConnection {
|
...MetaDataImageConnection
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
...Image
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
system {
|
||||||
|
...System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,8 @@
|
|||||||
#import "../../Fragments/Image.graphql"
|
#import "../../Fragments/MetaData.graphql"
|
||||||
#import "../../Fragments/System.graphql"
|
#import "../../Fragments/System.graphql"
|
||||||
|
|
||||||
query GetCollectionPageMetaData($locale: String!, $uid: String!) {
|
query GetCollectionPageMetaData($locale: String!, $uid: String!) {
|
||||||
collection_page(locale: $locale, uid: $uid) {
|
collection_page(locale: $locale, uid: $uid) {
|
||||||
header {
|
|
||||||
heading
|
|
||||||
preamble
|
|
||||||
}
|
|
||||||
system {
|
|
||||||
...System
|
|
||||||
}
|
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
title
|
title
|
||||||
@@ -17,14 +10,16 @@ query GetCollectionPageMetaData($locale: String!, $uid: String!) {
|
|||||||
seo_metadata {
|
seo_metadata {
|
||||||
description
|
description
|
||||||
title
|
title
|
||||||
imageConnection {
|
...MetaDataImageConnection
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
...Image
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
header {
|
||||||
|
heading
|
||||||
|
preamble
|
||||||
}
|
}
|
||||||
|
hero_image
|
||||||
|
system {
|
||||||
|
...System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,8 @@
|
|||||||
#import "../../Fragments/Image.graphql"
|
#import "../../Fragments/MetaData.graphql"
|
||||||
#import "../../Fragments/System.graphql"
|
#import "../../Fragments/System.graphql"
|
||||||
|
|
||||||
query GetContentPageMetaData($locale: String!, $uid: String!) {
|
query GetContentPageMetaData($locale: String!, $uid: String!) {
|
||||||
content_page(locale: $locale, uid: $uid) {
|
content_page(locale: $locale, uid: $uid) {
|
||||||
header {
|
|
||||||
heading
|
|
||||||
preamble
|
|
||||||
}
|
|
||||||
system {
|
|
||||||
...System
|
|
||||||
}
|
|
||||||
web {
|
web {
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
title
|
title
|
||||||
@@ -17,14 +10,25 @@ query GetContentPageMetaData($locale: String!, $uid: String!) {
|
|||||||
seo_metadata {
|
seo_metadata {
|
||||||
description
|
description
|
||||||
title
|
title
|
||||||
imageConnection {
|
...MetaDataImageConnection
|
||||||
edges {
|
}
|
||||||
node {
|
}
|
||||||
...Image
|
header {
|
||||||
|
heading
|
||||||
|
preamble
|
||||||
|
}
|
||||||
|
hero_image
|
||||||
|
blocks {
|
||||||
|
... on ContentPageBlocksContent {
|
||||||
|
content {
|
||||||
|
content {
|
||||||
|
json
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
system {
|
||||||
|
...System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,33 @@
|
|||||||
#import "../../Fragments/Image.graphql"
|
#import "../../Fragments/MetaData.graphql"
|
||||||
#import "../../Fragments/System.graphql"
|
#import "../../Fragments/System.graphql"
|
||||||
|
|
||||||
query GetLoyaltyPageMetaData($locale: String!, $uid: String!) {
|
query GetLoyaltyPageMetaData($locale: String!, $uid: String!) {
|
||||||
loyalty_page(locale: $locale, uid: $uid) {
|
loyalty_page(locale: $locale, uid: $uid) {
|
||||||
heading
|
|
||||||
preamble
|
|
||||||
system {
|
|
||||||
...System
|
|
||||||
}
|
|
||||||
web {
|
web {
|
||||||
seo_metadata {
|
seo_metadata {
|
||||||
description
|
description
|
||||||
title
|
title
|
||||||
imageConnection {
|
...MetaDataImageConnection
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
...Image
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
breadcrumbs {
|
breadcrumbs {
|
||||||
title
|
title
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
heading
|
||||||
|
preamble
|
||||||
|
hero_image
|
||||||
|
blocks {
|
||||||
|
... on ContentPageBlocksContent {
|
||||||
|
__typename
|
||||||
|
content {
|
||||||
|
content {
|
||||||
|
json
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
system {
|
||||||
|
...System
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
|
||||||
|
import { tempImageVaultAssetSchema } from "../schemas/imageVault"
|
||||||
import { getDescription, getImages, getTitle } from "./utils"
|
import { getDescription, getImages, getTitle } from "./utils"
|
||||||
|
|
||||||
|
import { RTETypeEnum } from "@/types/rte/enums"
|
||||||
|
|
||||||
export const rawMetaDataDataSchema = z.object({
|
export const rawMetaDataDataSchema = z.object({
|
||||||
web: z.object({
|
web: z.object({
|
||||||
seo_metadata: z
|
seo_metadata: z
|
||||||
@@ -14,6 +17,10 @@ export const rawMetaDataDataSchema = z.object({
|
|||||||
z.object({
|
z.object({
|
||||||
node: z.object({
|
node: z.object({
|
||||||
url: z.string(),
|
url: z.string(),
|
||||||
|
dimension: z.object({
|
||||||
|
width: z.number(),
|
||||||
|
height: z.number(),
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
@@ -39,6 +46,36 @@ export const rawMetaDataDataSchema = z.object({
|
|||||||
})
|
})
|
||||||
.optional()
|
.optional()
|
||||||
.nullable(),
|
.nullable(),
|
||||||
|
hero_image: tempImageVaultAssetSchema,
|
||||||
|
blocks: z
|
||||||
|
.array(
|
||||||
|
z.object({
|
||||||
|
content: z
|
||||||
|
.object({
|
||||||
|
content: z
|
||||||
|
.object({
|
||||||
|
json: z.object({
|
||||||
|
children: z.array(
|
||||||
|
z.object({
|
||||||
|
type: z.nativeEnum(RTETypeEnum),
|
||||||
|
children: z.array(
|
||||||
|
z.object({
|
||||||
|
text: z.string().optional().nullable(),
|
||||||
|
})
|
||||||
|
),
|
||||||
|
})
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
.nullable(),
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
.nullable(),
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.optional()
|
||||||
|
.nullable(),
|
||||||
})
|
})
|
||||||
|
|
||||||
export const metaDataSchema = rawMetaDataDataSchema.transform((data) => {
|
export const metaDataSchema = rawMetaDataDataSchema.transform((data) => {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { RTETypeEnum } from "@/types/rte/enums"
|
||||||
import { RawMetaDataSchema } from "@/types/trpc/routers/contentstack/metadata"
|
import { RawMetaDataSchema } from "@/types/trpc/routers/contentstack/metadata"
|
||||||
|
|
||||||
export const affix = "metadata"
|
export const affix = "metadata"
|
||||||
@@ -30,15 +31,42 @@ export function getDescription(data: RawMetaDataSchema) {
|
|||||||
if (data.header?.preamble) {
|
if (data.header?.preamble) {
|
||||||
return data.header.preamble
|
return data.header.preamble
|
||||||
}
|
}
|
||||||
|
if (data.blocks?.length) {
|
||||||
|
const jsonData = data.blocks[0].content?.content?.json
|
||||||
|
// Finding the first paragraph with text
|
||||||
|
const firstParagraph = jsonData?.children?.find(
|
||||||
|
(child) => child.type === RTETypeEnum.p && child.children[0].text
|
||||||
|
)
|
||||||
|
|
||||||
|
if (firstParagraph?.children?.length) {
|
||||||
|
return firstParagraph.children[0].text
|
||||||
|
}
|
||||||
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getImages(data: RawMetaDataSchema) {
|
export function getImages(data: RawMetaDataSchema) {
|
||||||
const metaData = data.web.seo_metadata
|
const metaDataImages = data.web.seo_metadata?.imageConnection?.edges
|
||||||
if (metaData?.imageConnection) {
|
const heroImage = data.hero_image
|
||||||
return metaData.imageConnection.edges.map((edge) => ({
|
|
||||||
|
if (metaDataImages?.length) {
|
||||||
|
return metaDataImages.map((edge) => {
|
||||||
|
const { width, height } = edge.node.dimension
|
||||||
|
return {
|
||||||
url: edge.node.url,
|
url: edge.node.url,
|
||||||
}))
|
width: 1200,
|
||||||
|
height: Math.round((1200 * height) / width),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (heroImage) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: heroImage.url,
|
||||||
|
width: heroImage.dimensions.width,
|
||||||
|
height: heroImage.dimensions.height,
|
||||||
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,4 +3,4 @@ import { z } from "zod"
|
|||||||
import { rawMetaDataDataSchema } from "@/server/routers/contentstack/metadata/output"
|
import { rawMetaDataDataSchema } from "@/server/routers/contentstack/metadata/output"
|
||||||
|
|
||||||
export interface RawMetaDataSchema
|
export interface RawMetaDataSchema
|
||||||
extends z.input<typeof rawMetaDataDataSchema> {}
|
extends z.output<typeof rawMetaDataDataSchema> {}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { serverClient } from "@/lib/trpc/server"
|
import { serverClient } from "@/lib/trpc/server"
|
||||||
|
|
||||||
export async function generateMetadata() {
|
export async function generateMetadata() {
|
||||||
return await serverClient().contentstack.metaData.get()
|
const data = await serverClient().contentstack.metaData.get()
|
||||||
|
|
||||||
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user