@contentful/field-editor-reference 6.16.2 → 6.18.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.
@@ -12,6 +12,7 @@ const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
12
12
  const _f36components = require("@contentful/f36-components");
13
13
  const _f36icons = require("@contentful/f36-icons");
14
14
  const _f36tokens = /*#__PURE__*/ _interop_require_default(require("@contentful/f36-tokens"));
15
+ const _core = require("@lingui/core");
15
16
  const _emotion = require("emotion");
16
17
  const _get = /*#__PURE__*/ _interop_require_default(require("lodash/get"));
17
18
  function _interop_require_default(obj) {
@@ -96,10 +97,14 @@ const styles = {
96
97
  margin: '10px 0'
97
98
  }),
98
99
  dropdownList: (0, _emotion.css)({
100
+ minWidth: '230px',
99
101
  borderColor: _f36tokens.default.gray200
100
102
  })
101
103
  };
102
- const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentTypesLabel, title, onSelect, testId, dropdownSettings = {
104
+ const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentTypesLabel = _core.i18n._({
105
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.AllContentTypesLabel",
106
+ message: "All Content Types"
107
+ }), title, onSelect, testId = 'create-entry-button-menu-trigger', dropdownSettings = {
103
108
  position: 'bottom-left'
104
109
  }, customDropdownItems, children, menuProps, filterExperienceTypes = true })=>{
105
110
  const [isOpen, setOpen] = (0, _react.useState)(false);
@@ -160,12 +165,21 @@ const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentT
160
165
  isOpen
161
166
  ]);
162
167
  const renderSearchResultsCount = (resultsLength)=>resultsLength ? /*#__PURE__*/ _react.default.createElement(_f36components.Menu.SectionTitle, {
163
- testId: "add-entru-menu-search-results"
164
- }, resultsLength, " result", resultsLength > 1 ? 's' : '') : null;
168
+ testId: "add-entry-menu-search-results"
169
+ }, _core.i18n._({
170
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypeResultsLabel",
171
+ message: "{resultsLength, plural, one {# result} other {# results}}",
172
+ values: {
173
+ resultsLength: resultsLength
174
+ }
175
+ })) : null;
165
176
  const isSearchable = filteredContentTypes.length > MAX_ITEMS_WITHOUT_SEARCH;
166
177
  const maxDropdownHeight = suggestedContentTypeId ? 300 : 250;
167
178
  const suggestedContentType = filteredContentTypes.find((ct)=>ct.sys.id === suggestedContentTypeId);
168
- const searchFilteredContentTypes = filteredContentTypes.filter((ct)=>!searchInput || (0, _get.default)(ct, 'name', 'Untitled').toLowerCase().includes(searchInput.toLowerCase()));
179
+ const searchFilteredContentTypes = filteredContentTypes.filter((ct)=>!searchInput || (0, _get.default)(ct, 'name', _core.i18n._({
180
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypeFallbackLabel",
181
+ message: "Untitled"
182
+ })).toLowerCase().includes(searchInput.toLowerCase()));
169
183
  return /*#__PURE__*/ _react.default.createElement("span", {
170
184
  className: styles.wrapper,
171
185
  ref: wrapper,
@@ -183,38 +197,45 @@ const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentT
183
197
  })), isOpen && /*#__PURE__*/ _react.default.createElement(_f36components.Menu.List, {
184
198
  className: styles.dropdownList,
185
199
  style: {
186
- width: dropdownWidth != undefined ? `${dropdownWidth}px` : undefined,
200
+ width: dropdownWidth !== undefined ? `${dropdownWidth}px` : undefined,
187
201
  maxHeight: `${maxDropdownHeight}px`
188
202
  },
189
203
  ref: menuListRef,
190
204
  testId: "add-entry-menu"
191
205
  }, Boolean(customDropdownItems) && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, customDropdownItems, /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Divider, null)), title && /*#__PURE__*/ _react.default.createElement(_f36components.Menu.SectionTitle, {
192
206
  className: styles.title
193
- }, title), isSearchable && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", {
207
+ }, title), isSearchable && /*#__PURE__*/ _react.default.createElement("div", {
194
208
  ref: textField,
195
209
  className: styles.inputWrapper
196
210
  }, /*#__PURE__*/ _react.default.createElement(_f36components.TextInput, {
197
211
  className: styles.searchInput,
198
- placeholder: "Search content type",
212
+ placeholder: _core.i18n._({
213
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypePlaceholder",
214
+ message: "Search content type"
215
+ }),
199
216
  testId: "add-entry-menu-search",
200
217
  value: searchInput,
201
218
  onChange: (e)=>setSearchInput(e.target.value)
202
219
  }), /*#__PURE__*/ _react.default.createElement(_f36icons.MagnifyingGlassIcon, {
203
220
  size: "small",
204
221
  className: styles.searchIcon
205
- }))), searchInput && renderSearchResultsCount(searchFilteredContentTypes.length), suggestedContentType && !searchInput && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_f36components.Menu.SectionTitle, null, "Suggested Content Type"), /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Item, {
222
+ })), searchInput && renderSearchResultsCount(searchFilteredContentTypes.length), suggestedContentType && !searchInput && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_f36components.Menu.SectionTitle, null, _core.i18n._({
223
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SuggestedContentTypeLabel",
224
+ message: "Suggested Content Type"
225
+ })), /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Item, {
206
226
  testId: "suggested",
207
227
  onClick: ()=>handleSelect(suggestedContentType)
208
228
  }, (0, _get.default)(suggestedContentType, 'name')), /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Divider, null)), !searchInput && /*#__PURE__*/ _react.default.createElement(_f36components.Menu.SectionTitle, null, contentTypesLabel), searchFilteredContentTypes.length ? searchFilteredContentTypes.map((contentType, i)=>/*#__PURE__*/ _react.default.createElement(_f36components.Menu.Item, {
209
229
  testId: "contentType",
210
230
  key: `${(0, _get.default)(contentType, 'name')}-${i}`,
211
231
  onClick: ()=>handleSelect(contentType)
212
- }, (0, _get.default)(contentType, 'name', 'Untitled'))) : /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Item, {
213
- testId: "add-entru-menu-search-results"
214
- }, "No results found"))));
215
- };
216
- CreateEntryMenuTrigger.defaultProps = {
217
- testId: 'create-entry-button-menu-trigger',
218
- contentTypesLabel: 'All Content Types',
219
- filterExperienceTypes: true
232
+ }, (0, _get.default)(contentType, 'name', _core.i18n._({
233
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.ContentTypeFallbackLabel",
234
+ message: "Untitled"
235
+ })))) : /*#__PURE__*/ _react.default.createElement(_f36components.Menu.Item, {
236
+ testId: "add-entry-menu-search-results"
237
+ }, _core.i18n._({
238
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.NoResultsLabel",
239
+ message: "No results found"
240
+ })))));
220
241
  };
@@ -179,7 +179,7 @@ describe('CreateEntryMenuTrigger general', ()=>{
179
179
  preventDefault: _noop.default
180
180
  });
181
181
  expect(getAllByTestId('contentType')).toHaveLength(10);
182
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('10 results');
182
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('10 results');
183
183
  _react1.fireEvent.change(input, {
184
184
  target: {
185
185
  value: '3'
@@ -187,14 +187,14 @@ describe('CreateEntryMenuTrigger general', ()=>{
187
187
  preventDefault: _noop.default
188
188
  });
189
189
  expect(getAllByTestId('contentType')).toHaveLength(1);
190
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('1 result');
190
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('1 result');
191
191
  _react1.fireEvent.change(input, {
192
192
  target: {
193
193
  value: '4'
194
194
  },
195
195
  preventDefault: _noop.default
196
196
  });
197
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('No results found');
197
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('No results found');
198
198
  });
199
199
  it('shows suggestedContentType in the list', ()=>{
200
200
  const { getByTestId } = (0, _react1.render)(/*#__PURE__*/ _react.createElement(_CreateEntryMenuTrigger.CreateEntryMenuTrigger, {
@@ -2,6 +2,7 @@ import React, { useState, useRef, useEffect, useMemo } from 'react';
2
2
  import { TextInput, Menu } from '@contentful/f36-components';
3
3
  import { MagnifyingGlassIcon } from '@contentful/f36-icons';
4
4
  import tokens from '@contentful/f36-tokens';
5
+ import { i18n as $_i18n } from "@lingui/core";
5
6
  import { css } from 'emotion';
6
7
  import get from 'lodash/get';
7
8
  const MAX_ITEMS_WITHOUT_SEARCH = 5;
@@ -40,10 +41,14 @@ const styles = {
40
41
  margin: '10px 0'
41
42
  }),
42
43
  dropdownList: css({
44
+ minWidth: '230px',
43
45
  borderColor: tokens.gray200
44
46
  })
45
47
  };
46
- export const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentTypesLabel, title, onSelect, testId, dropdownSettings = {
48
+ export const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, contentTypesLabel = $_i18n._({
49
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.AllContentTypesLabel",
50
+ message: "All Content Types"
51
+ }), title, onSelect, testId = 'create-entry-button-menu-trigger', dropdownSettings = {
47
52
  position: 'bottom-left'
48
53
  }, customDropdownItems, children, menuProps, filterExperienceTypes = true })=>{
49
54
  const [isOpen, setOpen] = useState(false);
@@ -104,12 +109,21 @@ export const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, c
104
109
  isOpen
105
110
  ]);
106
111
  const renderSearchResultsCount = (resultsLength)=>resultsLength ? /*#__PURE__*/ React.createElement(Menu.SectionTitle, {
107
- testId: "add-entru-menu-search-results"
108
- }, resultsLength, " result", resultsLength > 1 ? 's' : '') : null;
112
+ testId: "add-entry-menu-search-results"
113
+ }, $_i18n._({
114
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypeResultsLabel",
115
+ message: "{resultsLength, plural, one {# result} other {# results}}",
116
+ values: {
117
+ resultsLength: resultsLength
118
+ }
119
+ })) : null;
109
120
  const isSearchable = filteredContentTypes.length > MAX_ITEMS_WITHOUT_SEARCH;
110
121
  const maxDropdownHeight = suggestedContentTypeId ? 300 : 250;
111
122
  const suggestedContentType = filteredContentTypes.find((ct)=>ct.sys.id === suggestedContentTypeId);
112
- const searchFilteredContentTypes = filteredContentTypes.filter((ct)=>!searchInput || get(ct, 'name', 'Untitled').toLowerCase().includes(searchInput.toLowerCase()));
123
+ const searchFilteredContentTypes = filteredContentTypes.filter((ct)=>!searchInput || get(ct, 'name', $_i18n._({
124
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypeFallbackLabel",
125
+ message: "Untitled"
126
+ })).toLowerCase().includes(searchInput.toLowerCase()));
113
127
  return /*#__PURE__*/ React.createElement("span", {
114
128
  className: styles.wrapper,
115
129
  ref: wrapper,
@@ -127,38 +141,45 @@ export const CreateEntryMenuTrigger = ({ contentTypes, suggestedContentTypeId, c
127
141
  })), isOpen && /*#__PURE__*/ React.createElement(Menu.List, {
128
142
  className: styles.dropdownList,
129
143
  style: {
130
- width: dropdownWidth != undefined ? `${dropdownWidth}px` : undefined,
144
+ width: dropdownWidth !== undefined ? `${dropdownWidth}px` : undefined,
131
145
  maxHeight: `${maxDropdownHeight}px`
132
146
  },
133
147
  ref: menuListRef,
134
148
  testId: "add-entry-menu"
135
149
  }, Boolean(customDropdownItems) && /*#__PURE__*/ React.createElement(React.Fragment, null, customDropdownItems, /*#__PURE__*/ React.createElement(Menu.Divider, null)), title && /*#__PURE__*/ React.createElement(Menu.SectionTitle, {
136
150
  className: styles.title
137
- }, title), isSearchable && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
151
+ }, title), isSearchable && /*#__PURE__*/ React.createElement("div", {
138
152
  ref: textField,
139
153
  className: styles.inputWrapper
140
154
  }, /*#__PURE__*/ React.createElement(TextInput, {
141
155
  className: styles.searchInput,
142
- placeholder: "Search content type",
156
+ placeholder: $_i18n._({
157
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SearchContentTypePlaceholder",
158
+ message: "Search content type"
159
+ }),
143
160
  testId: "add-entry-menu-search",
144
161
  value: searchInput,
145
162
  onChange: (e)=>setSearchInput(e.target.value)
146
163
  }), /*#__PURE__*/ React.createElement(MagnifyingGlassIcon, {
147
164
  size: "small",
148
165
  className: styles.searchIcon
149
- }))), searchInput && renderSearchResultsCount(searchFilteredContentTypes.length), suggestedContentType && !searchInput && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(Menu.SectionTitle, null, "Suggested Content Type"), /*#__PURE__*/ React.createElement(Menu.Item, {
166
+ })), searchInput && renderSearchResultsCount(searchFilteredContentTypes.length), suggestedContentType && !searchInput && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(Menu.SectionTitle, null, $_i18n._({
167
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.SuggestedContentTypeLabel",
168
+ message: "Suggested Content Type"
169
+ })), /*#__PURE__*/ React.createElement(Menu.Item, {
150
170
  testId: "suggested",
151
171
  onClick: ()=>handleSelect(suggestedContentType)
152
172
  }, get(suggestedContentType, 'name')), /*#__PURE__*/ React.createElement(Menu.Divider, null)), !searchInput && /*#__PURE__*/ React.createElement(Menu.SectionTitle, null, contentTypesLabel), searchFilteredContentTypes.length ? searchFilteredContentTypes.map((contentType, i)=>/*#__PURE__*/ React.createElement(Menu.Item, {
153
173
  testId: "contentType",
154
174
  key: `${get(contentType, 'name')}-${i}`,
155
175
  onClick: ()=>handleSelect(contentType)
156
- }, get(contentType, 'name', 'Untitled'))) : /*#__PURE__*/ React.createElement(Menu.Item, {
157
- testId: "add-entru-menu-search-results"
158
- }, "No results found"))));
159
- };
160
- CreateEntryMenuTrigger.defaultProps = {
161
- testId: 'create-entry-button-menu-trigger',
162
- contentTypesLabel: 'All Content Types',
163
- filterExperienceTypes: true
176
+ }, get(contentType, 'name', $_i18n._({
177
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.ContentTypeFallbackLabel",
178
+ message: "Untitled"
179
+ })))) : /*#__PURE__*/ React.createElement(Menu.Item, {
180
+ testId: "add-entry-menu-search-results"
181
+ }, $_i18n._({
182
+ id: "FieldEditors.Reference.CreateEntryMenuTrigger.NoResultsLabel",
183
+ message: "No results found"
184
+ })))));
164
185
  };
@@ -129,7 +129,7 @@ describe('CreateEntryMenuTrigger general', ()=>{
129
129
  preventDefault: noop
130
130
  });
131
131
  expect(getAllByTestId('contentType')).toHaveLength(10);
132
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('10 results');
132
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('10 results');
133
133
  fireEvent.change(input, {
134
134
  target: {
135
135
  value: '3'
@@ -137,14 +137,14 @@ describe('CreateEntryMenuTrigger general', ()=>{
137
137
  preventDefault: noop
138
138
  });
139
139
  expect(getAllByTestId('contentType')).toHaveLength(1);
140
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('1 result');
140
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('1 result');
141
141
  fireEvent.change(input, {
142
142
  target: {
143
143
  value: '4'
144
144
  },
145
145
  preventDefault: noop
146
146
  });
147
- expect(getByTestId('add-entru-menu-search-results').textContent).toBe('No results found');
147
+ expect(getByTestId('add-entry-menu-search-results').textContent).toBe('No results found');
148
148
  });
149
149
  it('shows suggestedContentType in the list', ()=>{
150
150
  const { getByTestId } = render(/*#__PURE__*/ React.createElement(CreateEntryMenuTrigger, {
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
- import { MenuProps } from '@contentful/f36-components';
3
- import { ContentType } from '../../types';
2
+ import { type MenuProps } from '@contentful/f36-components';
3
+ import type { ContentType } from '../../types';
4
4
  type CreateEntryMenuTriggerChildProps = {
5
5
  isOpen: boolean;
6
6
  isSelecting: boolean;
7
7
  };
8
8
  export type CreateEntryMenuTriggerChild = (props: CreateEntryMenuTriggerChildProps) => React.ReactElement;
9
9
  export type CreateCustomEntryMenuItems = ({ closeMenu, }: {
10
- closeMenu: Function;
10
+ closeMenu: () => void;
11
11
  }) => React.ReactElement;
12
12
  interface CreateEntryMenuTrigger {
13
13
  contentTypes: ContentType[];
@@ -25,12 +25,5 @@ interface CreateEntryMenuTrigger {
25
25
  menuProps?: Omit<MenuProps, 'children'>;
26
26
  filterExperienceTypes?: boolean;
27
27
  }
28
- export declare const CreateEntryMenuTrigger: {
29
- ({ contentTypes, suggestedContentTypeId, contentTypesLabel, title, onSelect, testId, dropdownSettings, customDropdownItems, children, menuProps, filterExperienceTypes, }: CreateEntryMenuTrigger): React.JSX.Element;
30
- defaultProps: {
31
- testId: string;
32
- contentTypesLabel: string;
33
- filterExperienceTypes: boolean;
34
- };
35
- };
28
+ export declare const CreateEntryMenuTrigger: ({ contentTypes, suggestedContentTypeId, contentTypesLabel, title, onSelect, testId, dropdownSettings, customDropdownItems, children, menuProps, filterExperienceTypes, }: CreateEntryMenuTrigger) => React.JSX.Element;
36
29
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/field-editor-reference",
3
- "version": "6.16.2",
3
+ "version": "6.18.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "registry": "https://npm.pkg.github.com/"
70
70
  },
71
- "gitHead": "c5b21141d6963ac4afe1a596c379d63668466afe"
71
+ "gitHead": "b25d0af70c82c9e29505335ce636f2e32e6cb927"
72
72
  }