@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.
@@ -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().forEach((query)=>{
485
- void queryClient.invalidateQueries(query.queryKey);
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, null, /*#__PURE__*/ _react.default.createElement(InternalServiceProvider, props, children));
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
- const allContentTypes = props.sdk.space.getCachedContentTypes();
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
- const allContentTypes = props.sdk.space.getCachedContentTypes();
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 when no data is provided', ()=>{
221
- const { getByTestId } = renderResourceCard();
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().forEach((query)=>{
397
- void queryClient.invalidateQueries(query.queryKey);
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, null, /*#__PURE__*/ React.createElement(InternalServiceProvider, props, children));
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
- const allContentTypes = props.sdk.space.getCachedContentTypes();
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
- const allContentTypes = props.sdk.space.getCachedContentTypes();
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 when no data is provided', ()=>{
171
- const { getByTestId } = renderResourceCard();
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.19.3",
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.17.1",
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.7.0",
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": "aae5fce24a644941244f5c19ae688274fbf48f80"
71
+ "gitHead": "9ca9d6fdd740e02809b4492fbcace4cbf3746d28"
72
72
  }