@contentful/field-editor-reference 6.21.2 → 6.22.1-canary.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.
@@ -74,7 +74,10 @@ function FetchingWrappedAssetCard(props) {
74
74
  });
75
75
  const onAddToRelease = ()=>{
76
76
  if (asset && props.addReferenceToRelease) {
77
- void props.addReferenceToRelease(asset, props.sdk.field.locale);
77
+ void props.addReferenceToRelease(asset, props.sdk.field.locale, {
78
+ openModalForVersionSelection: true,
79
+ skipNestedReferencesPrompt: true
80
+ });
78
81
  }
79
82
  };
80
83
  _react.useEffect(()=>{
@@ -23,14 +23,16 @@ async function filter(arr, predicate) {
23
23
  }
24
24
  function useContentTypePermissions({ entityType, validations, sdk, allContentTypes }) {
25
25
  const availableContentTypes = (0, _react.useMemo)(()=>{
26
+ const validationContentTypes = validations.contentTypes ?? [];
26
27
  if (entityType === 'Asset') {
27
28
  return [];
28
29
  }
29
- if (validations.contentTypes && allContentTypes.length === 0) {
30
+ const hasValidationContentTypes = validationContentTypes.length > 0;
31
+ if (hasValidationContentTypes && allContentTypes.length === 0) {
30
32
  return [];
31
33
  }
32
- if (validations.contentTypes) {
33
- return allContentTypes.filter((ct)=>validations.contentTypes?.includes(ct.sys.id));
34
+ if (hasValidationContentTypes) {
35
+ return allContentTypes.filter((ct)=>validationContentTypes.includes(ct.sys.id));
34
36
  }
35
37
  return allContentTypes;
36
38
  }, [
@@ -178,5 +178,39 @@ describe('useEditorPermissions', ()=>{
178
178
  allContentTypes[1]
179
179
  ]);
180
180
  });
181
+ it(`updates availableContentTypes when linkContentType array mutates in place`, async ()=>{
182
+ const allContentTypes = [
183
+ makeContentType('one'),
184
+ makeContentType('two')
185
+ ];
186
+ const { result, sdk, rerender } = await renderEditorPermissions({
187
+ entityType: 'Entry',
188
+ allContentTypes,
189
+ customizeMock: (field)=>{
190
+ const arrayField = field;
191
+ arrayField.type = 'Array';
192
+ arrayField.items = {
193
+ validations: [
194
+ {
195
+ linkContentType: [
196
+ 'one'
197
+ ]
198
+ }
199
+ ]
200
+ };
201
+ return arrayField;
202
+ }
203
+ });
204
+ expect(result.current.availableContentTypes).toEqual([
205
+ allContentTypes[0]
206
+ ]);
207
+ const validation = sdk.field.items?.validations?.[0];
208
+ validation.linkContentType.length = 0;
209
+ validation.linkContentType.push('two');
210
+ rerender();
211
+ expect(result.current.availableContentTypes).toEqual([
212
+ allContentTypes[1]
213
+ ]);
214
+ });
181
215
  });
182
216
  });
@@ -116,7 +116,10 @@ function FetchingWrappedEntryCard(props) {
116
116
  };
117
117
  const onAddToRelease = ()=>{
118
118
  if (entry && props.addReferenceToRelease) {
119
- void props.addReferenceToRelease(entry, props.sdk.field.locale);
119
+ void props.addReferenceToRelease(entry, props.sdk.field.locale, {
120
+ openModalForVersionSelection: true,
121
+ skipNestedReferencesPrompt: true
122
+ });
120
123
  }
121
124
  };
122
125
  _react.useEffect(()=>{
@@ -45,9 +45,15 @@ function fromFieldValidations(field) {
45
45
  min: undefined
46
46
  };
47
47
  }
48
+ const contentTypes = linkContentTypeValidations?.linkContentType ? [
49
+ ...linkContentTypeValidations.linkContentType
50
+ ] : undefined;
51
+ const mimetypeGroups = linkMimetypeGroupValidations?.linkMimetypeGroup ? [
52
+ ...linkMimetypeGroupValidations.linkMimetypeGroup
53
+ ] : undefined;
48
54
  const result = {
49
- contentTypes: linkContentTypeValidations?.linkContentType ?? undefined,
50
- mimetypeGroups: linkMimetypeGroupValidations?.linkMimetypeGroup ?? undefined,
55
+ contentTypes,
56
+ mimetypeGroups,
51
57
  numberOfLinks
52
58
  };
53
59
  return result;
@@ -23,7 +23,10 @@ export function FetchingWrappedAssetCard(props) {
23
23
  });
24
24
  const onAddToRelease = ()=>{
25
25
  if (asset && props.addReferenceToRelease) {
26
- void props.addReferenceToRelease(asset, props.sdk.field.locale);
26
+ void props.addReferenceToRelease(asset, props.sdk.field.locale, {
27
+ openModalForVersionSelection: true,
28
+ skipNestedReferencesPrompt: true
29
+ });
27
30
  }
28
31
  };
29
32
  React.useEffect(()=>{
@@ -8,14 +8,16 @@ async function filter(arr, predicate) {
8
8
  }
9
9
  export function useContentTypePermissions({ entityType, validations, sdk, allContentTypes }) {
10
10
  const availableContentTypes = useMemo(()=>{
11
+ const validationContentTypes = validations.contentTypes ?? [];
11
12
  if (entityType === 'Asset') {
12
13
  return [];
13
14
  }
14
- if (validations.contentTypes && allContentTypes.length === 0) {
15
+ const hasValidationContentTypes = validationContentTypes.length > 0;
16
+ if (hasValidationContentTypes && allContentTypes.length === 0) {
15
17
  return [];
16
18
  }
17
- if (validations.contentTypes) {
18
- return allContentTypes.filter((ct)=>validations.contentTypes?.includes(ct.sys.id));
19
+ if (hasValidationContentTypes) {
20
+ return allContentTypes.filter((ct)=>validationContentTypes.includes(ct.sys.id));
19
21
  }
20
22
  return allContentTypes;
21
23
  }, [
@@ -174,5 +174,39 @@ describe('useEditorPermissions', ()=>{
174
174
  allContentTypes[1]
175
175
  ]);
176
176
  });
177
+ it(`updates availableContentTypes when linkContentType array mutates in place`, async ()=>{
178
+ const allContentTypes = [
179
+ makeContentType('one'),
180
+ makeContentType('two')
181
+ ];
182
+ const { result, sdk, rerender } = await renderEditorPermissions({
183
+ entityType: 'Entry',
184
+ allContentTypes,
185
+ customizeMock: (field)=>{
186
+ const arrayField = field;
187
+ arrayField.type = 'Array';
188
+ arrayField.items = {
189
+ validations: [
190
+ {
191
+ linkContentType: [
192
+ 'one'
193
+ ]
194
+ }
195
+ ]
196
+ };
197
+ return arrayField;
198
+ }
199
+ });
200
+ expect(result.current.availableContentTypes).toEqual([
201
+ allContentTypes[0]
202
+ ]);
203
+ const validation = sdk.field.items?.validations?.[0];
204
+ validation.linkContentType.length = 0;
205
+ validation.linkContentType.push('two');
206
+ rerender();
207
+ expect(result.current.availableContentTypes).toEqual([
208
+ allContentTypes[1]
209
+ ]);
210
+ });
177
211
  });
178
212
  });
@@ -65,7 +65,10 @@ export function FetchingWrappedEntryCard(props) {
65
65
  };
66
66
  const onAddToRelease = ()=>{
67
67
  if (entry && props.addReferenceToRelease) {
68
- void props.addReferenceToRelease(entry, props.sdk.field.locale);
68
+ void props.addReferenceToRelease(entry, props.sdk.field.locale, {
69
+ openModalForVersionSelection: true,
70
+ skipNestedReferencesPrompt: true
71
+ });
69
72
  }
70
73
  };
71
74
  React.useEffect(()=>{
@@ -30,9 +30,15 @@ export function fromFieldValidations(field) {
30
30
  min: undefined
31
31
  };
32
32
  }
33
+ const contentTypes = linkContentTypeValidations?.linkContentType ? [
34
+ ...linkContentTypeValidations.linkContentType
35
+ ] : undefined;
36
+ const mimetypeGroups = linkMimetypeGroupValidations?.linkMimetypeGroup ? [
37
+ ...linkMimetypeGroupValidations.linkMimetypeGroup
38
+ ] : undefined;
33
39
  const result = {
34
- contentTypes: linkContentTypeValidations?.linkContentType ?? undefined,
35
- mimetypeGroups: linkMimetypeGroupValidations?.linkMimetypeGroup ?? undefined,
40
+ contentTypes,
41
+ mimetypeGroups,
36
42
  numberOfLinks
37
43
  };
38
44
  return result;
@@ -12,7 +12,10 @@ type FetchingWrappedAssetCardProps = {
12
12
  renderDragHandle?: RenderDragFn;
13
13
  renderCustomCard?: CustomCardRenderer;
14
14
  renderCustomMissingEntityCard?: RenderCustomMissingEntityCard;
15
- addReferenceToRelease?: (reference: Asset, localeCode?: string) => Promise<void>;
15
+ addReferenceToRelease?: (reference: Asset, localeCode?: string, options?: {
16
+ openModalForVersionSelection?: boolean;
17
+ skipNestedReferencesPrompt?: boolean;
18
+ }) => Promise<void>;
16
19
  };
17
20
  export declare function FetchingWrappedAssetCard(props: FetchingWrappedAssetCardProps): React.JSX.Element;
18
21
  export {};
@@ -33,7 +33,10 @@ export interface ReferenceEditorProps {
33
33
  oldIndex: number;
34
34
  newIndex: number;
35
35
  }) => void;
36
- addReferenceToRelease?: (reference: Entry | Asset, localeCode?: string) => Promise<void>;
36
+ addReferenceToRelease?: (reference: Entry | Asset, localeCode?: string, options?: {
37
+ openModalForVersionSelection?: boolean;
38
+ skipNestedReferencesPrompt?: boolean;
39
+ }) => Promise<void>;
37
40
  }
38
41
  export type CustomActionProps = LinkActionsProps;
39
42
  export declare function ReferenceEditor<T>(props: ReferenceEditorProps & {
@@ -17,6 +17,9 @@ export type EntryCardReferenceEditorProps = ReferenceEditorProps & {
17
17
  activeLocales?: {
18
18
  code: string;
19
19
  }[];
20
- addReferenceToRelease?: (reference: Entry, localeCode?: string) => Promise<void>;
20
+ addReferenceToRelease?: (reference: Entry, localeCode?: string, options?: {
21
+ openModalForVersionSelection?: boolean;
22
+ skipNestedReferencesPrompt?: boolean;
23
+ }) => Promise<void>;
21
24
  };
22
25
  export declare function FetchingWrappedEntryCard(props: EntryCardReferenceEditorProps): React.JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/field-editor-reference",
3
- "version": "6.21.2",
3
+ "version": "6.22.1-canary.1+9c2f0fbb",
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": "cd410dabfce5b53342a2211863edbe0cc00e7c87"
71
+ "gitHead": "9c2f0fbbcb9dc08c6192ecd01217202a4a361945"
72
72
  }