Merge branch 'master' into feature/tracking
This commit is contained in:
@@ -1,59 +1,5 @@
|
||||
import { serverClient } from "@/lib/trpc/server"
|
||||
|
||||
export async function generateMetadata() {
|
||||
const metaData = await serverClient().contentstack.metaData.get()
|
||||
|
||||
if (!metaData) {
|
||||
return {
|
||||
title: "",
|
||||
description: "",
|
||||
openGraph: {
|
||||
images: [],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const title = metaData?.breadcrumbsTitle ?? metaData?.title ?? ""
|
||||
const description = metaData?.description ?? ""
|
||||
const images =
|
||||
metaData?.imageConnection?.edges?.map((edge) => ({
|
||||
url: edge.node.url,
|
||||
})) || []
|
||||
|
||||
return {
|
||||
title,
|
||||
description,
|
||||
openGraph: {
|
||||
images,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export async function generateMetadataAccountPage() {
|
||||
const metaData = await serverClient().contentstack.accountPage.metadata.get()
|
||||
|
||||
if (!metaData) {
|
||||
return {
|
||||
title: "",
|
||||
description: "",
|
||||
openGraph: {
|
||||
images: [],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const title = metaData?.breadcrumbsTitle ?? metaData?.title ?? ""
|
||||
const description = metaData?.description ?? ""
|
||||
const images =
|
||||
metaData?.imageConnection?.edges?.map((edge) => ({
|
||||
url: edge.node.url,
|
||||
})) || []
|
||||
|
||||
return {
|
||||
title,
|
||||
description,
|
||||
openGraph: {
|
||||
images,
|
||||
},
|
||||
}
|
||||
return await serverClient().contentstack.metadata.get()
|
||||
}
|
||||
|
||||
27
utils/jsonSchemas.ts
Normal file
27
utils/jsonSchemas.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { env } from "@/env/server"
|
||||
|
||||
import type { BreadcrumbList, ListItem, WithContext } from "schema-dts"
|
||||
|
||||
import type { Breadcrumbs } from "@/types/trpc/routers/contentstack/breadcrumbs"
|
||||
|
||||
export function generateBreadcrumbsSchema(breadcrumbs: Breadcrumbs) {
|
||||
const itemListElement: ListItem[] = breadcrumbs.map((item, index) => ({
|
||||
"@type": "ListItem",
|
||||
position: index + 1,
|
||||
name: item.title,
|
||||
// Only include "item" if "href" exists; otherwise, omit it
|
||||
...(item.href ? { item: `${env.PUBLIC_URL}${item.href}` } : {}),
|
||||
}))
|
||||
|
||||
const jsonLd: WithContext<BreadcrumbList> = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
itemListElement,
|
||||
}
|
||||
|
||||
return {
|
||||
key: "breadcrumbs",
|
||||
type: "application/ld+json",
|
||||
jsonLd,
|
||||
}
|
||||
}
|
||||
19
utils/merge.ts
Normal file
19
utils/merge.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import merge from "deepmerge"
|
||||
|
||||
export function arrayMerge(
|
||||
target: any[],
|
||||
source: any[],
|
||||
options: merge.ArrayMergeOptions
|
||||
) {
|
||||
const destination = target.slice()
|
||||
source.forEach((item, index) => {
|
||||
if (typeof destination[index] === "undefined") {
|
||||
destination[index] = options.cloneUnlessOtherwiseSpecified(item, options)
|
||||
} else if (options?.isMergeableObject(item)) {
|
||||
destination[index] = merge(target[index], item, options)
|
||||
} else if (target.indexOf(item) === -1) {
|
||||
destination.push(item)
|
||||
}
|
||||
})
|
||||
return destination
|
||||
}
|
||||
11
utils/safeTry.ts
Normal file
11
utils/safeTry.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export type SafeTryResult<T> = Promise<
|
||||
[T, undefined] | [undefined, Error | unknown]
|
||||
>
|
||||
|
||||
export async function safeTry<T>(func: Promise<T>): SafeTryResult<T> {
|
||||
try {
|
||||
return [await func, undefined]
|
||||
} catch (err) {
|
||||
return [undefined, err]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user