@contentful/field-editor-reference 6.20.0 → 6.21.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 (26) hide show
  1. package/dist/cjs/assets/WrappedAssetCard/AssetCardActions.js +11 -1
  2. package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +7 -1
  3. package/dist/cjs/assets/WrappedAssetCard/WrappedAssetCard.js +4 -2
  4. package/dist/cjs/common/EntityStore.js +0 -2
  5. package/dist/cjs/common/SingleReferenceEditor.js +2 -1
  6. package/dist/cjs/entries/MultipleEntryReferenceEditor.js +2 -1
  7. package/dist/cjs/entries/SingleEntryReferenceEditor.js +1 -0
  8. package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +7 -1
  9. package/dist/cjs/entries/WrappedEntryCard/WrappedEntryCard.js +13 -2
  10. package/dist/esm/assets/WrappedAssetCard/AssetCardActions.js +11 -1
  11. package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +7 -1
  12. package/dist/esm/assets/WrappedAssetCard/WrappedAssetCard.js +4 -2
  13. package/dist/esm/common/EntityStore.js +0 -2
  14. package/dist/esm/common/SingleReferenceEditor.js +2 -1
  15. package/dist/esm/entries/MultipleEntryReferenceEditor.js +2 -1
  16. package/dist/esm/entries/SingleEntryReferenceEditor.js +1 -0
  17. package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +7 -1
  18. package/dist/esm/entries/WrappedEntryCard/WrappedEntryCard.js +13 -2
  19. package/dist/types/assets/WrappedAssetCard/AssetCardActions.d.ts +1 -0
  20. package/dist/types/assets/WrappedAssetCard/FetchingWrappedAssetCard.d.ts +2 -1
  21. package/dist/types/assets/WrappedAssetCard/WrappedAssetCard.d.ts +2 -1
  22. package/dist/types/common/ReferenceEditor.d.ts +2 -1
  23. package/dist/types/common/customCardTypes.d.ts +1 -0
  24. package/dist/types/entries/WrappedEntryCard/FetchingWrappedEntryCard.d.ts +2 -1
  25. package/dist/types/entries/WrappedEntryCard/WrappedEntryCard.d.ts +2 -1
  26. package/package.json +2 -2
@@ -18,6 +18,7 @@ _export(exports, {
18
18
  });
19
19
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
20
20
  const _f36components = require("@contentful/f36-components");
21
+ const _f36icons = require("@contentful/f36-icons");
21
22
  const _f36tokens = /*#__PURE__*/ _interop_require_default(require("@contentful/f36-tokens"));
22
23
  const _fieldeditorshared = require("@contentful/field-editor-shared");
23
24
  const _emotion = require("emotion");
@@ -134,7 +135,7 @@ function renderAssetInfo(props) {
134
135
  ];
135
136
  }
136
137
  function renderActions(props) {
137
- const { entityFile, isDisabled, onEdit, onRemove } = props;
138
+ const { entityFile, isDisabled, onEdit, onRemove, onAddToReleaseAction } = props;
138
139
  return [
139
140
  /*#__PURE__*/ _react.createElement(_f36components.MenuSectionTitle, {
140
141
  key: "section-title"
@@ -144,6 +145,15 @@ function renderActions(props) {
144
145
  onClick: onEdit,
145
146
  testId: "card-action-edit"
146
147
  }, "Edit") : null,
148
+ onAddToReleaseAction ? /*#__PURE__*/ _react.createElement(_f36components.MenuItem, {
149
+ key: "add-to-release",
150
+ testId: "add-to-release",
151
+ onClick: ()=>{
152
+ onAddToReleaseAction();
153
+ }
154
+ }, /*#__PURE__*/ _react.createElement(_f36icons.PlusIcon, {
155
+ size: "tiny"
156
+ }), "Add to release") : null,
147
157
  entityFile ? /*#__PURE__*/ _react.createElement(_f36components.MenuItem, {
148
158
  key: "download",
149
159
  onClick: ()=>{
@@ -72,6 +72,11 @@ function FetchingWrappedAssetCard(props) {
72
72
  locales: props.sdk.locales,
73
73
  isReference: true
74
74
  });
75
+ const onAddToRelease = ()=>{
76
+ if (asset && props.addReferenceToRelease) {
77
+ void props.addReferenceToRelease(asset, props.sdk.field.locale);
78
+ }
79
+ };
75
80
  _react.useEffect(()=>{
76
81
  if (asset) {
77
82
  props.onAction && props.onAction({
@@ -138,7 +143,8 @@ function FetchingWrappedAssetCard(props) {
138
143
  activeLocales,
139
144
  releaseStatusMap,
140
145
  release: props.sdk.release,
141
- releaseEntityStatus
146
+ releaseEntityStatus,
147
+ onAddToRelease
142
148
  };
143
149
  if (status === 'loading') {
144
150
  return props.viewType === 'link' ? /*#__PURE__*/ _react.createElement(_f36components.EntryCard, {
@@ -87,7 +87,7 @@ function getFileType(file) {
87
87
  return groupToIconMap[groupName] || 'archive';
88
88
  }
89
89
  const THUMBNAIL_SIZE = 150;
90
- const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release })=>{
90
+ const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release, onAddToRelease })=>{
91
91
  const status = _fieldeditorshared.entityHelpers.getEntityStatus(asset.sys, useLocalizedEntityStatus ? localeCode : undefined);
92
92
  const entityFile = asset.fields.file ? asset.fields.file[localeCode] || asset.fields.file[defaultLocaleCode] : undefined;
93
93
  const imageUrl = _react.useMemo(()=>{
@@ -120,6 +120,7 @@ const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCod
120
120
  defaultTitle: 'Untitled'
121
121
  });
122
122
  const href = getAssetUrl ? getAssetUrl(asset.sys.id) : undefined;
123
+ const onAddToReleaseAction = releaseEntityStatus === 'notInRelease' && release !== undefined && onAddToRelease !== undefined && !isDisabled ? onAddToRelease : undefined;
123
124
  return /*#__PURE__*/ _react.createElement(_f36components.AssetCard, {
124
125
  as: isClickable && href ? 'a' : 'article',
125
126
  type: getFileType(entityFile),
@@ -158,7 +159,8 @@ const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCod
158
159
  entityFile,
159
160
  isDisabled: isDisabled,
160
161
  onEdit,
161
- onRemove
162
+ onRemove,
163
+ onAddToReleaseAction
162
164
  }),
163
165
  ...entityFile ? (0, _AssetCardActions.renderAssetInfo)({
164
166
  entityFile
@@ -45,7 +45,6 @@ const _fieldeditorshared = require("@contentful/field-editor-shared");
45
45
  const _constate = /*#__PURE__*/ _interop_require_default(require("constate"));
46
46
  const _contentfulmanagement = require("contentful-management");
47
47
  const _lodash = require("lodash");
48
- const _moment = /*#__PURE__*/ _interop_require_default(require("moment"));
49
48
  const _pqueue = /*#__PURE__*/ _interop_require_default(require("p-queue"));
50
49
  const _queryClient = require("./queryClient");
51
50
  function _define_property(obj, key, value) {
@@ -387,7 +386,6 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = (0,
387
386
  const query = {
388
387
  'environment.sys.id': environmentId,
389
388
  'sys.status': 'scheduled',
390
- 'scheduledFor.datetime[gte]': (0, _moment.default)().startOf('hour').toISOString(),
391
389
  'entity.sys.linkType[in]': 'Entry,Asset',
392
390
  order: '-scheduledFor.datetime',
393
391
  limit: maxScheduledActions
@@ -100,7 +100,8 @@ function Editor(props) {
100
100
  }
101
101
  return props.children({
102
102
  ...props,
103
- renderCustomCard: props.renderCustomCard && customCardRenderer
103
+ renderCustomCard: props.renderCustomCard && customCardRenderer,
104
+ addReferenceToRelease: props.addReferenceToRelease
104
105
  });
105
106
  }
106
107
  function SingleReferenceEditor(props) {
@@ -85,7 +85,8 @@ function MultipleEntryReferenceEditor(props) {
85
85
  onMoveTop: index !== 0 ? ()=>childrenProps.onMove(index, 0) : undefined,
86
86
  onMoveBottom: index !== lastIndex ? ()=>childrenProps.onMove(index, lastIndex) : undefined,
87
87
  renderDragHandle: DragHandle,
88
- isBeingDragged: index === indexToUpdate
88
+ isBeingDragged: index === indexToUpdate,
89
+ addReferenceToRelease: props.addReferenceToRelease
89
90
  });
90
91
  }));
91
92
  }
@@ -68,6 +68,7 @@ function SingleEntryReferenceEditor(props) {
68
68
  hasCardEditActions: hasCardEditActions,
69
69
  hasCardRemoveActions: hasCardRemoveActions,
70
70
  activeLocales: activeLocales,
71
+ addReferenceToRelease: props.addReferenceToRelease,
71
72
  onRemove: ()=>{
72
73
  setValue(null);
73
74
  }
@@ -114,6 +114,11 @@ function FetchingWrappedEntryCard(props) {
114
114
  contentTypeId: entry?.sys?.contentType?.sys?.id ?? ''
115
115
  });
116
116
  };
117
+ const onAddToRelease = ()=>{
118
+ if (entry && props.addReferenceToRelease) {
119
+ void props.addReferenceToRelease(entry, props.sdk.field.locale);
120
+ }
121
+ };
117
122
  _react.useEffect(()=>{
118
123
  if (entry) {
119
124
  props.onAction?.({
@@ -168,7 +173,8 @@ function FetchingWrappedEntryCard(props) {
168
173
  activeLocales: props.activeLocales,
169
174
  releaseStatusMap,
170
175
  release: props.sdk.release,
171
- releaseEntityStatus
176
+ releaseEntityStatus,
177
+ onAddToRelease
172
178
  };
173
179
  const { hasCardEditActions, hasCardMoveActions, hasCardRemoveActions } = props;
174
180
  function renderDefaultCard(props) {
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "WrappedEntryCard", {
10
10
  });
11
11
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
12
12
  const _f36components = require("@contentful/f36-components");
13
+ const _f36icons = require("@contentful/f36-icons");
13
14
  const _fieldeditorshared = require("@contentful/field-editor-shared");
14
15
  const _components = require("../../components");
15
16
  const _SpaceName = require("../../components/SpaceName/SpaceName");
@@ -61,7 +62,7 @@ const defaultProps = {
61
62
  hasCardMoveActions: true,
62
63
  hasCardRemoveActions: true
63
64
  };
64
- function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release }) {
65
+ function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release, onAddToRelease }) {
65
66
  const [file, setFile] = _react.useState(null);
66
67
  _react.useEffect(()=>{
67
68
  let mounted = true;
@@ -112,6 +113,7 @@ function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeC
112
113
  localeCode,
113
114
  defaultLocaleCode
114
115
  });
116
+ const showAddToReleaseAction = releaseEntityStatus === 'notInRelease' && release !== undefined && onAddToRelease !== undefined && !isDisabled;
115
117
  return /*#__PURE__*/ _react.createElement(_f36components.EntryCard, {
116
118
  as: isClickable && entryUrl ? 'a' : 'article',
117
119
  href: isClickable ? entryUrl : undefined,
@@ -142,7 +144,7 @@ function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeC
142
144
  dragHandleRender: renderDragHandle,
143
145
  withDragHandle: !!renderDragHandle && !isDisabled,
144
146
  draggable: !!renderDragHandle && !isDisabled,
145
- actions: onEdit || onRemove ? [
147
+ actions: onEdit || onRemove || showAddToReleaseAction ? [
146
148
  hasCardEditActions && onEdit ? /*#__PURE__*/ _react.createElement(_f36components.MenuItem, {
147
149
  key: "edit",
148
150
  testId: "edit",
@@ -157,6 +159,15 @@ function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeC
157
159
  onRemove && onRemove();
158
160
  }
159
161
  }, "Remove") : null,
162
+ showAddToReleaseAction ? /*#__PURE__*/ _react.createElement(_f36components.MenuItem, {
163
+ key: "add-to-release",
164
+ testId: "add-to-release",
165
+ onClick: ()=>{
166
+ onAddToRelease();
167
+ }
168
+ }, /*#__PURE__*/ _react.createElement(_f36icons.PlusIcon, {
169
+ size: "tiny"
170
+ }), "Add to release") : null,
160
171
  hasCardMoveActions && (onMoveTop || onMoveBottom) && !isDisabled ? /*#__PURE__*/ _react.createElement(_f36components.MenuDivider, {
161
172
  key: "divider"
162
173
  }) : null,
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { MenuItem, Text, MenuSectionTitle } from '@contentful/f36-components';
3
+ import { PlusIcon } from '@contentful/f36-icons';
3
4
  import tokens from '@contentful/f36-tokens';
4
5
  import { shortenStorageUnit } from '@contentful/field-editor-shared';
5
6
  import { css } from 'emotion';
@@ -70,7 +71,7 @@ export function renderAssetInfo(props) {
70
71
  ];
71
72
  }
72
73
  export function renderActions(props) {
73
- const { entityFile, isDisabled, onEdit, onRemove } = props;
74
+ const { entityFile, isDisabled, onEdit, onRemove, onAddToReleaseAction } = props;
74
75
  return [
75
76
  /*#__PURE__*/ React.createElement(MenuSectionTitle, {
76
77
  key: "section-title"
@@ -80,6 +81,15 @@ export function renderActions(props) {
80
81
  onClick: onEdit,
81
82
  testId: "card-action-edit"
82
83
  }, "Edit") : null,
84
+ onAddToReleaseAction ? /*#__PURE__*/ React.createElement(MenuItem, {
85
+ key: "add-to-release",
86
+ testId: "add-to-release",
87
+ onClick: ()=>{
88
+ onAddToReleaseAction();
89
+ }
90
+ }, /*#__PURE__*/ React.createElement(PlusIcon, {
91
+ size: "tiny"
92
+ }), "Add to release") : null,
83
93
  entityFile ? /*#__PURE__*/ React.createElement(MenuItem, {
84
94
  key: "download",
85
95
  onClick: ()=>{
@@ -21,6 +21,11 @@ export function FetchingWrappedAssetCard(props) {
21
21
  locales: props.sdk.locales,
22
22
  isReference: true
23
23
  });
24
+ const onAddToRelease = ()=>{
25
+ if (asset && props.addReferenceToRelease) {
26
+ void props.addReferenceToRelease(asset, props.sdk.field.locale);
27
+ }
28
+ };
24
29
  React.useEffect(()=>{
25
30
  if (asset) {
26
31
  props.onAction && props.onAction({
@@ -87,7 +92,8 @@ export function FetchingWrappedAssetCard(props) {
87
92
  activeLocales,
88
93
  releaseStatusMap,
89
94
  release: props.sdk.release,
90
- releaseEntityStatus
95
+ releaseEntityStatus,
96
+ onAddToRelease
91
97
  };
92
98
  if (status === 'loading') {
93
99
  return props.viewType === 'link' ? /*#__PURE__*/ React.createElement(EntryCard, {
@@ -31,7 +31,7 @@ function getFileType(file) {
31
31
  return groupToIconMap[groupName] || 'archive';
32
32
  }
33
33
  const THUMBNAIL_SIZE = 150;
34
- export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release })=>{
34
+ export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release, onAddToRelease })=>{
35
35
  const status = entityHelpers.getEntityStatus(asset.sys, useLocalizedEntityStatus ? localeCode : undefined);
36
36
  const entityFile = asset.fields.file ? asset.fields.file[localeCode] || asset.fields.file[defaultLocaleCode] : undefined;
37
37
  const imageUrl = React.useMemo(()=>{
@@ -64,6 +64,7 @@ export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLo
64
64
  defaultTitle: 'Untitled'
65
65
  });
66
66
  const href = getAssetUrl ? getAssetUrl(asset.sys.id) : undefined;
67
+ const onAddToReleaseAction = releaseEntityStatus === 'notInRelease' && release !== undefined && onAddToRelease !== undefined && !isDisabled ? onAddToRelease : undefined;
67
68
  return /*#__PURE__*/ React.createElement(AssetCard, {
68
69
  as: isClickable && href ? 'a' : 'article',
69
70
  type: getFileType(entityFile),
@@ -102,7 +103,8 @@ export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLo
102
103
  entityFile,
103
104
  isDisabled: isDisabled,
104
105
  onEdit,
105
- onRemove
106
+ onRemove,
107
+ onAddToReleaseAction
106
108
  }),
107
109
  ...entityFile ? renderAssetInfo({
108
110
  entityFile
@@ -16,7 +16,6 @@ import { createGetContentTypeKey, createGetEntryKey, createGetSpaceKey } from '@
16
16
  import constate from 'constate';
17
17
  import { fetchAll } from 'contentful-management';
18
18
  import { get } from 'lodash';
19
- import moment from 'moment';
20
19
  import PQueue from 'p-queue';
21
20
  import { SharedQueryClientProvider, useQuery, useQueryClient } from './queryClient';
22
21
  export function isContentfulResourceInfo(info) {
@@ -299,7 +298,6 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
299
298
  const query = {
300
299
  'environment.sys.id': environmentId,
301
300
  'sys.status': 'scheduled',
302
- 'scheduledFor.datetime[gte]': moment().startOf('hour').toISOString(),
303
301
  'entity.sys.linkType[in]': 'Entry,Asset',
304
302
  order: '-scheduledFor.datetime',
305
303
  limit: maxScheduledActions
@@ -50,7 +50,8 @@ function Editor(props) {
50
50
  }
51
51
  return props.children({
52
52
  ...props,
53
- renderCustomCard: props.renderCustomCard && customCardRenderer
53
+ renderCustomCard: props.renderCustomCard && customCardRenderer,
54
+ addReferenceToRelease: props.addReferenceToRelease
54
55
  });
55
56
  }
56
57
  export function SingleReferenceEditor(props) {
@@ -34,7 +34,8 @@ export function MultipleEntryReferenceEditor(props) {
34
34
  onMoveTop: index !== 0 ? ()=>childrenProps.onMove(index, 0) : undefined,
35
35
  onMoveBottom: index !== lastIndex ? ()=>childrenProps.onMove(index, lastIndex) : undefined,
36
36
  renderDragHandle: DragHandle,
37
- isBeingDragged: index === indexToUpdate
37
+ isBeingDragged: index === indexToUpdate,
38
+ addReferenceToRelease: props.addReferenceToRelease
38
39
  });
39
40
  }));
40
41
  }
@@ -17,6 +17,7 @@ export function SingleEntryReferenceEditor(props) {
17
17
  hasCardEditActions: hasCardEditActions,
18
18
  hasCardRemoveActions: hasCardRemoveActions,
19
19
  activeLocales: activeLocales,
20
+ addReferenceToRelease: props.addReferenceToRelease,
20
21
  onRemove: ()=>{
21
22
  setValue(null);
22
23
  }
@@ -63,6 +63,11 @@ export function FetchingWrappedEntryCard(props) {
63
63
  contentTypeId: entry?.sys?.contentType?.sys?.id ?? ''
64
64
  });
65
65
  };
66
+ const onAddToRelease = ()=>{
67
+ if (entry && props.addReferenceToRelease) {
68
+ void props.addReferenceToRelease(entry, props.sdk.field.locale);
69
+ }
70
+ };
66
71
  React.useEffect(()=>{
67
72
  if (entry) {
68
73
  props.onAction?.({
@@ -117,7 +122,8 @@ export function FetchingWrappedEntryCard(props) {
117
122
  activeLocales: props.activeLocales,
118
123
  releaseStatusMap,
119
124
  release: props.sdk.release,
120
- releaseEntityStatus
125
+ releaseEntityStatus,
126
+ onAddToRelease
121
127
  };
122
128
  const { hasCardEditActions, hasCardMoveActions, hasCardRemoveActions } = props;
123
129
  function renderDefaultCard(props) {
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { EntryCard, MenuDivider, MenuItem } from '@contentful/f36-components';
3
+ import { PlusIcon } from '@contentful/f36-icons';
3
4
  import { entityHelpers, isValidImage } from '@contentful/field-editor-shared';
4
5
  import { AssetThumbnail, MissingEntityCard, EntityStatusBadge } from '../../components';
5
6
  import { SpaceName } from '../../components/SpaceName/SpaceName';
@@ -10,7 +11,7 @@ const defaultProps = {
10
11
  hasCardMoveActions: true,
11
12
  hasCardRemoveActions: true
12
13
  };
13
- export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release }) {
14
+ export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release, onAddToRelease }) {
14
15
  const [file, setFile] = React.useState(null);
15
16
  React.useEffect(()=>{
16
17
  let mounted = true;
@@ -61,6 +62,7 @@ export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales,
61
62
  localeCode,
62
63
  defaultLocaleCode
63
64
  });
65
+ const showAddToReleaseAction = releaseEntityStatus === 'notInRelease' && release !== undefined && onAddToRelease !== undefined && !isDisabled;
64
66
  return /*#__PURE__*/ React.createElement(EntryCard, {
65
67
  as: isClickable && entryUrl ? 'a' : 'article',
66
68
  href: isClickable ? entryUrl : undefined,
@@ -91,7 +93,7 @@ export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales,
91
93
  dragHandleRender: renderDragHandle,
92
94
  withDragHandle: !!renderDragHandle && !isDisabled,
93
95
  draggable: !!renderDragHandle && !isDisabled,
94
- actions: onEdit || onRemove ? [
96
+ actions: onEdit || onRemove || showAddToReleaseAction ? [
95
97
  hasCardEditActions && onEdit ? /*#__PURE__*/ React.createElement(MenuItem, {
96
98
  key: "edit",
97
99
  testId: "edit",
@@ -106,6 +108,15 @@ export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales,
106
108
  onRemove && onRemove();
107
109
  }
108
110
  }, "Remove") : null,
111
+ showAddToReleaseAction ? /*#__PURE__*/ React.createElement(MenuItem, {
112
+ key: "add-to-release",
113
+ testId: "add-to-release",
114
+ onClick: ()=>{
115
+ onAddToRelease();
116
+ }
117
+ }, /*#__PURE__*/ React.createElement(PlusIcon, {
118
+ size: "tiny"
119
+ }), "Add to release") : null,
109
120
  hasCardMoveActions && (onMoveTop || onMoveBottom) && !isDisabled ? /*#__PURE__*/ React.createElement(MenuDivider, {
110
121
  key: "divider"
111
122
  }) : null,
@@ -8,4 +8,5 @@ export declare function renderActions(props: {
8
8
  onRemove?: () => void;
9
9
  isDisabled: boolean;
10
10
  entityFile?: File;
11
+ onAddToReleaseAction?: () => void;
11
12
  }): (React.JSX.Element | null)[];
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { CustomCardRenderer, RenderCustomMissingEntityCard } from '../../common/customCardTypes';
3
- import { Action, FieldAppSDK, ViewType, RenderDragFn } from '../../types';
3
+ import { Action, Asset, FieldAppSDK, ViewType, RenderDragFn } from '../../types';
4
4
  type FetchingWrappedAssetCardProps = {
5
5
  assetId: string;
6
6
  isDisabled: boolean;
@@ -12,6 +12,7 @@ type FetchingWrappedAssetCardProps = {
12
12
  renderDragHandle?: RenderDragFn;
13
13
  renderCustomCard?: CustomCardRenderer;
14
14
  renderCustomMissingEntityCard?: RenderCustomMissingEntityCard;
15
+ addReferenceToRelease?: (reference: Asset, localeCode?: string) => Promise<void>;
15
16
  };
16
17
  export declare function FetchingWrappedAssetCard(props: FetchingWrappedAssetCardProps): React.JSX.Element;
17
18
  export {};
@@ -23,9 +23,10 @@ export interface WrappedAssetCardProps {
23
23
  releaseEntityStatus?: ReleaseEntityStatus;
24
24
  releaseStatusMap?: ReleaseStatusMap;
25
25
  release?: ReleaseV2Props;
26
+ onAddToRelease?: () => void;
26
27
  }
27
28
  export declare const WrappedAssetCard: {
28
- ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release, }: WrappedAssetCardProps): React.JSX.Element;
29
+ ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseEntityStatus, releaseStatusMap, release, onAddToRelease, }: WrappedAssetCardProps): React.JSX.Element;
29
30
  defaultProps: {
30
31
  isClickable: boolean;
31
32
  };
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { FieldConnector } from '@contentful/field-editor-shared';
3
3
  import type { LinkActionsProps } from '../components';
4
- import { Action, ActionLabels, FieldAppSDK, ViewType } from '../types';
4
+ import { Action, ActionLabels, FieldAppSDK, ViewType, Entry, Asset } from '../types';
5
5
  import { CustomCardRenderer, RenderCustomMissingEntityCard } from './customCardTypes';
6
6
  export interface ReferenceEditorProps {
7
7
  /**
@@ -33,6 +33,7 @@ export interface ReferenceEditorProps {
33
33
  oldIndex: number;
34
34
  newIndex: number;
35
35
  }) => void;
36
+ addReferenceToRelease?: (reference: Entry | Asset, localeCode?: string) => Promise<void>;
36
37
  }
37
38
  export type CustomActionProps = LinkActionsProps;
38
39
  export declare function ReferenceEditor<T>(props: ReferenceEditorProps & {
@@ -35,4 +35,5 @@ export type CustomEntityCardProps = {
35
35
  releaseStatusMap?: ReleaseStatusMap;
36
36
  releaseAction?: ReleaseAction;
37
37
  release?: ReleaseV2Props;
38
+ onAddToRelease?: () => void;
38
39
  } & Partial<WrappedAssetCardProps>;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { RenderCustomMissingEntityCard } from '../../common/customCardTypes';
3
3
  import { ReferenceEditorProps } from '../../common/ReferenceEditor';
4
- import { ContentType, RenderDragFn } from '../../types';
4
+ import { ContentType, Entry, RenderDragFn } from '../../types';
5
5
  export type EntryCardReferenceEditorProps = ReferenceEditorProps & {
6
6
  entryId: string;
7
7
  index?: number;
@@ -17,5 +17,6 @@ export type EntryCardReferenceEditorProps = ReferenceEditorProps & {
17
17
  activeLocales?: {
18
18
  code: string;
19
19
  }[];
20
+ addReferenceToRelease?: (reference: Entry, localeCode?: string) => Promise<void>;
20
21
  };
21
22
  export declare function FetchingWrappedEntryCard(props: EntryCardReferenceEditorProps): React.JSX.Element;
@@ -31,8 +31,9 @@ export interface WrappedEntryCardProps {
31
31
  releaseEntityStatus?: ReleaseEntityStatus;
32
32
  releaseStatusMap?: ReleaseStatusMap;
33
33
  release?: ReleaseV2Props;
34
+ onAddToRelease?: () => void;
34
35
  }
35
- export declare function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release, }: WrappedEntryCardProps): React.JSX.Element;
36
+ export declare function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales, localeCode, defaultLocaleCode, localesStatusMap, useLocalizedEntityStatus, size, spaceName, isClickable, isDisabled, isSelected, hasCardMoveActions, hasCardEditActions, hasCardRemoveActions, renderDragHandle, getAsset, getEntityScheduledActions, onClick, onEdit, onRemove, onMoveTop, onMoveBottom, releaseEntityStatus, releaseStatusMap, release, onAddToRelease, }: WrappedEntryCardProps): React.JSX.Element;
36
37
  export declare namespace WrappedEntryCard {
37
38
  var defaultProps: {
38
39
  isClickable: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/field-editor-reference",
3
- "version": "6.20.0",
3
+ "version": "6.21.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "registry": "https://npm.pkg.github.com/"
70
70
  },
71
- "gitHead": "9ca9d6fdd740e02809b4492fbcace4cbf3746d28"
71
+ "gitHead": "333fb851812fea920a1ddd113bd8d918922b53d5"
72
72
  }