@contentful/field-editor-reference 5.9.0 → 5.10.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} +9 -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,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SingleReferenceEditor", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SingleReferenceEditor;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _components = require("../components");
13
+ const _LinkEntityActions = require("../components/LinkActions/LinkEntityActions");
14
+ const _ReferenceEditor = require("./ReferenceEditor");
15
+ const _useEditorPermissions = require("./useEditorPermissions");
16
+ function _getRequireWildcardCache(nodeInterop) {
17
+ if (typeof WeakMap !== "function") return null;
18
+ var cacheBabelInterop = new WeakMap();
19
+ var cacheNodeInterop = new WeakMap();
20
+ return (_getRequireWildcardCache = function(nodeInterop) {
21
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
22
+ })(nodeInterop);
23
+ }
24
+ function _interop_require_wildcard(obj, nodeInterop) {
25
+ if (!nodeInterop && obj && obj.__esModule) {
26
+ return obj;
27
+ }
28
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
29
+ return {
30
+ default: obj
31
+ };
32
+ }
33
+ var cache = _getRequireWildcardCache(nodeInterop);
34
+ if (cache && cache.has(obj)) {
35
+ return cache.get(obj);
36
+ }
37
+ var newObj = {};
38
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
39
+ for(var key in obj){
40
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
41
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
42
+ if (desc && (desc.get || desc.set)) {
43
+ Object.defineProperty(newObj, key, desc);
44
+ } else {
45
+ newObj[key] = obj[key];
46
+ }
47
+ }
48
+ }
49
+ newObj.default = obj;
50
+ if (cache) {
51
+ cache.set(obj, newObj);
52
+ }
53
+ return newObj;
54
+ }
55
+ function Editor(props) {
56
+ const { setValue , entityType } = props;
57
+ const editorPermissions = (0, _useEditorPermissions.useEditorPermissions)(props);
58
+ const onCreate = (0, _react.useCallback)((id)=>void setValue({
59
+ sys: {
60
+ type: 'Link',
61
+ linkType: entityType,
62
+ id
63
+ }
64
+ }), [
65
+ setValue,
66
+ entityType
67
+ ]);
68
+ const onLink = (0, _react.useCallback)((ids)=>{
69
+ const [id] = ids;
70
+ setValue({
71
+ sys: {
72
+ type: 'Link',
73
+ linkType: entityType,
74
+ id
75
+ }
76
+ });
77
+ }, [
78
+ setValue,
79
+ entityType
80
+ ]);
81
+ const linkActionsProps = (0, _LinkEntityActions.useLinkActionsProps)({
82
+ ...props,
83
+ canLinkMultiple: false,
84
+ editorPermissions,
85
+ onCreate,
86
+ onLink
87
+ });
88
+ const customCardRenderer = (0, _react.useCallback)((cardProps, _, renderDefaultCard)=>props.renderCustomCard ? props.renderCustomCard(cardProps, linkActionsProps, renderDefaultCard) : false, [
89
+ linkActionsProps
90
+ ]);
91
+ if (!props.entityId) {
92
+ return _react.createElement(_components.LinkEntityActions, {
93
+ renderCustomActions: props.renderCustomActions,
94
+ ...linkActionsProps
95
+ });
96
+ }
97
+ return props.children({
98
+ ...props,
99
+ renderCustomCard: props.renderCustomCard && customCardRenderer
100
+ });
101
+ }
102
+ function SingleReferenceEditor(props) {
103
+ const allContentTypes = props.sdk.space.getCachedContentTypes();
104
+ return _react.createElement(_ReferenceEditor.ReferenceEditor, props, ({ value , setValue , disabled , externalReset })=>{
105
+ return _react.createElement(Editor, {
106
+ ...props,
107
+ key: `${externalReset}-reference`,
108
+ entityId: value ? value.sys.id : '',
109
+ isDisabled: disabled,
110
+ setValue: setValue,
111
+ allContentTypes: allContentTypes
112
+ });
113
+ });
114
+ }
115
+ SingleReferenceEditor.defaultProps = {
116
+ hasCardEditActions: true,
117
+ hasCardRemoveActions: true
118
+ };
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SortableLinkList", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SortableLinkList;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _reactsortablehoc = require("react-sortable-hoc");
13
+ const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
14
+ const _emotion = require("emotion");
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {};
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
59
+ const styles = {
60
+ container: (0, _emotion.css)({
61
+ position: 'relative'
62
+ }),
63
+ item: (0, _emotion.css)({
64
+ marginBottom: _f36tokens.default.spacingM,
65
+ zIndex: _f36tokens.default.zIndexModal
66
+ })
67
+ };
68
+ const DragHandle = (props)=>{
69
+ const SortableDragHandle = (0, _reactsortablehoc.SortableHandle)(()=>props.drag);
70
+ return _react.createElement(SortableDragHandle, null);
71
+ };
72
+ const SortableLink = (0, _reactsortablehoc.SortableElement)((props)=>_react.createElement("div", {
73
+ className: styles.item
74
+ }, props.children));
75
+ const SortableLinkListInternal = (0, _reactsortablehoc.SortableContainer)((props)=>{
76
+ return _react.createElement("div", {
77
+ className: (0, _emotion.cx)(styles.container, props.className)
78
+ }, props.items.map((item, index)=>_react.createElement(SortableLink, {
79
+ disabled: props.isDisabled,
80
+ key: `${item.sys.urn ?? item.sys.id}-${index}`,
81
+ index: index
82
+ }, props.children({
83
+ items: props.items,
84
+ isDisabled: props.isDisabled,
85
+ item,
86
+ index,
87
+ DragHandle: props.isDisabled ? undefined : DragHandle
88
+ }))));
89
+ });
90
+ function SortableLinkList(props) {
91
+ return _react.createElement(SortableLinkListInternal, {
92
+ distance: 1,
93
+ ...props
94
+ }, props.children);
95
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _react = _interop_require_wildcard(require("react"));
6
+ function _getRequireWildcardCache(nodeInterop) {
7
+ if (typeof WeakMap !== "function") return null;
8
+ var cacheBabelInterop = new WeakMap();
9
+ var cacheNodeInterop = new WeakMap();
10
+ return (_getRequireWildcardCache = function(nodeInterop) {
11
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
12
+ })(nodeInterop);
13
+ }
14
+ function _interop_require_wildcard(obj, nodeInterop) {
15
+ if (!nodeInterop && obj && obj.__esModule) {
16
+ return obj;
17
+ }
18
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
19
+ return {
20
+ default: obj
21
+ };
22
+ }
23
+ var cache = _getRequireWildcardCache(nodeInterop);
24
+ if (cache && cache.has(obj)) {
25
+ return cache.get(obj);
26
+ }
27
+ var newObj = {};
28
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
29
+ for(var key in obj){
30
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
31
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
32
+ if (desc && (desc.get || desc.set)) {
33
+ Object.defineProperty(newObj, key, desc);
34
+ } else {
35
+ newObj[key] = obj[key];
36
+ }
37
+ }
38
+ }
39
+ newObj.default = obj;
40
+ if (cache) {
41
+ cache.set(obj, newObj);
42
+ }
43
+ return newObj;
44
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useAccessApi", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useAccessApi;
9
+ }
10
+ });
11
+ const AllowActionsOnContentType = ()=>Promise.resolve(true);
12
+ function useAccessApi(accessApi) {
13
+ const canPerformAction = accessApi.can;
14
+ const canPerformActionOnEntryOfType = accessApi.canPerformActionOnEntryOfType ?? AllowActionsOnContentType;
15
+ return {
16
+ canPerformAction,
17
+ canPerformActionOnEntryOfType
18
+ };
19
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useContentTypePermissions", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useContentTypePermissions;
9
+ }
10
+ });
11
+ const _react = require("react");
12
+ const _useAccessApi = require("./useAccessApi");
13
+ async function filter(arr, predicate) {
14
+ const fail = Symbol();
15
+ const results = await Promise.all(arr.map(async (item)=>await predicate(item) ? item : fail));
16
+ return results.filter((x)=>x !== fail);
17
+ }
18
+ function useContentTypePermissions(props) {
19
+ const availableContentTypes = (0, _react.useMemo)(()=>{
20
+ if (props.entityType === 'Asset') {
21
+ return [];
22
+ }
23
+ if (props.validations.contentTypes) {
24
+ return props.allContentTypes.filter((ct)=>props.validations.contentTypes?.includes(ct.sys.id));
25
+ }
26
+ return props.allContentTypes;
27
+ }, [
28
+ props.allContentTypes,
29
+ props.validations.contentTypes,
30
+ props.entityType
31
+ ]);
32
+ const [creatableContentTypes, setCreatableContentTypes] = (0, _react.useState)(availableContentTypes);
33
+ const [readableContentTypes, setReadableContentTypes] = (0, _react.useState)(availableContentTypes);
34
+ const { canPerformActionOnEntryOfType } = (0, _useAccessApi.useAccessApi)(props.sdk.access);
35
+ (0, _react.useEffect)(()=>{
36
+ function getContentTypes(action) {
37
+ return filter(availableContentTypes, (ct)=>canPerformActionOnEntryOfType(action, ct.sys.id));
38
+ }
39
+ async function checkContentTypeAccess() {
40
+ const creatable = await getContentTypes('create');
41
+ const readable = await getContentTypes('read');
42
+ setCreatableContentTypes(creatable);
43
+ setReadableContentTypes(readable);
44
+ }
45
+ void checkContentTypeAccess();
46
+ }, [
47
+ availableContentTypes
48
+ ]);
49
+ return {
50
+ creatableContentTypes,
51
+ readableContentTypes,
52
+ availableContentTypes
53
+ };
54
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useEditorPermissions", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useEditorPermissions;
9
+ }
10
+ });
11
+ const _react = require("react");
12
+ const _fromFieldValidations = require("../utils/fromFieldValidations");
13
+ const _useAccessApi = require("./useAccessApi");
14
+ const _useContentTypePermissions = require("./useContentTypePermissions");
15
+ function useEditorPermissions(props) {
16
+ const { sdk , entityType , parameters } = props;
17
+ const validations = (0, _react.useMemo)(()=>(0, _fromFieldValidations.fromFieldValidations)(props.sdk.field), [
18
+ props.sdk.field
19
+ ]);
20
+ const [canCreateEntity, setCanCreateEntity] = (0, _react.useState)(true);
21
+ const [canLinkEntity, setCanLinkEntity] = (0, _react.useState)(true);
22
+ const { creatableContentTypes , readableContentTypes , availableContentTypes } = (0, _useContentTypePermissions.useContentTypePermissions)({
23
+ ...props,
24
+ validations
25
+ });
26
+ const { canPerformAction } = (0, _useAccessApi.useAccessApi)(sdk.access);
27
+ (0, _react.useEffect)(()=>{
28
+ if (parameters.instance.showCreateEntityAction === false) {
29
+ setCanCreateEntity(false);
30
+ return;
31
+ }
32
+ async function checkCreateAccess() {
33
+ if (entityType === 'Asset') {
34
+ const canCreate = await canPerformAction('create', 'Asset') || true;
35
+ setCanCreateEntity(canCreate);
36
+ }
37
+ if (entityType === 'Entry') {
38
+ const canCreate = creatableContentTypes.length > 0 || true;
39
+ setCanCreateEntity(canCreate);
40
+ }
41
+ }
42
+ void checkCreateAccess();
43
+ }, [
44
+ entityType,
45
+ parameters.instance,
46
+ creatableContentTypes
47
+ ]);
48
+ (0, _react.useEffect)(()=>{
49
+ if (parameters.instance.showLinkEntityAction === false) {
50
+ setCanLinkEntity(false);
51
+ return;
52
+ }
53
+ async function checkLinkAccess() {
54
+ if (entityType === 'Asset') {
55
+ const canRead = await canPerformAction('read', 'Asset') || true;
56
+ setCanLinkEntity(canRead);
57
+ }
58
+ if (entityType === 'Entry') {
59
+ const canRead = true;
60
+ setCanLinkEntity(canRead);
61
+ }
62
+ }
63
+ void checkLinkAccess();
64
+ }, [
65
+ entityType,
66
+ parameters.instance,
67
+ readableContentTypes
68
+ ]);
69
+ return {
70
+ canCreateEntity,
71
+ canLinkEntity,
72
+ creatableContentTypes,
73
+ readableContentTypes,
74
+ availableContentTypes,
75
+ validations
76
+ };
77
+ }
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _fieldeditortestutils = require("@contentful/field-editor-test-utils");
6
+ const _reacthooks = require("@testing-library/react-hooks");
7
+ const _useEditorPermissions = require("./useEditorPermissions");
8
+ describe('useEditorPermissions', ()=>{
9
+ const makeFieldExtensionSDK = (customizeMock)=>({
10
+ field: (0, _fieldeditortestutils.createFakeFieldAPI)(customizeMock)[0],
11
+ access: {
12
+ can: jest.fn().mockResolvedValue(true),
13
+ canPerformActionOnEntryOfType: jest.fn().mockResolvedValue(true)
14
+ }
15
+ });
16
+ const makeContentType = (id)=>({
17
+ sys: {
18
+ id
19
+ }
20
+ });
21
+ const renderEditorPermissions = async ({ entityType , params ={} , allContentTypes =[] , customizeMock , customizeSdk })=>{
22
+ const sdk = makeFieldExtensionSDK(customizeMock);
23
+ customizeSdk?.(sdk);
24
+ const renderResult = (0, _reacthooks.renderHook)(()=>(0, _useEditorPermissions.useEditorPermissions)({
25
+ sdk,
26
+ allContentTypes,
27
+ entityType,
28
+ parameters: {
29
+ instance: params
30
+ }
31
+ }));
32
+ await renderResult.waitForNextUpdate();
33
+ return {
34
+ ...renderResult,
35
+ sdk
36
+ };
37
+ };
38
+ describe(`behaviour on Asset`, ()=>{
39
+ it(`wont check access when turned off via instance params`, async ()=>{
40
+ const { result , sdk } = await renderEditorPermissions({
41
+ entityType: 'Asset',
42
+ params: {
43
+ showCreateEntityAction: false,
44
+ showLinkEntityAction: false
45
+ }
46
+ });
47
+ expect(result.current.canCreateEntity).toBe(false);
48
+ expect(result.current.canLinkEntity).toBe(false);
49
+ expect(sdk.access.can).not.toHaveBeenCalledWith();
50
+ });
51
+ it(`checks basic access`, async ()=>{
52
+ const { sdk } = await renderEditorPermissions({
53
+ entityType: 'Asset'
54
+ });
55
+ expect(sdk.access.can).toHaveBeenCalledWith('create', 'Asset');
56
+ expect(sdk.access.can).toHaveBeenCalledWith('read', 'Asset');
57
+ });
58
+ it(`defaults link asset action visibility to true`, async ()=>{
59
+ const { result } = await renderEditorPermissions({
60
+ entityType: 'Asset'
61
+ });
62
+ expect(result.current.canLinkEntity).toBeTruthy();
63
+ });
64
+ it(`returns empty contentTypes`, async ()=>{
65
+ const { result } = await renderEditorPermissions({
66
+ entityType: 'Asset',
67
+ allContentTypes: [
68
+ makeContentType('one')
69
+ ]
70
+ });
71
+ expect(result.current.creatableContentTypes).toEqual([]);
72
+ expect(result.current.readableContentTypes).toEqual([]);
73
+ });
74
+ });
75
+ describe(`behaviour on Entry`, ()=>{
76
+ const allowContentTypes = (sdk, allowedAction, ...allowed)=>{
77
+ sdk.access.canPerformActionOnEntryOfType.mockImplementation(async (action, contentTypeId)=>{
78
+ if (allowedAction === action && allowed.includes(contentTypeId)) {
79
+ return true;
80
+ }
81
+ return false;
82
+ });
83
+ };
84
+ it(`wont check access when turned off via instance params`, async ()=>{
85
+ const { result , sdk } = await renderEditorPermissions({
86
+ entityType: 'Entry',
87
+ params: {
88
+ showCreateEntityAction: false,
89
+ showLinkEntityAction: false
90
+ }
91
+ });
92
+ expect(result.current.canCreateEntity).toBe(false);
93
+ expect(result.current.canLinkEntity).toBe(false);
94
+ expect(sdk.access.can).not.toHaveBeenCalledWith();
95
+ });
96
+ it(`only allows creation when one content-type can be created`, async ()=>{
97
+ const allContentTypes = [
98
+ makeContentType('one'),
99
+ makeContentType('two')
100
+ ];
101
+ const { result } = await renderEditorPermissions({
102
+ entityType: 'Entry',
103
+ allContentTypes,
104
+ customizeSdk: (sdk)=>{
105
+ allowContentTypes(sdk, 'create', 'one');
106
+ }
107
+ });
108
+ expect(result.current.canCreateEntity).toBe(true);
109
+ });
110
+ it.skip(`denies creation when no content-type can be created`, async ()=>{
111
+ const allContentTypes = [
112
+ makeContentType('one'),
113
+ makeContentType('two')
114
+ ];
115
+ const { result } = await renderEditorPermissions({
116
+ entityType: 'Entry',
117
+ allContentTypes,
118
+ customizeSdk: (sdk)=>{
119
+ allowContentTypes(sdk, 'create');
120
+ }
121
+ });
122
+ expect(result.current.canCreateEntity).toBe(false);
123
+ });
124
+ it(`only allows linking when one content-type can be read`, async ()=>{
125
+ const allContentTypes = [
126
+ makeContentType('one'),
127
+ makeContentType('two')
128
+ ];
129
+ const { result } = await renderEditorPermissions({
130
+ entityType: 'Entry',
131
+ allContentTypes,
132
+ customizeSdk: (sdk)=>{
133
+ allowContentTypes(sdk, 'read', 'one');
134
+ }
135
+ });
136
+ expect(result.current.canLinkEntity).toBe(true);
137
+ });
138
+ it.skip(`denies creation when no content-type can be read`, async ()=>{
139
+ const allContentTypes = [
140
+ makeContentType('one'),
141
+ makeContentType('two')
142
+ ];
143
+ const { result } = await renderEditorPermissions({
144
+ entityType: 'Entry',
145
+ allContentTypes,
146
+ customizeSdk: (sdk)=>{
147
+ allowContentTypes(sdk, 'read');
148
+ }
149
+ });
150
+ expect(result.current.canLinkEntity).toBe(false);
151
+ });
152
+ it(`returns creatableContentTypes from validations that can be created`, async ()=>{
153
+ const allContentTypes = [
154
+ makeContentType('one'),
155
+ makeContentType('two')
156
+ ];
157
+ const { result } = await renderEditorPermissions({
158
+ entityType: 'Entry',
159
+ allContentTypes,
160
+ customizeMock: (field)=>{
161
+ field.validations = [
162
+ {
163
+ linkContentType: [
164
+ 'two'
165
+ ]
166
+ }
167
+ ];
168
+ return field;
169
+ },
170
+ customizeSdk: (sdk)=>{
171
+ allowContentTypes(sdk, 'create', 'two');
172
+ }
173
+ });
174
+ expect(result.current.creatableContentTypes).toEqual([
175
+ allContentTypes[1]
176
+ ]);
177
+ });
178
+ it(`returns readableContentTypes from validations that can be read`, async ()=>{
179
+ const allContentTypes = [
180
+ makeContentType('one'),
181
+ makeContentType('two')
182
+ ];
183
+ const { result } = await renderEditorPermissions({
184
+ entityType: 'Entry',
185
+ allContentTypes,
186
+ customizeMock: (field)=>{
187
+ field.validations = [
188
+ {
189
+ linkContentType: [
190
+ 'two'
191
+ ]
192
+ }
193
+ ];
194
+ return field;
195
+ },
196
+ customizeSdk: (sdk)=>{
197
+ allowContentTypes(sdk, 'read', 'two');
198
+ }
199
+ });
200
+ expect(result.current.readableContentTypes).toEqual([
201
+ allContentTypes[1]
202
+ ]);
203
+ });
204
+ });
205
+ });
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "AssetThumbnail", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return AssetThumbnail;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ function _getRequireWildcardCache(nodeInterop) {
13
+ if (typeof WeakMap !== "function") return null;
14
+ var cacheBabelInterop = new WeakMap();
15
+ var cacheNodeInterop = new WeakMap();
16
+ return (_getRequireWildcardCache = function(nodeInterop) {
17
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
18
+ })(nodeInterop);
19
+ }
20
+ function _interop_require_wildcard(obj, nodeInterop) {
21
+ if (!nodeInterop && obj && obj.__esModule) {
22
+ return obj;
23
+ }
24
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
25
+ return {
26
+ default: obj
27
+ };
28
+ }
29
+ var cache = _getRequireWildcardCache(nodeInterop);
30
+ if (cache && cache.has(obj)) {
31
+ return cache.get(obj);
32
+ }
33
+ var newObj = {};
34
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
35
+ for(var key in obj){
36
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
37
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
38
+ if (desc && (desc.get || desc.set)) {
39
+ Object.defineProperty(newObj, key, desc);
40
+ } else {
41
+ newObj[key] = obj[key];
42
+ }
43
+ }
44
+ }
45
+ newObj.default = obj;
46
+ if (cache) {
47
+ cache.set(obj, newObj);
48
+ }
49
+ return newObj;
50
+ }
51
+ const dimensions = {
52
+ width: 70,
53
+ height: 70
54
+ };
55
+ function AssetThumbnail(props) {
56
+ return _react.createElement("img", {
57
+ alt: props.file.fileName,
58
+ src: `${props.file.url}?w=${dimensions.width}&h=${dimensions.height}&fit=thumb`,
59
+ height: dimensions.height,
60
+ width: dimensions.width
61
+ });
62
+ }