@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.
Files changed (199) hide show
  1. package/dist/cjs/__fixtures__/FakeSdk.js +183 -0
  2. package/dist/cjs/__fixtures__/asset/index.js +37 -0
  3. package/dist/cjs/__fixtures__/content-type/index.js +16 -0
  4. package/dist/cjs/__fixtures__/entry/index.js +33 -0
  5. package/dist/cjs/__fixtures__/fixtures.js +71 -0
  6. package/dist/cjs/__fixtures__/locale/index.js +40 -0
  7. package/dist/cjs/__fixtures__/space/index.js +16 -0
  8. package/dist/cjs/assets/MultipleMediaEditor.js +86 -0
  9. package/dist/cjs/assets/SingleMediaEditor.js +69 -0
  10. package/dist/cjs/assets/WrappedAssetCard/AssetCardActions.js +125 -0
  11. package/dist/cjs/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +171 -0
  12. package/dist/cjs/assets/WrappedAssetCard/WrappedAssetCard.js +159 -0
  13. package/dist/cjs/assets/WrappedAssetCard/WrappedAssetLink.js +130 -0
  14. package/dist/cjs/assets/index.js +24 -0
  15. package/dist/cjs/common/EntityStore.js +420 -0
  16. package/dist/cjs/common/MultipleReferenceEditor.js +164 -0
  17. package/dist/cjs/common/ReferenceEditor.js +74 -0
  18. package/dist/cjs/common/SingleReferenceEditor.js +118 -0
  19. package/dist/cjs/common/SortableLinkList.js +95 -0
  20. package/dist/cjs/common/customCardTypes.js +44 -0
  21. package/dist/cjs/common/useAccessApi.js +19 -0
  22. package/dist/cjs/common/useContentTypePermissions.js +54 -0
  23. package/dist/cjs/common/useEditorPermissions.js +77 -0
  24. package/dist/cjs/common/useEditorPermissions.spec.js +205 -0
  25. package/dist/cjs/components/AssetThumbnail/AssetThumbnail.js +62 -0
  26. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.js +102 -0
  27. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +254 -0
  28. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +199 -0
  29. package/dist/cjs/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +190 -0
  30. package/dist/cjs/components/CreateEntryLinkButton/useGlobalMouseUp.js +19 -0
  31. package/dist/cjs/components/LinkActions/CombinedLinkActions.js +167 -0
  32. package/dist/cjs/components/LinkActions/LinkActions.js +123 -0
  33. package/dist/cjs/components/LinkActions/LinkEntityActions.js +186 -0
  34. package/dist/cjs/components/LinkActions/NoLinkPermissionsInfo.js +54 -0
  35. package/dist/cjs/components/LinkActions/helpers.js +78 -0
  36. package/dist/cjs/components/LinkActions/redesignStyles.js +44 -0
  37. package/dist/cjs/components/LinkActions/styles.js +33 -0
  38. package/dist/cjs/components/MissingEntityCard/MissingEntityCard.js +75 -0
  39. package/dist/cjs/components/MissingEntityCard/styles.js +29 -0
  40. package/dist/cjs/components/ScheduledIconWithTooltip/ScheduleTooltip.js +75 -0
  41. package/dist/cjs/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +81 -0
  42. package/dist/cjs/components/ScheduledIconWithTooltip/formatDateAndTime.js +45 -0
  43. package/dist/cjs/components/SpaceName/SpaceName.js +91 -0
  44. package/dist/cjs/components/index.js +44 -0
  45. package/dist/cjs/entries/MultipleEntryReferenceEditor.js +86 -0
  46. package/dist/cjs/entries/SingleEntryReferenceEditor.js +74 -0
  47. package/dist/cjs/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +189 -0
  48. package/dist/cjs/entries/WrappedEntryCard/WrappedEntryCard.js +181 -0
  49. package/dist/cjs/entries/index.js +24 -0
  50. package/dist/cjs/index.js +92 -0
  51. package/dist/cjs/resources/Cards/ContentfulEntryCard.js +87 -0
  52. package/dist/cjs/resources/Cards/ResourceCard.js +111 -0
  53. package/dist/cjs/resources/Cards/UnsupportedEntityCard.js +64 -0
  54. package/dist/cjs/resources/MultipleResourceReferenceEditor.js +157 -0
  55. package/dist/cjs/resources/MultipleResourceReferenceEditor.spec.js +297 -0
  56. package/dist/cjs/resources/SingleResourceReferenceEditor.js +87 -0
  57. package/dist/cjs/resources/SingleResourceReferenceEditor.spec.js +161 -0
  58. package/dist/cjs/resources/index.js +19 -0
  59. package/dist/cjs/resources/testHelpers/resourceEditorHelpers.js +121 -0
  60. package/dist/cjs/resources/useResourceLinkActions.js +88 -0
  61. package/dist/cjs/types.js +22 -0
  62. package/dist/cjs/utils/fromFieldValidations.js +54 -0
  63. package/dist/esm/__fixtures__/FakeSdk.js +173 -0
  64. package/dist/esm/__fixtures__/asset/index.js +6 -0
  65. package/dist/esm/__fixtures__/content-type/index.js +2 -0
  66. package/dist/esm/__fixtures__/entry/index.js +5 -0
  67. package/dist/esm/__fixtures__/fixtures.js +6 -0
  68. package/dist/esm/__fixtures__/locale/index.js +15 -0
  69. package/dist/esm/__fixtures__/space/index.js +2 -0
  70. package/dist/esm/assets/MultipleMediaEditor.js +37 -0
  71. package/dist/esm/assets/SingleMediaEditor.js +20 -0
  72. package/dist/esm/assets/WrappedAssetCard/AssetCardActions.js +63 -0
  73. package/dist/esm/assets/WrappedAssetCard/FetchingWrappedAssetCard.js +122 -0
  74. package/dist/esm/assets/WrappedAssetCard/WrappedAssetCard.js +105 -0
  75. package/dist/esm/assets/WrappedAssetCard/WrappedAssetLink.js +76 -0
  76. package/dist/esm/assets/index.js +3 -0
  77. package/dist/esm/common/EntityStore.js +347 -0
  78. package/dist/esm/common/MultipleReferenceEditor.js +111 -0
  79. package/dist/esm/common/ReferenceEditor.js +20 -0
  80. package/dist/esm/common/SingleReferenceEditor.js +70 -0
  81. package/dist/esm/common/SortableLinkList.js +41 -0
  82. package/dist/esm/common/customCardTypes.js +1 -0
  83. package/dist/esm/common/useAccessApi.js +9 -0
  84. package/dist/esm/common/useContentTypePermissions.js +44 -0
  85. package/dist/esm/common/useEditorPermissions.js +67 -0
  86. package/dist/esm/common/useEditorPermissions.spec.js +201 -0
  87. package/dist/esm/components/AssetThumbnail/AssetThumbnail.js +13 -0
  88. package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.js +48 -0
  89. package/dist/esm/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.js +206 -0
  90. package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.js +145 -0
  91. package/dist/esm/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.js +142 -0
  92. package/dist/esm/components/CreateEntryLinkButton/useGlobalMouseUp.js +9 -0
  93. package/dist/esm/components/LinkActions/CombinedLinkActions.js +118 -0
  94. package/dist/esm/components/LinkActions/LinkActions.js +66 -0
  95. package/dist/esm/components/LinkActions/LinkEntityActions.js +127 -0
  96. package/dist/esm/components/LinkActions/NoLinkPermissionsInfo.js +5 -0
  97. package/dist/esm/components/LinkActions/helpers.js +57 -0
  98. package/dist/esm/components/LinkActions/redesignStyles.js +18 -0
  99. package/dist/esm/components/LinkActions/styles.js +10 -0
  100. package/dist/esm/components/MissingEntityCard/MissingEntityCard.js +26 -0
  101. package/dist/esm/components/MissingEntityCard/styles.js +11 -0
  102. package/dist/esm/components/ScheduledIconWithTooltip/ScheduleTooltip.js +18 -0
  103. package/dist/esm/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.js +32 -0
  104. package/dist/esm/components/ScheduledIconWithTooltip/formatDateAndTime.js +19 -0
  105. package/dist/esm/components/SpaceName/SpaceName.js +37 -0
  106. package/dist/esm/components/index.js +8 -0
  107. package/dist/esm/entries/MultipleEntryReferenceEditor.js +37 -0
  108. package/dist/esm/entries/SingleEntryReferenceEditor.js +25 -0
  109. package/dist/esm/entries/WrappedEntryCard/FetchingWrappedEntryCard.js +135 -0
  110. package/dist/esm/entries/WrappedEntryCard/WrappedEntryCard.js +127 -0
  111. package/dist/esm/entries/index.js +3 -0
  112. package/dist/esm/index.js +7 -0
  113. package/dist/esm/resources/Cards/ContentfulEntryCard.js +38 -0
  114. package/dist/esm/resources/Cards/ResourceCard.js +62 -0
  115. package/dist/esm/resources/Cards/UnsupportedEntityCard.js +15 -0
  116. package/dist/esm/resources/MultipleResourceReferenceEditor.js +104 -0
  117. package/dist/esm/resources/MultipleResourceReferenceEditor.spec.js +254 -0
  118. package/dist/esm/resources/SingleResourceReferenceEditor.js +33 -0
  119. package/dist/esm/resources/SingleResourceReferenceEditor.spec.js +118 -0
  120. package/dist/esm/resources/index.js +2 -0
  121. package/dist/esm/resources/testHelpers/resourceEditorHelpers.js +103 -0
  122. package/dist/esm/resources/useResourceLinkActions.js +78 -0
  123. package/dist/esm/types.js +1 -0
  124. package/dist/esm/utils/fromFieldValidations.js +39 -0
  125. package/dist/{__fixtures__ → types/__fixtures__}/FakeSdk.d.ts +8 -8
  126. package/dist/{__fixtures__ → types/__fixtures__}/asset/index.d.ts +6 -6
  127. package/dist/{__fixtures__ → types/__fixtures__}/content-type/index.d.ts +2 -2
  128. package/dist/{__fixtures__ → types/__fixtures__}/entry/index.d.ts +5 -5
  129. package/dist/{__fixtures__ → types/__fixtures__}/fixtures.d.ts +6 -6
  130. package/dist/{__fixtures__ → types/__fixtures__}/locale/index.d.ts +42 -42
  131. package/dist/{__fixtures__ → types/__fixtures__}/space/index.d.ts +2 -2
  132. package/dist/{assets → types/assets}/MultipleMediaEditor.d.ts +10 -10
  133. package/dist/types/assets/SingleMediaEditor.d.ts +10 -0
  134. package/dist/{assets → types/assets}/WrappedAssetCard/AssetCardActions.d.ts +11 -11
  135. package/dist/{assets → types/assets}/WrappedAssetCard/FetchingWrappedAssetCard.d.ts +17 -17
  136. package/dist/{assets → types/assets}/WrappedAssetCard/WrappedAssetCard.d.ts +24 -24
  137. package/dist/{assets → types/assets}/WrappedAssetCard/WrappedAssetLink.d.ts +16 -16
  138. package/dist/{assets → types/assets}/index.d.ts +3 -3
  139. package/dist/{common → types/common}/EntityStore.d.ts +62 -62
  140. package/dist/{common → types/common}/MultipleReferenceEditor.d.ts +25 -25
  141. package/dist/{common → types/common}/ReferenceEditor.d.ts +46 -46
  142. package/dist/{common → types/common}/SingleReferenceEditor.d.ts +24 -24
  143. package/dist/{common → types/common}/SortableLinkList.d.ts +19 -19
  144. package/dist/{common → types/common}/customCardTypes.d.ts +29 -29
  145. package/dist/types/common/useAccessApi.d.ts +16 -0
  146. package/dist/{common → types/common}/useContentTypePermissions.d.ts +17 -17
  147. package/dist/{common → types/common}/useEditorPermissions.d.ts +17 -17
  148. package/dist/types/common/useEditorPermissions.spec.d.ts +1 -0
  149. package/dist/{components → types/components}/AssetThumbnail/AssetThumbnail.d.ts +7 -7
  150. package/dist/{components → types/components}/CreateEntryLinkButton/CreateEntryLinkButton.d.ts +19 -19
  151. package/dist/types/components/CreateEntryLinkButton/CreateEntryLinkButton.spec.d.ts +1 -0
  152. package/dist/{components → types/components}/CreateEntryLinkButton/CreateEntryMenuTrigger.d.ts +31 -31
  153. package/dist/types/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.d.ts +1 -0
  154. package/dist/{components → types/components}/CreateEntryLinkButton/useGlobalMouseUp.d.ts +1 -1
  155. package/dist/{components → types/components}/LinkActions/CombinedLinkActions.d.ts +10 -10
  156. package/dist/{components → types/components}/LinkActions/LinkActions.d.ts +26 -26
  157. package/dist/{components → types/components}/LinkActions/LinkEntityActions.d.ts +24 -24
  158. package/dist/types/components/LinkActions/NoLinkPermissionsInfo.d.ts +2 -0
  159. package/dist/{components → types/components}/LinkActions/helpers.d.ts +26 -26
  160. package/dist/{components → types/components}/LinkActions/redesignStyles.d.ts +3 -3
  161. package/dist/{components → types/components}/LinkActions/styles.d.ts +2 -2
  162. package/dist/{components → types/components}/MissingEntityCard/MissingEntityCard.d.ts +8 -8
  163. package/dist/{components → types/components}/MissingEntityCard/styles.d.ts +2 -2
  164. package/dist/{components → types/components}/ScheduledIconWithTooltip/ScheduleTooltip.d.ts +11 -11
  165. package/dist/{components → types/components}/ScheduledIconWithTooltip/ScheduledIconWithTooltip.d.ts +10 -10
  166. package/dist/{components → types/components}/ScheduledIconWithTooltip/formatDateAndTime.d.ts +15 -15
  167. package/dist/types/components/SpaceName/SpaceName.d.ts +6 -0
  168. package/dist/{components → types/components}/index.d.ts +9 -9
  169. package/dist/{entries → types/entries}/MultipleEntryReferenceEditor.d.ts +3 -3
  170. package/dist/{entries → types/entries}/SingleEntryReferenceEditor.d.ts +8 -8
  171. package/dist/{entries → types/entries}/WrappedEntryCard/FetchingWrappedEntryCard.d.ts +18 -18
  172. package/dist/{entries → types/entries}/WrappedEntryCard/WrappedEntryCard.d.ts +35 -35
  173. package/dist/{entries → types/entries}/index.d.ts +3 -3
  174. package/dist/{index.d.ts → types/index.d.ts} +10 -8
  175. package/dist/{resources → types/resources}/Cards/ContentfulEntryCard.d.ts +21 -21
  176. package/dist/{resources → types/resources}/Cards/ResourceCard.d.ts +12 -12
  177. package/dist/{resources → types/resources}/Cards/UnsupportedEntityCard.d.ts +4 -4
  178. package/dist/{resources → types/resources}/MultipleResourceReferenceEditor.d.ts +7 -7
  179. package/dist/types/resources/MultipleResourceReferenceEditor.spec.d.ts +1 -0
  180. package/dist/{resources → types/resources}/SingleResourceReferenceEditor.d.ts +7 -7
  181. package/dist/types/resources/SingleResourceReferenceEditor.spec.d.ts +1 -0
  182. package/dist/{resources → types/resources}/index.d.ts +2 -2
  183. package/dist/{resources → types/resources}/testHelpers/resourceEditorHelpers.d.ts +50 -50
  184. package/dist/{resources → types/resources}/useResourceLinkActions.d.ts +7 -7
  185. package/dist/{types.d.ts → types/types.d.ts} +104 -104
  186. package/dist/{utils → types/utils}/fromFieldValidations.d.ts +21 -21
  187. package/package.json +25 -11
  188. package/CHANGELOG.md +0 -860
  189. package/dist/assets/SingleMediaEditor.d.ts +0 -10
  190. package/dist/common/useAccessApi.d.ts +0 -16
  191. package/dist/components/LinkActions/NoLinkPermissionsInfo.d.ts +0 -2
  192. package/dist/components/SpaceName/SpaceName.d.ts +0 -6
  193. package/dist/field-editor-reference.cjs.development.js +0 -2753
  194. package/dist/field-editor-reference.cjs.development.js.map +0 -1
  195. package/dist/field-editor-reference.cjs.production.min.js +0 -2
  196. package/dist/field-editor-reference.cjs.production.min.js.map +0 -1
  197. package/dist/field-editor-reference.esm.js +0 -2727
  198. package/dist/field-editor-reference.esm.js.map +0 -1
  199. 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
+ }