@contentful/experiences-visual-editor-react 1.20.1 → 1.21.0-beta.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/index.js CHANGED
@@ -1165,7 +1165,7 @@ const getBoundValue = (entryOrAsset, path) => {
1165
1165
  : value;
1166
1166
  };
1167
1167
 
1168
- const transformRichText = (entryOrAsset, path) => {
1168
+ const transformRichText = (entryOrAsset, entityStore, path) => {
1169
1169
  const value = getBoundValue(entryOrAsset, path);
1170
1170
  if (typeof value === 'string') {
1171
1171
  return {
@@ -1188,6 +1188,17 @@ const transformRichText = (entryOrAsset, path) => {
1188
1188
  };
1189
1189
  }
1190
1190
  if (typeof value === 'object' && value.nodeType === BLOCKS.DOCUMENT) {
1191
+ //resolve any embedded links - we currently only support resolving embedded in the first entry
1192
+ const richTextDocument = value;
1193
+ richTextDocument.content.forEach((node) => {
1194
+ if ((node.nodeType === BLOCKS.EMBEDDED_ENTRY || node.nodeType === BLOCKS.EMBEDDED_ASSET) &&
1195
+ node.data.target.sys.type === 'Link') {
1196
+ const entity = entityStore.getEntityFromLink(node.data.target);
1197
+ if (entity) {
1198
+ node.data.target = entity;
1199
+ }
1200
+ }
1201
+ });
1191
1202
  return value;
1192
1203
  }
1193
1204
  return undefined;
@@ -1347,6 +1358,30 @@ function getResolvedEntryFromLink(entryOrAsset, path, entityStore) {
1347
1358
  }
1348
1359
  //Look up the reference in the entity store
1349
1360
  const resolvedEntity = entityStore.getEntityFromLink(value);
1361
+ if (!resolvedEntity) {
1362
+ return;
1363
+ }
1364
+ //resolve any embedded links - we currently only support 2 levels deep
1365
+ const fields = resolvedEntity.fields || {};
1366
+ Object.entries(fields).forEach(([fieldKey, field]) => {
1367
+ if (field && field.sys?.type === 'Link') {
1368
+ const entity = entityStore.getEntityFromLink(field);
1369
+ if (entity) {
1370
+ resolvedEntity.fields[fieldKey] = entity;
1371
+ }
1372
+ }
1373
+ else if (field && Array.isArray(field)) {
1374
+ resolvedEntity.fields[fieldKey] = field.map((innerField) => {
1375
+ if (innerField && innerField.sys?.type === 'Link') {
1376
+ const entity = entityStore.getEntityFromLink(innerField);
1377
+ if (entity) {
1378
+ return entity;
1379
+ }
1380
+ }
1381
+ return innerField;
1382
+ });
1383
+ }
1384
+ });
1350
1385
  return resolvedEntity;
1351
1386
  }
1352
1387
 
@@ -1364,7 +1399,21 @@ function getArrayValue(entryOrAsset, path, entityStore) {
1364
1399
  return value;
1365
1400
  }
1366
1401
  else if (value?.sys?.type === 'Link') {
1367
- return entityStore.getEntityFromLink(value);
1402
+ const resolvedEntity = entityStore.getEntityFromLink(value);
1403
+ if (!resolvedEntity) {
1404
+ return;
1405
+ }
1406
+ //resolve any embedded links - we currently only support 2 levels deep
1407
+ const fields = resolvedEntity.fields || {};
1408
+ Object.entries(fields).forEach(([fieldKey, field]) => {
1409
+ if (field && field.sys?.type === 'Link') {
1410
+ const entity = entityStore.getEntityFromLink(field);
1411
+ if (entity) {
1412
+ resolvedEntity.fields[fieldKey] = entity;
1413
+ }
1414
+ }
1415
+ });
1416
+ return resolvedEntity;
1368
1417
  }
1369
1418
  else {
1370
1419
  console.warn(`Expected value to be a string or Link, but got: ${JSON.stringify(value)}`);
@@ -1386,7 +1435,7 @@ const transformBoundContentValue = (variables, entityStore, binding, resolveDesi
1386
1435
  }
1387
1436
  return transformMedia(entityOrAsset, variables, resolveDesignValue, variableName, path);
1388
1437
  case 'RichText':
1389
- return transformRichText(entityOrAsset, path);
1438
+ return transformRichText(entityOrAsset, entityStore, path);
1390
1439
  case 'Array':
1391
1440
  return getArrayValue(entityOrAsset, path, entityStore);
1392
1441
  case 'Link':
@@ -4241,7 +4290,7 @@ const useComponent = ({ node: rawNode, resolveDesignValue, renderDropzone, userI
4241
4290
  const componentId = node.data.id;
4242
4291
  const isAssembly = node.type === 'assembly';
4243
4292
  const isStructureComponent = isContentfulStructureComponent(node.data.blockId);
4244
- const requiresDragWrapper = !isAssembly && !isStructureComponent && !componentRegistration?.options?.wrapComponent;
4293
+ const requiresDragWrapper = !isAssembly && !isStructureComponent && componentRegistration?.options?.wrapComponent === false;
4245
4294
  const { componentProps, wrapperStyles } = useComponentProps({
4246
4295
  node,
4247
4296
  areEntitiesFetched,