@contentful/experiences-core 1.42.0-prerelease-20250620T1900-059481b.0 → 1.42.0-prerelease-20250625T0902-d9db401.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports.d.ts +1 -1
- package/dist/index.js +86 -75
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/package.json +3 -3
package/dist/exports.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { ASSEMBLY_BLOCK_NODE_TYPE, ASSEMBLY_DEFAULT_CATEGORY, ASSEMBLY_NODE_TYPE, ASSEMBLY_NODE_TYPES, CF_STYLE_ATTRIBUTES, CONTENTFUL_COMPONENTS, CONTENTFUL_COMPONENT_CATEGORY, CONTENTFUL_DEFAULT_CATEGORY, DEFAULT_IMAGE_WIDTH, EMPTY_CONTAINER_HEIGHT, HYPERLINK_DEFAULT_PATTERN, INCOMING_EVENTS, INTERNAL_EVENTS, LATEST_SCHEMA_VERSION, OUTGOING_EVENTS, PATTERN_PROPERTY_DIVIDER, PostMessageMethods, SCROLL_STATES, SUPPORTED_IMAGE_FORMATS, StudioCanvasMode, VISUAL_EDITOR_CONTAINER_ID, VISUAL_EDITOR_EVENTS } from './constants.js';
|
|
2
2
|
export { AssembliesAddedPayload, AssembliesRegisteredPayload, BackgroundImageAlignmentOption, BackgroundImageOptions, BackgroundImageScalingOption, Binding, BindingMap, BindingMapByBlockId, BoundComponentPropertyTypes, CSSProperties, CanvasErrorPayload, CanvasReloadPayload, CanvasResizedPayload, CanvasScrollPayload, ComponentBinding, ComponentDefinition, ComponentDefinitionVariable, ComponentDefinitionVariableBase, ComponentDefinitionVariableTypeMap, ComponentDefinitionVariableValidation, ComponentDragCanceledPayload, ComponentDragEndedPayload, ComponentDragStartedPayload, ComponentDraggingChangedPayload, ComponentDroppedPayload, ComponentMoveEndedPayload, ComponentMoveStartedPayload, ComponentMovedPayload, ComponentRegistration, ComponentRegistrationOptions, ComponentSelectedPayload, ConnectedPayload, ContainerStyleVariableName, Coordinates, DataSourceEntryValueType, DesignTokensDefinition, DesignTokensPayload, DesignVariableMap, DesignVariableTypes, DragWrapperProps, Experience, ExperienceEntry, ExperienceFields, ExperienceTree, ExperienceTreeNode, ExperienceUpdatedPayload, HoverComponentPayload, HoveredElement, ImageLoadingOption, ImageObjectFitOption, ImageObjectPositionOption, ImageOptions, IncomingComponentDragCanceledPayload, IncomingComponentMoveEndedPayload, IncomingEvent, IncomingMessage, IncomingMouseMovePayload, InternalEvent, Link, ManagementEntity, MouseMovePayload, NewHoveredElementPayload, OptimizedBackgroundImageAsset, OptimizedImageAsset, OutgoingEvent, OutgoingMessage, OutsideCanvasClickPayload, RawCoordinates, RecursiveDesignTokenDefinition, RegisteredBreakpointsPayload, RegisteredComponentsPayload, RequestComponentTreeUpdatePayload, RequestEditorModePayload, RequestEntitiesMessage, RequestEntitiesPayload, RequestReadOnlyModePayload, RequestedEntitiesMessage, RequestedEntitiesPayload, ResolveDesignValueType, SDKFeaturesPayload, ScrollState, SelectComponentPayload, SendMessageParams, StyleProps, UpdateSelectedComponentCoordinatesPayload, UpdatedEntityPayload, ValidationOption, VariableFormats, WrapperTags } from './types.js';
|
|
3
|
-
export { BoundValue, Breakpoint, ComponentDefinitionPropertyType as ComponentDefinitionVariableType, ComponentPropertyValue, ComponentTreeNode, ComponentValue, DesignValue, ExperienceComponentSettings, ExperienceDataSource, ExperienceUnboundValues, NoValue,
|
|
3
|
+
export { BoundValue, Breakpoint, ComponentDefinitionPropertyType as ComponentDefinitionVariableType, ComponentPropertyValue, ComponentTreeNode, ComponentValue, DesignValue, ExperienceComponentSettings, ExperienceDataSource, ExperienceUnboundValues, NoValue, PatternProperty, PatternPropertyDefinition, PrimitiveValue, SchemaVersions, UnboundValue, ValuesByBreakpoint, VariableMapping } from '@contentful/experiences-validators';
|
package/dist/index.js
CHANGED
|
@@ -950,11 +950,11 @@ const ComponentPropertyValueSchema = z.discriminatedUnion('type', [
|
|
|
950
950
|
]);
|
|
951
951
|
// TODO: finalize schema structure before release
|
|
952
952
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
953
|
-
const
|
|
953
|
+
const PatternPropertySchema = z.object({
|
|
954
954
|
type: z.literal('BoundValue'),
|
|
955
955
|
path: z.string(),
|
|
956
956
|
});
|
|
957
|
-
const
|
|
957
|
+
const PatternPropertiesSchema = z.record(propertyKeySchema, PatternPropertySchema);
|
|
958
958
|
const BreakpointSchema = z
|
|
959
959
|
.object({
|
|
960
960
|
id: propertyKeySchema,
|
|
@@ -971,7 +971,7 @@ const BaseComponentTreeNodeSchema = z.object({
|
|
|
971
971
|
displayName: z.string().optional(),
|
|
972
972
|
slotId: z.string().optional(),
|
|
973
973
|
variables: z.record(propertyKeySchema, ComponentPropertyValueSchema),
|
|
974
|
-
|
|
974
|
+
patternProperties: PatternPropertiesSchema.optional(),
|
|
975
975
|
});
|
|
976
976
|
const ComponentVariableSchema = z.object({
|
|
977
977
|
displayName: z.string().optional(),
|
|
@@ -1040,21 +1040,25 @@ const THUMBNAIL_IDS = [
|
|
|
1040
1040
|
// TODO: finalize schema structure before release
|
|
1041
1041
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
1042
1042
|
const VariableMappingSchema = z.object({
|
|
1043
|
-
|
|
1043
|
+
patternPropertyDefinitionId: propertyKeySchema,
|
|
1044
1044
|
type: z.literal('ContentTypeMapping'),
|
|
1045
1045
|
pathsByContentType: z.record(z.string(), z.object({ path: z.string() })),
|
|
1046
1046
|
});
|
|
1047
1047
|
// TODO: finalize schema structure before release
|
|
1048
1048
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
1049
|
-
const
|
|
1050
|
-
|
|
1051
|
-
.
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1049
|
+
const PatternPropertyDefinitionSchema = z.object({
|
|
1050
|
+
defaultSource: z
|
|
1051
|
+
.strictObject({
|
|
1052
|
+
type: z.enum(['Entry']),
|
|
1053
|
+
contentTypeId: z.string(),
|
|
1054
|
+
link: z.strictObject({
|
|
1055
|
+
sys: z.strictObject({
|
|
1056
|
+
type: z.literal('Link'),
|
|
1057
|
+
id: z.string(),
|
|
1058
|
+
linkType: z.enum(['Entry']),
|
|
1059
|
+
}),
|
|
1056
1060
|
}),
|
|
1057
|
-
})
|
|
1061
|
+
})
|
|
1058
1062
|
.optional(),
|
|
1059
1063
|
contentTypes: z.record(z.string(), z.object({
|
|
1060
1064
|
sys: z.object({
|
|
@@ -1064,7 +1068,7 @@ const ParameterDefinitionSchema = z.object({
|
|
|
1064
1068
|
}),
|
|
1065
1069
|
})),
|
|
1066
1070
|
});
|
|
1067
|
-
const
|
|
1071
|
+
const PatternPropertyDefinitionsSchema = z.record(propertyKeySchema, PatternPropertyDefinitionSchema);
|
|
1068
1072
|
const VariableMappingsSchema = z.record(propertyKeySchema, VariableMappingSchema);
|
|
1069
1073
|
const ComponentVariablesSchema = z.record(z.string().regex(/^[a-zA-Z0-9-_]{1,54}$/), // Here the key is <variableName>_<nanoidId> so we need to allow for a longer length
|
|
1070
1074
|
ComponentVariableSchema);
|
|
@@ -1073,7 +1077,7 @@ const ComponentSettingsSchema = z.object({
|
|
|
1073
1077
|
thumbnailId: z.enum(THUMBNAIL_IDS).optional(),
|
|
1074
1078
|
category: z.string().max(50, 'Category must contain at most 50 characters').optional(),
|
|
1075
1079
|
variableMappings: VariableMappingsSchema.optional(),
|
|
1076
|
-
|
|
1080
|
+
patternPropertyDefinitions: PatternPropertyDefinitionsSchema.optional(),
|
|
1077
1081
|
});
|
|
1078
1082
|
z.object({
|
|
1079
1083
|
componentTree: localeWrapper(ComponentTreeSchema),
|
|
@@ -2101,6 +2105,55 @@ const getOptimizedBackgroundImageAsset = (file, widthStyle, quality = '100%', fo
|
|
|
2101
2105
|
}
|
|
2102
2106
|
};
|
|
2103
2107
|
|
|
2108
|
+
/**
|
|
2109
|
+
* Turns a condition like `<768px` or `>1024px` into a media query rule.
|
|
2110
|
+
* For example, `<768px` becomes `max-width:768px` and `>1024px` becomes `min-width:1024px`.
|
|
2111
|
+
*/
|
|
2112
|
+
const toMediaQueryRule = (condition) => {
|
|
2113
|
+
const [evaluation, pixelValue] = [condition[0], condition.substring(1)];
|
|
2114
|
+
const mediaQueryRule = evaluation === '<' ? 'max-width' : 'min-width';
|
|
2115
|
+
return `(${mediaQueryRule}:${pixelValue})`;
|
|
2116
|
+
};
|
|
2117
|
+
/**
|
|
2118
|
+
* Converts a map of class names to CSS strings into a single CSS string.
|
|
2119
|
+
*
|
|
2120
|
+
* @param cssByClassName map of class names to CSS strings containing all rules for each class
|
|
2121
|
+
* @returns joined string of all CSS class definitions
|
|
2122
|
+
*/
|
|
2123
|
+
const toCompoundCss = (cssByClassName) => {
|
|
2124
|
+
return Object.entries(cssByClassName).reduce((acc, [className, css]) => {
|
|
2125
|
+
if (css === '')
|
|
2126
|
+
return acc;
|
|
2127
|
+
return `${acc}.${className}{${css}}`;
|
|
2128
|
+
}, ``);
|
|
2129
|
+
};
|
|
2130
|
+
/**
|
|
2131
|
+
* Create a single CSS string containing all class definitions for a given media query.
|
|
2132
|
+
*
|
|
2133
|
+
* @param cssByClassName map of class names to CSS strings containing all rules for each class
|
|
2134
|
+
* @param condition e.g. "*", "<520px", ">520px"
|
|
2135
|
+
* @param nextCondition optional next condition to create a disjunct media query that doesn't affect the next breakpoint
|
|
2136
|
+
* @returns joined string of all CSS class definitions wrapped into media queries
|
|
2137
|
+
*/
|
|
2138
|
+
const toMediaQuery = ({ cssByClassName, condition, nextCondition, }) => {
|
|
2139
|
+
const compoundCss = toCompoundCss(cssByClassName);
|
|
2140
|
+
if (compoundCss === '') {
|
|
2141
|
+
return '';
|
|
2142
|
+
}
|
|
2143
|
+
const queryRule = toMediaQueryRule(condition);
|
|
2144
|
+
if (!nextCondition) {
|
|
2145
|
+
if (condition === '*') {
|
|
2146
|
+
return compoundCss;
|
|
2147
|
+
}
|
|
2148
|
+
return `@media${queryRule}{${compoundCss}}`;
|
|
2149
|
+
}
|
|
2150
|
+
const nextRule = toMediaQueryRule(nextCondition);
|
|
2151
|
+
if (condition === '*') {
|
|
2152
|
+
return `@media not ${nextRule}{${compoundCss}}`;
|
|
2153
|
+
}
|
|
2154
|
+
return `@media${queryRule} and (not ${nextRule}){${compoundCss}}`;
|
|
2155
|
+
};
|
|
2156
|
+
|
|
2104
2157
|
const detachExperienceStyles = (experience) => {
|
|
2105
2158
|
const experienceTreeRoot = experience.entityStore?.experienceEntryFields
|
|
2106
2159
|
?.componentTree;
|
|
@@ -2197,7 +2250,7 @@ const detachExperienceStyles = (experience) => {
|
|
|
2197
2250
|
const isAnyVisibilityValueHidden = Object.values(propsByBreakpoint).some((designProperties) => designProperties.cfVisibility === false);
|
|
2198
2251
|
// We always need an explicit value when using disjunct media queries
|
|
2199
2252
|
// Example: desktop uses "false" and tablet is undefined -> we need to set `display: none` for tablet as well.
|
|
2200
|
-
let previousVisibilityValue
|
|
2253
|
+
let previousVisibilityValue;
|
|
2201
2254
|
/* [Data format] `propsByBreakpoint` is a map of "breakpointId > propertyName > plainValue":
|
|
2202
2255
|
* {
|
|
2203
2256
|
* desktop: {
|
|
@@ -2211,7 +2264,7 @@ const detachExperienceStyles = (experience) => {
|
|
|
2211
2264
|
const currentNodeClassNames = [];
|
|
2212
2265
|
// Chain IDs to avoid overwriting styles across multiple instances of the same pattern
|
|
2213
2266
|
// e.g. `{outerPatternNodeId}{innerPatternNodeId}-{currentNodeId}`
|
|
2214
|
-
// (!) Notice that the chain of patterns (before the dash) follows the format of prebinding/
|
|
2267
|
+
// (!) Notice that the chain of patterns (before the dash) follows the format of prebinding/ patternProperties
|
|
2215
2268
|
const currentNodeIdsChain = `${wrappingPatternNodeIds.join('')}-${currentNode.id}`;
|
|
2216
2269
|
// For each breakpoint, resolve design tokens, create the CSS and generate a unique className.
|
|
2217
2270
|
for (const breakpointId of breakpointIds) {
|
|
@@ -2308,7 +2361,7 @@ const detachExperienceStyles = (experience) => {
|
|
|
2308
2361
|
});
|
|
2309
2362
|
// once the whole tree was traversed, for each breakpoint, I aggregate the styles
|
|
2310
2363
|
// for each generated className into one css string
|
|
2311
|
-
|
|
2364
|
+
const stylesheet = Object.values(mediaQueryDataByBreakpoint).reduce((acc, { condition, cssByClassName, visibilityCssByClassName }, index) => {
|
|
2312
2365
|
const mediaQueryCss = toMediaQuery({ cssByClassName, condition });
|
|
2313
2366
|
// Handle visibility separately to use disjunct media queries ("if desktop but not tablet ...")
|
|
2314
2367
|
// Enables to hide on one breakpoint but render any unknown custom `display` value on another breakpoint.
|
|
@@ -2320,6 +2373,7 @@ const detachExperienceStyles = (experience) => {
|
|
|
2320
2373
|
});
|
|
2321
2374
|
return `${acc}${mediaQueryCss}${visibilityMediaQueryCss}`;
|
|
2322
2375
|
}, '');
|
|
2376
|
+
return stylesheet;
|
|
2323
2377
|
};
|
|
2324
2378
|
/**
|
|
2325
2379
|
* Rendering pattern nodes inside pattern entry by injecting default values from the top:
|
|
@@ -2328,7 +2382,7 @@ const detachExperienceStyles = (experience) => {
|
|
|
2328
2382
|
*/
|
|
2329
2383
|
const injectDefaultValuesForComponentValues = ({ patternNode, wrapperComponentSettings, }) => {
|
|
2330
2384
|
const propertyDefinitions = wrapperComponentSettings?.variableDefinitions;
|
|
2331
|
-
|
|
2385
|
+
const resolvedProperties = Object.entries(patternNode.variables).reduce((resolvedProperties, [propertyName, propertyValue]) => {
|
|
2332
2386
|
if (propertyValue.type === 'ComponentValue') {
|
|
2333
2387
|
const componentValueKey = propertyValue.key;
|
|
2334
2388
|
const componentDefaultValue = propertyDefinitions?.[componentValueKey].defaultValue;
|
|
@@ -2343,6 +2397,7 @@ const injectDefaultValuesForComponentValues = ({ patternNode, wrapperComponentSe
|
|
|
2343
2397
|
}
|
|
2344
2398
|
return resolvedProperties;
|
|
2345
2399
|
}, {});
|
|
2400
|
+
return resolvedProperties;
|
|
2346
2401
|
};
|
|
2347
2402
|
/**
|
|
2348
2403
|
* In case of nested patterns, we need to resolve the ComponentValue properties and overwrite them with the value
|
|
@@ -2356,16 +2411,17 @@ const resolveComponentVariablesOverwrites = ({ patternNode, wrapperComponentVari
|
|
|
2356
2411
|
// In case of rendering a pattern entry, there are no custom ComponentValues.
|
|
2357
2412
|
// So we pass down the default values from this pattern node down to each deeper pattern level.
|
|
2358
2413
|
if (!wrapperComponentVariablesOverwrites) {
|
|
2359
|
-
|
|
2414
|
+
const nextComponentVariablesOverwrites = injectDefaultValuesForComponentValues({
|
|
2360
2415
|
patternNode,
|
|
2361
2416
|
wrapperComponentSettings,
|
|
2362
2417
|
});
|
|
2418
|
+
return nextComponentVariablesOverwrites;
|
|
2363
2419
|
}
|
|
2364
2420
|
// Rendering (nested) pattern node inside another pattern node (for both experience & pattern entry):
|
|
2365
2421
|
// The `wrapperComponentVariablesOverwrites` from the top-most pattern node is passed through to each child
|
|
2366
2422
|
// node (and nested pattern nodes). It replaces each ComponentValue in the subtree with either the overwrite
|
|
2367
2423
|
// or the default value.
|
|
2368
|
-
|
|
2424
|
+
const nextComponentVariablesOverwrites = Object.entries(patternNode?.variables).reduce((resolvedValues, [propertyName, propertyValue]) => {
|
|
2369
2425
|
if (propertyValue.type === 'ComponentValue') {
|
|
2370
2426
|
// Copying the values from the parent node
|
|
2371
2427
|
const overwritingValue = wrapperComponentVariablesOverwrites?.[propertyValue.key];
|
|
@@ -2381,6 +2437,7 @@ const resolveComponentVariablesOverwrites = ({ patternNode, wrapperComponentVari
|
|
|
2381
2437
|
}
|
|
2382
2438
|
return resolvedValues;
|
|
2383
2439
|
}, {});
|
|
2440
|
+
return nextComponentVariablesOverwrites;
|
|
2384
2441
|
};
|
|
2385
2442
|
const isCfStyleAttribute = (variableName) => {
|
|
2386
2443
|
return CF_STYLE_ATTRIBUTES.includes(variableName);
|
|
@@ -2438,7 +2495,8 @@ const transformMedia$1 = (boundAsset, width, options) => {
|
|
|
2438
2495
|
const targetValue = targetWidthObject ? getTargetValueInPixels(targetWidthObject) : assetWidth;
|
|
2439
2496
|
if (targetValue < assetWidth)
|
|
2440
2497
|
width = `${targetValue}px`;
|
|
2441
|
-
|
|
2498
|
+
const value = getOptimizedBackgroundImageAsset(asset.fields.file, width, options.quality, options.format);
|
|
2499
|
+
return value;
|
|
2442
2500
|
}
|
|
2443
2501
|
catch (error) {
|
|
2444
2502
|
console.error('Error transforming image asset', error);
|
|
@@ -2659,55 +2717,6 @@ const flattenDesignTokenRegistry = (designTokenRegistry) => {
|
|
|
2659
2717
|
}, {});
|
|
2660
2718
|
};
|
|
2661
2719
|
|
|
2662
|
-
/**
|
|
2663
|
-
* Turns a condition like `<768px` or `>1024px` into a media query rule.
|
|
2664
|
-
* For example, `<768px` becomes `max-width:768px` and `>1024px` becomes `min-width:1024px`.
|
|
2665
|
-
*/
|
|
2666
|
-
const toMediaQueryRule = (condition) => {
|
|
2667
|
-
const [evaluation, pixelValue] = [condition[0], condition.substring(1)];
|
|
2668
|
-
const mediaQueryRule = evaluation === '<' ? 'max-width' : 'min-width';
|
|
2669
|
-
return `(${mediaQueryRule}:${pixelValue})`;
|
|
2670
|
-
};
|
|
2671
|
-
/**
|
|
2672
|
-
* Converts a map of class names to CSS strings into a single CSS string.
|
|
2673
|
-
*
|
|
2674
|
-
* @param cssByClassName map of class names to CSS strings containing all rules for each class
|
|
2675
|
-
* @returns joined string of all CSS class definitions
|
|
2676
|
-
*/
|
|
2677
|
-
const toCompoundCss = (cssByClassName) => {
|
|
2678
|
-
return Object.entries(cssByClassName).reduce((acc, [className, css]) => {
|
|
2679
|
-
if (css === '')
|
|
2680
|
-
return acc;
|
|
2681
|
-
return `${acc}.${className}{${css}}`;
|
|
2682
|
-
}, ``);
|
|
2683
|
-
};
|
|
2684
|
-
/**
|
|
2685
|
-
* Create a single CSS string containing all class definitions for a given media query.
|
|
2686
|
-
*
|
|
2687
|
-
* @param cssByClassName map of class names to CSS strings containing all rules for each class
|
|
2688
|
-
* @param condition e.g. "*", "<520px", ">520px"
|
|
2689
|
-
* @param nextCondition optional next condition to create a disjunct media query that doesn't affect the next breakpoint
|
|
2690
|
-
* @returns joined string of all CSS class definitions wrapped into media queries
|
|
2691
|
-
*/
|
|
2692
|
-
const toMediaQuery = ({ cssByClassName, condition, nextCondition, }) => {
|
|
2693
|
-
const compoundCss = toCompoundCss(cssByClassName);
|
|
2694
|
-
if (compoundCss === '') {
|
|
2695
|
-
return '';
|
|
2696
|
-
}
|
|
2697
|
-
const queryRule = toMediaQueryRule(condition);
|
|
2698
|
-
if (!nextCondition) {
|
|
2699
|
-
if (condition === '*') {
|
|
2700
|
-
return compoundCss;
|
|
2701
|
-
}
|
|
2702
|
-
return `@media${queryRule}{${compoundCss}}`;
|
|
2703
|
-
}
|
|
2704
|
-
const nextRule = toMediaQueryRule(nextCondition);
|
|
2705
|
-
if (condition === '*') {
|
|
2706
|
-
return `@media not ${nextRule}{${compoundCss}}`;
|
|
2707
|
-
}
|
|
2708
|
-
return `@media${queryRule} and (not ${nextRule}){${compoundCss}}`;
|
|
2709
|
-
};
|
|
2710
|
-
|
|
2711
2720
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2712
2721
|
function get(obj, path) {
|
|
2713
2722
|
if (!path.length) {
|
|
@@ -4152,10 +4161,12 @@ const attachPrebindingDefaultValueAsDataSource = (experienceEntry) => {
|
|
|
4152
4161
|
// Only supported for pattern entries since experience entries don't define pattern properties.
|
|
4153
4162
|
return;
|
|
4154
4163
|
}
|
|
4155
|
-
const patternDefs = experienceEntry.fields.componentSettings?.
|
|
4156
|
-
const defaultPrebinding = Object.values(patternDefs).find((def) => def
|
|
4157
|
-
const
|
|
4158
|
-
|
|
4164
|
+
const patternDefs = experienceEntry.fields.componentSettings?.patternPropertyDefinitions ?? {};
|
|
4165
|
+
const defaultPrebinding = Object.values(patternDefs).find((def) => def?.defaultSource)?.defaultSource;
|
|
4166
|
+
const { link, type } = defaultPrebinding ?? {};
|
|
4167
|
+
if (!link || !type)
|
|
4168
|
+
return;
|
|
4169
|
+
const id = link.sys?.id;
|
|
4159
4170
|
if (!id)
|
|
4160
4171
|
return;
|
|
4161
4172
|
experienceEntry.fields.dataSource = {
|
|
@@ -4163,7 +4174,7 @@ const attachPrebindingDefaultValueAsDataSource = (experienceEntry) => {
|
|
|
4163
4174
|
[id]: {
|
|
4164
4175
|
sys: {
|
|
4165
4176
|
type: 'Link',
|
|
4166
|
-
linkType:
|
|
4177
|
+
linkType: type,
|
|
4167
4178
|
id,
|
|
4168
4179
|
},
|
|
4169
4180
|
},
|