@contentful/field-editor-reference 6.19.3 → 6.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.
- package/dist/cjs/__fixtures__/FakeSdk.js +13 -20
- package/dist/cjs/common/EntityStore.js +38 -23
- package/dist/cjs/common/MultipleReferenceEditor.js +6 -1
- package/dist/cjs/common/SingleReferenceEditor.js +6 -1
- package/dist/cjs/resources/Cards/ResourceCard.spec.js +28 -2
- package/dist/esm/__fixtures__/FakeSdk.js +13 -20
- package/dist/esm/common/EntityStore.js +38 -23
- package/dist/esm/common/MultipleReferenceEditor.js +6 -1
- package/dist/esm/common/SingleReferenceEditor.js +6 -1
- package/dist/esm/resources/Cards/ResourceCard.spec.js +28 -2
- package/dist/types/common/EntityStore.d.ts +2 -0
- package/package.json +4 -4
|
@@ -45,15 +45,6 @@ function newReferenceEditorFakeSdk(props) {
|
|
|
45
45
|
const delay = (ms)=>{
|
|
46
46
|
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
47
47
|
};
|
|
48
|
-
const localizeContentTypes = (contentTypes)=>{
|
|
49
|
-
return contentTypes.map((contentType)=>({
|
|
50
|
-
...contentType,
|
|
51
|
-
fields: contentType.fields.map((field)=>({
|
|
52
|
-
...field,
|
|
53
|
-
localized: true
|
|
54
|
-
}))
|
|
55
|
-
}));
|
|
56
|
-
};
|
|
57
48
|
const sdk = {
|
|
58
49
|
field,
|
|
59
50
|
locales,
|
|
@@ -106,6 +97,19 @@ function newReferenceEditorFakeSdk(props) {
|
|
|
106
97
|
return _fixtures.contentTypes.published;
|
|
107
98
|
}
|
|
108
99
|
return Promise.reject({});
|
|
100
|
+
},
|
|
101
|
+
getMany: async ()=>{
|
|
102
|
+
return Promise.resolve({
|
|
103
|
+
items: [
|
|
104
|
+
_fixtures.contentTypes.published
|
|
105
|
+
],
|
|
106
|
+
total: 1,
|
|
107
|
+
skip: 0,
|
|
108
|
+
limit: 1000,
|
|
109
|
+
sys: {
|
|
110
|
+
type: 'Array'
|
|
111
|
+
}
|
|
112
|
+
});
|
|
109
113
|
}
|
|
110
114
|
},
|
|
111
115
|
Locale: {
|
|
@@ -114,17 +118,6 @@ function newReferenceEditorFakeSdk(props) {
|
|
|
114
118
|
},
|
|
115
119
|
space: {
|
|
116
120
|
...space,
|
|
117
|
-
getCachedContentTypes () {
|
|
118
|
-
return localizeContentTypes(space.getCachedContentTypes());
|
|
119
|
-
},
|
|
120
|
-
getContentTypes () {
|
|
121
|
-
return Promise.resolve(space.getContentTypes().then((response)=>{
|
|
122
|
-
return {
|
|
123
|
-
...response,
|
|
124
|
-
items: localizeContentTypes(response.items)
|
|
125
|
-
};
|
|
126
|
-
}));
|
|
127
|
-
},
|
|
128
121
|
async getEntityScheduledActions () {
|
|
129
122
|
return [];
|
|
130
123
|
}
|
|
@@ -41,6 +41,7 @@ _export(exports, {
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
44
|
+
const _fieldeditorshared = require("@contentful/field-editor-shared");
|
|
44
45
|
const _constate = /*#__PURE__*/ _interop_require_default(require("constate"));
|
|
45
46
|
const _contentfulmanagement = require("contentful-management");
|
|
46
47
|
const _lodash = require("lodash");
|
|
@@ -163,18 +164,10 @@ async function fetchContentfulEntry({ urn, fetch, options }) {
|
|
|
163
164
|
const environmentId = resourceIdMatch?.groups?.environmentId || 'master';
|
|
164
165
|
const entryId = resourceIdMatch.groups.entityId;
|
|
165
166
|
const [space, entry] = await Promise.all([
|
|
166
|
-
fetch(
|
|
167
|
-
'space',
|
|
168
|
-
spaceId
|
|
169
|
-
], ({ cmaClient })=>cmaClient.space.get({
|
|
167
|
+
fetch((0, _fieldeditorshared.createGetSpaceKey)(spaceId), ({ cmaClient })=>cmaClient.space.get({
|
|
170
168
|
spaceId
|
|
171
169
|
}), options),
|
|
172
|
-
fetch(
|
|
173
|
-
'entry',
|
|
174
|
-
spaceId,
|
|
175
|
-
environmentId,
|
|
176
|
-
entryId
|
|
177
|
-
], ({ cmaClient })=>cmaClient.entry.get({
|
|
170
|
+
fetch((0, _fieldeditorshared.createGetEntryKey)(spaceId, environmentId, entryId), ({ cmaClient })=>cmaClient.entry.get({
|
|
178
171
|
spaceId,
|
|
179
172
|
environmentId,
|
|
180
173
|
entryId
|
|
@@ -182,12 +175,7 @@ async function fetchContentfulEntry({ urn, fetch, options }) {
|
|
|
182
175
|
]);
|
|
183
176
|
const contentTypeId = entry.sys.contentType.sys.id;
|
|
184
177
|
const [contentType, defaultLocaleCode] = await Promise.all([
|
|
185
|
-
fetch(
|
|
186
|
-
'contentType',
|
|
187
|
-
spaceId,
|
|
188
|
-
environmentId,
|
|
189
|
-
contentTypeId
|
|
190
|
-
], ({ cmaClient })=>cmaClient.contentType.get({
|
|
178
|
+
fetch((0, _fieldeditorshared.createGetContentTypeKey)(spaceId, environmentId, contentTypeId), ({ cmaClient })=>cmaClient.contentType.get({
|
|
191
179
|
contentTypeId,
|
|
192
180
|
spaceId,
|
|
193
181
|
environmentId
|
|
@@ -473,17 +461,41 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = (0,
|
|
|
473
461
|
(0, _react.useEffect)(()=>{
|
|
474
462
|
function findSameSpaceQueries() {
|
|
475
463
|
const queries = queryCache.findAll({
|
|
476
|
-
type: 'active',
|
|
477
464
|
predicate: (query)=>isSameSpaceEntityQueryKey(query.queryKey)
|
|
478
465
|
});
|
|
479
466
|
return queries;
|
|
480
467
|
}
|
|
481
468
|
if (typeof onEntityChanged !== 'function') {
|
|
482
|
-
return onSlideInNavigation(({ oldSlideLevel, newSlideLevel })=>{
|
|
469
|
+
return onSlideInNavigation(async ({ oldSlideLevel, newSlideLevel })=>{
|
|
483
470
|
if (oldSlideLevel > newSlideLevel) {
|
|
484
|
-
findSameSpaceQueries()
|
|
485
|
-
|
|
486
|
-
|
|
471
|
+
const queries = findSameSpaceQueries();
|
|
472
|
+
await Promise.all(queries.map(async (query)=>{
|
|
473
|
+
const [entityType, entityId, spaceId, environmentId, releaseId] = query.queryKey;
|
|
474
|
+
try {
|
|
475
|
+
let freshData;
|
|
476
|
+
if (entityType === 'Entry') {
|
|
477
|
+
freshData = await cmaClient.entry.get({
|
|
478
|
+
entryId: entityId,
|
|
479
|
+
spaceId: spaceId,
|
|
480
|
+
environmentId: environmentId,
|
|
481
|
+
releaseId: releaseId
|
|
482
|
+
});
|
|
483
|
+
} else if (entityType === 'Asset') {
|
|
484
|
+
freshData = await cmaClient.asset.get({
|
|
485
|
+
assetId: entityId,
|
|
486
|
+
spaceId: spaceId,
|
|
487
|
+
environmentId: environmentId,
|
|
488
|
+
releaseId: releaseId
|
|
489
|
+
});
|
|
490
|
+
} else {
|
|
491
|
+
await queryClient.invalidateQueries(query.queryKey);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
queryClient.setQueryData(query.queryKey, freshData);
|
|
495
|
+
} catch (error) {
|
|
496
|
+
await queryClient.invalidateQueries(query.queryKey);
|
|
497
|
+
}
|
|
498
|
+
}));
|
|
487
499
|
}
|
|
488
500
|
});
|
|
489
501
|
}
|
|
@@ -526,7 +538,8 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = (0,
|
|
|
526
538
|
isSameSpaceEntityQueryKey,
|
|
527
539
|
queryClient,
|
|
528
540
|
getEntity,
|
|
529
|
-
onSlideInNavigation
|
|
541
|
+
onSlideInNavigation,
|
|
542
|
+
cmaClient
|
|
530
543
|
]);
|
|
531
544
|
const getResourceProvider = (0, _react.useCallback)(function getResourceProvider(organizationId, appDefinitionId) {
|
|
532
545
|
const queryKey = [
|
|
@@ -632,5 +645,7 @@ function useResourceProvider(organizationId, appDefinitionId) {
|
|
|
632
645
|
};
|
|
633
646
|
}
|
|
634
647
|
function EntityProvider({ children, ...props }) {
|
|
635
|
-
return /*#__PURE__*/ _react.default.createElement(_queryClient.SharedQueryClientProvider,
|
|
648
|
+
return /*#__PURE__*/ _react.default.createElement(_queryClient.SharedQueryClientProvider, {
|
|
649
|
+
client: props.queryClient
|
|
650
|
+
}, /*#__PURE__*/ _react.default.createElement(InternalServiceProvider, props, children));
|
|
636
651
|
}
|
|
@@ -9,10 +9,12 @@ Object.defineProperty(exports, "MultipleReferenceEditor", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
12
|
+
const _fieldeditorshared = require("@contentful/field-editor-shared");
|
|
12
13
|
const _sortable = require("@dnd-kit/sortable");
|
|
13
14
|
const _components = require("../components");
|
|
14
15
|
const _LinkEntityActions = require("../components/LinkActions/LinkEntityActions");
|
|
15
16
|
const _useSortIDs = require("../utils/useSortIDs");
|
|
17
|
+
const _queryClient = require("./queryClient");
|
|
16
18
|
const _ReferenceEditor = require("./ReferenceEditor");
|
|
17
19
|
const _useEditorPermissions = require("./useEditorPermissions");
|
|
18
20
|
function _getRequireWildcardCache(nodeInterop) {
|
|
@@ -145,7 +147,10 @@ function Editor(props) {
|
|
|
145
147
|
}));
|
|
146
148
|
}
|
|
147
149
|
function MultipleReferenceEditor(props) {
|
|
148
|
-
|
|
150
|
+
return /*#__PURE__*/ _react.createElement(_queryClient.SharedQueryClientProvider, null, /*#__PURE__*/ _react.createElement(MultipleReferenceEditorInner, props));
|
|
151
|
+
}
|
|
152
|
+
function MultipleReferenceEditorInner(props) {
|
|
153
|
+
const { contentTypes: allContentTypes } = (0, _fieldeditorshared.useContentTypes)(props.sdk);
|
|
149
154
|
return /*#__PURE__*/ _react.createElement(_ReferenceEditor.ReferenceEditor, props, ({ value, disabled, setValue, externalReset })=>{
|
|
150
155
|
return /*#__PURE__*/ _react.createElement(Editor, {
|
|
151
156
|
...props,
|
|
@@ -9,8 +9,10 @@ Object.defineProperty(exports, "SingleReferenceEditor", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
12
|
+
const _fieldeditorshared = require("@contentful/field-editor-shared");
|
|
12
13
|
const _components = require("../components");
|
|
13
14
|
const _LinkEntityActions = require("../components/LinkActions/LinkEntityActions");
|
|
15
|
+
const _queryClient = require("./queryClient");
|
|
14
16
|
const _ReferenceEditor = require("./ReferenceEditor");
|
|
15
17
|
const _useEditorPermissions = require("./useEditorPermissions");
|
|
16
18
|
function _getRequireWildcardCache(nodeInterop) {
|
|
@@ -102,7 +104,10 @@ function Editor(props) {
|
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
106
|
function SingleReferenceEditor(props) {
|
|
105
|
-
|
|
107
|
+
return /*#__PURE__*/ _react.createElement(_queryClient.SharedQueryClientProvider, null, /*#__PURE__*/ _react.createElement(SingleReferenceEditorInner, props));
|
|
108
|
+
}
|
|
109
|
+
function SingleReferenceEditorInner(props) {
|
|
110
|
+
const { contentTypes: allContentTypes } = (0, _fieldeditorshared.useContentTypes)(props.sdk);
|
|
106
111
|
return /*#__PURE__*/ _react.createElement(_ReferenceEditor.ReferenceEditor, props, ({ value, setValue, disabled, externalReset })=>{
|
|
107
112
|
return /*#__PURE__*/ _react.createElement(Editor, {
|
|
108
113
|
...props,
|
|
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
6
6
|
require("@testing-library/jest-dom");
|
|
7
|
+
const _fieldeditorshared = require("@contentful/field-editor-shared");
|
|
8
|
+
const _fieldeditortestutils = require("@contentful/field-editor-test-utils");
|
|
7
9
|
const _react1 = require("@testing-library/react");
|
|
8
10
|
const _published_content_typejson = /*#__PURE__*/ _interop_require_default(require("../../__fixtures__/content-type/published_content_type.json"));
|
|
9
11
|
const _published_entry_non_masterjson = /*#__PURE__*/ _interop_require_default(require("../../__fixtures__/entry/published_entry_non_master.json"));
|
|
@@ -217,9 +219,33 @@ describe('ResourceCard', ()=>{
|
|
|
217
219
|
_react1.fireEvent.mouseEnter(getByText(_indifferent_spacejson.default.name));
|
|
218
220
|
await (0, _react1.waitFor)(()=>expect(getByText(tooltipContent)).toBeDefined());
|
|
219
221
|
});
|
|
220
|
-
it('renders skeleton
|
|
221
|
-
const
|
|
222
|
+
it('renders skeleton while data is loading', async ()=>{
|
|
223
|
+
const queryClient = (0, _fieldeditortestutils.createTestQueryClient)();
|
|
224
|
+
let resolveEntry;
|
|
225
|
+
const pendingPromise = new Promise((resolve)=>{
|
|
226
|
+
resolveEntry = resolve;
|
|
227
|
+
});
|
|
228
|
+
sdk.cma.entry.get.mockReturnValueOnce(pendingPromise);
|
|
229
|
+
const { getByTestId, queryByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_fieldeditorshared.SharedQueryClientProvider, {
|
|
230
|
+
client: queryClient
|
|
231
|
+
}, /*#__PURE__*/ _react.createElement(_EntityStore.EntityProvider, {
|
|
232
|
+
sdk: sdk
|
|
233
|
+
}, /*#__PURE__*/ _react.createElement(_ResourceCard.ResourceCard, {
|
|
234
|
+
isDisabled: false,
|
|
235
|
+
getEntryRouteHref: ()=>'',
|
|
236
|
+
resourceLink: {
|
|
237
|
+
sys: {
|
|
238
|
+
type: 'ResourceLink',
|
|
239
|
+
linkType: 'Contentful:Entry',
|
|
240
|
+
urn: resolvableEntryUrn
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}))));
|
|
222
244
|
expect(getByTestId('cf-ui-skeleton-form')).toBeDefined();
|
|
245
|
+
expect(queryByTestId('cf-ui-entry-card')).toBeNull();
|
|
246
|
+
resolveEntry(_published_entryjson.default);
|
|
247
|
+
await (0, _react1.waitFor)(()=>expect(getByTestId('cf-ui-entry-card')).toBeDefined());
|
|
248
|
+
expect(queryByTestId('cf-ui-skeleton-form')).toBeNull();
|
|
223
249
|
});
|
|
224
250
|
it('renders unsupported entity card when resource type is unknown', async ()=>{
|
|
225
251
|
const { getByText } = renderResourceCard({
|
|
@@ -35,15 +35,6 @@ export function newReferenceEditorFakeSdk(props) {
|
|
|
35
35
|
const delay = (ms)=>{
|
|
36
36
|
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
37
37
|
};
|
|
38
|
-
const localizeContentTypes = (contentTypes)=>{
|
|
39
|
-
return contentTypes.map((contentType)=>({
|
|
40
|
-
...contentType,
|
|
41
|
-
fields: contentType.fields.map((field)=>({
|
|
42
|
-
...field,
|
|
43
|
-
localized: true
|
|
44
|
-
}))
|
|
45
|
-
}));
|
|
46
|
-
};
|
|
47
38
|
const sdk = {
|
|
48
39
|
field,
|
|
49
40
|
locales,
|
|
@@ -96,6 +87,19 @@ export function newReferenceEditorFakeSdk(props) {
|
|
|
96
87
|
return contentTypes.published;
|
|
97
88
|
}
|
|
98
89
|
return Promise.reject({});
|
|
90
|
+
},
|
|
91
|
+
getMany: async ()=>{
|
|
92
|
+
return Promise.resolve({
|
|
93
|
+
items: [
|
|
94
|
+
contentTypes.published
|
|
95
|
+
],
|
|
96
|
+
total: 1,
|
|
97
|
+
skip: 0,
|
|
98
|
+
limit: 1000,
|
|
99
|
+
sys: {
|
|
100
|
+
type: 'Array'
|
|
101
|
+
}
|
|
102
|
+
});
|
|
99
103
|
}
|
|
100
104
|
},
|
|
101
105
|
Locale: {
|
|
@@ -104,17 +108,6 @@ export function newReferenceEditorFakeSdk(props) {
|
|
|
104
108
|
},
|
|
105
109
|
space: {
|
|
106
110
|
...space,
|
|
107
|
-
getCachedContentTypes () {
|
|
108
|
-
return localizeContentTypes(space.getCachedContentTypes());
|
|
109
|
-
},
|
|
110
|
-
getContentTypes () {
|
|
111
|
-
return Promise.resolve(space.getContentTypes().then((response)=>{
|
|
112
|
-
return {
|
|
113
|
-
...response,
|
|
114
|
-
items: localizeContentTypes(response.items)
|
|
115
|
-
};
|
|
116
|
-
}));
|
|
117
|
-
},
|
|
118
111
|
async getEntityScheduledActions () {
|
|
119
112
|
return [];
|
|
120
113
|
}
|
|
@@ -12,6 +12,7 @@ function _define_property(obj, key, value) {
|
|
|
12
12
|
return obj;
|
|
13
13
|
}
|
|
14
14
|
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
15
|
+
import { createGetContentTypeKey, createGetEntryKey, createGetSpaceKey } from '@contentful/field-editor-shared';
|
|
15
16
|
import constate from 'constate';
|
|
16
17
|
import { fetchAll } from 'contentful-management';
|
|
17
18
|
import { get } from 'lodash';
|
|
@@ -75,18 +76,10 @@ async function fetchContentfulEntry({ urn, fetch, options }) {
|
|
|
75
76
|
const environmentId = resourceIdMatch?.groups?.environmentId || 'master';
|
|
76
77
|
const entryId = resourceIdMatch.groups.entityId;
|
|
77
78
|
const [space, entry] = await Promise.all([
|
|
78
|
-
fetch(
|
|
79
|
-
'space',
|
|
80
|
-
spaceId
|
|
81
|
-
], ({ cmaClient })=>cmaClient.space.get({
|
|
79
|
+
fetch(createGetSpaceKey(spaceId), ({ cmaClient })=>cmaClient.space.get({
|
|
82
80
|
spaceId
|
|
83
81
|
}), options),
|
|
84
|
-
fetch(
|
|
85
|
-
'entry',
|
|
86
|
-
spaceId,
|
|
87
|
-
environmentId,
|
|
88
|
-
entryId
|
|
89
|
-
], ({ cmaClient })=>cmaClient.entry.get({
|
|
82
|
+
fetch(createGetEntryKey(spaceId, environmentId, entryId), ({ cmaClient })=>cmaClient.entry.get({
|
|
90
83
|
spaceId,
|
|
91
84
|
environmentId,
|
|
92
85
|
entryId
|
|
@@ -94,12 +87,7 @@ async function fetchContentfulEntry({ urn, fetch, options }) {
|
|
|
94
87
|
]);
|
|
95
88
|
const contentTypeId = entry.sys.contentType.sys.id;
|
|
96
89
|
const [contentType, defaultLocaleCode] = await Promise.all([
|
|
97
|
-
fetch(
|
|
98
|
-
'contentType',
|
|
99
|
-
spaceId,
|
|
100
|
-
environmentId,
|
|
101
|
-
contentTypeId
|
|
102
|
-
], ({ cmaClient })=>cmaClient.contentType.get({
|
|
90
|
+
fetch(createGetContentTypeKey(spaceId, environmentId, contentTypeId), ({ cmaClient })=>cmaClient.contentType.get({
|
|
103
91
|
contentTypeId,
|
|
104
92
|
spaceId,
|
|
105
93
|
environmentId
|
|
@@ -385,17 +373,41 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
385
373
|
useEffect(()=>{
|
|
386
374
|
function findSameSpaceQueries() {
|
|
387
375
|
const queries = queryCache.findAll({
|
|
388
|
-
type: 'active',
|
|
389
376
|
predicate: (query)=>isSameSpaceEntityQueryKey(query.queryKey)
|
|
390
377
|
});
|
|
391
378
|
return queries;
|
|
392
379
|
}
|
|
393
380
|
if (typeof onEntityChanged !== 'function') {
|
|
394
|
-
return onSlideInNavigation(({ oldSlideLevel, newSlideLevel })=>{
|
|
381
|
+
return onSlideInNavigation(async ({ oldSlideLevel, newSlideLevel })=>{
|
|
395
382
|
if (oldSlideLevel > newSlideLevel) {
|
|
396
|
-
findSameSpaceQueries()
|
|
397
|
-
|
|
398
|
-
|
|
383
|
+
const queries = findSameSpaceQueries();
|
|
384
|
+
await Promise.all(queries.map(async (query)=>{
|
|
385
|
+
const [entityType, entityId, spaceId, environmentId, releaseId] = query.queryKey;
|
|
386
|
+
try {
|
|
387
|
+
let freshData;
|
|
388
|
+
if (entityType === 'Entry') {
|
|
389
|
+
freshData = await cmaClient.entry.get({
|
|
390
|
+
entryId: entityId,
|
|
391
|
+
spaceId: spaceId,
|
|
392
|
+
environmentId: environmentId,
|
|
393
|
+
releaseId: releaseId
|
|
394
|
+
});
|
|
395
|
+
} else if (entityType === 'Asset') {
|
|
396
|
+
freshData = await cmaClient.asset.get({
|
|
397
|
+
assetId: entityId,
|
|
398
|
+
spaceId: spaceId,
|
|
399
|
+
environmentId: environmentId,
|
|
400
|
+
releaseId: releaseId
|
|
401
|
+
});
|
|
402
|
+
} else {
|
|
403
|
+
await queryClient.invalidateQueries(query.queryKey);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
queryClient.setQueryData(query.queryKey, freshData);
|
|
407
|
+
} catch (error) {
|
|
408
|
+
await queryClient.invalidateQueries(query.queryKey);
|
|
409
|
+
}
|
|
410
|
+
}));
|
|
399
411
|
}
|
|
400
412
|
});
|
|
401
413
|
}
|
|
@@ -438,7 +450,8 @@ const [InternalServiceProvider, useFetch, useEntityLoader, useCurrentIds] = cons
|
|
|
438
450
|
isSameSpaceEntityQueryKey,
|
|
439
451
|
queryClient,
|
|
440
452
|
getEntity,
|
|
441
|
-
onSlideInNavigation
|
|
453
|
+
onSlideInNavigation,
|
|
454
|
+
cmaClient
|
|
442
455
|
]);
|
|
443
456
|
const getResourceProvider = useCallback(function getResourceProvider(organizationId, appDefinitionId) {
|
|
444
457
|
const queryKey = [
|
|
@@ -544,6 +557,8 @@ export function useResourceProvider(organizationId, appDefinitionId) {
|
|
|
544
557
|
};
|
|
545
558
|
}
|
|
546
559
|
function EntityProvider({ children, ...props }) {
|
|
547
|
-
return /*#__PURE__*/ React.createElement(SharedQueryClientProvider,
|
|
560
|
+
return /*#__PURE__*/ React.createElement(SharedQueryClientProvider, {
|
|
561
|
+
client: props.queryClient
|
|
562
|
+
}, /*#__PURE__*/ React.createElement(InternalServiceProvider, props, children));
|
|
548
563
|
}
|
|
549
564
|
export { EntityProvider, useEntityLoader };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
|
+
import { useContentTypes } from '@contentful/field-editor-shared';
|
|
3
4
|
import { arrayMove } from '@dnd-kit/sortable';
|
|
4
5
|
import { LinkEntityActions } from '../components';
|
|
5
6
|
import { useLinkActionsProps } from '../components/LinkActions/LinkEntityActions';
|
|
6
7
|
import { useSortIDs } from '../utils/useSortIDs';
|
|
8
|
+
import { SharedQueryClientProvider } from './queryClient';
|
|
7
9
|
import { ReferenceEditor } from './ReferenceEditor';
|
|
8
10
|
import { useEditorPermissions } from './useEditorPermissions';
|
|
9
11
|
function onLinkOrCreate(setValue, entityType, items, ids, index = items.length) {
|
|
@@ -95,7 +97,10 @@ function Editor(props) {
|
|
|
95
97
|
}));
|
|
96
98
|
}
|
|
97
99
|
export function MultipleReferenceEditor(props) {
|
|
98
|
-
|
|
100
|
+
return /*#__PURE__*/ React.createElement(SharedQueryClientProvider, null, /*#__PURE__*/ React.createElement(MultipleReferenceEditorInner, props));
|
|
101
|
+
}
|
|
102
|
+
function MultipleReferenceEditorInner(props) {
|
|
103
|
+
const { contentTypes: allContentTypes } = useContentTypes(props.sdk);
|
|
99
104
|
return /*#__PURE__*/ React.createElement(ReferenceEditor, props, ({ value, disabled, setValue, externalReset })=>{
|
|
100
105
|
return /*#__PURE__*/ React.createElement(Editor, {
|
|
101
106
|
...props,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useCallback } from 'react';
|
|
3
|
+
import { useContentTypes } from '@contentful/field-editor-shared';
|
|
3
4
|
import { LinkEntityActions } from '../components';
|
|
4
5
|
import { useLinkActionsProps } from '../components/LinkActions/LinkEntityActions';
|
|
6
|
+
import { SharedQueryClientProvider } from './queryClient';
|
|
5
7
|
import { ReferenceEditor } from './ReferenceEditor';
|
|
6
8
|
import { useEditorPermissions } from './useEditorPermissions';
|
|
7
9
|
function Editor(props) {
|
|
@@ -52,7 +54,10 @@ function Editor(props) {
|
|
|
52
54
|
});
|
|
53
55
|
}
|
|
54
56
|
export function SingleReferenceEditor(props) {
|
|
55
|
-
|
|
57
|
+
return /*#__PURE__*/ React.createElement(SharedQueryClientProvider, null, /*#__PURE__*/ React.createElement(SingleReferenceEditorInner, props));
|
|
58
|
+
}
|
|
59
|
+
function SingleReferenceEditorInner(props) {
|
|
60
|
+
const { contentTypes: allContentTypes } = useContentTypes(props.sdk);
|
|
56
61
|
return /*#__PURE__*/ React.createElement(ReferenceEditor, props, ({ value, setValue, disabled, externalReset })=>{
|
|
57
62
|
return /*#__PURE__*/ React.createElement(Editor, {
|
|
58
63
|
...props,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import '@testing-library/jest-dom';
|
|
3
|
+
import { SharedQueryClientProvider } from '@contentful/field-editor-shared';
|
|
4
|
+
import { createTestQueryClient } from '@contentful/field-editor-test-utils';
|
|
3
5
|
import { configure, fireEvent, render, waitFor } from '@testing-library/react';
|
|
4
6
|
import publishedCT from '../../__fixtures__/content-type/published_content_type.json';
|
|
5
7
|
import publishedEntryNonMasterEnvironment from '../../__fixtures__/entry/published_entry_non_master.json';
|
|
@@ -167,9 +169,33 @@ describe('ResourceCard', ()=>{
|
|
|
167
169
|
fireEvent.mouseEnter(getByText(space.name));
|
|
168
170
|
await waitFor(()=>expect(getByText(tooltipContent)).toBeDefined());
|
|
169
171
|
});
|
|
170
|
-
it('renders skeleton
|
|
171
|
-
const
|
|
172
|
+
it('renders skeleton while data is loading', async ()=>{
|
|
173
|
+
const queryClient = createTestQueryClient();
|
|
174
|
+
let resolveEntry;
|
|
175
|
+
const pendingPromise = new Promise((resolve)=>{
|
|
176
|
+
resolveEntry = resolve;
|
|
177
|
+
});
|
|
178
|
+
sdk.cma.entry.get.mockReturnValueOnce(pendingPromise);
|
|
179
|
+
const { getByTestId, queryByTestId } = render(/*#__PURE__*/ React.createElement(SharedQueryClientProvider, {
|
|
180
|
+
client: queryClient
|
|
181
|
+
}, /*#__PURE__*/ React.createElement(EntityProvider, {
|
|
182
|
+
sdk: sdk
|
|
183
|
+
}, /*#__PURE__*/ React.createElement(ResourceCard, {
|
|
184
|
+
isDisabled: false,
|
|
185
|
+
getEntryRouteHref: ()=>'',
|
|
186
|
+
resourceLink: {
|
|
187
|
+
sys: {
|
|
188
|
+
type: 'ResourceLink',
|
|
189
|
+
linkType: 'Contentful:Entry',
|
|
190
|
+
urn: resolvableEntryUrn
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}))));
|
|
172
194
|
expect(getByTestId('cf-ui-skeleton-form')).toBeDefined();
|
|
195
|
+
expect(queryByTestId('cf-ui-entry-card')).toBeNull();
|
|
196
|
+
resolveEntry(publishedEntry);
|
|
197
|
+
await waitFor(()=>expect(getByTestId('cf-ui-entry-card')).toBeDefined());
|
|
198
|
+
expect(queryByTestId('cf-ui-skeleton-form')).toBeNull();
|
|
173
199
|
});
|
|
174
200
|
it('renders unsupported entity card when resource type is unknown', async ()=>{
|
|
175
201
|
const { getByText } = renderResourceCard({
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { BaseAppSDK } from '@contentful/app-sdk';
|
|
3
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
3
4
|
import { ResourceProvider } from 'contentful-management';
|
|
4
5
|
import { Asset, ContentType, Entry, ExternalResource, Resource, ResourceType, ScheduledAction, Space } from '../types';
|
|
5
6
|
export type ContentfulResourceInfo = {
|
|
@@ -17,6 +18,7 @@ export declare function isContentfulResourceInfo(info: ResourceInfo): info is Co
|
|
|
17
18
|
type EntityStoreProps = {
|
|
18
19
|
sdk: BaseAppSDK;
|
|
19
20
|
queryConcurrency?: number;
|
|
21
|
+
queryClient?: QueryClient;
|
|
20
22
|
};
|
|
21
23
|
type GetOptions = {
|
|
22
24
|
priority?: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/field-editor-reference",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.20.0",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@contentful/f36-components": "^5.8.1",
|
|
40
40
|
"@contentful/f36-icons": "^5.8.1",
|
|
41
41
|
"@contentful/f36-tokens": "^5.1.0",
|
|
42
|
-
"@contentful/field-editor-shared": "^2.
|
|
42
|
+
"@contentful/field-editor-shared": "^2.18.0",
|
|
43
43
|
"@contentful/mimetype": "^2.2.29",
|
|
44
44
|
"@dnd-kit/core": "^6.0.8",
|
|
45
45
|
"@dnd-kit/sortable": "^8.0.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@contentful/app-sdk": "^4.42.0",
|
|
59
|
-
"@contentful/field-editor-test-utils": "^1.
|
|
59
|
+
"@contentful/field-editor-test-utils": "^1.8.0",
|
|
60
60
|
"@lingui/core": "5.3.0",
|
|
61
61
|
"@testing-library/react-hooks": "^8.0.1"
|
|
62
62
|
},
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
"publishConfig": {
|
|
69
69
|
"registry": "https://npm.pkg.github.com/"
|
|
70
70
|
},
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "9ca9d6fdd740e02809b4492fbcace4cbf3746d28"
|
|
72
72
|
}
|