From 9b3e2bdb1f9cc82750300b24faeb8fd9bf17c7fd Mon Sep 17 00:00:00 2001 From: federicodelpiano Date: Fri, 8 Mar 2024 17:14:52 -0300 Subject: [PATCH 1/6] feat: create conscia package --- .../src/components/cms/commerce-connector.tsx | 29 +-- composable-ui/src/server/api/routers/cms.ts | 12 +- packages/conscia/.eslintrc.js | 4 + packages/conscia/README.md | 25 +++ packages/conscia/index.ts | 1 + packages/conscia/package.json | 22 +++ packages/conscia/src/index.ts | 3 + packages/conscia/src/service/client.ts | 9 + packages/conscia/src/service/index.ts | 3 + packages/conscia/src/service/page.ts | 18 ++ packages/conscia/src/service/templates.ts | 18 ++ packages/conscia/src/types.ts | 126 ++++++++++++ packages/conscia/src/utils/images.ts | 3 + packages/conscia/src/utils/index.ts | 2 + packages/conscia/src/utils/page.ts | 185 ++++++++++++++++++ packages/conscia/tsconfig.json | 5 + packages/types/package.json | 3 + .../types/src/cms/components/article-card.ts | 18 ++ .../types/src/cms/components/banner-full.ts | 36 ++++ .../types/src/cms/components/banner-split.ts | 22 +++ .../src/cms/components/banner-text-only.ts | 18 ++ .../src/cms/components/commerce-connector.ts | 44 +++++ .../types/src/cms/components/cover-card.ts | 19 ++ packages/types/src/cms/components/fields.ts | 10 + packages/types/src/cms/components/grid.ts | 25 +++ packages/types/src/cms/components/index.ts | 8 + .../types/src/cms/components/text-card.ts | 16 ++ packages/types/src/cms/index.ts | 176 +---------------- packages/types/src/cms/page.ts | 30 +++ pnpm-lock.yaml | 32 ++- 30 files changed, 715 insertions(+), 207 deletions(-) create mode 100644 packages/conscia/.eslintrc.js create mode 100644 packages/conscia/README.md create mode 100644 packages/conscia/index.ts create mode 100644 packages/conscia/package.json create mode 100644 packages/conscia/src/index.ts create mode 100644 packages/conscia/src/service/client.ts create mode 100644 packages/conscia/src/service/index.ts create mode 100644 packages/conscia/src/service/page.ts create mode 100644 packages/conscia/src/service/templates.ts create mode 100644 packages/conscia/src/types.ts create mode 100644 packages/conscia/src/utils/images.ts create mode 100644 packages/conscia/src/utils/index.ts create mode 100644 packages/conscia/src/utils/page.ts create mode 100644 packages/conscia/tsconfig.json create mode 100644 packages/types/src/cms/components/article-card.ts create mode 100644 packages/types/src/cms/components/banner-full.ts create mode 100644 packages/types/src/cms/components/banner-split.ts create mode 100644 packages/types/src/cms/components/banner-text-only.ts create mode 100644 packages/types/src/cms/components/commerce-connector.ts create mode 100644 packages/types/src/cms/components/cover-card.ts create mode 100644 packages/types/src/cms/components/fields.ts create mode 100644 packages/types/src/cms/components/grid.ts create mode 100644 packages/types/src/cms/components/index.ts create mode 100644 packages/types/src/cms/components/text-card.ts create mode 100644 packages/types/src/cms/page.ts diff --git a/composable-ui/src/components/cms/commerce-connector.tsx b/composable-ui/src/components/cms/commerce-connector.tsx index de89109..c2bf978 100644 --- a/composable-ui/src/components/cms/commerce-connector.tsx +++ b/composable-ui/src/components/cms/commerce-connector.tsx @@ -1,34 +1,9 @@ import { Button, Container, Flex, HStack, Text } from '@chakra-ui/react' +import { CommerceConnectorProps, PriceProps } from '@composable/types' import { ProductCard } from '@composable/ui' import { useRouter } from 'next/router' -export interface GenericConnectorProps { - title?: string - ctaLabel?: string - ctaHref?: string - ctaHeight?: string - ctaMaxWidth?: string - ctaMinWidth?: string - products?: { - name: string - slug: string - brand?: string - img?: { - url?: string - alt?: string - } - price?: PriceProps - }[] -} - -export interface PriceProps { - current: number - currentFormatted: string - regular?: number - regularFormatted?: string -} - -export const CommerceConnector = (props: GenericConnectorProps) => { +export const CommerceConnector = (props: CommerceConnectorProps) => { const { title, ctaLabel, diff --git a/composable-ui/src/server/api/routers/cms.ts b/composable-ui/src/server/api/routers/cms.ts index ff17183..7a552e1 100644 --- a/composable-ui/src/server/api/routers/cms.ts +++ b/composable-ui/src/server/api/routers/cms.ts @@ -1,12 +1,18 @@ -import { createTRPCRouter, publicProcedure } from '../trpc' import { getPage } from '@composable/cms-generic' -import { PageProps } from '@composable/types' +import { PageSchema } from '@composable/types' import { z } from 'zod' +import { createTRPCRouter, publicProcedure } from '../trpc' export const cmsRouter = createTRPCRouter({ getPage: publicProcedure .input(z.object({ slug: z.string() })) .query(async ({ input }) => { - return getPage({ pageSlug: input.slug }) as PageProps + try { + const page = await getPage({ pageSlug: input.slug }) + return PageSchema.parse(page) + } catch (err) { + console.log(err) + return null + } }), }) diff --git a/packages/conscia/.eslintrc.js b/packages/conscia/.eslintrc.js new file mode 100644 index 0000000..b56159e --- /dev/null +++ b/packages/conscia/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['custom'], +} diff --git a/packages/conscia/README.md b/packages/conscia/README.md new file mode 100644 index 0000000..b367495 --- /dev/null +++ b/packages/conscia/README.md @@ -0,0 +1,25 @@ +# Integrating Conscia Components into Composable-UI + + +# Installation and Setup + +1. **Navigating to the Project Directory:** Open your terminal and navigate to your local `composable-ui` project directory and then move to `composable-ui` subfolder. + ```bash + cd path/to/composable-ui/composable-ui + ``` +1. **Install the @composable/conscia package**: + ```bash + pnpm install @composable/conscia + ``` +1. **Set the required environment variables:** + + ```shell + NEXT_PUBLIC_CONSCIA_BASE_URL=https://...conscia.io/api + NEXT_PUBLIC_CONSCIA_TOKEN= + NEXT_PUBLIC_CONSCIA_CUSTOMER_CODE= + ``` +1. **Replace the getPage import for the @composable/conscia one:** + ```javascript + import { getPage } from '@composable/conscia' + ``` + diff --git a/packages/conscia/index.ts b/packages/conscia/index.ts new file mode 100644 index 0000000..6f39cd4 --- /dev/null +++ b/packages/conscia/index.ts @@ -0,0 +1 @@ +export * from './src' diff --git a/packages/conscia/package.json b/packages/conscia/package.json new file mode 100644 index 0000000..6bf25a4 --- /dev/null +++ b/packages/conscia/package.json @@ -0,0 +1,22 @@ +{ + "name": "@composable/conscia", + "version": "0.0.0", + "main": "./index.ts", + "types": "./index.ts", + "sideEffects": "false", + "scripts": { + "build": "echo \"Build script for @composable/conscia ...\"", + "lint": "eslint \"**/*.{js,ts,tsx}\" --max-warnings 0", + "ts": "tsc --noEmit --incremental" + }, + "dependencies": { + "@composable/types": "workspace:*", + "axios": "0.26.1" + }, + "devDependencies": { + "@types/node": "^18.6.3", + "eslint-config-custom": "workspace:*", + "tsconfig": "workspace:*", + "typescript": "^4.5.5" + } +} diff --git a/packages/conscia/src/index.ts b/packages/conscia/src/index.ts new file mode 100644 index 0000000..7b68f3c --- /dev/null +++ b/packages/conscia/src/index.ts @@ -0,0 +1,3 @@ +export * from './service' +export * from './utils' +export * from './types' diff --git a/packages/conscia/src/service/client.ts b/packages/conscia/src/service/client.ts new file mode 100644 index 0000000..0a162b3 --- /dev/null +++ b/packages/conscia/src/service/client.ts @@ -0,0 +1,9 @@ +import axios from 'axios' + +export const consciaClient = axios.create({ + baseURL: process.env.NEXT_PUBLIC_CONSCIA_BASE_URL, + headers: { + Authorization: `Bearer ${process.env.NEXT_PUBLIC_CONSCIA_TOKEN}`, + 'X-Customer-Code': process.env.NEXT_PUBLIC_CONSCIA_CUSTOMER_CODE ?? '', + }, +}) diff --git a/packages/conscia/src/service/index.ts b/packages/conscia/src/service/index.ts new file mode 100644 index 0000000..a34885e --- /dev/null +++ b/packages/conscia/src/service/index.ts @@ -0,0 +1,3 @@ +export * from './client' +export * from './page' +export * from './templates' diff --git a/packages/conscia/src/service/page.ts b/packages/conscia/src/service/page.ts new file mode 100644 index 0000000..7064ace --- /dev/null +++ b/packages/conscia/src/service/page.ts @@ -0,0 +1,18 @@ +import { PageProps } from '@composable/types' +import { ConsciaPageTemplateComponents } from '../types' +import { getTemplateData } from './templates' +import { transformPage } from '../utils' + +export const getPage = async ({ + pageSlug, +}: { + pageSlug: string +}): Promise => { + if (!pageSlug) { + return null + } + const consciaPage = await getTemplateData({ + templateCode: pageSlug, + }) + return consciaPage ? transformPage({ consciaPage, pageSlug }) : null +} diff --git a/packages/conscia/src/service/templates.ts b/packages/conscia/src/service/templates.ts new file mode 100644 index 0000000..5bec3f9 --- /dev/null +++ b/packages/conscia/src/service/templates.ts @@ -0,0 +1,18 @@ +import { ConsciaComponent, ConsciaTemplate } from '../types' +import { consciaClient } from './client' + +export const getTemplateData = async < + Components extends ConsciaComponent +>({ + templateCode, +}: { + templateCode: string +}) => { + const response = await consciaClient.post>( + '/experience/template/_query', + { + templateCode, + } + ) + return response.data +} diff --git a/packages/conscia/src/types.ts b/packages/conscia/src/types.ts new file mode 100644 index 0000000..f399e9b --- /dev/null +++ b/packages/conscia/src/types.ts @@ -0,0 +1,126 @@ +import { + BannerFullProps, + BannerSplitProps, + BannerTextOnlyProps, + CommerceConnectorProps, + CommerceProduct, + GridProps, + TextCardProps, +} from '@composable/types' + +export interface ConsciaTemplate> { + duration: number + components: Record + errors: any[] +} + +export interface ConsciaComponent { + '@extras': { + rule: { + metadata: any[] + attributes: Record + } + } + status: 'VALID' | 'INVALID' + response: ComponentData +} + +export type ConsciaHeroBanner = { + __typename: BannerSplitProps['__typename'] + containerMarginBottom?: number + containerMarginTop?: number + containerSize: BannerSplitProps['containerSize'] + textPosition: string + theme: string + id: BannerSplitProps['id'] + content: BannerSplitProps['content'] + title: BannerSplitProps['title'] + ctaAlphaHref: BannerSplitProps['ctaAlphaHref'] + ctaAlphaLabel: BannerSplitProps['ctaAlphaLabel'] + image: { + title: string + description: string + url: string + } +} + +export type ConsciaCTABanner = { + __typename: BannerFullProps['__typename'] + containerMarginBottom?: number + containerMarginTop?: number + containerSize: BannerFullProps['containerSize'] + overlayBackground: BannerFullProps['overlayBackground'] + textPosition: BannerFullProps['textPosition'] + theme: BannerFullProps['theme'] + id: BannerFullProps['id'] + content: BannerFullProps['content'] + title: BannerFullProps['title'] + ctaAlphaLabel: BannerFullProps['ctaAlphaLabel'] + ctaAlphaHref: BannerFullProps['ctaAlphaHref'] + image: { + url: string + title: string + } + linkHref1: BannerFullProps['linkHref1'] + linkLabel1: BannerFullProps['linkLabel1'] +} + +export type ConsciaFeatureCardsHeader = { + __typename: BannerTextOnlyProps['__typename'] + centered: BannerTextOnlyProps['centered'] + id: BannerTextOnlyProps['id'] + content: BannerTextOnlyProps['content'] + title: BannerTextOnlyProps['title'] + ctaAlphaLabel: BannerTextOnlyProps['ctaAlphaLabel'] + ctaAlphaHref: BannerTextOnlyProps['ctaAlphaHref'] +} + +export interface ConsciaFeaturedProducts { + __typename: CommerceConnectorProps['__typename'] + id: CommerceConnectorProps['id'] + title: CommerceConnectorProps['title'] + containerMarginBottom?: number + containerMarginTop?: number + containerSize: CommerceConnectorProps['containerSize'] + ctaMaxWidth: string + ctaMinWidth: string + ctaLabel: CommerceConnectorProps['ctaLabel'] + ctaHref: CommerceConnectorProps['ctaHref'] + products: (Omit & { image: CommerceProduct['img'] })[] +} + +export type ConsciaGrid = { + __typename: GridProps['__typename'] + id: GridProps['id'] + columns: GridProps['columns'] + containerMarginBottom?: number + containerMarginTop?: number + gridGap: GridProps['gridGap'] + containerSize: GridProps['containerSize'] + items: ConsciaTextCard[] +} + +export type ConsciaTextCard = { + __typename: TextCardProps['__typename'] + id: TextCardProps['id'] + title: TextCardProps['title'] + image: { + url: string + title: string + } + content: TextCardProps['content'] + ctaLabel: TextCardProps['ctaLabel'] + ctaHref: TextCardProps['ctaHref'] + theme: TextCardProps['theme'] + textAlign: TextCardProps['textAlign'] +} + +export type ConsciaPageTemplateComponents = ConsciaComponent< + | ConsciaHeroBanner + | ConsciaCTABanner + | ConsciaFeatureCardsHeader + | ConsciaFeaturedProducts + | ConsciaGrid +> +export type ConsciaPageTemplateResponse = + ConsciaTemplate diff --git a/packages/conscia/src/utils/images.ts b/packages/conscia/src/utils/images.ts new file mode 100644 index 0000000..e84f5e8 --- /dev/null +++ b/packages/conscia/src/utils/images.ts @@ -0,0 +1,3 @@ +export const parseImageUrl = (imageUrl: string) => { + return imageUrl.startsWith('//') ? `https:${imageUrl}` : imageUrl +} diff --git a/packages/conscia/src/utils/index.ts b/packages/conscia/src/utils/index.ts new file mode 100644 index 0000000..a9ea2d6 --- /dev/null +++ b/packages/conscia/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './images' +export * from './page' diff --git a/packages/conscia/src/utils/page.ts b/packages/conscia/src/utils/page.ts new file mode 100644 index 0000000..a75dea9 --- /dev/null +++ b/packages/conscia/src/utils/page.ts @@ -0,0 +1,185 @@ +import { + BannerFullProps, + BannerSplitProps, + BannerTextOnlyProps, + CommerceConnectorProps, + GridProps, + PageItem, + PageProps, + TextCardProps, +} from '@composable/types' +import { + ConsciaCTABanner, + ConsciaFeatureCardsHeader, + ConsciaFeaturedProducts, + ConsciaGrid, + ConsciaHeroBanner, + ConsciaPageTemplateComponents, + ConsciaPageTemplateResponse, + ConsciaTextCard, +} from '../types' +import { parseImageUrl } from './images' + +export const transformPage = ({ + consciaPage, + pageSlug, +}: { + consciaPage: ConsciaPageTemplateResponse + pageSlug: string +}): PageProps => { + return { + __typename: 'pageSlug', + id: pageSlug, + items: Object.values(consciaPage.components).map(transformPageComponent), + metaDescription: '', + metaKeywords: [], + metaTitle: '', + slug: pageSlug, + } +} + +const transformPageComponent = ( + component: ConsciaPageTemplateComponents +): PageItem => { + switch (component.response.__typename) { + case 'BannerSplit': + return transformHeroBanner(component.response) + case 'BannerFull': + return transformCTABanner(component.response) + case 'BannerTextOnly': + return transformFeatureCardsHeader(component.response) + case 'CommerceConnector': + return transformFeaturedProducts(component.response) + case 'Grid': + return transformGrid(component.response) + } + throw new Error( + `Unknown component ${component.response.__typename} found in template` + ) +} + +const transformHeroBanner = ( + heroBanner: ConsciaHeroBanner +): BannerSplitProps => { + const image = heroBanner.image + ? { + description: heroBanner.image.description, + title: heroBanner.image.title, + url: parseImageUrl(heroBanner.image.url), + } + : undefined + return { + __typename: heroBanner.__typename, + containerMarginBottom: heroBanner.containerMarginBottom?.toString(), + containerMarginTop: heroBanner.containerMarginTop?.toString(), + containerSize: heroBanner.containerSize, + content: heroBanner.content, + ctaAlphaHref: heroBanner.ctaAlphaHref, + ctaAlphaLabel: heroBanner.ctaAlphaLabel, + id: heroBanner.id, + imageDesktop: image, + imageMobile: image, + inverted: false, + isFullScreen: false, + isLazy: false, + title: heroBanner.title, + } +} + +const transformCTABanner = (ctaBanner: ConsciaCTABanner): BannerFullProps => { + const image = ctaBanner.image + ? { + title: ctaBanner.image.title ?? '', + url: parseImageUrl(ctaBanner.image.url), + description: '', + } + : undefined + return { + __typename: ctaBanner.__typename, + containerMarginBottom: ctaBanner.containerMarginBottom?.toString(), + containerMarginTop: ctaBanner.containerMarginTop?.toString(), + containerSize: ctaBanner.containerSize, + overlayBackground: ctaBanner.overlayBackground, + textPosition: ctaBanner.textPosition, + theme: ctaBanner.theme, + id: ctaBanner.id, + content: ctaBanner.content, + title: ctaBanner.title, + ctaAlphaLabel: ctaBanner.ctaAlphaLabel, + ctaAlphaHref: ctaBanner.ctaAlphaHref, + imageDesktop: image, + imageMobile: image, + linkHref1: ctaBanner.linkHref1, + linkLabel1: ctaBanner.linkLabel1, + } +} + +const transformFeatureCardsHeader = ( + featureCardsHeader: ConsciaFeatureCardsHeader +): BannerTextOnlyProps => { + return { + __typename: featureCardsHeader.__typename, + centered: featureCardsHeader.centered, + id: featureCardsHeader.id, + content: featureCardsHeader.content, + title: featureCardsHeader.title, + ctaAlphaLabel: featureCardsHeader.ctaAlphaLabel, + ctaAlphaHref: featureCardsHeader.ctaAlphaHref, + } +} + +const transformFeaturedProducts = ( + featuredProducts: ConsciaFeaturedProducts +): CommerceConnectorProps => { + return { + __typename: featuredProducts.__typename, + id: featuredProducts.id, + title: featuredProducts.title, + containerMarginBottom: featuredProducts.containerMarginBottom?.toString(), + containerMarginTop: featuredProducts.containerMarginTop?.toString(), + containerSize: featuredProducts.containerSize, + ctaLabel: featuredProducts.ctaLabel, + ctaHref: featuredProducts.ctaHref, + products: featuredProducts.products.map((product) => ({ + ...product, + img: product.image, + })), + productListType: 'id', + } +} + +const transformGrid = (grid: ConsciaGrid): GridProps => { + return { + __typename: grid.__typename, + id: grid.id, + columns: grid.columns, + containerMarginBottom: grid.containerMarginBottom?.toString(), + containerMarginTop: grid.containerMarginTop?.toString(), + gridGap: grid.gridGap, + containerSize: grid.containerSize, + items: grid.items.map((item) => { + switch (item.__typename) { + case 'TextCard': + return transformTextCard(item) + } + }), + } +} + +const transformTextCard = (textCard: ConsciaTextCard): TextCardProps => { + return { + __typename: textCard.__typename, + id: textCard.id, + title: textCard.title, + image: { + title: textCard.image.title, + url: parseImageUrl(textCard.image.url), + description: '', + }, + content: textCard.content, + ctaLabel: textCard.ctaLabel, + ctaHref: textCard.ctaHref, + theme: textCard.theme, + textAlign: textCard.textAlign, + } +} diff --git a/packages/conscia/tsconfig.json b/packages/conscia/tsconfig.json new file mode 100644 index 0000000..fd9038d --- /dev/null +++ b/packages/conscia/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/react-library.json", + "include": ["."], + "exclude": [".turbo", "dist", "tmp", "node_modules", "tsconfig.tsbuildinfo"] +} diff --git a/packages/types/package.json b/packages/types/package.json index fadaa60..cffad06 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -8,6 +8,9 @@ "lint": "eslint \"**/*.{js,ts,tsx}\" --max-warnings 0", "ts": "tsc --noEmit --incremental" }, + "dependencies": { + "zod": "^3.20.2" + }, "devDependencies": { "eslint-config-custom": "workspace:*", "tsconfig": "workspace:*", diff --git a/packages/types/src/cms/components/article-card.ts b/packages/types/src/cms/components/article-card.ts new file mode 100644 index 0000000..c3533e2 --- /dev/null +++ b/packages/types/src/cms/components/article-card.ts @@ -0,0 +1,18 @@ +import { z } from 'zod' +import { ImageSchema } from './fields' + +export const ArticleCardSchema = z.object({ + __typename: z.literal('ArticleCard'), + containerMarginBottom: z.string().optional(), + containerMarginTop: z.string().optional(), + containerSize: z.string().optional(), + content: z.string(), + eyebrow: z.string().optional(), + href: z.string(), + id: z.string(), + image: ImageSchema, + textAlign: z.string(), + title: z.string(), +}) + +export type ArticleCardProps = z.infer diff --git a/packages/types/src/cms/components/banner-full.ts b/packages/types/src/cms/components/banner-full.ts new file mode 100644 index 0000000..0e27224 --- /dev/null +++ b/packages/types/src/cms/components/banner-full.ts @@ -0,0 +1,36 @@ +import { z } from 'zod' +import { ImageSchema } from './fields' + +export const BannerFullSchema = z.object({ + __typename: z.literal('BannerFull').optional(), + containerMarginBottom: z.string().nullish(), + containerMarginTop: z.string().nullish(), + containerSize: z.string().nullish(), + content: z.string(), + ctaAlphaHref: z.string().nullish(), + ctaAlphaLabel: z.string(), + ctaBetaHref: z.string().nullish(), + ctaBetaLabel: z.string().nullish(), + eyebrow: z.string().nullish(), + id: z.string(), + imageDesktop: ImageSchema.nullish(), + imageMobile: ImageSchema.nullish(), + linkHref1: z.string().nullish(), + linkHref2: z.string().nullish(), + linkHref3: z.string().nullish(), + linkHref4: z.string().nullish(), + linkHref5: z.string().nullish(), + linkHref6: z.string().nullish(), + linkLabel1: z.string().nullish(), + linkLabel2: z.string().nullish(), + linkLabel3: z.string().nullish(), + linkLabel4: z.string().nullish(), + linkLabel5: z.string().nullish(), + linkLabel6: z.string().nullish(), + overlayBackground: z.string().nullish(), + textPosition: z.string(), + theme: z.string(), + title: z.string(), +}) + +export type BannerFullProps = z.infer diff --git a/packages/types/src/cms/components/banner-split.ts b/packages/types/src/cms/components/banner-split.ts new file mode 100644 index 0000000..60cb698 --- /dev/null +++ b/packages/types/src/cms/components/banner-split.ts @@ -0,0 +1,22 @@ +import { z } from 'zod' +import { ImageSchema } from './fields' + +export const BannerSplitSchema = z.object({ + __typename: z.literal('BannerSplit').optional(), + containerMarginBottom: z.string().nullish(), + containerMarginTop: z.string().nullish(), + containerSize: z.string().nullish(), + content: z.string(), + ctaAlphaHref: z.string().nullish(), + ctaAlphaLabel: z.string(), + eyebrow: z.string().nullish(), + id: z.string(), + imageDesktop: ImageSchema.nullish(), + imageMobile: ImageSchema.nullish(), + inverted: z.boolean(), + isFullScreen: z.boolean(), + isLazy: z.boolean(), + title: z.string(), +}) + +export type BannerSplitProps = z.infer diff --git a/packages/types/src/cms/components/banner-text-only.ts b/packages/types/src/cms/components/banner-text-only.ts new file mode 100644 index 0000000..8963875 --- /dev/null +++ b/packages/types/src/cms/components/banner-text-only.ts @@ -0,0 +1,18 @@ +import { z } from 'zod' + +export const BannerTextOnlySchema = z.object({ + __typename: z.literal('BannerTextOnly').optional(), + centered: z.boolean().optional(), + containerMarginBottom: z.string().nullish(), + containerMarginTop: z.string().nullish(), + containerSize: z.string().nullish(), + content: z.string(), + ctaAlphaHref: z.string().nullish(), + ctaAlphaLabel: z.string(), + eyebrow: z.string().nullish(), + id: z.string(), + minHeight: z.string().nullish(), + title: z.string(), +}) + +export type BannerTextOnlyProps = z.infer diff --git a/packages/types/src/cms/components/commerce-connector.ts b/packages/types/src/cms/components/commerce-connector.ts new file mode 100644 index 0000000..cc3eb56 --- /dev/null +++ b/packages/types/src/cms/components/commerce-connector.ts @@ -0,0 +1,44 @@ +import { z } from 'zod' + +const PriceSchema = z.object({ + current: z.number(), + currentFormatted: z.string(), + regular: z.number().optional(), + regularFormatted: z.string().optional(), +}) + +export type PriceProps = z.infer + +const CommerceProductsSchema = z.object({ + brand: z.string().nullish(), + id: z.string(), + img: z + .object({ + url: z.string().optional(), + alt: z.string().optional(), + }) + .optional(), + name: z.string(), + price: PriceSchema.optional(), + slug: z.string(), +}) + +export type CommerceProduct = z.infer + +export const CommerceConnectorSchema = z.object({ + __typename: z.literal('CommerceConnector'), + containerMarginBottom: z.string().optional(), + containerMarginTop: z.string().optional(), + containerSize: z.string().optional(), + ctaHref: z.string().nullish(), + ctaLabel: z.string().nullish(), + ctaHeight: z.string().nullish(), + ctaMaxWidth: z.string().nullish(), + ctaMinWidth: z.string().nullish(), + id: z.string(), + productListType: z.union([z.literal('id'), z.literal('sku')]).optional(), + products: z.array(CommerceProductsSchema), + title: z.string().nullish(), +}) + +export type CommerceConnectorProps = z.infer diff --git a/packages/types/src/cms/components/cover-card.ts b/packages/types/src/cms/components/cover-card.ts new file mode 100644 index 0000000..43f0932 --- /dev/null +++ b/packages/types/src/cms/components/cover-card.ts @@ -0,0 +1,19 @@ +import { z } from 'zod' +import { ImageSchema } from './fields' + +export const CoverCardSchema = z.object({ + __typename: z.literal('CoverCard'), + containerMarginBottom: z.string().nullish(), + containerMarginTop: z.string().nullish(), + containerSize: z.string().nullish(), + content: z.string(), + eyebrow: z.string().nullish(), + href: z.string(), + id: z.string(), + image: ImageSchema, + textAlign: z.string(), + theme: z.string(), + title: z.string(), +}) + +export type CoverCardProps = z.infer diff --git a/packages/types/src/cms/components/fields.ts b/packages/types/src/cms/components/fields.ts new file mode 100644 index 0000000..67f865f --- /dev/null +++ b/packages/types/src/cms/components/fields.ts @@ -0,0 +1,10 @@ +import { z } from 'zod' + +export const ImageSchema = z.object({ + description: z.string(), + title: z.string(), + url: z.string(), + minHeight: z.string().optional(), +}) + +export type ImageProps = z.infer diff --git a/packages/types/src/cms/components/grid.ts b/packages/types/src/cms/components/grid.ts new file mode 100644 index 0000000..c3c557a --- /dev/null +++ b/packages/types/src/cms/components/grid.ts @@ -0,0 +1,25 @@ +import { z } from 'zod' +import { ArticleCardSchema } from './article-card' +import { CoverCardSchema } from './cover-card' +import { TextCardSchema } from './text-card' + +export const GridItemSchema = z.union([ + ArticleCardSchema, + CoverCardSchema, + TextCardSchema, +]) + +export type GridItem = z.infer + +export const GridSchema = z.object({ + __typename: z.literal('Grid'), + columns: z.number(), + containerMarginBottom: z.string().or(z.number()).nullable().optional(), + containerMarginTop: z.string().or(z.number()).nullable().optional(), + containerSize: z.string().nullable().optional(), + gridGap: z.number().optional(), + id: z.string(), + items: z.array(GridItemSchema), +}) + +export type GridProps = z.infer diff --git a/packages/types/src/cms/components/index.ts b/packages/types/src/cms/components/index.ts new file mode 100644 index 0000000..7f465a4 --- /dev/null +++ b/packages/types/src/cms/components/index.ts @@ -0,0 +1,8 @@ +export * from './banner-full' +export * from './banner-split' +export * from './banner-text-only' +export * from './commerce-connector' +export * from './cover-card' +export * from './fields' +export * from './grid' +export * from './text-card' diff --git a/packages/types/src/cms/components/text-card.ts b/packages/types/src/cms/components/text-card.ts new file mode 100644 index 0000000..4a8d197 --- /dev/null +++ b/packages/types/src/cms/components/text-card.ts @@ -0,0 +1,16 @@ +import { z } from 'zod' +import { ImageSchema } from './fields' + +export const TextCardSchema = z.object({ + __typename: z.literal('TextCard'), + content: z.string(), + ctaHref: z.string().nullish(), + ctaLabel: z.string().nullish(), + id: z.string(), + image: ImageSchema, + textAlign: z.string(), + theme: z.string(), + title: z.string(), +}) + +export type TextCardProps = z.infer diff --git a/packages/types/src/cms/index.ts b/packages/types/src/cms/index.ts index 71c50f4..c1dd753 100644 --- a/packages/types/src/cms/index.ts +++ b/packages/types/src/cms/index.ts @@ -1,174 +1,2 @@ -export interface ImageProps { - description: string - title: string - url: string - minHeight?: string -} - -export interface BannerSplitProps { - __typename?: 'BannerSplit' - containerMarginBottom?: string | null - containerMarginTop?: string | null - containerSize?: string | null - content: string - ctaAlphaHref?: string | null - ctaAlphaLabel: string - eyebrow?: string | null - id: string - imageDesktop?: ImageProps | null - imageMobile?: ImageProps | null - inverted: boolean - isFullScreen: boolean - isLazy: boolean - title: string -} - -export interface BannerFullProps { - __typename?: 'BannerFull' - containerMarginBottom?: string | null - containerMarginTop?: string | null - containerSize?: string | null - content: string - ctaAlphaHref?: string | null - ctaAlphaLabel: string - ctaBetaHref?: string | null - ctaBetaLabel?: string | null - eyebrow?: string | null - id: string - imageDesktop: ImageProps - imageMobile: ImageProps - linkHref1?: string | null - linkHref2?: string | null - linkHref3?: string | null - linkHref4?: string | null - linkHref5?: string | null - linkHref6?: string | null - linkLabel1?: string | null - linkLabel2?: string | null - linkLabel3?: string | null - linkLabel4?: string | null - linkLabel5?: string | null - linkLabel6?: string | null - overlayBackground?: string | null - textPosition: string - theme: string - title: string -} - -export interface BannerTextOnlyProps { - __typename?: 'BannerTextOnly' - centered: boolean - containerMarginBottom?: string | null - containerMarginTop?: string | null - containerSize?: string | null - content: string - ctaAlphaHref?: string | null - ctaAlphaLabel: string - eyebrow?: string | null - id: string - minHeight?: string | null - title: string -} - -export interface CoverCardProps { - __typename: 'CoverCard' - containerMarginBottom?: string | null - containerMarginTop?: string | null - containerSize?: string | null - content: string - eyebrow?: string | null - href: string - id: string - image: ImageProps - textAlign: string - theme: string - title: string -} - -export interface TextCardProps { - __typename: 'TextCard' - content: string - ctaHref?: string | null - ctaLabel: string - id: string - image: ImageProps - textAlign: string - theme: string - title: string -} - -export interface ArticleCardProps { - __typename: 'ArticleCard' - containerMarginBottom?: string - containerMarginTop?: string - containerSize?: string - content: string - eyebrow?: string - href: string - id: string - image: ImageProps - textAlign: string - title: string -} - -export interface PriceProps { - current: number - currentFormatted: string - regular?: number - regularFormatted?: string -} - -interface CommerceProducts { - brand?: string - id: string - img?: { - url?: string - alt?: string - } - name: string - price?: PriceProps - slug: string -} - -interface CommerceConnectorProps { - __typename: 'CommerceConnector' - containerMarginBottom?: string - containerMarginTop?: string - containerSize?: string - ctaHref: string - ctaLabel: string - id: string - productListType: 'id' | 'sku' - products: CommerceProducts[] - title: string -} - -export type PageItem = - | BannerFullProps - | BannerSplitProps - | BannerTextOnlyProps - | CommerceConnectorProps - | GridProps - -export interface PageProps { - __typename: string - id: string - items: PageItem[] - metaDescription: string - metaKeywords: string[] - metaTitle: string - slug: string -} - -type GridItem = ArticleCardProps | CoverCardProps | TextCardProps - -export interface GridProps { - __typename: 'Grid' - columns: number - containerMarginBottom?: string - containerMarginTop?: string - containerSize?: string - gridGap?: string - id: string - items: GridItem[] -} +export * from './components' +export * from './page' diff --git a/packages/types/src/cms/page.ts b/packages/types/src/cms/page.ts new file mode 100644 index 0000000..4346ea3 --- /dev/null +++ b/packages/types/src/cms/page.ts @@ -0,0 +1,30 @@ +import { z } from 'zod' +import { + BannerFullSchema, + BannerSplitSchema, + BannerTextOnlySchema, + CommerceConnectorSchema, + GridSchema, +} from './components' + +export const PageItemSchema = z.union([ + BannerFullSchema, + BannerSplitSchema, + BannerTextOnlySchema, + CommerceConnectorSchema, + GridSchema, +]) + +export type PageItem = z.infer + +export const PageSchema = z.object({ + __typename: z.string(), + id: z.string(), + items: z.array(PageItemSchema), + metaDescription: z.string(), + metaKeywords: z.array(z.string()), + metaTitle: z.string(), + slug: z.string(), +}) + +export type PageProps = z.infer diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24f87e9..dca57dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,6 +225,28 @@ importers: specifier: ^4.5.5 version: 4.9.5 + packages/conscia: + dependencies: + '@composable/types': + specifier: workspace:* + version: link:../types + axios: + specifier: 0.26.1 + version: 0.26.1 + devDependencies: + '@types/node': + specifier: ^18.6.3 + version: 18.15.11 + eslint-config-custom: + specifier: workspace:* + version: link:../eslint-config-custom + tsconfig: + specifier: workspace:* + version: link:../tsconfig + typescript: + specifier: ^4.5.5 + version: 4.9.5 + packages/eslint-config-custom: dependencies: eslint: @@ -317,6 +339,10 @@ importers: packages/tsconfig: {} packages/types: + dependencies: + zod: + specifier: ^3.20.2 + version: 3.21.4 devDependencies: eslint-config-custom: specifier: workspace:* @@ -7407,7 +7433,7 @@ packages: /axios@0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.5 transitivePeerDependencies: - debug dev: false @@ -7415,7 +7441,7 @@ packages: /axios@0.27.2: resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.5 form-data: 4.0.0 transitivePeerDependencies: - debug @@ -10206,6 +10232,7 @@ packages: peerDependenciesMeta: debug: optional: true + dev: true /follow-redirects@1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} @@ -10215,7 +10242,6 @@ packages: peerDependenciesMeta: debug: optional: true - dev: false /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} From 5a88459d3424b6d4352dc98310206cdc605cf240 Mon Sep 17 00:00:00 2001 From: federicodelpiano Date: Fri, 8 Mar 2024 17:20:01 -0300 Subject: [PATCH 2/6] Update index.ts --- packages/types/src/cms/components/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/types/src/cms/components/index.ts b/packages/types/src/cms/components/index.ts index 7f465a4..1b5d592 100644 --- a/packages/types/src/cms/components/index.ts +++ b/packages/types/src/cms/components/index.ts @@ -1,3 +1,4 @@ +export * from './article-card' export * from './banner-full' export * from './banner-split' export * from './banner-text-only' From 6034cc6e4a74caa568dfd3f7d4a836f6979dc0aa Mon Sep 17 00:00:00 2001 From: Danny Lake Date: Mon, 11 Mar 2024 14:38:10 -0700 Subject: [PATCH 3/6] docs: updated README for conscia package --- packages/conscia/README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/conscia/README.md b/packages/conscia/README.md index b367495..a4be448 100644 --- a/packages/conscia/README.md +++ b/packages/conscia/README.md @@ -18,8 +18,20 @@ NEXT_PUBLIC_CONSCIA_TOKEN= NEXT_PUBLIC_CONSCIA_CUSTOMER_CODE= ``` -1. **Replace the getPage import for the @composable/conscia one:** +1. **Update your storefront to use the Conscia data fetching service:** + +The `cmsRouter`, defined in `composable-ui/src/server/api/routers/cms.ts`, provides your storefront with a data fetching function called `getPage`, which retrieves the data that is used to populate the content on your storefront. By default this function returns data retrieved from a local file. + +In order to use data from Conscia, the `cmsRouter` needs to use the `getPage` data fetching service defined in `@composable/conscia`, instead of from `@composable/cms-generic`. Change the code as follows: + + ```javascript + // cms.ts - before changes + import { getPage } from '@composable/cms-generic' + +... + + // cms.ts - after changes import { getPage } from '@composable/conscia' ``` From 8021ef00069898a4607a64fe9a67e49d9045fa80 Mon Sep 17 00:00:00 2001 From: Maria Robinson Date: Wed, 13 Mar 2024 15:37:38 -0700 Subject: [PATCH 4/6] conscia.ai integration docs --- .../orchestration/_category_.json | 8 +++ .../orchestration/conscia-visualizer.png | Bin 0 -> 94829 bytes .../integrations/orchestration/conscia.md | 47 ++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 docs/docs/integrations/orchestration/_category_.json create mode 100644 docs/docs/integrations/orchestration/conscia-visualizer.png create mode 100644 docs/docs/integrations/orchestration/conscia.md diff --git a/docs/docs/integrations/orchestration/_category_.json b/docs/docs/integrations/orchestration/_category_.json new file mode 100644 index 0000000..c749d8b --- /dev/null +++ b/docs/docs/integrations/orchestration/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Orchestration", + "position": 7, + "link": { + "type": "generated-index", + "description": "Orchestration" + } +} diff --git a/docs/docs/integrations/orchestration/conscia-visualizer.png b/docs/docs/integrations/orchestration/conscia-visualizer.png new file mode 100644 index 0000000000000000000000000000000000000000..57ad724e8ea4bd154ea6f832662276768560985b GIT binary patch literal 94829 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%0Ac-){i7hGRl`p#UW2v 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 NGZWp8nMgi-8K+Mw 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 Home Page find the Hero Banner Source component +3. Click Edit on the `**Default**` rule +4. Change tabs to the Experience page +5. Under `Attributes` -> `CMS Banner Selection`, select Contentstack (or Contentful, depending on which is already selected, choose the other one) +6. Click Submit +7. Reload the homepage and see a different hero banner has loaded + +## Related Resources + +- [Conscia.ai DXO Documentation](https://docs.conscia.ai/platform-overview) \ No newline at end of file From 4f17b4449b285f177aec4f46fd15bc4bc513573c Mon Sep 17 00:00:00 2001 From: Maria Robinson Date: Wed, 20 Mar 2024 15:27:49 -0700 Subject: [PATCH 5/6] fixes --- docs/docs/integrations/orchestration/conscia.md | 3 +-- packages/conscia/README.md | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/integrations/orchestration/conscia.md b/docs/docs/integrations/orchestration/conscia.md index 6d40600..81d8c10 100644 --- a/docs/docs/integrations/orchestration/conscia.md +++ b/docs/docs/integrations/orchestration/conscia.md @@ -1,7 +1,6 @@ - # Conscia.ai Integration -Conscia’s zero-code Digital Experience Orchestration (DXO) platform enables brands and organizations to fast-track the adoption of MACH and composable architecture into their existing tech stacks. For marketing, it offers centralized omnichannel control over the composable experience, with Personalization and A/B testing built in. For engineering teams, it offers zero code API and data orchestration, offloading the point to point integrations to the orchestration layer, simplifying the frontend code, and eliminating the need to build custom BFFs. Conscia’s revolutionary approach embraces both legacy and modern backends, allowing it to act as the bridge between any backend and any frontend, and for this reason, justifiably claims the role of the ‘Brain’ of the Composable stack. +Conscia’s zero-code Digital Experience Orchestration (DXO) platform enables brands and organizations to fast-track the adoption of MACH and composable architecture into their existing tech stacks. For marketing, it offers centralized omnichannel control over the composable experience, with Personalization and A/B testing built in. For engineering teams, it offers zero code API and data orchestration, offloading the point to point integrations to the orchestration layer, simplifying the frontend code, and eliminating the need to build custom BFFs (Backend for Frontends). Conscia’s revolutionary approach embraces both legacy and modern backends, allowing it to act as the bridge between any backend and any frontend, and for this reason, justifiably claims the role of the ‘Brain’ of the Composable stack. This integration demonstrates Conscia's ability to orchestrate multiple data sources, stitch together data, transform data models, and enable switching out data sources by the business user without the front end being concerned. Using Salesforce Commere Cloud, Contentstack and Contentful as data sources, we have a created a Home Page Model template that recreates the Composable UI's homepage. diff --git a/packages/conscia/README.md b/packages/conscia/README.md index a4be448..235752b 100644 --- a/packages/conscia/README.md +++ b/packages/conscia/README.md @@ -1,5 +1,6 @@ # Integrating Conscia Components into Composable-UI +Read more about the Conscia.ai composable orchestration integration with Composable UI and what it accomplishes [here](https://docs.composable.com/docs/integrations/orchestration/conscia). # Installation and Setup From b9896ed95fa874d59c264582aa846b3b0c02e5e6 Mon Sep 17 00:00:00 2001 From: Maria Robinson Date: Thu, 21 Mar 2024 08:48:31 -0700 Subject: [PATCH 6/6] fixed links --- docs/docs/integrations/orchestration/conscia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/integrations/orchestration/conscia.md b/docs/docs/integrations/orchestration/conscia.md index 81d8c10..3920ad7 100644 --- a/docs/docs/integrations/orchestration/conscia.md +++ b/docs/docs/integrations/orchestration/conscia.md @@ -13,7 +13,7 @@ To extend the storefront to pull in content from Conscia's DXO, a package called ### Set Up 1. Gain access to a Conscia sandbox. (These are currently only available to SIs. Please talk to your partner manager about getting access to a sandbox.) -1. Refer to the Conscia package [README](../../../../packages/conscia/README.md) to complete set up. +1. Refer to the Conscia package [README](https://github.com/composable-com/composable-ui/blob/main/packages/conscia/README.md) to complete set up. ### Exploring the Conscia Sandbox