@contentful/field-editor-reference 5.9.0 → 5.11.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 +183 -0
- package/dist/cjs/__fixtures__/asset/index.js +37 -0
- package/dist/cjs/__fixtures__/content-type/index.js +16 -0
- package/dist/cjs/__fixtures__/entry/index.js +33 -0
- package/dist/cjs/__fixtures__/fixtures.js +71 -0
- package/dist/cjs/__fixtures__/locale/index.js +40 -0
- package/dist/cjs/__fixtures__/space/index.js +16 -0
- package/dist/cjs/assets/MultipleMediaEditor.js +86 -0
- package/dist/cjs/assets/SingleMediaEditor.js +69 -0
- package/dist/cjs/assets/WrappedAssetCard/AssetCardActions.js +125 -0
- package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +171 -0
- package/dist/cjs/assets/WrappedAssetCard/WrappedAssetCard.js +159 -0
- package/dist/cjs/assets/WrappedAssetCard/WrappedAssetLink.js +130 -0
- package/dist/cjs/assets/index.js +24 -0
- package/dist/cjs/common/EntityStore.js +420 -0
- package/dist/cjs/common/MultipleReferenceEditor.js +164 -0
- package/dist/cjs/common/ReferenceEditor.js +74 -0
- package/dist/cjs/common/SingleReferenceEditor.js +118 -0
- package/dist/cjs/common/SortableLinkList.js +95 -0
- package/dist/cjs/common/customCardTypes.js +44 -0
- package/dist/cjs/common/useAccessApi.js +19 -0
- package/dist/cjs/common/useContentTypePermissions.js +54 -0
- package/dist/cjs/common/useEditorPermissions.js +77 -0
- package/dist/cjs/common/useEditorPermissions.spec.js +205 -0
- package/dist/cjs/components/AssetThumbnail/AssetThumbnail.js +62 -0
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.js +102 -0
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +254 -0
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +199 -0
- package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +190 -0
- package/dist/cjs/components/CreateEntryLinkButton/useGlobalMouseUp.js +19 -0
- package/dist/cjs/components/LinkActions/CombinedLinkActions.js +167 -0
- package/dist/cjs/components/LinkActions/LinkActions.js +123 -0
- package/dist/cjs/components/LinkActions/LinkEntityActions.js +186 -0
- package/dist/cjs/components/LinkActions/NoLinkPermissionsInfo.js +54 -0
- package/dist/cjs/components/LinkActions/helpers.js +78 -0
- package/dist/cjs/components/LinkActions/redesignStyles.js +44 -0
- package/dist/cjs/components/LinkActions/styles.js +33 -0
- package/dist/cjs/components/MissingEntityCard/MissingEntityCard.js +75 -0
- package/dist/cjs/components/MissingEntityCard/styles.js +29 -0
- package/dist/cjs/components/ScheduledIconWithTooltip/ScheduleTooltip.js +75 -0
- package/dist/cjs/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +81 -0
- package/dist/cjs/components/ScheduledIconWithTooltip/formatDateAndTime.js +45 -0
- package/dist/cjs/components/SpaceName/SpaceName.js +91 -0
- package/dist/cjs/components/index.js +44 -0
- package/dist/cjs/entries/MultipleEntryReferenceEditor.js +86 -0
- package/dist/cjs/entries/SingleEntryReferenceEditor.js +74 -0
- package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +189 -0
- package/dist/cjs/entries/WrappedEntryCard/WrappedEntryCard.js +181 -0
- package/dist/cjs/entries/index.js +24 -0
- package/dist/cjs/index.js +92 -0
- package/dist/cjs/resources/Cards/ContentfulEntryCard.js +87 -0
- package/dist/cjs/resources/Cards/ResourceCard.js +111 -0
- package/dist/cjs/resources/Cards/UnsupportedEntityCard.js +64 -0
- package/dist/cjs/resources/MultipleResourceReferenceEditor.js +157 -0
- package/dist/cjs/resources/MultipleResourceReferenceEditor.spec.js +297 -0
- package/dist/cjs/resources/SingleResourceReferenceEditor.js +87 -0
- package/dist/cjs/resources/SingleResourceReferenceEditor.spec.js +161 -0
- package/dist/cjs/resources/index.js +19 -0
- package/dist/cjs/resources/testHelpers/resourceEditorHelpers.js +121 -0
- package/dist/cjs/resources/useResourceLinkActions.js +88 -0
- package/dist/cjs/types.js +22 -0
- package/dist/cjs/utils/fromFieldValidations.js +54 -0
- package/dist/esm/__fixtures__/FakeSdk.js +173 -0
- package/dist/esm/__fixtures__/asset/index.js +6 -0
- package/dist/esm/__fixtures__/content-type/index.js +2 -0
- package/dist/esm/__fixtures__/entry/index.js +5 -0
- package/dist/esm/__fixtures__/fixtures.js +6 -0
- package/dist/esm/__fixtures__/locale/index.js +15 -0
- package/dist/esm/__fixtures__/space/index.js +2 -0
- package/dist/esm/assets/MultipleMediaEditor.js +37 -0
- package/dist/esm/assets/SingleMediaEditor.js +20 -0
- package/dist/esm/assets/WrappedAssetCard/AssetCardActions.js +63 -0
- package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +122 -0
- package/dist/esm/assets/WrappedAssetCard/WrappedAssetCard.js +105 -0
- package/dist/esm/assets/WrappedAssetCard/WrappedAssetLink.js +76 -0
- package/dist/esm/assets/index.js +3 -0
- package/dist/esm/common/EntityStore.js +347 -0
- package/dist/esm/common/MultipleReferenceEditor.js +111 -0
- package/dist/esm/common/ReferenceEditor.js +20 -0
- package/dist/esm/common/SingleReferenceEditor.js +70 -0
- package/dist/esm/common/SortableLinkList.js +41 -0
- package/dist/esm/common/customCardTypes.js +1 -0
- package/dist/esm/common/useAccessApi.js +9 -0
- package/dist/esm/common/useContentTypePermissions.js +44 -0
- package/dist/esm/common/useEditorPermissions.js +67 -0
- package/dist/esm/common/useEditorPermissions.spec.js +201 -0
- package/dist/esm/components/AssetThumbnail/AssetThumbnail.js +13 -0
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.js +48 -0
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +206 -0
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +145 -0
- package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +142 -0
- package/dist/esm/components/CreateEntryLinkButton/useGlobalMouseUp.js +9 -0
- package/dist/esm/components/LinkActions/CombinedLinkActions.js +118 -0
- package/dist/esm/components/LinkActions/LinkActions.js +66 -0
- package/dist/esm/components/LinkActions/LinkEntityActions.js +127 -0
- package/dist/esm/components/LinkActions/NoLinkPermissionsInfo.js +5 -0
- package/dist/esm/components/LinkActions/helpers.js +57 -0
- package/dist/esm/components/LinkActions/redesignStyles.js +18 -0
- package/dist/esm/components/LinkActions/styles.js +10 -0
- package/dist/esm/components/MissingEntityCard/MissingEntityCard.js +26 -0
- package/dist/esm/components/MissingEntityCard/styles.js +11 -0
- package/dist/esm/components/ScheduledIconWithTooltip/ScheduleTooltip.js +18 -0
- package/dist/esm/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +32 -0
- package/dist/esm/components/ScheduledIconWithTooltip/formatDateAndTime.js +19 -0
- package/dist/esm/components/SpaceName/SpaceName.js +37 -0
- package/dist/esm/components/index.js +8 -0
- package/dist/esm/entries/MultipleEntryReferenceEditor.js +37 -0
- package/dist/esm/entries/SingleEntryReferenceEditor.js +25 -0
- package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +135 -0
- package/dist/esm/entries/WrappedEntryCard/WrappedEntryCard.js +127 -0
- package/dist/esm/entries/index.js +3 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/resources/Cards/ContentfulEntryCard.js +38 -0
- package/dist/esm/resources/Cards/ResourceCard.js +62 -0
- package/dist/esm/resources/Cards/UnsupportedEntityCard.js +15 -0
- package/dist/esm/resources/MultipleResourceReferenceEditor.js +104 -0
- package/dist/esm/resources/MultipleResourceReferenceEditor.spec.js +254 -0
- package/dist/esm/resources/SingleResourceReferenceEditor.js +33 -0
- package/dist/esm/resources/SingleResourceReferenceEditor.spec.js +118 -0
- package/dist/esm/resources/index.js +2 -0
- package/dist/esm/resources/testHelpers/resourceEditorHelpers.js +103 -0
- package/dist/esm/resources/useResourceLinkActions.js +78 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/utils/fromFieldValidations.js +39 -0
- package/dist/{__fixtures__ → types/__fixtures__}/FakeSdk.d.ts +8 -8
- package/dist/{__fixtures__ → types/__fixtures__}/asset/index.d.ts +6 -6
- package/dist/{__fixtures__ → types/__fixtures__}/content-type/index.d.ts +2 -2
- package/dist/{__fixtures__ → types/__fixtures__}/entry/index.d.ts +5 -5
- package/dist/{__fixtures__ → types/__fixtures__}/fixtures.d.ts +6 -6
- package/dist/{__fixtures__ → types/__fixtures__}/locale/index.d.ts +42 -42
- package/dist/{__fixtures__ → types/__fixtures__}/space/index.d.ts +2 -2
- package/dist/{assets → types/assets}/MultipleMediaEditor.d.ts +10 -10
- package/dist/types/assets/SingleMediaEditor.d.ts +10 -0
- package/dist/{assets → types/assets}/WrappedAssetCard/AssetCardActions.d.ts +11 -11
- package/dist/{assets → types/assets}/WrappedAssetCard/FetchingWrappedAssetCard.d.ts +17 -17
- package/dist/{assets → types/assets}/WrappedAssetCard/WrappedAssetCard.d.ts +24 -24
- package/dist/{assets → types/assets}/WrappedAssetCard/WrappedAssetLink.d.ts +16 -16
- package/dist/{assets → types/assets}/index.d.ts +3 -3
- package/dist/{common → types/common}/EntityStore.d.ts +62 -62
- package/dist/{common → types/common}/MultipleReferenceEditor.d.ts +25 -25
- package/dist/{common → types/common}/ReferenceEditor.d.ts +46 -46
- package/dist/{common → types/common}/SingleReferenceEditor.d.ts +24 -24
- package/dist/{common → types/common}/SortableLinkList.d.ts +19 -19
- package/dist/{common → types/common}/customCardTypes.d.ts +29 -29
- package/dist/types/common/useAccessApi.d.ts +16 -0
- package/dist/{common → types/common}/useContentTypePermissions.d.ts +17 -17
- package/dist/{common → types/common}/useEditorPermissions.d.ts +17 -17
- package/dist/types/common/useEditorPermissions.spec.d.ts +1 -0
- package/dist/{components → types/components}/AssetThumbnail/AssetThumbnail.d.ts +7 -7
- package/dist/{components → types/components}/CreateEntryLinkButton/CreateEntryLinkButton.d.ts +19 -19
- package/dist/types/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.d.ts +1 -0
- package/dist/{components → types/components}/CreateEntryLinkButton/CreateEntryMenuTrigger.d.ts +31 -31
- package/dist/types/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.d.ts +1 -0
- package/dist/{components → types/components}/CreateEntryLinkButton/useGlobalMouseUp.d.ts +1 -1
- package/dist/{components → types/components}/LinkActions/CombinedLinkActions.d.ts +10 -10
- package/dist/{components → types/components}/LinkActions/LinkActions.d.ts +26 -26
- package/dist/{components → types/components}/LinkActions/LinkEntityActions.d.ts +24 -24
- package/dist/types/components/LinkActions/NoLinkPermissionsInfo.d.ts +2 -0
- package/dist/{components → types/components}/LinkActions/helpers.d.ts +26 -26
- package/dist/{components → types/components}/LinkActions/redesignStyles.d.ts +3 -3
- package/dist/{components → types/components}/LinkActions/styles.d.ts +2 -2
- package/dist/{components → types/components}/MissingEntityCard/MissingEntityCard.d.ts +8 -8
- package/dist/{components → types/components}/MissingEntityCard/styles.d.ts +2 -2
- package/dist/{components → types/components}/ScheduledIconWithTooltip/ScheduleTooltip.d.ts +11 -11
- package/dist/{components → types/components}/ScheduledIconWithTooltip/ScheduledIconWithTooltip.d.ts +10 -10
- package/dist/{components → types/components}/ScheduledIconWithTooltip/formatDateAndTime.d.ts +15 -15
- package/dist/types/components/SpaceName/SpaceName.d.ts +6 -0
- package/dist/{components → types/components}/index.d.ts +9 -9
- package/dist/{entries → types/entries}/MultipleEntryReferenceEditor.d.ts +3 -3
- package/dist/{entries → types/entries}/SingleEntryReferenceEditor.d.ts +8 -8
- package/dist/{entries → types/entries}/WrappedEntryCard/FetchingWrappedEntryCard.d.ts +18 -18
- package/dist/{entries → types/entries}/WrappedEntryCard/WrappedEntryCard.d.ts +35 -35
- package/dist/{entries → types/entries}/index.d.ts +3 -3
- package/dist/{index.d.ts → types/index.d.ts} +10 -8
- package/dist/{resources → types/resources}/Cards/ContentfulEntryCard.d.ts +21 -21
- package/dist/{resources → types/resources}/Cards/ResourceCard.d.ts +12 -12
- package/dist/{resources → types/resources}/Cards/UnsupportedEntityCard.d.ts +4 -4
- package/dist/{resources → types/resources}/MultipleResourceReferenceEditor.d.ts +7 -7
- package/dist/types/resources/MultipleResourceReferenceEditor.spec.d.ts +1 -0
- package/dist/{resources → types/resources}/SingleResourceReferenceEditor.d.ts +7 -7
- package/dist/types/resources/SingleResourceReferenceEditor.spec.d.ts +1 -0
- package/dist/{resources → types/resources}/index.d.ts +2 -2
- package/dist/{resources → types/resources}/testHelpers/resourceEditorHelpers.d.ts +50 -50
- package/dist/{resources → types/resources}/useResourceLinkActions.d.ts +7 -7
- package/dist/{types.d.ts → types/types.d.ts} +104 -104
- package/dist/{utils → types/utils}/fromFieldValidations.d.ts +21 -21
- package/package.json +25 -11
- package/CHANGELOG.md +0 -860
- package/dist/assets/SingleMediaEditor.d.ts +0 -10
- package/dist/common/useAccessApi.d.ts +0 -16
- package/dist/components/LinkActions/NoLinkPermissionsInfo.d.ts +0 -2
- package/dist/components/SpaceName/SpaceName.d.ts +0 -6
- package/dist/field-editor-reference.cjs.development.js +0 -2753
- package/dist/field-editor-reference.cjs.development.js.map +0 -1
- package/dist/field-editor-reference.cjs.production.min.js +0 -2
- package/dist/field-editor-reference.cjs.production.min.js.map +0 -1
- package/dist/field-editor-reference.esm.js +0 -2727
- package/dist/field-editor-reference.esm.js.map +0 -1
- package/dist/index.js +0 -8
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
6
|
+
const _f36components = require("@contentful/f36-components");
|
|
7
|
+
require("@testing-library/jest-dom/extend-expect");
|
|
8
|
+
const _react1 = require("@testing-library/react");
|
|
9
|
+
const _noop = _interop_require_default(require("lodash/noop"));
|
|
10
|
+
const _fill = _interop_require_default(require("lodash/fill"));
|
|
11
|
+
const _CreateEntryMenuTrigger = require("./CreateEntryMenuTrigger");
|
|
12
|
+
function _interop_require_default(obj) {
|
|
13
|
+
return obj && obj.__esModule ? obj : {
|
|
14
|
+
default: obj
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
18
|
+
if (typeof WeakMap !== "function") return null;
|
|
19
|
+
var cacheBabelInterop = new WeakMap();
|
|
20
|
+
var cacheNodeInterop = new WeakMap();
|
|
21
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
22
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
23
|
+
})(nodeInterop);
|
|
24
|
+
}
|
|
25
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
26
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
30
|
+
return {
|
|
31
|
+
default: obj
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
35
|
+
if (cache && cache.has(obj)) {
|
|
36
|
+
return cache.get(obj);
|
|
37
|
+
}
|
|
38
|
+
var newObj = {};
|
|
39
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
40
|
+
for(var key in obj){
|
|
41
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
42
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
43
|
+
if (desc && (desc.get || desc.set)) {
|
|
44
|
+
Object.defineProperty(newObj, key, desc);
|
|
45
|
+
} else {
|
|
46
|
+
newObj[key] = obj[key];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
newObj.default = obj;
|
|
51
|
+
if (cache) {
|
|
52
|
+
cache.set(obj, newObj);
|
|
53
|
+
}
|
|
54
|
+
return newObj;
|
|
55
|
+
}
|
|
56
|
+
(0, _react1.configure)({
|
|
57
|
+
testIdAttribute: 'data-test-id'
|
|
58
|
+
});
|
|
59
|
+
const CONTENT_TYPE_1 = {
|
|
60
|
+
name: 'name-1',
|
|
61
|
+
sys: {
|
|
62
|
+
id: 'ID_1'
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const CONTENT_TYPE_2 = {
|
|
66
|
+
name: 'name-2',
|
|
67
|
+
sys: {
|
|
68
|
+
id: 'ID_2'
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const CONTENT_TYPE_3 = {
|
|
72
|
+
name: 'name-3',
|
|
73
|
+
sys: {
|
|
74
|
+
id: 'ID_3'
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
describe('CreateEntryMenuTrigger general', ()=>{
|
|
78
|
+
const props = {
|
|
79
|
+
contentTypes: [
|
|
80
|
+
CONTENT_TYPE_1,
|
|
81
|
+
CONTENT_TYPE_2,
|
|
82
|
+
CONTENT_TYPE_3
|
|
83
|
+
],
|
|
84
|
+
onSelect: ()=>{
|
|
85
|
+
return Promise.resolve();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
let stub = jest.fn();
|
|
89
|
+
beforeEach(()=>{
|
|
90
|
+
stub = jest.fn().mockImplementation(()=>_react.createElement(_f36components.Button, {
|
|
91
|
+
testId: "menu-trigger"
|
|
92
|
+
}));
|
|
93
|
+
});
|
|
94
|
+
it('shares the state and functions for the menu', ()=>{
|
|
95
|
+
const stub = (api)=>{
|
|
96
|
+
expect(api.isOpen).toBe(false);
|
|
97
|
+
expect(api.isSelecting).toBe(false);
|
|
98
|
+
return _react.createElement("span", null);
|
|
99
|
+
};
|
|
100
|
+
(0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, props, stub));
|
|
101
|
+
});
|
|
102
|
+
it('should set isSelecting to true in case onSelect returns a promise', async ()=>{
|
|
103
|
+
const selectStub = jest.fn(()=>new Promise((resolve)=>setTimeout(resolve, 1000)));
|
|
104
|
+
const { getAllByTestId , getByTestId } = (0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
105
|
+
...props,
|
|
106
|
+
onSelect: selectStub
|
|
107
|
+
}, stub));
|
|
108
|
+
(0, _react1.act)(()=>{
|
|
109
|
+
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
110
|
+
});
|
|
111
|
+
(0, _react1.act)(()=>{
|
|
112
|
+
_react1.fireEvent.click(getAllByTestId('contentType')[0]);
|
|
113
|
+
});
|
|
114
|
+
expect(selectStub).toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
it('should not set isSelecting to true in case onSelect is sync', async ()=>{
|
|
117
|
+
const selectStub = jest.fn();
|
|
118
|
+
const { getAllByTestId , getByTestId } = (0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
119
|
+
...props,
|
|
120
|
+
onSelect: selectStub
|
|
121
|
+
}, stub));
|
|
122
|
+
(0, _react1.act)(()=>{
|
|
123
|
+
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
124
|
+
});
|
|
125
|
+
(0, _react1.act)(()=>{
|
|
126
|
+
_react1.fireEvent.click(getAllByTestId('contentType')[0]);
|
|
127
|
+
});
|
|
128
|
+
expect(stub).toHaveBeenLastCalledWith({
|
|
129
|
+
isOpen: false,
|
|
130
|
+
isSelecting: false
|
|
131
|
+
});
|
|
132
|
+
expect(selectStub).toHaveBeenCalled();
|
|
133
|
+
});
|
|
134
|
+
it('renders text input if contentTypes.length > 20', ()=>{
|
|
135
|
+
const { getByTestId } = (0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
136
|
+
...props,
|
|
137
|
+
contentTypes: (0, _fill.default)(Array(21), CONTENT_TYPE_3)
|
|
138
|
+
}, stub));
|
|
139
|
+
(0, _react1.act)(()=>{
|
|
140
|
+
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
141
|
+
});
|
|
142
|
+
expect(getByTestId('add-entry-menu-search')).toBeDefined();
|
|
143
|
+
});
|
|
144
|
+
it('shows the search results if typed in input', ()=>{
|
|
145
|
+
const contentTypes = (0, _fill.default)((0, _fill.default)((0, _fill.default)(Array(21), CONTENT_TYPE_1, 0, 10), CONTENT_TYPE_2, 10, 20), CONTENT_TYPE_3, 20);
|
|
146
|
+
const { getByTestId , getAllByTestId } = (0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
147
|
+
...props,
|
|
148
|
+
contentTypes: contentTypes
|
|
149
|
+
}, stub));
|
|
150
|
+
(0, _react1.act)(()=>{
|
|
151
|
+
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
152
|
+
});
|
|
153
|
+
const input = getByTestId('add-entry-menu-search');
|
|
154
|
+
_react1.fireEvent.change(input, {
|
|
155
|
+
target: {
|
|
156
|
+
value: '1'
|
|
157
|
+
},
|
|
158
|
+
preventDefault: _noop.default
|
|
159
|
+
});
|
|
160
|
+
expect(getAllByTestId('contentType')).toHaveLength(10);
|
|
161
|
+
expect(getByTestId('add-entru-menu-search-results').textContent).toBe('10 results');
|
|
162
|
+
_react1.fireEvent.change(input, {
|
|
163
|
+
target: {
|
|
164
|
+
value: '3'
|
|
165
|
+
},
|
|
166
|
+
preventDefault: _noop.default
|
|
167
|
+
});
|
|
168
|
+
expect(getAllByTestId('contentType')).toHaveLength(1);
|
|
169
|
+
expect(getByTestId('add-entru-menu-search-results').textContent).toBe('1 result');
|
|
170
|
+
_react1.fireEvent.change(input, {
|
|
171
|
+
target: {
|
|
172
|
+
value: '4'
|
|
173
|
+
},
|
|
174
|
+
preventDefault: _noop.default
|
|
175
|
+
});
|
|
176
|
+
expect(getByTestId('add-entru-menu-search-results').textContent).toBe('No results found');
|
|
177
|
+
});
|
|
178
|
+
it('shows suggestedContentType in the list', ()=>{
|
|
179
|
+
const { getByTestId } = (0, _react1.render)(_react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
|
|
180
|
+
...props,
|
|
181
|
+
suggestedContentTypeId: props.contentTypes[0].sys.id
|
|
182
|
+
}, stub));
|
|
183
|
+
(0, _react1.act)(()=>{
|
|
184
|
+
_react1.fireEvent.click(getByTestId('menu-trigger'));
|
|
185
|
+
});
|
|
186
|
+
const suggestedContentType = getByTestId('suggested');
|
|
187
|
+
expect(suggestedContentType).toBeDefined();
|
|
188
|
+
expect(suggestedContentType.textContent).toBe(props.contentTypes[0].name);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useGlobalMouseUp", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return useGlobalMouseUp;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _react = require("react");
|
|
12
|
+
const useGlobalMouseUp = (handler)=>{
|
|
13
|
+
(0, _react.useEffect)(()=>{
|
|
14
|
+
document.addEventListener('mouseup', handler);
|
|
15
|
+
return ()=>document.removeEventListener('mouseup', handler);
|
|
16
|
+
}, [
|
|
17
|
+
handler
|
|
18
|
+
]);
|
|
19
|
+
};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "CombinedLinkActions", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return CombinedLinkActions;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
12
|
+
const _f36components = require("@contentful/f36-components");
|
|
13
|
+
const _f36icons = require("@contentful/f36-icons");
|
|
14
|
+
const _CreateEntryLinkButton = require("../CreateEntryLinkButton/CreateEntryLinkButton");
|
|
15
|
+
const _LinkActions = require("./LinkActions");
|
|
16
|
+
const _NoLinkPermissionsInfo = require("./NoLinkPermissionsInfo");
|
|
17
|
+
const _redesignStyles = _interop_require_wildcard(require("./redesignStyles"));
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
19
|
+
if (typeof WeakMap !== "function") return null;
|
|
20
|
+
var cacheBabelInterop = new WeakMap();
|
|
21
|
+
var cacheNodeInterop = new WeakMap();
|
|
22
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
23
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
24
|
+
})(nodeInterop);
|
|
25
|
+
}
|
|
26
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
27
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
28
|
+
return obj;
|
|
29
|
+
}
|
|
30
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
31
|
+
return {
|
|
32
|
+
default: obj
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
36
|
+
if (cache && cache.has(obj)) {
|
|
37
|
+
return cache.get(obj);
|
|
38
|
+
}
|
|
39
|
+
var newObj = {};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
const testIds = {
|
|
58
|
+
..._LinkActions.testIds,
|
|
59
|
+
actionsWrapper: 'link-actions-menu-trigger'
|
|
60
|
+
};
|
|
61
|
+
function CombinedLinkActions(props) {
|
|
62
|
+
if (props.isFull) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const hideEmptyCard = props.entityType === 'Asset' && !props.isEmpty;
|
|
66
|
+
return _react.createElement("div", {
|
|
67
|
+
className: hideEmptyCard ? '' : _redesignStyles.container
|
|
68
|
+
}, !props.canCreateEntity && !props.canLinkEntity && _react.createElement(_NoLinkPermissionsInfo.NoLinkPermissionsInfo, null), props.entityType === 'Entry' && _react.createElement(CombinedEntryLinkActions, props), props.entityType === 'Asset' && _react.createElement(CombinedAssetLinkActions, props));
|
|
69
|
+
}
|
|
70
|
+
function CombinedEntryLinkActions(props) {
|
|
71
|
+
if (props.canCreateEntity) {
|
|
72
|
+
return _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
73
|
+
testId: testIds.actionsWrapper,
|
|
74
|
+
disabled: props.isDisabled,
|
|
75
|
+
text: props.combinedActionsLabel || 'Add content',
|
|
76
|
+
contentTypes: props.contentTypes,
|
|
77
|
+
hasPlusIcon: true,
|
|
78
|
+
useExperimentalStyles: true,
|
|
79
|
+
dropdownSettings: {
|
|
80
|
+
position: 'bottom-left'
|
|
81
|
+
},
|
|
82
|
+
onSelect: (contentTypeId)=>{
|
|
83
|
+
return contentTypeId ? props.onCreate(contentTypeId) : Promise.resolve();
|
|
84
|
+
},
|
|
85
|
+
customDropdownItems: props.canLinkEntity ? _react.createElement(_f36components.Menu.Item, {
|
|
86
|
+
testId: testIds.linkExisting,
|
|
87
|
+
onClick: ()=>{
|
|
88
|
+
props.onLinkExisting();
|
|
89
|
+
}
|
|
90
|
+
}, "Add existing content") : undefined
|
|
91
|
+
});
|
|
92
|
+
} else if (props.canLinkEntity) {
|
|
93
|
+
return _react.createElement(_f36components.Button, {
|
|
94
|
+
isDisabled: props.isDisabled,
|
|
95
|
+
testId: testIds.linkExisting,
|
|
96
|
+
className: _redesignStyles.action,
|
|
97
|
+
onClick: ()=>{
|
|
98
|
+
props.onLinkExisting();
|
|
99
|
+
},
|
|
100
|
+
variant: "secondary",
|
|
101
|
+
startIcon: _react.createElement(_f36icons.LinkIcon, null),
|
|
102
|
+
size: "small"
|
|
103
|
+
}, "Add existing content");
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function CombinedAssetLinkActions(props) {
|
|
108
|
+
const [isOpen, setOpen] = _react.useState(false);
|
|
109
|
+
if (!props.canLinkEntity || !props.canCreateEntity) {
|
|
110
|
+
if (props.canLinkEntity) {
|
|
111
|
+
return _react.createElement(_f36components.Button, {
|
|
112
|
+
isDisabled: props.isDisabled,
|
|
113
|
+
testId: testIds.linkExisting,
|
|
114
|
+
className: _redesignStyles.action,
|
|
115
|
+
onClick: ()=>{
|
|
116
|
+
props.onLinkExisting();
|
|
117
|
+
},
|
|
118
|
+
variant: "secondary",
|
|
119
|
+
startIcon: _react.createElement(_f36icons.PlusIcon, null),
|
|
120
|
+
size: "small"
|
|
121
|
+
}, "Add existing media");
|
|
122
|
+
}
|
|
123
|
+
if (props.canCreateEntity) {
|
|
124
|
+
return _react.createElement(_f36components.Button, {
|
|
125
|
+
isDisabled: props.isDisabled,
|
|
126
|
+
testId: testIds.createAndLink,
|
|
127
|
+
className: _redesignStyles.action,
|
|
128
|
+
onClick: ()=>{
|
|
129
|
+
props.onCreate();
|
|
130
|
+
},
|
|
131
|
+
variant: "secondary",
|
|
132
|
+
startIcon: _react.createElement(_f36icons.PlusIcon, null),
|
|
133
|
+
size: "small"
|
|
134
|
+
}, "Add media");
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return _react.createElement(_f36components.Menu, {
|
|
139
|
+
isOpen: isOpen,
|
|
140
|
+
onClose: ()=>{
|
|
141
|
+
setOpen(false);
|
|
142
|
+
},
|
|
143
|
+
onOpen: ()=>{
|
|
144
|
+
setOpen(true);
|
|
145
|
+
}
|
|
146
|
+
}, _react.createElement(_f36components.Menu.Trigger, null, _react.createElement(_f36components.Button, {
|
|
147
|
+
endIcon: _react.createElement(_f36icons.ChevronDownIcon, null),
|
|
148
|
+
isDisabled: props.isDisabled,
|
|
149
|
+
testId: testIds.actionsWrapper,
|
|
150
|
+
className: _redesignStyles.action,
|
|
151
|
+
variant: "secondary",
|
|
152
|
+
startIcon: _react.createElement(_f36icons.PlusIcon, null),
|
|
153
|
+
size: "small"
|
|
154
|
+
}, "Add media")), isOpen && _react.createElement(_f36components.Menu.List, {
|
|
155
|
+
testId: testIds.dropdown
|
|
156
|
+
}, _react.createElement(_f36components.Menu.Item, {
|
|
157
|
+
testId: testIds.linkExisting,
|
|
158
|
+
onClick: ()=>{
|
|
159
|
+
props.onLinkExisting();
|
|
160
|
+
}
|
|
161
|
+
}, "Add existing media"), _react.createElement(_f36components.Menu.Item, {
|
|
162
|
+
testId: testIds.createAndLink,
|
|
163
|
+
onClick: ()=>{
|
|
164
|
+
props.onCreate();
|
|
165
|
+
}
|
|
166
|
+
}, "Add new media")));
|
|
167
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
testIds: function() {
|
|
13
|
+
return testIds;
|
|
14
|
+
},
|
|
15
|
+
LinkActions: function() {
|
|
16
|
+
return LinkActions;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
20
|
+
const _f36components = require("@contentful/f36-components");
|
|
21
|
+
const _f36icons = require("@contentful/f36-icons");
|
|
22
|
+
const _CreateEntryLinkButton = require("../CreateEntryLinkButton/CreateEntryLinkButton");
|
|
23
|
+
const _NoLinkPermissionsInfo = require("./NoLinkPermissionsInfo");
|
|
24
|
+
const _styles = _interop_require_wildcard(require("./styles"));
|
|
25
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
26
|
+
if (typeof WeakMap !== "function") return null;
|
|
27
|
+
var cacheBabelInterop = new WeakMap();
|
|
28
|
+
var cacheNodeInterop = new WeakMap();
|
|
29
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
30
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
31
|
+
})(nodeInterop);
|
|
32
|
+
}
|
|
33
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
34
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
38
|
+
return {
|
|
39
|
+
default: obj
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
43
|
+
if (cache && cache.has(obj)) {
|
|
44
|
+
return cache.get(obj);
|
|
45
|
+
}
|
|
46
|
+
var newObj = {};
|
|
47
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
48
|
+
for(var key in obj){
|
|
49
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
50
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
51
|
+
if (desc && (desc.get || desc.set)) {
|
|
52
|
+
Object.defineProperty(newObj, key, desc);
|
|
53
|
+
} else {
|
|
54
|
+
newObj[key] = obj[key];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
newObj.default = obj;
|
|
59
|
+
if (cache) {
|
|
60
|
+
cache.set(obj, newObj);
|
|
61
|
+
}
|
|
62
|
+
return newObj;
|
|
63
|
+
}
|
|
64
|
+
const defaultEntryLabels = {
|
|
65
|
+
createNew: (props)=>props?.contentType ? `Create new ${props.contentType} and link` : 'Create new entry and link',
|
|
66
|
+
linkExisting: (props)=>props?.canLinkMultiple ? 'Link existing entries' : 'Link existing entry'
|
|
67
|
+
};
|
|
68
|
+
const defaultAssetLabels = {
|
|
69
|
+
createNew: ()=>`Create new asset and link`,
|
|
70
|
+
linkExisting: (props)=>props?.canLinkMultiple ? 'Link existing assets' : 'Link existing asset'
|
|
71
|
+
};
|
|
72
|
+
const testIds = {
|
|
73
|
+
dropdown: 'linkEditor.dropdown',
|
|
74
|
+
createAndLink: 'linkEditor.createAndLink',
|
|
75
|
+
createAndLinkWrapper: 'create-entry-button-menu-trigger',
|
|
76
|
+
linkExisting: 'linkEditor.linkExisting'
|
|
77
|
+
};
|
|
78
|
+
function LinkActions(props) {
|
|
79
|
+
if (props.isFull) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const defaultLabels = props.entityType === 'Entry' ? defaultEntryLabels : defaultAssetLabels;
|
|
83
|
+
const labels = {
|
|
84
|
+
...defaultLabels,
|
|
85
|
+
...props.actionLabels
|
|
86
|
+
};
|
|
87
|
+
return _react.createElement("div", {
|
|
88
|
+
className: _styles.container
|
|
89
|
+
}, props.canCreateEntity && _react.createElement(_react.Fragment, null, props.entityType === 'Entry' && _react.createElement(_CreateEntryLinkButton.CreateEntryLinkButton, {
|
|
90
|
+
testId: testIds.createAndLink,
|
|
91
|
+
disabled: props.isDisabled,
|
|
92
|
+
text: labels.createNew({
|
|
93
|
+
contentType: props.contentTypes.length === 1 ? props.contentTypes[0].name : undefined
|
|
94
|
+
}),
|
|
95
|
+
contentTypes: props.contentTypes,
|
|
96
|
+
hasPlusIcon: true,
|
|
97
|
+
onSelect: (contentTypeId)=>{
|
|
98
|
+
return contentTypeId ? props.onCreate(contentTypeId, props.itemsLength) : Promise.resolve();
|
|
99
|
+
}
|
|
100
|
+
}), props.entityType === 'Asset' && _react.createElement(_f36components.Button, {
|
|
101
|
+
isDisabled: props.isDisabled,
|
|
102
|
+
testId: testIds.createAndLink,
|
|
103
|
+
onClick: ()=>{
|
|
104
|
+
props.onCreate(undefined, props.itemsLength);
|
|
105
|
+
},
|
|
106
|
+
variant: "secondary",
|
|
107
|
+
startIcon: _react.createElement(_f36icons.PlusIcon, null),
|
|
108
|
+
size: "small"
|
|
109
|
+
}, labels.createNew()), _react.createElement("span", {
|
|
110
|
+
className: _styles.separator
|
|
111
|
+
})), props.canLinkEntity && _react.createElement(_f36components.Button, {
|
|
112
|
+
isDisabled: props.isDisabled,
|
|
113
|
+
testId: testIds.linkExisting,
|
|
114
|
+
onClick: ()=>{
|
|
115
|
+
props.onLinkExisting();
|
|
116
|
+
},
|
|
117
|
+
variant: "secondary",
|
|
118
|
+
startIcon: _react.createElement(_f36icons.LinkIcon, null),
|
|
119
|
+
size: "small"
|
|
120
|
+
}, labels.linkExisting({
|
|
121
|
+
canLinkMultiple: props.canLinkMultiple
|
|
122
|
+
})), !props.canCreateEntity && !props.canLinkEntity && _react.createElement(_NoLinkPermissionsInfo.NoLinkPermissionsInfo, null));
|
|
123
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
useLinkActionsProps: function() {
|
|
13
|
+
return useLinkActionsProps;
|
|
14
|
+
},
|
|
15
|
+
LinkEntityActions: function() {
|
|
16
|
+
return LinkEntityActions;
|
|
17
|
+
},
|
|
18
|
+
CombinedLinkEntityActions: function() {
|
|
19
|
+
return CombinedLinkEntityActions;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
23
|
+
const _CombinedLinkActions = require("./CombinedLinkActions");
|
|
24
|
+
const _helpers = require("./helpers");
|
|
25
|
+
const _LinkActions = require("./LinkActions");
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
27
|
+
if (typeof WeakMap !== "function") return null;
|
|
28
|
+
var cacheBabelInterop = new WeakMap();
|
|
29
|
+
var cacheNodeInterop = new WeakMap();
|
|
30
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
31
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
32
|
+
})(nodeInterop);
|
|
33
|
+
}
|
|
34
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
35
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
36
|
+
return obj;
|
|
37
|
+
}
|
|
38
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
39
|
+
return {
|
|
40
|
+
default: obj
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
44
|
+
if (cache && cache.has(obj)) {
|
|
45
|
+
return cache.get(obj);
|
|
46
|
+
}
|
|
47
|
+
var newObj = {};
|
|
48
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
49
|
+
for(var key in obj){
|
|
50
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
51
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
52
|
+
if (desc && (desc.get || desc.set)) {
|
|
53
|
+
Object.defineProperty(newObj, key, desc);
|
|
54
|
+
} else {
|
|
55
|
+
newObj[key] = obj[key];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
newObj.default = obj;
|
|
60
|
+
if (cache) {
|
|
61
|
+
cache.set(obj, newObj);
|
|
62
|
+
}
|
|
63
|
+
return newObj;
|
|
64
|
+
}
|
|
65
|
+
function useLinkActionsProps(props) {
|
|
66
|
+
const { sdk , editorPermissions , entityType , canLinkMultiple , isDisabled , actionLabels , itemsLength } = props;
|
|
67
|
+
const maxLinksCount = editorPermissions.validations.numberOfLinks?.max;
|
|
68
|
+
const value = sdk.field.getValue();
|
|
69
|
+
const linkCount = Array.isArray(value) ? value.length : value ? 1 : 0;
|
|
70
|
+
const isFull = !!maxLinksCount && maxLinksCount <= linkCount;
|
|
71
|
+
const isEmpty = linkCount === 0;
|
|
72
|
+
const onCreated = _react.useCallback((entity, index = itemsLength, slide)=>{
|
|
73
|
+
props.onCreate(entity.sys.id, index);
|
|
74
|
+
props.onAction && props.onAction({
|
|
75
|
+
type: 'create_and_link',
|
|
76
|
+
entity: entityType,
|
|
77
|
+
entityData: entity,
|
|
78
|
+
slide,
|
|
79
|
+
index
|
|
80
|
+
});
|
|
81
|
+
}, [
|
|
82
|
+
entityType,
|
|
83
|
+
props.onCreate,
|
|
84
|
+
props.onAction
|
|
85
|
+
]);
|
|
86
|
+
const onLinkedExisting = _react.useCallback((entities, index = itemsLength)=>{
|
|
87
|
+
props.onLink(entities.map((item)=>item.sys.id), index);
|
|
88
|
+
entities.forEach((entity, i)=>{
|
|
89
|
+
props.onAction && props.onAction({
|
|
90
|
+
type: 'select_and_link',
|
|
91
|
+
entity: entityType,
|
|
92
|
+
entityData: entity,
|
|
93
|
+
index: index === undefined ? undefined : index + i
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}, [
|
|
97
|
+
entityType,
|
|
98
|
+
props.onLink,
|
|
99
|
+
props.onAction
|
|
100
|
+
]);
|
|
101
|
+
const onCreate = _react.useCallback(async (contentTypeId, index)=>{
|
|
102
|
+
const { entity , slide } = await (0, _helpers.createEntity)({
|
|
103
|
+
sdk,
|
|
104
|
+
entityType,
|
|
105
|
+
contentTypeId
|
|
106
|
+
});
|
|
107
|
+
if (!entity) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
onCreated(entity, index, slide);
|
|
111
|
+
}, [
|
|
112
|
+
sdk,
|
|
113
|
+
entityType,
|
|
114
|
+
onCreated
|
|
115
|
+
]);
|
|
116
|
+
const onLinkExisting = _react.useCallback(async (index)=>{
|
|
117
|
+
const entity = await (0, _helpers.selectSingleEntity)({
|
|
118
|
+
sdk,
|
|
119
|
+
entityType,
|
|
120
|
+
editorPermissions
|
|
121
|
+
});
|
|
122
|
+
if (!entity) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
onLinkedExisting([
|
|
126
|
+
entity
|
|
127
|
+
], index);
|
|
128
|
+
}, [
|
|
129
|
+
sdk,
|
|
130
|
+
entityType,
|
|
131
|
+
onLinkedExisting
|
|
132
|
+
]);
|
|
133
|
+
const onLinkSeveralExisting = _react.useCallback(async (index)=>{
|
|
134
|
+
const entities = await (0, _helpers.selectMultipleEntities)({
|
|
135
|
+
sdk,
|
|
136
|
+
entityType,
|
|
137
|
+
editorPermissions
|
|
138
|
+
});
|
|
139
|
+
if (!entities || entities.length === 0) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
onLinkedExisting(entities, index);
|
|
143
|
+
}, [
|
|
144
|
+
sdk,
|
|
145
|
+
entityType,
|
|
146
|
+
onLinkedExisting
|
|
147
|
+
]);
|
|
148
|
+
return (0, _react.useMemo)(()=>({
|
|
149
|
+
entityType,
|
|
150
|
+
canLinkMultiple,
|
|
151
|
+
isDisabled,
|
|
152
|
+
isEmpty,
|
|
153
|
+
isFull,
|
|
154
|
+
canCreateEntity: editorPermissions.canCreateEntity,
|
|
155
|
+
canLinkEntity: editorPermissions.canLinkEntity,
|
|
156
|
+
contentTypes: editorPermissions.creatableContentTypes,
|
|
157
|
+
onCreate,
|
|
158
|
+
onLinkExisting: canLinkMultiple ? onLinkSeveralExisting : onLinkExisting,
|
|
159
|
+
actionLabels,
|
|
160
|
+
onCreated,
|
|
161
|
+
onLinkedExisting,
|
|
162
|
+
itemsLength
|
|
163
|
+
}), [
|
|
164
|
+
entityType,
|
|
165
|
+
canLinkMultiple,
|
|
166
|
+
isDisabled,
|
|
167
|
+
isEmpty,
|
|
168
|
+
isFull,
|
|
169
|
+
editorPermissions.canCreateEntity,
|
|
170
|
+
editorPermissions.canLinkEntity,
|
|
171
|
+
actionLabels,
|
|
172
|
+
editorPermissions.creatableContentTypes.map((ct)=>ct.sys.id).join(':'),
|
|
173
|
+
onCreate,
|
|
174
|
+
onLinkExisting,
|
|
175
|
+
onLinkSeveralExisting,
|
|
176
|
+
onCreated,
|
|
177
|
+
onLinkedExisting,
|
|
178
|
+
itemsLength
|
|
179
|
+
]);
|
|
180
|
+
}
|
|
181
|
+
function LinkEntityActions({ renderCustomActions , ...props }) {
|
|
182
|
+
return renderCustomActions ? renderCustomActions(props) : _react.createElement(_LinkActions.LinkActions, props);
|
|
183
|
+
}
|
|
184
|
+
function CombinedLinkEntityActions({ renderCustomActions , ...props }) {
|
|
185
|
+
return renderCustomActions ? renderCustomActions(props) : _react.createElement(_CombinedLinkActions.CombinedLinkActions, props);
|
|
186
|
+
}
|