diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 908447984..41bf39a8f 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -31,6 +31,7 @@ export type { DesignValue, UnboundValue, BoundValue, + NoValue, ComponentValue, ComponentDefinitionPropertyType as ComponentDefinitionVariableType, PatternProperty, diff --git a/packages/experience-builder-sdk/src/core/preview/assemblyUtils.ts b/packages/experience-builder-sdk/src/core/preview/assemblyUtils.ts index d1097dce2..919bb84c6 100644 --- a/packages/experience-builder-sdk/src/core/preview/assemblyUtils.ts +++ b/packages/experience-builder-sdk/src/core/preview/assemblyUtils.ts @@ -15,13 +15,11 @@ export const deserializeAssemblyNode = ({ componentInstanceVariables, componentSettings, patternProperties, - entityStore, }: { node: ComponentTreeNode; componentInstanceVariables: ComponentTreeNode['variables']; componentSettings: ExperienceComponentSettings; patternProperties: Record; - entityStore: EntityStore; }): ComponentTreeNode => { const variables: Record = {}; @@ -44,7 +42,6 @@ export const deserializeAssemblyNode = ({ const path = resolvePrebindingPath({ componentSettings, componentValueKey, - entityStore, patternProperties, }); @@ -95,7 +92,6 @@ export const deserializeAssemblyNode = ({ componentInstanceVariables, componentSettings, patternProperties, - entityStore, }), ); @@ -146,7 +142,6 @@ export const resolveAssembly = ({ componentInstanceVariables: node.variables, componentSettings: componentFields.componentSettings!, patternProperties: node.patternProperties || {}, - entityStore, }); entityStore.addAssemblyUnboundValues(componentFields.unboundValues); diff --git a/packages/experience-builder-sdk/src/utils/prebindingUtils.spec.ts b/packages/experience-builder-sdk/src/utils/prebindingUtils.spec.ts index 173df1ffb..dca46f557 100644 --- a/packages/experience-builder-sdk/src/utils/prebindingUtils.spec.ts +++ b/packages/experience-builder-sdk/src/utils/prebindingUtils.spec.ts @@ -1,5 +1,5 @@ import { shouldUsePrebinding, resolvePrebindingPath } from './prebindingUtils'; -import { EntityStore } from '@contentful/experiences-core'; + import { ComponentPropertyValue, ExperienceComponentSettings, @@ -99,7 +99,11 @@ describe('shouldUsePrebinding', () => { variableMappings: {}, } as unknown as ExperienceComponentSettings; const patternProperties: Record = { - testPatternPropertyDefinitionId: { path: '/entries/testEntry', type: 'BoundValue' }, + testPatternPropertyDefinitionId: { + path: '/entries/testEntry', + type: 'BoundValue', + contenType: 'testContentType', + }, }; const variable = { type: 'NoValue', @@ -133,22 +137,17 @@ describe('resolvePrebindingPath', () => { }, } as unknown as ExperienceComponentSettings; const patternProperties: Record = { - testPatternPropertyDefinitionId: { path: '/entries/testEntry', type: 'BoundValue' }, - }; - const entityStore = { - dataSource: { - testEntry: { sys: { type: 'Entry', contentType: { sys: { id: 'testContentType' } } } }, + testPatternPropertyDefinitionId: { + path: '/entries/testEntry', + type: 'BoundValue', + contenType: 'testContentType', }, - getEntryOrAsset: jest.fn().mockReturnValue({ - sys: { type: 'Entry', contentType: { sys: { id: 'testContentType' } } }, - }), - } as unknown as EntityStore; + }; const result = resolvePrebindingPath({ componentValueKey, componentSettings, patternProperties, - entityStore, }); expect(result).toBe('/entries/testEntry/fields/testField'); @@ -160,16 +159,11 @@ describe('resolvePrebindingPath', () => { variableMappings: {}, } as unknown as ExperienceComponentSettings; const patternProperties: Record = {}; - const entityStore: EntityStore = { - dataSource: {}, - getEntryOrAsset: jest.fn(), - } as unknown as EntityStore; const result = resolvePrebindingPath({ componentValueKey, componentSettings, patternProperties, - entityStore, }); expect(result).toBe(''); @@ -185,16 +179,11 @@ describe('resolvePrebindingPath', () => { }, } as unknown as ExperienceComponentSettings; const patternProperties: Record = {}; - const entityStore: EntityStore = { - dataSource: {}, - getEntryOrAsset: jest.fn(), - } as unknown as EntityStore; const result = resolvePrebindingPath({ componentValueKey, componentSettings, patternProperties, - entityStore, }); expect(result).toBe(''); @@ -212,18 +201,11 @@ describe('resolvePrebindingPath', () => { const patternProperties: Record = { testPatternPropertyDefinitionId: { path: '/entries/testEntry' }, } as unknown as Record; - const entityStore: EntityStore = { - dataSource: { - testEntry: { sys: { type: 'Asset' } }, - }, - getEntryOrAsset: jest.fn().mockReturnValue({ sys: { type: 'Asset' } }), - } as unknown as EntityStore; const result = resolvePrebindingPath({ componentValueKey, componentSettings, patternProperties, - entityStore, }); expect(result).toBe(''); @@ -242,20 +224,11 @@ describe('resolvePrebindingPath', () => { const patternProperties: Record = { testPatternPropertyDefinitionId: { path: '/entries/testEntry' }, } as unknown as Record; - const entityStore: EntityStore = { - dataSource: { - testEntry: { sys: { type: 'Entry', contentType: { sys: { id: 'testContentType' } } } }, - }, - getEntryOrAsset: jest.fn().mockReturnValue({ - sys: { type: 'Entry', contentType: { sys: { id: 'testContentType' } } }, - }), - } as unknown as EntityStore; const result = resolvePrebindingPath({ componentValueKey, componentSettings, patternProperties, - entityStore, }); expect(result).toBe(''); diff --git a/packages/experience-builder-sdk/src/utils/prebindingUtils.ts b/packages/experience-builder-sdk/src/utils/prebindingUtils.ts index cac5aa6cb..be0a2d686 100644 --- a/packages/experience-builder-sdk/src/utils/prebindingUtils.ts +++ b/packages/experience-builder-sdk/src/utils/prebindingUtils.ts @@ -1,10 +1,8 @@ -import { EntityStore } from '@contentful/experiences-core'; import { ComponentPropertyValue, ExperienceComponentSettings, PatternProperty, } from '@contentful/experiences-validators'; -import { UnresolvedLink } from 'contentful'; export const shouldUsePrebinding = ({ componentValueKey, @@ -35,12 +33,10 @@ export const resolvePrebindingPath = ({ componentValueKey, componentSettings, patternProperties, - entityStore, }: { componentValueKey: string; componentSettings: ExperienceComponentSettings; patternProperties: Record; - entityStore: EntityStore; }) => { const variableMapping = componentSettings.variableMappings?.[componentValueKey]; @@ -50,17 +46,9 @@ export const resolvePrebindingPath = ({ if (!patternProperty) return ''; - const [, uuid] = patternProperty.path.split('/'); - const binding = entityStore.dataSource[uuid] as UnresolvedLink<'Entry' | 'Asset'>; - const entityOrAsset = entityStore.getEntryOrAsset(binding, patternProperty.path); + const contentType = patternProperty.contenType; - if (entityOrAsset?.sys?.type !== 'Entry') { - return ''; - } - - const contentType = entityOrAsset.sys.contentType.sys.id; - - const fieldPath = variableMapping.pathsByContentType[contentType]?.path; + const fieldPath = variableMapping?.pathsByContentType?.[contentType]?.path; if (!fieldPath) return ''; diff --git a/packages/validators/src/schemas/v2023_09_28/experience.ts b/packages/validators/src/schemas/v2023_09_28/experience.ts index 369e7c73c..d570fd974 100644 --- a/packages/validators/src/schemas/v2023_09_28/experience.ts +++ b/packages/validators/src/schemas/v2023_09_28/experience.ts @@ -133,6 +133,7 @@ const PatternPropertyDefinitionsSchema = z.record( const PatternPropertySchema = z.object({ type: z.literal('BoundValue'), path: z.string(), + contenType: z.string(), }); const PatternPropertysSchema = z.record(propertyKeySchema, PatternPropertySchema); @@ -321,6 +322,7 @@ export type Breakpoint = z.infer; export type PrimitiveValue = z.infer; export type DesignValue = z.infer; export type BoundValue = z.infer; +export type NoValue = z.infer; export type UnboundValue = z.infer; export type HyperlinkValue = z.infer; export type ComponentValue = z.infer; diff --git a/packages/validators/src/types.ts b/packages/validators/src/types.ts index ab0b92317..2b2e6303e 100644 --- a/packages/validators/src/types.ts +++ b/packages/validators/src/types.ts @@ -10,6 +10,7 @@ export type { ComponentPropertyValue, ComponentTreeNode, PrimitiveValue, + NoValue, DesignValue, UnboundValue, BoundValue,