@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.
- package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +4 -1
- package/dist/cjs/common/useContentTypePermissions.js +5 -3
- package/dist/cjs/common/useEditorPermissions.spec.js +34 -0
- package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +4 -1
- package/dist/cjs/utils/fromFieldValidations.js +8 -2
- package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +4 -1
- package/dist/esm/common/useContentTypePermissions.js +5 -3
- package/dist/esm/common/useEditorPermissions.spec.js +34 -0
- package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +4 -1
- package/dist/esm/utils/fromFieldValidations.js +8 -2
- package/dist/types/assets/WrappedAssetCard/FetchingWrappedAssetCard.d.ts +4 -1
- package/dist/types/common/ReferenceEditor.d.ts +4 -1
- package/dist/types/entries/WrappedEntryCard/FetchingWrappedEntryCard.d.ts +4 -1
- package/package.json +2 -2
|
@@ -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
|
-
|
|
30
|
+
const hasValidationContentTypes = validationContentTypes.length > 0;
|
|
31
|
+
if (hasValidationContentTypes && allContentTypes.length === 0) {
|
|
30
32
|
return [];
|
|
31
33
|
}
|
|
32
|
-
if (
|
|
33
|
-
return allContentTypes.filter((ct)=>
|
|
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
|
|
50
|
-
mimetypeGroups
|
|
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
|
-
|
|
15
|
+
const hasValidationContentTypes = validationContentTypes.length > 0;
|
|
16
|
+
if (hasValidationContentTypes && allContentTypes.length === 0) {
|
|
15
17
|
return [];
|
|
16
18
|
}
|
|
17
|
-
if (
|
|
18
|
-
return allContentTypes.filter((ct)=>
|
|
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
|
|
35
|
-
mimetypeGroups
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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": "
|
|
71
|
+
"gitHead": "9c2f0fbbcb9dc08c6192ecd01217202a4a361945"
|
|
72
72
|
}
|