@contentful/field-editor-reference 6.12.1 → 6.13.1
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/cjs/__fixtures__/FakeSdk.js +6 -6
- package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +9 -15
- package/dist/cjs/assets/WrappedAssetCard/WrappedAssetCard.js +3 -4
- package/dist/cjs/assets/WrappedAssetCard/WrappedAssetLink.js +2 -3
- package/dist/cjs/common/EntityStore.js +96 -32
- package/dist/cjs/components/EntityStatusBadge/EntityStatusBadge.js +5 -6
- package/dist/cjs/components/LinkActions/CombinedLinkActions.js +2 -2
- package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +10 -22
- package/dist/cjs/entries/WrappedEntryCard/WrappedEntryCard.js +3 -4
- package/dist/cjs/resources/Cards/ResourceCard.spec.js +14 -11
- package/dist/esm/__fixtures__/FakeSdk.js +7 -7
- package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +10 -16
- package/dist/esm/assets/WrappedAssetCard/WrappedAssetCard.js +3 -4
- package/dist/esm/assets/WrappedAssetCard/WrappedAssetLink.js +2 -3
- package/dist/esm/common/EntityStore.js +97 -33
- package/dist/esm/components/EntityStatusBadge/EntityStatusBadge.js +5 -6
- package/dist/esm/components/LinkActions/CombinedLinkActions.js +2 -2
- package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +11 -18
- package/dist/esm/entries/WrappedEntryCard/WrappedEntryCard.js +3 -4
- package/dist/esm/resources/Cards/ResourceCard.spec.js +14 -11
- package/dist/types/assets/WrappedAssetCard/WrappedAssetCard.d.ts +4 -5
- package/dist/types/assets/WrappedAssetCard/WrappedAssetLink.d.ts +3 -4
- package/dist/types/common/EntityStore.d.ts +7 -2
- package/dist/types/common/customCardTypes.d.ts +7 -8
- package/dist/types/components/EntityStatusBadge/EntityStatusBadge.d.ts +4 -5
- package/dist/types/entries/WrappedEntryCard/WrappedEntryCard.d.ts +4 -5
- package/package.json +5 -5
|
@@ -30,7 +30,7 @@ function getFileType(file) {
|
|
|
30
30
|
});
|
|
31
31
|
return groupToIconMap[groupName] || 'archive';
|
|
32
32
|
}
|
|
33
|
-
export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseAction,
|
|
33
|
+
export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseAction, releaseStatusMap, release })=>{
|
|
34
34
|
const status = entityHelpers.getEntityStatus(asset.sys, useLocalizedEntityStatus ? localeCode : undefined);
|
|
35
35
|
if (status === 'deleted') {
|
|
36
36
|
return /*#__PURE__*/ React.createElement(MissingAssetCard, {
|
|
@@ -63,9 +63,8 @@ export const WrappedAssetCard = ({ asset, className, size, localeCode, defaultLo
|
|
|
63
63
|
localesStatusMap: localesStatusMap,
|
|
64
64
|
activeLocales: activeLocales,
|
|
65
65
|
releaseAction: releaseAction,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
activeRelease: activeRelease
|
|
66
|
+
releaseStatusMap: releaseStatusMap,
|
|
67
|
+
release: release
|
|
69
68
|
}),
|
|
70
69
|
src: entityFile && entityFile.url ? size === 'small' ? `${entityFile.url}?w=150&h=150&fit=thumb` : `${entityFile.url}?h=300` : '',
|
|
71
70
|
onClick: isClickable ? (e)=>{
|
|
@@ -35,9 +35,8 @@ export const WrappedAssetLink = (props)=>{
|
|
|
35
35
|
localesStatusMap: props.localesStatusMap,
|
|
36
36
|
activeLocales: props.activeLocales,
|
|
37
37
|
releaseAction: props.releaseAction,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
activeRelease: props.activeRelease
|
|
38
|
+
releaseStatusMap: props.releaseStatusMap,
|
|
39
|
+
release: props.release
|
|
41
40
|
}),
|
|
42
41
|
thumbnailElement: entityFile && isValidImage(entityFile) ? /*#__PURE__*/ React.createElement(AssetThumbnail, {
|
|
43
42
|
file: entityFile
|
|
@@ -13,7 +13,7 @@ function _define_property(obj, key, value) {
|
|
|
13
13
|
}
|
|
14
14
|
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
15
15
|
import constate from 'constate';
|
|
16
|
-
import {
|
|
16
|
+
import { fetchAll } from 'contentful-management';
|
|
17
17
|
import PQueue from 'p-queue';
|
|
18
18
|
import { SharedQueryClientProvider, useQuery, useQueryClient } from './queryClient';
|
|
19
19
|
export function isContentfulResourceInfo(info) {
|
|
@@ -153,11 +153,13 @@ async function fetchExternalResource({ urn, fetch, options, spaceId, environment
|
|
|
153
153
|
'resource-types',
|
|
154
154
|
spaceId,
|
|
155
155
|
environmentId
|
|
156
|
-
], ({ cmaClient })=>
|
|
156
|
+
], ({ cmaClient })=>{
|
|
157
|
+
return fetchAll(({ query })=>cmaClient.resourceType.getForEnvironment({
|
|
157
158
|
spaceId,
|
|
158
159
|
environmentId,
|
|
159
160
|
query
|
|
160
|
-
}), {})
|
|
161
|
+
}), {});
|
|
162
|
+
})
|
|
161
163
|
]);
|
|
162
164
|
const resourceTypeEntity = resourceTypes.find((rt)=>rt.sys.id === resourceType);
|
|
163
165
|
if (!resourceTypeEntity) {
|
|
@@ -177,6 +179,7 @@ async function fetchExternalResource({ urn, fetch, options, spaceId, environment
|
|
|
177
179
|
const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = constate(function useInitServices(props) {
|
|
178
180
|
const currentSpaceId = props.sdk.ids.space;
|
|
179
181
|
const currentEnvironmentId = props.sdk.ids.environmentAlias ?? props.sdk.ids.environment;
|
|
182
|
+
const releaseId = props.sdk.ids.release;
|
|
180
183
|
const environmentIds = useMemo(()=>[
|
|
181
184
|
props.sdk.ids.environmentAlias,
|
|
182
185
|
props.sdk.ids.environment
|
|
@@ -187,13 +190,7 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
187
190
|
const queryClient = useQueryClient();
|
|
188
191
|
const queryCache = queryClient.getQueryCache();
|
|
189
192
|
const entityChangeUnsubscribers = useRef({});
|
|
190
|
-
const cmaClient =
|
|
191
|
-
apiAdapter: props.sdk.cmaAdapter
|
|
192
|
-
}, {
|
|
193
|
-
type: 'plain'
|
|
194
|
-
}), [
|
|
195
|
-
props.sdk.cmaAdapter
|
|
196
|
-
]);
|
|
193
|
+
const cmaClient = props.sdk.cma;
|
|
197
194
|
const queryQueue = useMemo(()=>{
|
|
198
195
|
if (props.queryConcurrency) {
|
|
199
196
|
return new PQueue({
|
|
@@ -216,38 +213,92 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
216
213
|
queryQueue,
|
|
217
214
|
cmaClient
|
|
218
215
|
]);
|
|
219
|
-
const
|
|
216
|
+
const isReleaseRequestError = useCallback(function isReleaseRequestError(error, spaceId, environmentId) {
|
|
217
|
+
return !!releaseId && (!spaceId || spaceId === currentSpaceId) && (!environmentId || environmentId === currentEnvironmentId) && error instanceof Error && 'status' in error && error.status === 404;
|
|
218
|
+
}, [
|
|
219
|
+
releaseId,
|
|
220
|
+
currentSpaceId,
|
|
221
|
+
currentEnvironmentId
|
|
222
|
+
]);
|
|
223
|
+
const getEntity = useCallback(function getEntity(entityType, entityId, releaseId, options) {
|
|
220
224
|
const spaceId = options?.spaceId ?? currentSpaceId;
|
|
221
225
|
const environmentId = options?.environmentId ?? currentEnvironmentId;
|
|
222
226
|
const queryKey = [
|
|
223
227
|
entityType,
|
|
224
228
|
entityId,
|
|
225
229
|
spaceId,
|
|
226
|
-
environmentId
|
|
230
|
+
environmentId,
|
|
231
|
+
releaseId
|
|
227
232
|
];
|
|
228
|
-
return fetch(queryKey, ({ cmaClient })=>{
|
|
233
|
+
return fetch(queryKey, async ({ cmaClient })=>{
|
|
229
234
|
if (entityType === 'Entry') {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
+
try {
|
|
236
|
+
return cmaClient.entry.get({
|
|
237
|
+
entryId: entityId,
|
|
238
|
+
spaceId,
|
|
239
|
+
environmentId,
|
|
240
|
+
releaseId
|
|
241
|
+
});
|
|
242
|
+
} catch (error) {
|
|
243
|
+
if (isReleaseRequestError(error, spaceId, environmentId)) {
|
|
244
|
+
const currentEntry = await cmaClient.entry.get({
|
|
245
|
+
entryId: entityId,
|
|
246
|
+
spaceId,
|
|
247
|
+
environmentId,
|
|
248
|
+
releaseId: undefined
|
|
249
|
+
});
|
|
250
|
+
currentEntry.sys.release = {
|
|
251
|
+
sys: {
|
|
252
|
+
type: 'Link',
|
|
253
|
+
linkType: 'Release',
|
|
254
|
+
id: releaseId
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
return currentEntry;
|
|
258
|
+
}
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
235
261
|
}
|
|
236
262
|
if (entityType === 'Asset') {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
263
|
+
try {
|
|
264
|
+
return cmaClient.asset.get({
|
|
265
|
+
assetId: entityId,
|
|
266
|
+
spaceId,
|
|
267
|
+
environmentId,
|
|
268
|
+
releaseId
|
|
269
|
+
});
|
|
270
|
+
} catch (error) {
|
|
271
|
+
if (isReleaseRequestError(error, spaceId, environmentId)) {
|
|
272
|
+
const currentAsset = cmaClient.asset.get({
|
|
273
|
+
assetId: entityId,
|
|
274
|
+
spaceId,
|
|
275
|
+
environmentId,
|
|
276
|
+
releaseId: undefined
|
|
277
|
+
});
|
|
278
|
+
currentAsset.sys.release = {
|
|
279
|
+
sys: {
|
|
280
|
+
type: 'Link',
|
|
281
|
+
linkType: 'Release',
|
|
282
|
+
id: releaseId
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
return currentAsset;
|
|
286
|
+
}
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
242
289
|
}
|
|
243
290
|
throw new UnsupportedError('Unsupported entity type');
|
|
244
291
|
}, options);
|
|
245
292
|
}, [
|
|
246
293
|
fetch,
|
|
247
294
|
currentSpaceId,
|
|
248
|
-
currentEnvironmentId
|
|
295
|
+
currentEnvironmentId,
|
|
296
|
+
isReleaseRequestError
|
|
249
297
|
]);
|
|
250
298
|
const getEntityScheduledActions = useCallback(function getEntityScheduledActions(entityType, entityId, options) {
|
|
299
|
+
if (releaseId) {
|
|
300
|
+
return new Promise((resolve)=>resolve([]));
|
|
301
|
+
}
|
|
251
302
|
const fixedEntityCacheId = 'scheduledActionEntityId';
|
|
252
303
|
const maxScheduledActions = 500;
|
|
253
304
|
const spaceId = options?.spaceId ?? currentSpaceId;
|
|
@@ -257,7 +308,8 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
257
308
|
entityType,
|
|
258
309
|
fixedEntityCacheId,
|
|
259
310
|
spaceId,
|
|
260
|
-
environmentId
|
|
311
|
+
environmentId,
|
|
312
|
+
releaseId
|
|
261
313
|
];
|
|
262
314
|
return fetch(queryKey, async ({ cmaClient })=>{
|
|
263
315
|
const response = await cmaClient.scheduledActions.getMany({
|
|
@@ -274,7 +326,8 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
274
326
|
}, [
|
|
275
327
|
fetch,
|
|
276
328
|
currentSpaceId,
|
|
277
|
-
currentEnvironmentId
|
|
329
|
+
currentEnvironmentId,
|
|
330
|
+
releaseId
|
|
278
331
|
]);
|
|
279
332
|
const getResource = useCallback(function getResource(resourceType, urn, options) {
|
|
280
333
|
const queryKey = [
|
|
@@ -402,23 +455,34 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
402
455
|
getResourceProvider
|
|
403
456
|
}), ({ ids })=>({
|
|
404
457
|
environment: ids.environmentAlias ?? ids.environment,
|
|
405
|
-
space: ids.space
|
|
458
|
+
space: ids.space,
|
|
459
|
+
releaseId: ids.release
|
|
406
460
|
}));
|
|
407
461
|
export function useEntity(entityType, entityId, options) {
|
|
408
|
-
const { space, environment } = useCurrentIds();
|
|
462
|
+
const { space, environment, releaseId } = useCurrentIds();
|
|
409
463
|
const { getEntity } = useEntityLoader();
|
|
410
|
-
const
|
|
464
|
+
const { status, data } = useQuery([
|
|
411
465
|
entityType,
|
|
412
466
|
entityId,
|
|
413
467
|
options?.spaceId ?? space,
|
|
414
|
-
options?.environmentId ?? environment
|
|
415
|
-
|
|
416
|
-
|
|
468
|
+
options?.environmentId ?? environment,
|
|
469
|
+
releaseId
|
|
470
|
+
], ()=>getEntity(entityType, entityId, releaseId, options), {
|
|
417
471
|
enabled: options?.enabled
|
|
418
472
|
});
|
|
473
|
+
const { data: currentEntity } = useQuery([
|
|
474
|
+
entityType,
|
|
475
|
+
entityId,
|
|
476
|
+
options?.spaceId ?? space,
|
|
477
|
+
options?.environmentId ?? environment,
|
|
478
|
+
undefined
|
|
479
|
+
], ()=>getEntity(entityType, entityId, undefined, options), {
|
|
480
|
+
enabled: options?.enabled && !!releaseId
|
|
481
|
+
});
|
|
419
482
|
return {
|
|
420
483
|
status,
|
|
421
|
-
data
|
|
484
|
+
data,
|
|
485
|
+
currentEntity
|
|
422
486
|
};
|
|
423
487
|
}
|
|
424
488
|
export function useResource(resourceType, urn, { locale, ...options } = {}) {
|
|
@@ -3,20 +3,19 @@ import { EntityStatusBadge as StatusBadge } from '@contentful/f36-components';
|
|
|
3
3
|
import { LocalePublishingPopover, ReleaseEntityStatusPopover, ReleaseEntityStatusBadge } from '@contentful/field-editor-shared';
|
|
4
4
|
import { useScheduledActions } from '../ScheduledIconWithTooltip/ScheduledIconWithTooltip';
|
|
5
5
|
import { ScheduleTooltip } from '../ScheduledIconWithTooltip/ScheduleTooltip';
|
|
6
|
-
export function EntityStatusBadge({ entityType, getEntityScheduledActions, status, useLocalizedEntityStatus, localesStatusMap, activeLocales, entity,
|
|
6
|
+
export function EntityStatusBadge({ entityType, getEntityScheduledActions, status, useLocalizedEntityStatus, localesStatusMap, activeLocales, entity, releaseStatusMap, releaseAction, release, ...props }) {
|
|
7
7
|
const { isError, isLoading, jobs } = useScheduledActions({
|
|
8
8
|
entityId: entity.sys.id,
|
|
9
9
|
entityType,
|
|
10
10
|
getEntityScheduledActions
|
|
11
11
|
});
|
|
12
|
-
if (
|
|
12
|
+
if (release && releaseStatusMap && useLocalizedEntityStatus && activeLocales) {
|
|
13
13
|
return /*#__PURE__*/ React.createElement(ReleaseEntityStatusPopover, {
|
|
14
|
-
|
|
15
|
-
activeLocales: activeLocales
|
|
16
|
-
isLoading: isReleasesLoading
|
|
14
|
+
releaseStatusMap: releaseStatusMap,
|
|
15
|
+
activeLocales: activeLocales
|
|
17
16
|
});
|
|
18
17
|
}
|
|
19
|
-
if (
|
|
18
|
+
if (release && releaseAction) {
|
|
20
19
|
return /*#__PURE__*/ React.createElement(ReleaseEntityStatusBadge, {
|
|
21
20
|
action: releaseAction
|
|
22
21
|
});
|
|
@@ -33,12 +33,12 @@ function CombinedEntryLinkActions(props) {
|
|
|
33
33
|
onSelect: (contentTypeId)=>{
|
|
34
34
|
return contentTypeId ? props.onCreate(contentTypeId) : Promise.resolve();
|
|
35
35
|
},
|
|
36
|
-
customDropdownItems: props.canLinkEntity ? /*#__PURE__*/ React.createElement(Menu
|
|
36
|
+
customDropdownItems: props.canLinkEntity ? /*#__PURE__*/ React.createElement(Menu.Item, {
|
|
37
37
|
testId: testIds.linkExisting,
|
|
38
38
|
onClick: ()=>{
|
|
39
39
|
props.onLinkExisting();
|
|
40
40
|
}
|
|
41
|
-
}, "Add existing content")
|
|
41
|
+
}, "Add existing content") : undefined
|
|
42
42
|
});
|
|
43
43
|
} else if (props.canLinkEntity) {
|
|
44
44
|
return /*#__PURE__*/ React.createElement(Button, {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { EntryCard } from '@contentful/f36-components';
|
|
3
|
-
import {
|
|
4
|
-
import get from 'lodash/get';
|
|
3
|
+
import { useLocalePublishStatus, useReleaseStatus } from '@contentful/field-editor-shared';
|
|
5
4
|
import { useEntity, useEntityLoader } from '../../common/EntityStore';
|
|
6
5
|
import { MissingEntityCard } from '../../components';
|
|
7
6
|
import { WrappedEntryCard } from './WrappedEntryCard';
|
|
@@ -25,24 +24,19 @@ async function openEntry(sdk, entryId, options) {
|
|
|
25
24
|
return slide;
|
|
26
25
|
}
|
|
27
26
|
export function FetchingWrappedEntryCard(props) {
|
|
28
|
-
const {
|
|
29
|
-
const { data: entry, status } = useEntity('Entry', props.entryId);
|
|
27
|
+
const { data: entry, status, currentEntity } = useEntity('Entry', props.entryId);
|
|
30
28
|
const { getEntityScheduledActions } = useEntityLoader();
|
|
31
29
|
const loadEntityScheduledActions = React.useCallback(()=>getEntityScheduledActions('Entry', props.entryId), [
|
|
32
30
|
getEntityScheduledActions,
|
|
33
31
|
props.entryId
|
|
34
32
|
]);
|
|
35
33
|
const localesStatusMap = useLocalePublishStatus(entry, props.sdk.locales);
|
|
36
|
-
const {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
locales,
|
|
42
|
-
activeRelease,
|
|
43
|
-
releases
|
|
34
|
+
const { releaseStatusMap, releaseAction } = useReleaseStatus({
|
|
35
|
+
entity: entry,
|
|
36
|
+
previousEntityOnTimeline: currentEntity,
|
|
37
|
+
release: props.sdk.release,
|
|
38
|
+
locales: props.sdk.locales
|
|
44
39
|
});
|
|
45
|
-
const { releaseAction } = getEntityReleaseStatus(props.entryId, locales, activeRelease);
|
|
46
40
|
const size = props.viewType === 'link' ? 'small' : 'default';
|
|
47
41
|
const { getEntity } = useEntityLoader();
|
|
48
42
|
const getAsset = (assetId)=>getEntity('Asset', assetId);
|
|
@@ -55,7 +49,7 @@ export function FetchingWrappedEntryCard(props) {
|
|
|
55
49
|
entity: 'Entry',
|
|
56
50
|
type: 'edit',
|
|
57
51
|
id: props.entryId,
|
|
58
|
-
contentTypeId:
|
|
52
|
+
contentTypeId: entry.sys.contentType.sys.id,
|
|
59
53
|
slide
|
|
60
54
|
});
|
|
61
55
|
};
|
|
@@ -65,7 +59,7 @@ export function FetchingWrappedEntryCard(props) {
|
|
|
65
59
|
entity: 'Entry',
|
|
66
60
|
type: 'delete',
|
|
67
61
|
id: props.entryId,
|
|
68
|
-
contentTypeId:
|
|
62
|
+
contentTypeId: entry.sys.contentType.sys.id
|
|
69
63
|
});
|
|
70
64
|
};
|
|
71
65
|
React.useEffect(()=>{
|
|
@@ -120,9 +114,8 @@ export function FetchingWrappedEntryCard(props) {
|
|
|
120
114
|
useLocalizedEntityStatus: props.sdk.parameters.instance.useLocalizedEntityStatus,
|
|
121
115
|
localesStatusMap,
|
|
122
116
|
activeLocales: props.activeLocales,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
activeRelease,
|
|
117
|
+
releaseStatusMap,
|
|
118
|
+
release: props.sdk.release,
|
|
126
119
|
releaseAction
|
|
127
120
|
};
|
|
128
121
|
const { hasCardEditActions, hasCardMoveActions, hasCardRemoveActions } = props;
|
|
@@ -10,7 +10,7 @@ const defaultProps = {
|
|
|
10
10
|
hasCardMoveActions: true,
|
|
11
11
|
hasCardRemoveActions: true
|
|
12
12
|
};
|
|
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, releaseAction,
|
|
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, releaseAction, releaseStatusMap, release }) {
|
|
14
14
|
const [file, setFile] = React.useState(null);
|
|
15
15
|
React.useEffect(()=>{
|
|
16
16
|
let mounted = true;
|
|
@@ -78,9 +78,8 @@ export function WrappedEntryCard({ entry, entryUrl, contentType, activeLocales,
|
|
|
78
78
|
localesStatusMap: localesStatusMap,
|
|
79
79
|
activeLocales: activeLocales,
|
|
80
80
|
releaseAction: releaseAction,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
activeRelease: activeRelease
|
|
81
|
+
releaseStatusMap: releaseStatusMap,
|
|
82
|
+
release: release
|
|
84
83
|
}),
|
|
85
84
|
icon: spaceName ? /*#__PURE__*/ React.createElement(SpaceName, {
|
|
86
85
|
spaceName: spaceName,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import '@testing-library/jest-dom';
|
|
3
|
-
import { createFakeCMAAdapter } from '@contentful/field-editor-test-utils';
|
|
4
3
|
import { configure, fireEvent, render, waitFor } from '@testing-library/react';
|
|
5
4
|
import publishedCT from '../../__fixtures__/content-type/published_content_type.json';
|
|
6
5
|
import publishedEntryNonMasterEnvironment from '../../__fixtures__/entry/published_entry_non_master.json';
|
|
@@ -27,11 +26,11 @@ const sdk = {
|
|
|
27
26
|
locales: {
|
|
28
27
|
default: 'en-US'
|
|
29
28
|
},
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
cma: {
|
|
30
|
+
contentType: {
|
|
32
31
|
get: jest.fn().mockReturnValue(publishedCT)
|
|
33
32
|
},
|
|
34
|
-
|
|
33
|
+
entry: {
|
|
35
34
|
get: jest.fn().mockImplementation(({ spaceId, environmentId, entryId })=>{
|
|
36
35
|
if (spaceId === 'space-id' && environmentId === 'master' && entryId === 'linked-entry-urn') {
|
|
37
36
|
return Promise.resolve(publishedEntry);
|
|
@@ -42,7 +41,7 @@ const sdk = {
|
|
|
42
41
|
return Promise.reject(new Error());
|
|
43
42
|
})
|
|
44
43
|
},
|
|
45
|
-
|
|
44
|
+
locale: {
|
|
46
45
|
getMany: jest.fn().mockResolvedValue({
|
|
47
46
|
items: [
|
|
48
47
|
{
|
|
@@ -52,7 +51,7 @@ const sdk = {
|
|
|
52
51
|
]
|
|
53
52
|
})
|
|
54
53
|
},
|
|
55
|
-
|
|
54
|
+
resource: {
|
|
56
55
|
getMany: jest.fn().mockImplementation(({ spaceId, environmentId, resourceTypeId, query })=>{
|
|
57
56
|
if (spaceId === 'space-id' && environmentId === 'environment-id' && resourceTypeId === resolvableExternalResourceType && query['sys.urn[in]'] === resolvableExternalEntityUrn) {
|
|
58
57
|
return Promise.resolve({
|
|
@@ -72,8 +71,12 @@ const sdk = {
|
|
|
72
71
|
});
|
|
73
72
|
})
|
|
74
73
|
},
|
|
75
|
-
|
|
74
|
+
resourceType: {
|
|
76
75
|
getForEnvironment: jest.fn().mockImplementation(({ spaceId, environmentId })=>{
|
|
76
|
+
console.log('>> getForEnvironment', {
|
|
77
|
+
spaceId,
|
|
78
|
+
environmentId
|
|
79
|
+
});
|
|
77
80
|
if (spaceId === 'space-id' && environmentId === 'environment-id') {
|
|
78
81
|
return Promise.resolve({
|
|
79
82
|
items: [
|
|
@@ -87,16 +90,16 @@ const sdk = {
|
|
|
87
90
|
});
|
|
88
91
|
})
|
|
89
92
|
},
|
|
90
|
-
|
|
93
|
+
scheduledActions: {
|
|
91
94
|
getMany: jest.fn().mockResolvedValue({
|
|
92
95
|
items: [],
|
|
93
96
|
total: 0
|
|
94
97
|
})
|
|
95
98
|
},
|
|
96
|
-
|
|
99
|
+
space: {
|
|
97
100
|
get: jest.fn().mockResolvedValue(space)
|
|
98
101
|
},
|
|
99
|
-
|
|
102
|
+
resourceProvider: {
|
|
100
103
|
get: jest.fn().mockImplementation(()=>{
|
|
101
104
|
return Promise.resolve({
|
|
102
105
|
function: {
|
|
@@ -107,7 +110,7 @@ const sdk = {
|
|
|
107
110
|
});
|
|
108
111
|
})
|
|
109
112
|
}
|
|
110
|
-
}
|
|
113
|
+
},
|
|
111
114
|
space: {
|
|
112
115
|
onEntityChanged: jest.fn()
|
|
113
116
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { SpaceAPI } from '@contentful/app-sdk';
|
|
3
|
-
import { type LocalePublishStatusMap, type ReleaseAction, type
|
|
3
|
+
import { type LocalePublishStatusMap, type ReleaseAction, type ReleaseStatusMap, type ReleaseV2Props } from '@contentful/field-editor-shared';
|
|
4
4
|
import { LocaleProps } from 'contentful-management';
|
|
5
5
|
import { Asset, RenderDragFn } from '../../types';
|
|
6
6
|
export interface WrappedAssetCardProps {
|
|
@@ -21,12 +21,11 @@ export interface WrappedAssetCardProps {
|
|
|
21
21
|
localesStatusMap?: LocalePublishStatusMap;
|
|
22
22
|
activeLocales?: Pick<LocaleProps, 'code'>[];
|
|
23
23
|
releaseAction?: ReleaseAction;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
activeRelease?: ReleaseV2Props;
|
|
24
|
+
releaseStatusMap?: ReleaseStatusMap;
|
|
25
|
+
release?: ReleaseV2Props;
|
|
27
26
|
}
|
|
28
27
|
export declare const WrappedAssetCard: {
|
|
29
|
-
({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseAction,
|
|
28
|
+
({ asset, className, size, localeCode, defaultLocaleCode, activeLocales, localesStatusMap, isDisabled, isSelected, isClickable, useLocalizedEntityStatus, renderDragHandle, getEntityScheduledActions, onEdit, getAssetUrl, onRemove, releaseAction, releaseStatusMap, release, }: WrappedAssetCardProps): React.JSX.Element;
|
|
30
29
|
defaultProps: {
|
|
31
30
|
isClickable: boolean;
|
|
32
31
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type ReleaseAction, type LocalePublishStatusMap, type
|
|
2
|
+
import { type ReleaseAction, type LocalePublishStatusMap, type ReleaseStatusMap, type ReleaseV2Props, type SpaceAPI } from '@contentful/field-editor-shared';
|
|
3
3
|
import type { LocaleProps } from 'contentful-management';
|
|
4
4
|
import { Asset, RenderDragFn } from '../../types';
|
|
5
5
|
export interface WrappedAssetLinkProps {
|
|
@@ -18,8 +18,7 @@ export interface WrappedAssetLinkProps {
|
|
|
18
18
|
activeLocales?: Pick<LocaleProps, 'code'>[];
|
|
19
19
|
isClickable?: boolean;
|
|
20
20
|
releaseAction?: ReleaseAction;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
activeRelease?: ReleaseV2Props;
|
|
21
|
+
releaseStatusMap?: ReleaseStatusMap;
|
|
22
|
+
release?: ReleaseV2Props;
|
|
24
23
|
}
|
|
25
24
|
export declare const WrappedAssetLink: (props: WrappedAssetLinkProps) => React.JSX.Element;
|
|
@@ -24,6 +24,7 @@ type GetOptions = {
|
|
|
24
24
|
type GetEntityOptions = GetOptions & {
|
|
25
25
|
spaceId?: string;
|
|
26
26
|
environmentId?: string;
|
|
27
|
+
releaseId?: string;
|
|
27
28
|
};
|
|
28
29
|
type UseEntityOptions = GetEntityOptions & {
|
|
29
30
|
enabled?: boolean;
|
|
@@ -41,15 +42,19 @@ type UseResourceOptions = GetResourceOptions & {
|
|
|
41
42
|
type UseEntityResult<E> = {
|
|
42
43
|
status: 'idle';
|
|
43
44
|
data: never;
|
|
45
|
+
currentEntity: never;
|
|
44
46
|
} | {
|
|
45
47
|
status: 'loading';
|
|
46
48
|
data: never;
|
|
49
|
+
currentEntity: never;
|
|
47
50
|
} | {
|
|
48
51
|
status: 'error';
|
|
49
52
|
data: never;
|
|
53
|
+
currentEntity: never;
|
|
50
54
|
} | {
|
|
51
55
|
status: 'success';
|
|
52
56
|
data: E;
|
|
57
|
+
currentEntity?: E;
|
|
53
58
|
};
|
|
54
59
|
type FetchableEntityType = 'Entry' | 'Asset';
|
|
55
60
|
type FetchableEntity = Entry | Asset;
|
|
@@ -77,11 +82,11 @@ export declare class FunctionInvocationError extends Error {
|
|
|
77
82
|
export declare function isFunctionInvocationError(value: unknown): value is FunctionInvocationError;
|
|
78
83
|
declare const useEntityLoader: () => {
|
|
79
84
|
getResource: <R extends Resource = Resource>(resourceType: string, urn: string, options?: GetResourceOptions) => QueryResourceResult<R>;
|
|
80
|
-
getEntity: <E extends FetchableEntity>(entityType: FetchableEntityType, entityId: string, options?: GetEntityOptions) => QueryEntityResult<E>;
|
|
85
|
+
getEntity: <E extends FetchableEntity>(entityType: FetchableEntityType, entityId: string, releaseId?: string, options?: GetEntityOptions) => QueryEntityResult<E>;
|
|
81
86
|
getEntityScheduledActions: (entityType: FetchableEntityType, entityId: string, options?: GetEntityOptions) => QueryEntityResult<ScheduledAction[]>;
|
|
82
87
|
getResourceProvider: (organizationId: string, appDefinitionId: string) => QueryEntityResult<ResourceProvider>;
|
|
83
88
|
};
|
|
84
|
-
export declare function useEntity<E extends FetchableEntity>(entityType: FetchableEntityType, entityId: string, options?: UseEntityOptions): UseEntityResult<E>;
|
|
89
|
+
export declare function useEntity<E extends FetchableEntity>(entityType: FetchableEntityType, entityId: string, options?: Omit<UseEntityOptions, 'releaseId'>): UseEntityResult<E>;
|
|
85
90
|
export declare function useResource<R extends Resource = Resource>(resourceType: string, urn: string, { locale, ...options }?: UseResourceOptions): {
|
|
86
91
|
status: "error" | "success" | "loading";
|
|
87
92
|
data: ResourceInfo<R> | undefined;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { LocalePublishStatusMap,
|
|
3
|
-
import { LocaleProps } from 'contentful-management';
|
|
4
|
-
import { WrappedAssetCardProps } from '../assets/WrappedAssetCard/WrappedAssetCard';
|
|
5
|
-
import { Asset, ContentType, Entry, RenderDragFn } from '../types';
|
|
6
|
-
import { CustomActionProps } from './ReferenceEditor';
|
|
2
|
+
import type { LocalePublishStatusMap, ReleaseAction, ReleaseStatusMap, ReleaseV2Props } from '@contentful/field-editor-shared';
|
|
3
|
+
import type { LocaleProps } from 'contentful-management';
|
|
4
|
+
import type { WrappedAssetCardProps } from '../assets/WrappedAssetCard/WrappedAssetCard';
|
|
5
|
+
import type { Asset, ContentType, Entry, RenderDragFn } from '../types';
|
|
6
|
+
import type { CustomActionProps } from './ReferenceEditor';
|
|
7
7
|
export type MissingEntityCardProps = {
|
|
8
8
|
defaultCard: React.ReactElement;
|
|
9
9
|
entity: {
|
|
@@ -32,8 +32,7 @@ export type CustomEntityCardProps = {
|
|
|
32
32
|
useLocalizedEntityStatus?: boolean;
|
|
33
33
|
localesStatusMap?: LocalePublishStatusMap;
|
|
34
34
|
activeLocales?: Pick<LocaleProps, 'code'>[];
|
|
35
|
-
|
|
36
|
-
isReleasesLoading?: boolean;
|
|
35
|
+
releaseStatusMap?: ReleaseStatusMap;
|
|
37
36
|
releaseAction?: ReleaseAction;
|
|
38
|
-
|
|
37
|
+
release?: ReleaseV2Props;
|
|
39
38
|
} & Partial<WrappedAssetCardProps>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type EntityStatus } from '@contentful/f36-components';
|
|
3
|
-
import { LocalePublishStatusMap, type ReleaseAction, type
|
|
3
|
+
import { LocalePublishStatusMap, type ReleaseAction, type ReleaseStatusMap, type ReleaseV2Props } from '@contentful/field-editor-shared';
|
|
4
4
|
import { EntryProps, LocaleProps, AssetProps } from 'contentful-management';
|
|
5
5
|
import { type UseScheduledActionsProps } from '../ScheduledIconWithTooltip/ScheduledIconWithTooltip';
|
|
6
6
|
type EntityStatusBadgeProps = Omit<UseScheduledActionsProps, 'entityId'> & {
|
|
@@ -9,10 +9,9 @@ type EntityStatusBadgeProps = Omit<UseScheduledActionsProps, 'entityId'> & {
|
|
|
9
9
|
useLocalizedEntityStatus?: boolean;
|
|
10
10
|
localesStatusMap?: LocalePublishStatusMap;
|
|
11
11
|
activeLocales?: Pick<LocaleProps, 'code'>[];
|
|
12
|
-
|
|
13
|
-
isReleasesLoading?: boolean;
|
|
12
|
+
releaseStatusMap?: ReleaseStatusMap;
|
|
14
13
|
releaseAction?: ReleaseAction;
|
|
15
|
-
|
|
14
|
+
release?: ReleaseV2Props;
|
|
16
15
|
};
|
|
17
|
-
export declare function EntityStatusBadge({ entityType, getEntityScheduledActions, status, useLocalizedEntityStatus, localesStatusMap, activeLocales, entity,
|
|
16
|
+
export declare function EntityStatusBadge({ entityType, getEntityScheduledActions, status, useLocalizedEntityStatus, localesStatusMap, activeLocales, entity, releaseStatusMap, releaseAction, release, ...props }: EntityStatusBadgeProps): React.JSX.Element;
|
|
18
17
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { SpaceAPI } from '@contentful/app-sdk';
|
|
3
|
-
import { LocalePublishStatusMap, type ReleaseAction, type
|
|
3
|
+
import { LocalePublishStatusMap, type ReleaseAction, type ReleaseStatusMap, type ReleaseV2Props } from '@contentful/field-editor-shared';
|
|
4
4
|
import { LocaleProps } from 'contentful-management';
|
|
5
5
|
import { ContentType, Entry, RenderDragFn } from '../../types';
|
|
6
6
|
export interface WrappedEntryCardProps {
|
|
@@ -29,11 +29,10 @@ export interface WrappedEntryCardProps {
|
|
|
29
29
|
localesStatusMap?: LocalePublishStatusMap;
|
|
30
30
|
activeLocales?: Pick<LocaleProps, 'code'>[];
|
|
31
31
|
releaseAction?: ReleaseAction;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
activeRelease?: ReleaseV2Props;
|
|
32
|
+
releaseStatusMap?: ReleaseStatusMap;
|
|
33
|
+
release?: ReleaseV2Props;
|
|
35
34
|
}
|
|
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, releaseAction,
|
|
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, releaseAction, releaseStatusMap, release, }: WrappedEntryCardProps): React.JSX.Element;
|
|
37
36
|
export declare namespace WrappedEntryCard {
|
|
38
37
|
var defaultProps: {
|
|
39
38
|
isClickable: boolean;
|