@contentful/field-editor-reference 5.19.0 → 5.20.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.
Files changed (115) hide show
  1. package/dist/cjs/__fixtures__/FakeSdk.js +3 -3
  2. package/dist/cjs/__fixtures__/asset/index.js +10 -10
  3. package/dist/cjs/__fixtures__/content-type/index.js +1 -1
  4. package/dist/cjs/__fixtures__/entry/index.js +7 -7
  5. package/dist/cjs/__fixtures__/fixtures.js +8 -6
  6. package/dist/cjs/__fixtures__/locale/index.js +2 -2
  7. package/dist/cjs/__fixtures__/space/index.js +1 -1
  8. package/dist/cjs/assets/MultipleMediaEditor.js +7 -5
  9. package/dist/cjs/assets/SingleMediaEditor.js +6 -4
  10. package/dist/cjs/assets/WrappedAssetCard/AssetCardActions.js +21 -19
  11. package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +18 -11
  12. package/dist/cjs/assets/WrappedAssetCard/WrappedAssetCard.js +20 -11
  13. package/dist/cjs/assets/WrappedAssetCard/WrappedAssetLink.js +12 -9
  14. package/dist/cjs/assets/index.js +3 -3
  15. package/dist/cjs/common/EntityStore.js +53 -53
  16. package/dist/cjs/common/MultipleReferenceEditor.js +20 -11
  17. package/dist/cjs/common/ReferenceEditor.js +7 -5
  18. package/dist/cjs/common/SingleReferenceEditor.js +11 -7
  19. package/dist/cjs/common/SortableLinkList.js +14 -14
  20. package/dist/cjs/common/customCardTypes.js +4 -2
  21. package/dist/cjs/common/queryClient.js +102 -0
  22. package/dist/cjs/common/useContentTypePermissions.js +3 -1
  23. package/dist/cjs/common/useEditorPermissions.js +15 -3
  24. package/dist/cjs/common/useEditorPermissions.spec.js +13 -12
  25. package/dist/cjs/components/AssetThumbnail/AssetThumbnail.js +5 -3
  26. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.js +13 -9
  27. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +17 -15
  28. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +29 -19
  29. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +14 -12
  30. package/dist/cjs/components/LinkActions/CombinedLinkActions.js +28 -21
  31. package/dist/cjs/components/LinkActions/LinkActions.js +17 -15
  32. package/dist/cjs/components/LinkActions/LinkEntityActions.js +26 -17
  33. package/dist/cjs/components/LinkActions/NoLinkPermissionsInfo.js +5 -3
  34. package/dist/cjs/components/LinkActions/helpers.js +10 -5
  35. package/dist/cjs/components/LinkActions/redesignStyles.js +4 -4
  36. package/dist/cjs/components/LinkActions/styles.js +1 -1
  37. package/dist/cjs/components/MissingEntityCard/MissingEntityCard.js +11 -9
  38. package/dist/cjs/components/ResourceEntityErrorCard/ResourceEntityErrorCard.js +6 -4
  39. package/dist/cjs/components/ResourceEntityErrorCard/UnsupportedEntityCard.js +6 -4
  40. package/dist/cjs/components/ScheduledIconWithTooltip/ScheduleTooltip.js +10 -8
  41. package/dist/cjs/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +9 -4
  42. package/dist/cjs/components/ScheduledIconWithTooltip/formatDateAndTime.js +5 -4
  43. package/dist/cjs/components/SpaceName/SpaceName.js +9 -7
  44. package/dist/cjs/components/index.js +12 -12
  45. package/dist/cjs/entries/MultipleEntryReferenceEditor.js +9 -7
  46. package/dist/cjs/entries/SingleEntryReferenceEditor.js +7 -5
  47. package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +20 -11
  48. package/dist/cjs/entries/WrappedEntryCard/WrappedEntryCard.js +23 -17
  49. package/dist/cjs/entries/index.js +3 -3
  50. package/dist/cjs/index.js +38 -34
  51. package/dist/cjs/resources/Cards/ContentfulEntryCard.js +13 -4
  52. package/dist/cjs/resources/Cards/ResourceCard.js +16 -12
  53. package/dist/cjs/resources/Cards/ResourceCard.spec.js +20 -17
  54. package/dist/cjs/resources/MultipleResourceReferenceEditor.js +20 -17
  55. package/dist/cjs/resources/MultipleResourceReferenceEditor.spec.js +34 -13
  56. package/dist/cjs/resources/SingleResourceReferenceEditor.js +11 -9
  57. package/dist/cjs/resources/SingleResourceReferenceEditor.spec.js +13 -6
  58. package/dist/cjs/resources/testHelpers/resourceEditorHelpers.js +12 -5
  59. package/dist/cjs/resources/useResourceLinkActions.js +11 -2
  60. package/dist/cjs/types.js +3 -3
  61. package/dist/cjs/utils/fromFieldValidations.js +2 -1
  62. package/dist/cjs/utils/useSortIDs.js +6 -4
  63. package/dist/esm/__fixtures__/FakeSdk.js +3 -3
  64. package/dist/esm/assets/MultipleMediaEditor.js +3 -3
  65. package/dist/esm/assets/SingleMediaEditor.js +2 -2
  66. package/dist/esm/assets/WrappedAssetCard/AssetCardActions.js +12 -12
  67. package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +14 -9
  68. package/dist/esm/assets/WrappedAssetCard/WrappedAssetCard.js +15 -7
  69. package/dist/esm/assets/WrappedAssetCard/WrappedAssetLink.js +7 -6
  70. package/dist/esm/common/EntityStore.js +40 -42
  71. package/dist/esm/common/MultipleReferenceEditor.js +16 -9
  72. package/dist/esm/common/ReferenceEditor.js +2 -2
  73. package/dist/esm/common/SingleReferenceEditor.js +7 -5
  74. package/dist/esm/common/SortableLinkList.js +12 -12
  75. package/dist/esm/common/queryClient.js +44 -0
  76. package/dist/esm/common/useContentTypePermissions.js +3 -1
  77. package/dist/esm/common/useEditorPermissions.js +15 -3
  78. package/dist/esm/common/useEditorPermissions.spec.js +13 -12
  79. package/dist/esm/components/AssetThumbnail/AssetThumbnail.js +1 -1
  80. package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.js +7 -5
  81. package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +12 -12
  82. package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +23 -15
  83. package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +9 -8
  84. package/dist/esm/components/LinkActions/CombinedLinkActions.js +30 -19
  85. package/dist/esm/components/LinkActions/LinkActions.js +9 -9
  86. package/dist/esm/components/LinkActions/LinkEntityActions.js +18 -11
  87. package/dist/esm/components/LinkActions/NoLinkPermissionsInfo.js +1 -1
  88. package/dist/esm/components/LinkActions/helpers.js +7 -2
  89. package/dist/esm/components/MissingEntityCard/MissingEntityCard.js +6 -6
  90. package/dist/esm/components/ResourceEntityErrorCard/ResourceEntityErrorCard.js +2 -2
  91. package/dist/esm/components/ResourceEntityErrorCard/UnsupportedEntityCard.js +2 -2
  92. package/dist/esm/components/ScheduledIconWithTooltip/ScheduleTooltip.js +3 -3
  93. package/dist/esm/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +5 -2
  94. package/dist/esm/components/ScheduledIconWithTooltip/formatDateAndTime.js +11 -2
  95. package/dist/esm/components/SpaceName/SpaceName.js +4 -4
  96. package/dist/esm/entries/MultipleEntryReferenceEditor.js +5 -5
  97. package/dist/esm/entries/SingleEntryReferenceEditor.js +3 -3
  98. package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +15 -8
  99. package/dist/esm/entries/WrappedEntryCard/WrappedEntryCard.js +18 -14
  100. package/dist/esm/index.js +1 -0
  101. package/dist/esm/resources/Cards/ContentfulEntryCard.js +9 -2
  102. package/dist/esm/resources/Cards/ResourceCard.js +12 -10
  103. package/dist/esm/resources/Cards/ResourceCard.spec.js +12 -11
  104. package/dist/esm/resources/MultipleResourceReferenceEditor.js +14 -13
  105. package/dist/esm/resources/MultipleResourceReferenceEditor.spec.js +30 -11
  106. package/dist/esm/resources/SingleResourceReferenceEditor.js +6 -6
  107. package/dist/esm/resources/SingleResourceReferenceEditor.spec.js +9 -4
  108. package/dist/esm/resources/testHelpers/resourceEditorHelpers.js +9 -2
  109. package/dist/esm/resources/useResourceLinkActions.js +11 -2
  110. package/dist/esm/utils/fromFieldValidations.js +1 -0
  111. package/dist/esm/utils/useSortIDs.js +2 -2
  112. package/dist/types/common/EntityStore.d.ts +1 -1
  113. package/dist/types/common/queryClient.d.ts +9 -0
  114. package/dist/types/index.d.ts +1 -0
  115. package/package.json +2 -2
@@ -9,11 +9,11 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- mockSdkForField: function() {
13
- return mockSdkForField;
14
- },
15
12
  createFakeEntryResource: function() {
16
13
  return createFakeEntryResource;
14
+ },
15
+ mockSdkForField: function() {
16
+ return mockSdkForField;
17
17
  }
18
18
  });
19
19
  function mockSdkForField(fieldDefinition, fieldValue) {
@@ -22,13 +22,17 @@ function mockSdkForField(fieldDefinition, fieldValue) {
22
22
  getValue: jest.fn(()=>fieldValue),
23
23
  setValue: jest.fn(()=>Promise.resolve(undefined)),
24
24
  removeValue: jest.fn(),
25
+ // eslint-disable-next-line -- test helper
25
26
  onSchemaErrorsChanged: ()=>{},
27
+ // eslint-disable-next-line -- test helper
26
28
  onIsDisabledChanged: ()=>{},
29
+ // eslint-disable-next-line -- test helper
27
30
  onValueChanged: ()=>{},
28
31
  ...fieldDefinition,
29
32
  locale: 'en'
30
33
  },
31
34
  dialogs: {
35
+ // @ts-expect-error wait app-sdk version update
32
36
  selectSingleResourceEntry: jest.fn().mockResolvedValue({
33
37
  sys: {
34
38
  type: 'Entry',
@@ -68,15 +72,18 @@ function mockSdkForField(fieldDefinition, fieldValue) {
68
72
  contentType: 'testCT'
69
73
  },
70
74
  space: {
75
+ // @ts-expect-error wait app-sdk version update
76
+ // eslint-disable-next-line -- test helper
71
77
  onEntityChanged: ()=>{}
72
78
  },
79
+ // @ts-expect-error
73
80
  navigator: {
74
81
  onSlideInNavigation: ()=>()=>({})
75
82
  }
76
83
  };
77
84
  }
78
- const createFakeEntryResource = ({ title , id , space })=>{
79
- const { id: spaceId , name: spaceName } = space;
85
+ const createFakeEntryResource = ({ title, id, space })=>{
86
+ const { id: spaceId, name: spaceName } = space;
80
87
  return {
81
88
  resource: {
82
89
  sys: {
@@ -29,7 +29,7 @@ const getUpdatedValue = (field, entries, apiUrl)=>{
29
29
  return toLinkItem(entries[0], apiUrl);
30
30
  }
31
31
  };
32
- function useResourceLinkActions({ dialogs , field , onAfterLink , apiUrl }) {
32
+ function useResourceLinkActions({ dialogs, field, onAfterLink, apiUrl }) {
33
33
  const handleAfterLink = (0, _react.useCallback)((entries)=>{
34
34
  if (!onAfterLink) {
35
35
  return;
@@ -51,10 +51,14 @@ function useResourceLinkActions({ dialogs , field , onAfterLink , apiUrl }) {
51
51
  ]);
52
52
  const multiple = field.type === 'Array';
53
53
  const onLinkExisting = (0, _react.useMemo)(()=>{
54
- const promptSelection = multiple ? async ()=>await dialogs.selectMultipleResourceEntries({
54
+ const promptSelection = multiple ? async ()=>// @ts-expect-error wait for update of app-sdk version
55
+ await dialogs.selectMultipleResourceEntries({
56
+ // @ts-expect-error wait for update of app-sdk version
55
57
  allowedResources: field.allowedResources
56
58
  }) : async ()=>[
59
+ // @ts-expect-error wait for update of app-sdk version
57
60
  await dialogs.selectSingleResourceEntry({
61
+ // @ts-expect-error wait for update of app-sdk version
58
62
  allowedResources: field.allowedResources
59
63
  })
60
64
  ];
@@ -65,6 +69,7 @@ function useResourceLinkActions({ dialogs , field , onAfterLink , apiUrl }) {
65
69
  }
66
70
  onLinkedExisting(res);
67
71
  };
72
+ // @ts-expect-error wait for update of app-sdk version
68
73
  }, [
69
74
  dialogs,
70
75
  field.allowedResources,
@@ -73,7 +78,9 @@ function useResourceLinkActions({ dialogs , field , onAfterLink , apiUrl }) {
73
78
  ]);
74
79
  return {
75
80
  onLinkExisting,
81
+ // @ts-expect-error
76
82
  onLinkedExisting,
83
+ // hardcoded values to match interface for standard reference field actions
77
84
  entityType: 'Entry',
78
85
  contentTypes: [],
79
86
  canCreateEntity: false,
@@ -82,7 +89,9 @@ function useResourceLinkActions({ dialogs , field , onAfterLink , apiUrl }) {
82
89
  isDisabled: false,
83
90
  isEmpty: false,
84
91
  isFull: false,
92
+ // eslint-disable-next-line -- hardcoded values to match interface for standard reference field actions
85
93
  onCreate: async ()=>{},
94
+ // eslint-disable-next-line -- hardcoded values to match interface for standard reference field actions
86
95
  onCreated: ()=>{}
87
96
  };
88
97
  }
package/dist/cjs/types.js CHANGED
@@ -9,14 +9,14 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ Asset: function() {
13
+ return _fieldeditorshared.Asset;
14
+ },
12
15
  Entry: function() {
13
16
  return _fieldeditorshared.Entry;
14
17
  },
15
18
  File: function() {
16
19
  return _fieldeditorshared.File;
17
- },
18
- Asset: function() {
19
- return _fieldeditorshared.Asset;
20
20
  }
21
21
  });
22
22
  const _fieldeditorshared = require("@contentful/field-editor-shared");
@@ -8,13 +8,14 @@ Object.defineProperty(exports, "fromFieldValidations", {
8
8
  return fromFieldValidations;
9
9
  }
10
10
  });
11
- const _isNumber = _interop_require_default(require("lodash/isNumber"));
11
+ const _isNumber = /*#__PURE__*/ _interop_require_default(require("lodash/isNumber"));
12
12
  function _interop_require_default(obj) {
13
13
  return obj && obj.__esModule ? obj : {
14
14
  default: obj
15
15
  };
16
16
  }
17
17
  function fromFieldValidations(field) {
18
+ // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any
18
19
  const validations = [
19
20
  ...field.validations,
20
21
  ...field.type === 'Array' ? field.items?.validations ?? [] : []
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "useSortIDs", {
8
8
  return useSortIDs;
9
9
  }
10
10
  });
11
- const _react = _interop_require_wildcard(require("react"));
11
+ const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
12
12
  const _sortable = require("@dnd-kit/sortable");
13
13
  function _getRequireWildcardCache(nodeInterop) {
14
14
  if (typeof WeakMap !== "function") return null;
@@ -31,7 +31,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
31
31
  if (cache && cache.has(obj)) {
32
32
  return cache.get(obj);
33
33
  }
34
- var newObj = {};
34
+ var newObj = {
35
+ __proto__: null
36
+ };
35
37
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
36
38
  for(var key in obj){
37
39
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -51,7 +53,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
51
53
  }
52
54
  const useSortIDs = (items)=>{
53
55
  const ids = (items || []).map((item, index)=>{
54
- const { type } = item.sys;
56
+ const { type } = item.sys;
55
57
  return {
56
58
  id: type === 'ResourceLink' ? `${item.sys.urn}-${index}` : `${item.sys.id}-${index}`
57
59
  };
@@ -60,7 +62,7 @@ const useSortIDs = (items)=>{
60
62
  _react.default.useEffect(()=>{
61
63
  if (items.length !== sortIDs.length) {
62
64
  const ids = items.map((item, index)=>{
63
- const { type } = item.sys;
65
+ const { type } = item.sys;
64
66
  return {
65
67
  id: type === 'ResourceLink' ? `${item.sys.urn}-${index}` : `${item.sys.id}-${index}`
66
68
  };
@@ -49,7 +49,7 @@ export function newReferenceEditorFakeSdk(props) {
49
49
  locales,
50
50
  cmaAdapter: createFakeCMAAdapter({
51
51
  Entry: {
52
- get: async ({ entryId })=>{
52
+ get: async ({ entryId })=>{
53
53
  if (props?.fetchDelay) {
54
54
  await delay(props.fetchDelay);
55
55
  }
@@ -66,7 +66,7 @@ export function newReferenceEditorFakeSdk(props) {
66
66
  }
67
67
  },
68
68
  Asset: {
69
- get: async ({ assetId })=>{
69
+ get: async ({ assetId })=>{
70
70
  if (props?.fetchDelay) {
71
71
  await delay(props.fetchDelay);
72
72
  }
@@ -91,7 +91,7 @@ export function newReferenceEditorFakeSdk(props) {
91
91
  }
92
92
  },
93
93
  ContentType: {
94
- get: async ({ contentTypeId })=>{
94
+ get: async ({ contentTypeId })=>{
95
95
  if (contentTypeId === contentTypes.published.sys.id) {
96
96
  return contentTypes.published;
97
97
  }
@@ -12,16 +12,16 @@ const styles = {
12
12
  })
13
13
  };
14
14
  export function MultipleMediaEditor(props) {
15
- return React.createElement(MultipleReferenceEditor, {
15
+ return /*#__PURE__*/ React.createElement(MultipleReferenceEditor, {
16
16
  ...props,
17
17
  entityType: "Asset"
18
- }, (childrenProps)=>React.createElement(SortableLinkList, {
18
+ }, (childrenProps)=>/*#__PURE__*/ React.createElement(SortableLinkList, {
19
19
  ...childrenProps,
20
20
  sortingStrategy: childrenProps.viewType === 'card' ? rectSortingStrategy : verticalListSortingStrategy,
21
21
  className: cx({
22
22
  [styles.gridContainer]: childrenProps.viewType === 'card'
23
23
  })
24
- }, ({ items , item , index , isDisabled , DragHandle })=>React.createElement(FetchingWrappedAssetCard, {
24
+ }, ({ items, item, index, isDisabled, DragHandle })=>/*#__PURE__*/ React.createElement(FetchingWrappedAssetCard, {
25
25
  ...childrenProps,
26
26
  isDisabled: isDisabled,
27
27
  key: `${item.sys.id}-${index}`,
@@ -2,10 +2,10 @@ import * as React from 'react';
2
2
  import { SingleReferenceEditor } from '../common/SingleReferenceEditor';
3
3
  import { FetchingWrappedAssetCard } from './WrappedAssetCard/FetchingWrappedAssetCard';
4
4
  export function SingleMediaEditor(props) {
5
- return React.createElement(SingleReferenceEditor, {
5
+ return /*#__PURE__*/ React.createElement(SingleReferenceEditor, {
6
6
  ...props,
7
7
  entityType: "Asset"
8
- }, ({ entityId , isDisabled , setValue })=>React.createElement(FetchingWrappedAssetCard, {
8
+ }, ({ entityId, isDisabled, setValue })=>/*#__PURE__*/ React.createElement(FetchingWrappedAssetCard, {
9
9
  ...props,
10
10
  viewType: "big_card",
11
11
  assetId: entityId,
@@ -42,42 +42,42 @@ function downloadAsset(url) {
42
42
  window.open(url, '_blank', 'noopener,noreferrer');
43
43
  }
44
44
  export function renderAssetInfo(props) {
45
- const { entityFile } = props;
45
+ const { entityFile } = props;
46
46
  const fileName = get(entityFile, 'fileName');
47
47
  const mimeType = get(entityFile, 'contentType');
48
48
  const fileSize = get(entityFile, 'details.size');
49
49
  const image = get(entityFile, 'details.image');
50
50
  return [
51
- React.createElement(Menu.SectionTitle, {
51
+ /*#__PURE__*/ React.createElement(Menu.SectionTitle, {
52
52
  key: "file-section"
53
53
  }, "File info"),
54
- React.createElement(Menu.Item, {
54
+ /*#__PURE__*/ React.createElement(Menu.Item, {
55
55
  key: "file-information",
56
56
  className: styles.fileInformation.menuItem,
57
57
  isDisabled: true
58
- }, React.createElement("dl", {
58
+ }, /*#__PURE__*/ React.createElement("dl", {
59
59
  className: styles.fileInformation.dl
60
- }, fileName && React.createElement(React.Fragment, null, React.createElement("dt", null, "File Name:"), React.createElement(Text, {
60
+ }, fileName && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("dt", null, "File Name:"), /*#__PURE__*/ React.createElement(Text, {
61
61
  as: "dd",
62
62
  isTruncated: true
63
- }, fileName)), mimeType && React.createElement(React.Fragment, null, React.createElement("dt", null, "File Type:"), React.createElement(Text, {
63
+ }, fileName)), mimeType && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("dt", null, "File Type:"), /*#__PURE__*/ React.createElement(Text, {
64
64
  as: "dd",
65
65
  isTruncated: true
66
- }, mimeType)), fileSize && React.createElement(React.Fragment, null, React.createElement("dt", null, "Size:"), React.createElement("dd", null, shortenStorageUnit(fileSize, 'B'))), image && React.createElement(React.Fragment, null, React.createElement("dt", null, "Dimensions:"), React.createElement("dd", null, `${image.width} × ${image.height}`))))
66
+ }, mimeType)), fileSize && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("dt", null, "Size:"), /*#__PURE__*/ React.createElement("dd", null, shortenStorageUnit(fileSize, 'B'))), image && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("dt", null, "Dimensions:"), /*#__PURE__*/ React.createElement("dd", null, `${image.width} × ${image.height}`))))
67
67
  ];
68
68
  }
69
69
  export function renderActions(props) {
70
- const { entityFile , isDisabled , onEdit , onRemove } = props;
70
+ const { entityFile, isDisabled, onEdit, onRemove } = props;
71
71
  return [
72
- React.createElement(Menu.SectionTitle, {
72
+ /*#__PURE__*/ React.createElement(Menu.SectionTitle, {
73
73
  key: "section-title"
74
74
  }, "Actions"),
75
- onEdit ? React.createElement(Menu.Item, {
75
+ onEdit ? /*#__PURE__*/ React.createElement(Menu.Item, {
76
76
  key: "edit",
77
77
  onClick: onEdit,
78
78
  testId: "card-action-edit"
79
79
  }, "Edit") : null,
80
- entityFile ? React.createElement(Menu.Item, {
80
+ entityFile ? /*#__PURE__*/ React.createElement(Menu.Item, {
81
81
  key: "download",
82
82
  onClick: ()=>{
83
83
  if (typeof entityFile.url === 'string') {
@@ -86,7 +86,7 @@ export function renderActions(props) {
86
86
  },
87
87
  testId: "card-action-download"
88
88
  }, "Download") : null,
89
- onRemove ? React.createElement(Menu.Item, {
89
+ onRemove ? /*#__PURE__*/ React.createElement(Menu.Item, {
90
90
  key: "remove",
91
91
  disabled: isDisabled,
92
92
  onClick: onRemove,
@@ -5,8 +5,8 @@ import { MissingEntityCard } from '../../components';
5
5
  import { WrappedAssetCard } from './WrappedAssetCard';
6
6
  import { WrappedAssetLink } from './WrappedAssetLink';
7
7
  export function FetchingWrappedAssetCard(props) {
8
- const { data: asset , status } = useEntity('Asset', props.assetId);
9
- const { getEntityScheduledActions } = useEntityLoader();
8
+ const { data: asset, status } = useEntity('Asset', props.assetId);
9
+ const { getEntityScheduledActions } = useEntityLoader();
10
10
  const loadEntityScheduledActions = React.useCallback(()=>getEntityScheduledActions('Asset', props.assetId), [
11
11
  getEntityScheduledActions,
12
12
  props.assetId
@@ -18,11 +18,12 @@ export function FetchingWrappedAssetCard(props) {
18
18
  entity: 'Asset'
19
19
  });
20
20
  }
21
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies
21
22
  }, [
22
23
  asset
23
24
  ]);
24
25
  const onEdit = async ()=>{
25
- const { slide } = await props.sdk.navigator.openAsset(props.assetId, {
26
+ const { slide } = await props.sdk.navigator.openAsset(props.assetId, {
26
27
  slideIn: true
27
28
  });
28
29
  props.onAction && props.onAction({
@@ -44,7 +45,7 @@ export function FetchingWrappedAssetCard(props) {
44
45
  };
45
46
  return React.useMemo(()=>{
46
47
  if (status === 'error') {
47
- const card = React.createElement(MissingEntityCard, {
48
+ const card = /*#__PURE__*/ React.createElement(MissingEntityCard, {
48
49
  entityType: "Asset",
49
50
  asSquare: props.viewType !== 'link',
50
51
  isDisabled: props.isDisabled,
@@ -61,7 +62,7 @@ export function FetchingWrappedAssetCard(props) {
61
62
  }
62
63
  return card;
63
64
  }
64
- const { getEntityUrl } = props;
65
+ const { getEntityUrl } = props;
65
66
  const size = props.viewType === 'big_card' ? 'default' : 'small';
66
67
  const commonProps = {
67
68
  asset,
@@ -76,24 +77,25 @@ export function FetchingWrappedAssetCard(props) {
76
77
  };
77
78
  if (props.viewType === 'link') {
78
79
  if (status === 'loading') {
79
- return React.createElement(EntryCard, {
80
+ return /*#__PURE__*/ React.createElement(EntryCard, {
80
81
  size: "small",
81
82
  isLoading: true
82
83
  });
83
84
  }
84
- return React.createElement(WrappedAssetLink, {
85
+ return /*#__PURE__*/ React.createElement(WrappedAssetLink, {
85
86
  ...commonProps,
86
87
  href: commonProps.entityUrl,
87
88
  getEntityScheduledActions: loadEntityScheduledActions
88
89
  });
89
90
  }
90
91
  if (status === 'loading') {
91
- return React.createElement(AssetCard, {
92
+ return /*#__PURE__*/ React.createElement(AssetCard, {
92
93
  size: size,
93
94
  isLoading: true
94
95
  });
95
96
  }
96
97
  function renderDefaultCard(props) {
98
+ // isClickable has a default value, so omit it from the props
97
99
  const builtinCardProps = {
98
100
  ...commonProps,
99
101
  ...props,
@@ -101,19 +103,22 @@ export function FetchingWrappedAssetCard(props) {
101
103
  asset: (props?.entity) || commonProps.asset,
102
104
  getAssetUrl: getEntityUrl
103
105
  };
104
- return React.createElement(WrappedAssetCard, builtinCardProps);
106
+ return /*#__PURE__*/ React.createElement(WrappedAssetCard, builtinCardProps);
105
107
  }
106
108
  if (props.renderCustomCard) {
107
109
  const customProps = {
108
110
  ...commonProps,
109
111
  entity: commonProps.asset
110
112
  };
113
+ // LinkActionsProps are injected higher SingleReferenceEditor/MultipleReferenceEditor
111
114
  const renderedCustomCard = props.renderCustomCard(customProps, {}, renderDefaultCard);
115
+ // Only `false` indicates to render the original card. E.g. `null` would result in no card.
112
116
  if (renderedCustomCard !== false) {
113
117
  return renderedCustomCard;
114
118
  }
115
119
  }
116
120
  return renderDefaultCard();
121
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies
117
122
  }, [
118
123
  props,
119
124
  status,
@@ -3,6 +3,7 @@ import { AssetCard } from '@contentful/f36-components';
3
3
  import { ClockIcon } from '@contentful/f36-icons';
4
4
  import tokens from '@contentful/f36-tokens';
5
5
  import { entityHelpers } from '@contentful/field-editor-shared';
6
+ // @ts-expect-error
6
7
  import mimetype from '@contentful/mimetype';
7
8
  import { css } from 'emotion';
8
9
  import { MissingEntityCard, ScheduledIconWithTooltip } from '../../components';
@@ -28,6 +29,7 @@ const styles = {
28
29
  const defaultProps = {
29
30
  isClickable: true
30
31
  };
32
+ // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any
31
33
  function getFileType(file) {
32
34
  if (!file) {
33
35
  return 'archive';
@@ -39,10 +41,11 @@ function getFileType(file) {
39
41
  return groupToIconMap[groupName] || 'archive';
40
42
  }
41
43
  export const WrappedAssetCard = (props)=>{
42
- const { className , onEdit , getAssetUrl , onRemove , size , isDisabled , isSelected , isClickable } = props;
44
+ const { className, onEdit, getAssetUrl, onRemove, size, isDisabled, isSelected, isClickable } = props;
45
+ // @ts-expect-error
43
46
  const status = entityHelpers.getEntryStatus(props.asset.sys);
44
47
  if (status === 'deleted') {
45
- return React.createElement(MissingEntityCard, {
48
+ return /*#__PURE__*/ React.createElement(MissingEntityCard, {
46
49
  entityType: "Asset",
47
50
  asSquare: true,
48
51
  isDisabled: props.isDisabled,
@@ -57,7 +60,7 @@ export const WrappedAssetCard = (props)=>{
57
60
  });
58
61
  const entityFile = props.asset.fields.file ? props.asset.fields.file[props.localeCode] || props.asset.fields.file[props.defaultLocaleCode] : undefined;
59
62
  const href = getAssetUrl ? getAssetUrl(props.asset.sys.id) : undefined;
60
- return React.createElement(AssetCard, {
63
+ return /*#__PURE__*/ React.createElement(AssetCard, {
61
64
  as: href ? 'a' : 'article',
62
65
  type: getFileType(entityFile),
63
66
  title: entityTitle,
@@ -65,22 +68,27 @@ export const WrappedAssetCard = (props)=>{
65
68
  isSelected: isSelected,
66
69
  href: href,
67
70
  status: status,
68
- icon: React.createElement(ScheduledIconWithTooltip, {
71
+ icon: /*#__PURE__*/ React.createElement(ScheduledIconWithTooltip, {
69
72
  getEntityScheduledActions: props.getEntityScheduledActions,
70
73
  entityType: "Asset",
71
74
  entityId: props.asset.sys.id
72
- }, React.createElement(ClockIcon, {
75
+ }, /*#__PURE__*/ React.createElement(ClockIcon, {
73
76
  className: styles.scheduleIcon,
74
77
  size: "small",
75
78
  variant: "muted",
76
79
  testId: "schedule-icon"
77
80
  })),
78
81
  src: entityFile && entityFile.url ? size === 'small' ? `${entityFile.url}?w=150&h=150&fit=thumb` : `${entityFile.url}?h=300` : '',
79
- onClick: isClickable ? (e)=>{
82
+ onClick: // Providing an onClick handler messes up with some rich text
83
+ // features e.g. pressing ENTER on a card to add a new paragraph
84
+ // underneath. It's crucial not to pass a custom handler when
85
+ // isClickable is disabled which in the case of RT it's.
86
+ isClickable ? (e)=>{
80
87
  e.preventDefault();
81
88
  onEdit && onEdit();
82
89
  } : undefined,
83
- onKeyDown: isClickable ? (e)=>{
90
+ /* todo - remove this when onKeyDown is allowed as a prop for BaseCard in forma 36
91
+ // @ts-expect-error */ onKeyDown: isClickable ? (e)=>{
84
92
  if (e.key === 'Enter' && onEdit) {
85
93
  e.preventDefault();
86
94
  onEdit();
@@ -12,10 +12,11 @@ const styles = {
12
12
  })
13
13
  };
14
14
  export const WrappedAssetLink = (props)=>{
15
- const { className , href , onEdit , onRemove , isDisabled } = props;
15
+ const { className, href, onEdit, onRemove, isDisabled } = props;
16
+ // @ts-expect-error
16
17
  const status = entityHelpers.getEntryStatus(props.asset.sys);
17
18
  if (status === 'deleted') {
18
- return React.createElement(MissingEntityCard, {
19
+ return /*#__PURE__*/ React.createElement(MissingEntityCard, {
19
20
  entityType: "Asset",
20
21
  isDisabled: props.isDisabled,
21
22
  onRemove: props.onRemove
@@ -28,7 +29,7 @@ export const WrappedAssetLink = (props)=>{
28
29
  defaultTitle: 'Untitled'
29
30
  });
30
31
  const entityFile = props.asset.fields.file ? props.asset.fields.file[props.localeCode] || props.asset.fields.file[props.defaultLocaleCode] : undefined;
31
- return React.createElement(EntryCard, {
32
+ return /*#__PURE__*/ React.createElement(EntryCard, {
32
33
  as: href ? 'a' : 'article',
33
34
  contentType: "Asset",
34
35
  title: entityTitle,
@@ -36,14 +37,14 @@ export const WrappedAssetLink = (props)=>{
36
37
  href: href,
37
38
  size: "small",
38
39
  status: status,
39
- thumbnailElement: entityFile && isValidImage(entityFile) ? React.createElement(AssetThumbnail, {
40
+ thumbnailElement: entityFile && isValidImage(entityFile) ? /*#__PURE__*/ React.createElement(AssetThumbnail, {
40
41
  file: entityFile
41
42
  }) : undefined,
42
- icon: React.createElement(ScheduledIconWithTooltip, {
43
+ icon: /*#__PURE__*/ React.createElement(ScheduledIconWithTooltip, {
43
44
  getEntityScheduledActions: props.getEntityScheduledActions,
44
45
  entityType: "Asset",
45
46
  entityId: props.asset.sys.id
46
- }, React.createElement(ClockIcon, {
47
+ }, /*#__PURE__*/ React.createElement(ClockIcon, {
47
48
  className: styles.scheduleIcon,
48
49
  size: "small",
49
50
  variant: "muted",