@contentful/default-field-editors 1.3.3 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Field.js +204 -0
- package/dist/cjs/Field.spec.js +124 -0
- package/dist/cjs/FieldWrapper.js +92 -0
- package/dist/cjs/FieldWrapper.spec.js +111 -0
- package/dist/cjs/FieldWrapper.styles.js +48 -0
- package/dist/cjs/__mocks__/styles.js +11 -0
- package/dist/cjs/getDefaultWidgetId.js +15 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/types.js +4 -0
- package/dist/esm/Field.js +155 -0
- package/dist/esm/Field.spec.js +81 -0
- package/dist/esm/FieldWrapper.js +43 -0
- package/dist/esm/FieldWrapper.spec.js +68 -0
- package/dist/esm/FieldWrapper.styles.js +33 -0
- package/dist/esm/__mocks__/styles.js +1 -0
- package/dist/esm/getDefaultWidgetId.js +5 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/types.js +1 -0
- package/dist/{Field.d.ts → types/Field.d.ts} +12 -12
- package/dist/types/Field.spec.d.ts +1 -0
- package/dist/{FieldWrapper.d.ts → types/FieldWrapper.d.ts} +17 -17
- package/dist/types/FieldWrapper.spec.d.ts +1 -0
- package/dist/{FieldWrapper.styles.d.ts → types/FieldWrapper.styles.d.ts} +5 -5
- package/dist/{__mocks__ → types/__mocks__}/styles.d.ts +2 -2
- package/dist/{getDefaultWidgetId.d.ts → types/getDefaultWidgetId.d.ts} +3 -3
- package/dist/{index.d.ts → types/index.d.ts} +4 -4
- package/dist/{types.d.ts → types/types.d.ts} +45 -45
- package/package.json +44 -30
- package/dist/default-field-editors.cjs.development.js +0 -215
- package/dist/default-field-editors.cjs.development.js.map +0 -1
- package/dist/default-field-editors.cjs.production.min.js +0 -2
- package/dist/default-field-editors.cjs.production.min.js.map +0 -1
- package/dist/default-field-editors.esm.js +0 -207
- package/dist/default-field-editors.esm.js.map +0 -1
- package/dist/index.js +0 -8
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Field", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Field;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
12
|
+
const _fieldeditorboolean = require("@contentful/field-editor-boolean");
|
|
13
|
+
const _fieldeditorcheckbox = require("@contentful/field-editor-checkbox");
|
|
14
|
+
const _fieldeditordate = require("@contentful/field-editor-date");
|
|
15
|
+
const _fieldeditordropdown = require("@contentful/field-editor-dropdown");
|
|
16
|
+
const _fieldeditorjson = require("@contentful/field-editor-json");
|
|
17
|
+
const _fieldeditorlist = require("@contentful/field-editor-list");
|
|
18
|
+
const _fieldeditorlocation = require("@contentful/field-editor-location");
|
|
19
|
+
const _fieldeditormarkdown = require("@contentful/field-editor-markdown");
|
|
20
|
+
const _fieldeditormultipleline = require("@contentful/field-editor-multiple-line");
|
|
21
|
+
const _fieldeditornumber = require("@contentful/field-editor-number");
|
|
22
|
+
const _fieldeditorradio = require("@contentful/field-editor-radio");
|
|
23
|
+
const _fieldeditorrating = require("@contentful/field-editor-rating");
|
|
24
|
+
const _fieldeditorreference = require("@contentful/field-editor-reference");
|
|
25
|
+
const _fieldeditorrichtext = require("@contentful/field-editor-rich-text");
|
|
26
|
+
const _fieldeditorsingleline = require("@contentful/field-editor-single-line");
|
|
27
|
+
const _fieldeditorslug = require("@contentful/field-editor-slug");
|
|
28
|
+
const _fieldeditortags = require("@contentful/field-editor-tags");
|
|
29
|
+
const _fieldeditorurl = require("@contentful/field-editor-url");
|
|
30
|
+
const _getDefaultWidgetId = require("./getDefaultWidgetId");
|
|
31
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
32
|
+
if (typeof WeakMap !== "function") return null;
|
|
33
|
+
var cacheBabelInterop = new WeakMap();
|
|
34
|
+
var cacheNodeInterop = new WeakMap();
|
|
35
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
36
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
37
|
+
})(nodeInterop);
|
|
38
|
+
}
|
|
39
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
40
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
44
|
+
return {
|
|
45
|
+
default: obj
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
49
|
+
if (cache && cache.has(obj)) {
|
|
50
|
+
return cache.get(obj);
|
|
51
|
+
}
|
|
52
|
+
var newObj = {};
|
|
53
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
54
|
+
for(var key in obj){
|
|
55
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
56
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
57
|
+
if (desc && (desc.get || desc.set)) {
|
|
58
|
+
Object.defineProperty(newObj, key, desc);
|
|
59
|
+
} else {
|
|
60
|
+
newObj[key] = obj[key];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
newObj.default = obj;
|
|
65
|
+
if (cache) {
|
|
66
|
+
cache.set(obj, newObj);
|
|
67
|
+
}
|
|
68
|
+
return newObj;
|
|
69
|
+
}
|
|
70
|
+
const widgetComponents = {
|
|
71
|
+
multipleLine: [
|
|
72
|
+
_fieldeditormultipleline.MultipleLineEditor
|
|
73
|
+
],
|
|
74
|
+
boolean: [
|
|
75
|
+
_fieldeditorboolean.BooleanEditor
|
|
76
|
+
],
|
|
77
|
+
objectEditor: [
|
|
78
|
+
_fieldeditorjson.JsonEditor
|
|
79
|
+
],
|
|
80
|
+
datePicker: [
|
|
81
|
+
_fieldeditordate.DateEditor
|
|
82
|
+
],
|
|
83
|
+
locationEditor: [
|
|
84
|
+
_fieldeditorlocation.LocationEditor
|
|
85
|
+
],
|
|
86
|
+
checkbox: [
|
|
87
|
+
_fieldeditorcheckbox.CheckboxEditor
|
|
88
|
+
],
|
|
89
|
+
listInput: [
|
|
90
|
+
_fieldeditorlist.ListEditor
|
|
91
|
+
],
|
|
92
|
+
rating: [
|
|
93
|
+
_fieldeditorrating.RatingEditor
|
|
94
|
+
],
|
|
95
|
+
radio: [
|
|
96
|
+
_fieldeditorradio.RadioEditor
|
|
97
|
+
],
|
|
98
|
+
tagEditor: [
|
|
99
|
+
_fieldeditortags.TagsEditor
|
|
100
|
+
],
|
|
101
|
+
numberEditor: [
|
|
102
|
+
_fieldeditornumber.NumberEditor
|
|
103
|
+
],
|
|
104
|
+
urlEditor: [
|
|
105
|
+
_fieldeditorurl.UrlEditor
|
|
106
|
+
],
|
|
107
|
+
slugEditor: [
|
|
108
|
+
_fieldeditorslug.SlugEditor
|
|
109
|
+
],
|
|
110
|
+
singleLine: [
|
|
111
|
+
_fieldeditorsingleline.SingleLineEditor
|
|
112
|
+
],
|
|
113
|
+
dropdown: [
|
|
114
|
+
_fieldeditordropdown.DropdownEditor
|
|
115
|
+
],
|
|
116
|
+
entryLinkEditor: [
|
|
117
|
+
_fieldeditorreference.SingleEntryReferenceEditor,
|
|
118
|
+
{
|
|
119
|
+
viewType: 'link',
|
|
120
|
+
hasCardEditActions: true
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
entryCardEditor: [
|
|
124
|
+
_fieldeditorreference.SingleEntryReferenceEditor,
|
|
125
|
+
{
|
|
126
|
+
viewType: 'card',
|
|
127
|
+
hasCardEditActions: true
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
entryLinksEditor: [
|
|
131
|
+
_fieldeditorreference.MultipleEntryReferenceEditor,
|
|
132
|
+
{
|
|
133
|
+
viewType: 'link',
|
|
134
|
+
hasCardEditActions: true
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
entryCardsEditor: [
|
|
138
|
+
_fieldeditorreference.MultipleEntryReferenceEditor,
|
|
139
|
+
{
|
|
140
|
+
viewType: 'card',
|
|
141
|
+
hasCardEditActions: true
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
assetLinkEditor: [
|
|
145
|
+
_fieldeditorreference.SingleMediaEditor,
|
|
146
|
+
{
|
|
147
|
+
viewType: 'link'
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
assetLinksEditor: [
|
|
151
|
+
_fieldeditorreference.MultipleMediaEditor,
|
|
152
|
+
{
|
|
153
|
+
viewType: 'link'
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
assetGalleryEditor: [
|
|
157
|
+
_fieldeditorreference.MultipleMediaEditor,
|
|
158
|
+
{
|
|
159
|
+
viewType: 'card'
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
richTextEditor: [
|
|
163
|
+
_fieldeditorrichtext.RichTextEditor
|
|
164
|
+
],
|
|
165
|
+
markdown: [
|
|
166
|
+
_fieldeditormarkdown.MarkdownEditor
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
const Field = (props)=>{
|
|
170
|
+
const { sdk , widgetId: possiblyUndefinedWidgetId , isInitiallyDisabled =false , renderFieldEditor , getOptions } = props;
|
|
171
|
+
const field = sdk.field;
|
|
172
|
+
const locales = sdk.locales;
|
|
173
|
+
const widgetId = possiblyUndefinedWidgetId ?? (0, _getDefaultWidgetId.getDefaultWidgetId)(sdk);
|
|
174
|
+
if (renderFieldEditor) {
|
|
175
|
+
const customEditor = renderFieldEditor(widgetId, sdk, isInitiallyDisabled);
|
|
176
|
+
if (customEditor) {
|
|
177
|
+
return customEditor;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const options = getOptions ? getOptions(widgetId, sdk) : {};
|
|
181
|
+
const referenceEditorParams = sdk.parameters && 'instance' in sdk.parameters ? sdk.parameters : {
|
|
182
|
+
instance: {
|
|
183
|
+
showCreateEntityAction: true,
|
|
184
|
+
showLinkEntityAction: true
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
if (!widgetComponents[widgetId]) return null;
|
|
188
|
+
const [WidgetComponent, widgetStaticProps] = widgetComponents[widgetId];
|
|
189
|
+
const widgetComponentProps = {
|
|
190
|
+
sdk,
|
|
191
|
+
field,
|
|
192
|
+
locales,
|
|
193
|
+
isInitiallyDisabled,
|
|
194
|
+
parameters: referenceEditorParams,
|
|
195
|
+
...widgetStaticProps,
|
|
196
|
+
...options[widgetId]
|
|
197
|
+
};
|
|
198
|
+
const baseSdk = widgetId === 'slugEditor' ? sdk : undefined;
|
|
199
|
+
return _react.createElement(WidgetComponent, {
|
|
200
|
+
key: sdk.field.locale,
|
|
201
|
+
...widgetComponentProps,
|
|
202
|
+
baseSdk: baseSdk
|
|
203
|
+
});
|
|
204
|
+
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
6
|
+
const _fieldeditorreference = require("@contentful/field-editor-reference");
|
|
7
|
+
const _fieldeditortestutils = require("@contentful/field-editor-test-utils");
|
|
8
|
+
require("@testing-library/jest-dom/extend-expect");
|
|
9
|
+
const _react1 = require("@testing-library/react");
|
|
10
|
+
const _Field = require("./Field");
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
12
|
+
if (typeof WeakMap !== "function") return null;
|
|
13
|
+
var cacheBabelInterop = new WeakMap();
|
|
14
|
+
var cacheNodeInterop = new WeakMap();
|
|
15
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
16
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
17
|
+
})(nodeInterop);
|
|
18
|
+
}
|
|
19
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
20
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
24
|
+
return {
|
|
25
|
+
default: obj
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
29
|
+
if (cache && cache.has(obj)) {
|
|
30
|
+
return cache.get(obj);
|
|
31
|
+
}
|
|
32
|
+
var newObj = {};
|
|
33
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
34
|
+
for(var key in obj){
|
|
35
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
36
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
37
|
+
if (desc && (desc.get || desc.set)) {
|
|
38
|
+
Object.defineProperty(newObj, key, desc);
|
|
39
|
+
} else {
|
|
40
|
+
newObj[key] = obj[key];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
newObj.default = obj;
|
|
45
|
+
if (cache) {
|
|
46
|
+
cache.set(obj, newObj);
|
|
47
|
+
}
|
|
48
|
+
return newObj;
|
|
49
|
+
}
|
|
50
|
+
(0, _react1.configure)({
|
|
51
|
+
testIdAttribute: 'data-test-id'
|
|
52
|
+
});
|
|
53
|
+
jest.mock('@contentful/field-editor-reference', ()=>({
|
|
54
|
+
SingleEntryReferenceEditor: jest.fn(()=>_react.createElement("div", null, "mock"))
|
|
55
|
+
}));
|
|
56
|
+
const getSdk = (customize, initialValue)=>{
|
|
57
|
+
const [field] = (0, _fieldeditortestutils.createFakeFieldAPI)(customize, initialValue);
|
|
58
|
+
const sdk = {
|
|
59
|
+
field,
|
|
60
|
+
locales: (0, _fieldeditortestutils.createFakeLocalesAPI)((locales)=>{
|
|
61
|
+
locales.available.push('de');
|
|
62
|
+
return locales;
|
|
63
|
+
})
|
|
64
|
+
};
|
|
65
|
+
return sdk;
|
|
66
|
+
};
|
|
67
|
+
describe('Field', ()=>{
|
|
68
|
+
afterEach(_react1.cleanup);
|
|
69
|
+
it('renders custom field editor specified by renderFieldEditor', ()=>{
|
|
70
|
+
const sdk = getSdk();
|
|
71
|
+
const { queryByTestId } = (0, _react1.render)(_react.createElement(_Field.Field, {
|
|
72
|
+
sdk: sdk,
|
|
73
|
+
isInitiallyDisabled: false,
|
|
74
|
+
widgetId: "customEditor",
|
|
75
|
+
renderFieldEditor: ()=>{
|
|
76
|
+
return _react.createElement("div", {
|
|
77
|
+
"data-test-id": "customEditor"
|
|
78
|
+
}, "custom editor");
|
|
79
|
+
}
|
|
80
|
+
}));
|
|
81
|
+
expect(queryByTestId('customEditor')).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
it('renders with specified options', ()=>{
|
|
84
|
+
const sdk = getSdk();
|
|
85
|
+
const options = {
|
|
86
|
+
entryLinkEditor: {
|
|
87
|
+
onAction: jest.fn(),
|
|
88
|
+
renderCustomCard: jest.fn()
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
(0, _react1.render)(_react.createElement(_Field.Field, {
|
|
92
|
+
sdk: sdk,
|
|
93
|
+
isInitiallyDisabled: false,
|
|
94
|
+
widgetId: "entryLinkEditor",
|
|
95
|
+
getOptions: ()=>options
|
|
96
|
+
}));
|
|
97
|
+
expect(_fieldeditorreference.SingleEntryReferenceEditor.mock.calls[0][0]).toMatchObject({
|
|
98
|
+
onAction: options.entryLinkEditor.onAction,
|
|
99
|
+
renderCustomCard: options.entryLinkEditor.renderCustomCard
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
it('re-renders single field editor when locale changes', ()=>{
|
|
103
|
+
const props = {
|
|
104
|
+
isInitiallyDisabled: false,
|
|
105
|
+
widgetId: 'singleLine'
|
|
106
|
+
};
|
|
107
|
+
const { container , rerender } = (0, _react1.render)(_react.createElement(_Field.Field, {
|
|
108
|
+
...props,
|
|
109
|
+
sdk: getSdk((field)=>{
|
|
110
|
+
field.locale = 'en-US';
|
|
111
|
+
return field;
|
|
112
|
+
}, 'english value')
|
|
113
|
+
}));
|
|
114
|
+
expect(container.querySelector('input')?.value).toBe('english value');
|
|
115
|
+
rerender(_react.createElement(_Field.Field, {
|
|
116
|
+
...props,
|
|
117
|
+
sdk: getSdk((field)=>{
|
|
118
|
+
field.locale = 'de';
|
|
119
|
+
return field;
|
|
120
|
+
}, 'german value')
|
|
121
|
+
}));
|
|
122
|
+
expect(container.querySelector('input')?.value).toBe('german value');
|
|
123
|
+
});
|
|
124
|
+
});
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "FieldWrapper", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return FieldWrapper;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
12
|
+
const _f36components = require("@contentful/f36-components");
|
|
13
|
+
const _fieldeditorvalidationerrors = require("@contentful/field-editor-validation-errors");
|
|
14
|
+
const _emotion = require("emotion");
|
|
15
|
+
const _FieldWrapperstyles = require("./FieldWrapper.styles");
|
|
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
|
+
const FieldWrapper = function(props) {
|
|
56
|
+
const { ids } = props.sdk;
|
|
57
|
+
const defaultGetEntryUrl = (entry)=>`/spaces/${ids.space}/environments/${ids.environmentAlias || ids.environment}/entries/${entry.sys.id}`;
|
|
58
|
+
const { name , sdk , className , children , renderHeading , renderHelpText , showFocusBar =true , getEntryURL =defaultGetEntryUrl } = props;
|
|
59
|
+
const { field } = sdk;
|
|
60
|
+
const helpText = (sdk.parameters?.instance)?.helpText ?? '';
|
|
61
|
+
const [hasErrors, setHasErrors] = _react.useState(false);
|
|
62
|
+
_react.useEffect(()=>{
|
|
63
|
+
return field.onSchemaErrorsChanged((errors)=>{
|
|
64
|
+
setHasErrors((errors || []).length > 0);
|
|
65
|
+
});
|
|
66
|
+
}, [
|
|
67
|
+
field
|
|
68
|
+
]);
|
|
69
|
+
const fieldControlId = [
|
|
70
|
+
field.id,
|
|
71
|
+
field.locale,
|
|
72
|
+
sdk.contentType?.sys?.id
|
|
73
|
+
].filter((item)=>item).join('-');
|
|
74
|
+
return _react.createElement(_f36components.FormControl, {
|
|
75
|
+
id: fieldControlId,
|
|
76
|
+
testId: "entity-field-controls",
|
|
77
|
+
"data-test-id": "entity-field-controls",
|
|
78
|
+
className: (0, _emotion.cx)(showFocusBar && _FieldWrapperstyles.styles.withFocusBar, className),
|
|
79
|
+
"aria-invalid": hasErrors,
|
|
80
|
+
isRequired: field.required
|
|
81
|
+
}, renderHeading ? renderHeading(name) : _react.createElement(_f36components.FormControl.Label, {
|
|
82
|
+
className: _FieldWrapperstyles.styles.label
|
|
83
|
+
}, name), children, _react.createElement(_fieldeditorvalidationerrors.ValidationErrors, {
|
|
84
|
+
field: field,
|
|
85
|
+
space: sdk.space,
|
|
86
|
+
locales: sdk.locales,
|
|
87
|
+
getEntryURL: getEntryURL || defaultGetEntryUrl
|
|
88
|
+
}), renderHelpText ? renderHelpText(helpText) : _react.createElement(_f36components.FormControl.HelpText, {
|
|
89
|
+
testId: "field-hint",
|
|
90
|
+
className: _FieldWrapperstyles.styles.helpText
|
|
91
|
+
}, helpText));
|
|
92
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
6
|
+
const _fieldeditortestutils = require("@contentful/field-editor-test-utils");
|
|
7
|
+
require("@testing-library/jest-dom/extend-expect");
|
|
8
|
+
const _react1 = require("@testing-library/react");
|
|
9
|
+
const _FieldWrapper = require("./FieldWrapper");
|
|
10
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
11
|
+
if (typeof WeakMap !== "function") return null;
|
|
12
|
+
var cacheBabelInterop = new WeakMap();
|
|
13
|
+
var cacheNodeInterop = new WeakMap();
|
|
14
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
15
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
16
|
+
})(nodeInterop);
|
|
17
|
+
}
|
|
18
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
19
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
20
|
+
return obj;
|
|
21
|
+
}
|
|
22
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
23
|
+
return {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
28
|
+
if (cache && cache.has(obj)) {
|
|
29
|
+
return cache.get(obj);
|
|
30
|
+
}
|
|
31
|
+
var newObj = {};
|
|
32
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
33
|
+
for(var key in obj){
|
|
34
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
35
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
36
|
+
if (desc && (desc.get || desc.set)) {
|
|
37
|
+
Object.defineProperty(newObj, key, desc);
|
|
38
|
+
} else {
|
|
39
|
+
newObj[key] = obj[key];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
newObj.default = obj;
|
|
44
|
+
if (cache) {
|
|
45
|
+
cache.set(obj, newObj);
|
|
46
|
+
}
|
|
47
|
+
return newObj;
|
|
48
|
+
}
|
|
49
|
+
(0, _react1.configure)({
|
|
50
|
+
testIdAttribute: 'data-test-id'
|
|
51
|
+
});
|
|
52
|
+
const [field, emitter] = (0, _fieldeditortestutils.createFakeFieldAPI)();
|
|
53
|
+
const sdk = {
|
|
54
|
+
contentType: {
|
|
55
|
+
sys: {
|
|
56
|
+
id: 'content-type-id'
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
field,
|
|
60
|
+
locales: (0, _fieldeditortestutils.createFakeLocalesAPI)()
|
|
61
|
+
};
|
|
62
|
+
const getEntryURL = ()=>'';
|
|
63
|
+
describe('Field', ()=>{
|
|
64
|
+
afterEach(_react1.cleanup);
|
|
65
|
+
it('renders children, label, validation errors and help text', ()=>{
|
|
66
|
+
sdk.parameters = {
|
|
67
|
+
instance: {
|
|
68
|
+
helpText: 'help'
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const { queryByTestId } = (0, _react1.render)(_react.createElement(_FieldWrapper.FieldWrapper, {
|
|
72
|
+
name: "field",
|
|
73
|
+
sdk: sdk,
|
|
74
|
+
getEntryURL: getEntryURL
|
|
75
|
+
}, _react.createElement("div", {
|
|
76
|
+
"data-test-id": "children"
|
|
77
|
+
}, "children")));
|
|
78
|
+
(0, _react1.act)(()=>{
|
|
79
|
+
emitter.emit('onSchemaErrorsChanged', [
|
|
80
|
+
'error'
|
|
81
|
+
]);
|
|
82
|
+
});
|
|
83
|
+
expect(queryByTestId('entity-field-controls')).toBeInTheDocument();
|
|
84
|
+
expect(queryByTestId('cf-ui-form-label')).toBeInTheDocument();
|
|
85
|
+
expect(queryByTestId('children')).toBeInTheDocument();
|
|
86
|
+
expect(queryByTestId('validation-errors')).toBeInTheDocument();
|
|
87
|
+
expect(queryByTestId('field-hint')).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
it('renders custom label', ()=>{
|
|
90
|
+
const { queryByTestId } = (0, _react1.render)(_react.createElement(_FieldWrapper.FieldWrapper, {
|
|
91
|
+
name: "field",
|
|
92
|
+
sdk: sdk,
|
|
93
|
+
getEntryURL: getEntryURL,
|
|
94
|
+
renderHeading: ()=>_react.createElement("div", {
|
|
95
|
+
"data-test-id": "custom-label"
|
|
96
|
+
}, "custom label")
|
|
97
|
+
}, _react.createElement("div", null, "children")));
|
|
98
|
+
expect(queryByTestId('custom-label')).toBeInTheDocument();
|
|
99
|
+
});
|
|
100
|
+
it('renders custom help text', ()=>{
|
|
101
|
+
const { queryByTestId } = (0, _react1.render)(_react.createElement(_FieldWrapper.FieldWrapper, {
|
|
102
|
+
name: "field",
|
|
103
|
+
sdk: sdk,
|
|
104
|
+
getEntryURL: getEntryURL,
|
|
105
|
+
renderHelpText: ()=>_react.createElement("div", {
|
|
106
|
+
"data-test-id": "custom-hint"
|
|
107
|
+
}, "custom hint")
|
|
108
|
+
}, _react.createElement("div", null, "children")));
|
|
109
|
+
expect(queryByTestId('custom-hint')).toBeInTheDocument();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "styles", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return styles;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
|
|
12
|
+
const _emotion = require("emotion");
|
|
13
|
+
function _interop_require_default(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const styles = {
|
|
19
|
+
withFocusBar: (0, _emotion.css)({
|
|
20
|
+
marginLeft: _f36tokens.default.spacingL,
|
|
21
|
+
marginRight: _f36tokens.default.spacingL,
|
|
22
|
+
marginBottom: '29px',
|
|
23
|
+
marginTop: '19px',
|
|
24
|
+
paddingLeft: _f36tokens.default.spacingM,
|
|
25
|
+
borderLeft: `3px solid ${_f36tokens.default.gray300}`,
|
|
26
|
+
transition: 'border-color 0.18s linear',
|
|
27
|
+
'&:focus-within': {
|
|
28
|
+
borderColor: _f36tokens.default.colorPrimary
|
|
29
|
+
},
|
|
30
|
+
'&[aria-invalid="true"]': {
|
|
31
|
+
borderLeftColor: _f36tokens.default.red500
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
label: (0, _emotion.css)({
|
|
35
|
+
display: 'flex',
|
|
36
|
+
width: '100%',
|
|
37
|
+
maxWidth: '800px',
|
|
38
|
+
color: _f36tokens.default.gray500,
|
|
39
|
+
fontSize: _f36tokens.default.fontSizeM,
|
|
40
|
+
fontWeight: _f36tokens.default.fontWeightNormal,
|
|
41
|
+
lineHeight: _f36tokens.default.lineHeightDefault,
|
|
42
|
+
whiteSpace: 'pre-wrap'
|
|
43
|
+
}),
|
|
44
|
+
helpText: (0, _emotion.css)({
|
|
45
|
+
margin: `${_f36tokens.default.spacingXs} 0`,
|
|
46
|
+
fontStyle: 'italic'
|
|
47
|
+
})
|
|
48
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "getDefaultWidgetId", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return getDefaultWidgetId;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _contentfulmanagement = require("contentful-management");
|
|
12
|
+
function getDefaultWidgetId(sdk) {
|
|
13
|
+
const field = sdk.field;
|
|
14
|
+
return _contentfulmanagement.editorInterfaceDefaults.default.getDefaultControlOfField(field).widgetId;
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
Field: function() {
|
|
13
|
+
return _Field.Field;
|
|
14
|
+
},
|
|
15
|
+
FieldWrapper: function() {
|
|
16
|
+
return _FieldWrapper.FieldWrapper;
|
|
17
|
+
},
|
|
18
|
+
getDefaultWidgetId: function() {
|
|
19
|
+
return _getDefaultWidgetId.getDefaultWidgetId;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const _Field = require("./Field");
|
|
23
|
+
const _FieldWrapper = require("./FieldWrapper");
|
|
24
|
+
const _getDefaultWidgetId = require("./getDefaultWidgetId");
|