@wordpress/editor 12.0.1 → 12.0.2
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/build/components/autosave-monitor/index.js +5 -0
- package/build/components/autosave-monitor/index.js.map +1 -1
- package/build/components/editor-help/index.native.js +2 -2
- package/build/components/editor-help/index.native.js.map +1 -1
- package/build/components/entities-saved-states/entity-type-list.js +22 -13
- package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
- package/build/components/entities-saved-states/index.js +23 -4
- package/build/components/entities-saved-states/index.js.map +1 -1
- package/build/components/post-taxonomies/flat-term-selector.js +154 -211
- package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build/components/post-title/index.js +4 -2
- package/build/components/post-title/index.js.map +1 -1
- package/build/components/provider/use-block-editor-settings.js +1 -1
- package/build/components/provider/use-block-editor-settings.js.map +1 -1
- package/build-module/components/autosave-monitor/index.js +5 -0
- package/build-module/components/autosave-monitor/index.js.map +1 -1
- package/build-module/components/editor-help/index.native.js +3 -3
- package/build-module/components/editor-help/index.native.js.map +1 -1
- package/build-module/components/entities-saved-states/entity-type-list.js +24 -13
- package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
- package/build-module/components/entities-saved-states/index.js +23 -4
- package/build-module/components/entities-saved-states/index.js.map +1 -1
- package/build-module/components/post-taxonomies/flat-term-selector.js +156 -214
- package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
- package/build-module/components/post-title/index.js +4 -2
- package/build-module/components/post-title/index.js.map +1 -1
- package/build-module/components/provider/use-block-editor-settings.js +1 -1
- package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
- package/package.json +18 -18
- package/src/components/autosave-monitor/index.js +5 -0
- package/src/components/autosave-monitor/test/index.js +10 -4
- package/src/components/editor-help/index.native.js +116 -110
- package/src/components/entities-saved-states/entity-type-list.js +29 -10
- package/src/components/entities-saved-states/index.js +38 -8
- package/src/components/post-taxonomies/flat-term-selector.js +220 -254
- package/src/components/post-title/index.js +4 -2
- package/src/components/provider/use-block-editor-settings.js +0 -2
|
@@ -25,6 +25,8 @@ var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
|
|
|
25
25
|
|
|
26
26
|
var _url = require("@wordpress/url");
|
|
27
27
|
|
|
28
|
+
var _a11y = require("@wordpress/a11y");
|
|
29
|
+
|
|
28
30
|
var _store = require("../../store");
|
|
29
31
|
|
|
30
32
|
var _terms = require("../../utils/terms");
|
|
@@ -43,264 +45,205 @@ var _mostUsedTerms = _interopRequireDefault(require("./most-used-terms"));
|
|
|
43
45
|
* Internal dependencies
|
|
44
46
|
*/
|
|
45
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Shared reference to an empty array for cases where it is important to avoid
|
|
50
|
+
* returning a new array reference on every invocation.
|
|
51
|
+
*
|
|
52
|
+
* @type {Array<any>}
|
|
53
|
+
*/
|
|
54
|
+
const EMPTY_ARRAY = [];
|
|
46
55
|
/**
|
|
47
56
|
* Module constants
|
|
48
57
|
*/
|
|
58
|
+
|
|
49
59
|
const MAX_TERMS_SUGGESTIONS = 20;
|
|
50
60
|
const DEFAULT_QUERY = {
|
|
51
61
|
per_page: MAX_TERMS_SUGGESTIONS,
|
|
52
62
|
orderby: 'count',
|
|
53
63
|
order: 'desc',
|
|
54
|
-
_fields: 'id,name,
|
|
64
|
+
_fields: 'id,name',
|
|
65
|
+
context: 'view'
|
|
55
66
|
};
|
|
56
67
|
|
|
57
68
|
const isSameTermName = (termA, termB) => (0, _terms.unescapeString)(termA).toLowerCase() === (0, _terms.unescapeString)(termB).toLowerCase();
|
|
58
69
|
|
|
59
70
|
const termNamesToIds = (names, terms) => {
|
|
60
71
|
return names.map(termName => (0, _lodash.find)(terms, term => isSameTermName(term.name, termName)).id);
|
|
61
|
-
};
|
|
72
|
+
}; // Tries to create a term or fetch it if it already exists.
|
|
62
73
|
|
|
63
|
-
class FlatTermSelector extends _element.Component {
|
|
64
|
-
constructor() {
|
|
65
|
-
super(...arguments);
|
|
66
|
-
this.onChange = this.onChange.bind(this);
|
|
67
|
-
this.searchTerms = (0, _lodash.debounce)(this.searchTerms.bind(this), 500);
|
|
68
|
-
this.findOrCreateTerm = this.findOrCreateTerm.bind(this);
|
|
69
|
-
this.appendTerm = this.appendTerm.bind(this);
|
|
70
|
-
this.state = {
|
|
71
|
-
loading: !(0, _lodash.isEmpty)(this.props.terms),
|
|
72
|
-
availableTerms: [],
|
|
73
|
-
selectedTerms: []
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
75
|
+
function findOrCreateTerm(termName, restBase) {
|
|
76
|
+
const escapedTermName = (0, _lodash.escape)(termName);
|
|
77
|
+
return (0, _apiFetch.default)({
|
|
78
|
+
path: `/wp/v2/${restBase}`,
|
|
79
|
+
method: 'POST',
|
|
80
|
+
data: {
|
|
81
|
+
name: escapedTermName
|
|
82
|
+
}
|
|
83
|
+
}).catch(error => {
|
|
84
|
+
const errorCode = error.code;
|
|
85
|
+
|
|
86
|
+
if (errorCode === 'term_exists') {
|
|
87
|
+
// If the terms exist, fetch it instead of creating a new one.
|
|
88
|
+
const addRequest = (0, _apiFetch.default)({
|
|
89
|
+
path: (0, _url.addQueryArgs)(`/wp/v2/${restBase}`, { ...DEFAULT_QUERY,
|
|
90
|
+
search: escapedTermName
|
|
91
|
+
})
|
|
92
|
+
}).then(_terms.unescapeTerms);
|
|
93
|
+
return addRequest.then(searchResult => {
|
|
94
|
+
return (0, _lodash.find)(searchResult, result => isSameTermName(result.name, termName));
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
componentWillUnmount() {
|
|
100
|
-
(0, _lodash.invoke)(this.initRequest, ['abort']);
|
|
101
|
-
(0, _lodash.invoke)(this.searchRequest, ['abort']);
|
|
102
|
-
}
|
|
103
97
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
}
|
|
98
|
+
return Promise.reject(error);
|
|
99
|
+
}).then(_terms.unescapeTerm);
|
|
100
|
+
}
|
|
109
101
|
|
|
110
|
-
|
|
102
|
+
function FlatTermSelector({
|
|
103
|
+
slug
|
|
104
|
+
}) {
|
|
105
|
+
const [values, setValues] = (0, _element.useState)([]);
|
|
106
|
+
const [search, setSearch] = (0, _element.useState)('');
|
|
107
|
+
const debouncedSearch = (0, _compose.useDebounce)(setSearch, 500);
|
|
108
|
+
const {
|
|
109
|
+
terms,
|
|
110
|
+
termIds,
|
|
111
|
+
taxonomy,
|
|
112
|
+
hasAssignAction,
|
|
113
|
+
hasCreateAction,
|
|
114
|
+
hasResolvedTerms
|
|
115
|
+
} = (0, _data.useSelect)(select => {
|
|
111
116
|
const {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
this.setState(state => ({
|
|
122
|
-
availableTerms: state.availableTerms.concat(terms.filter(term => !(0, _lodash.find)(state.availableTerms, availableTerm => availableTerm.id === term.id)))
|
|
123
|
-
}));
|
|
124
|
-
this.updateSelectedTerms(this.props.terms);
|
|
125
|
-
});
|
|
126
|
-
return request;
|
|
127
|
-
}
|
|
117
|
+
getCurrentPost,
|
|
118
|
+
getEditedPostAttribute
|
|
119
|
+
} = select(_store.store);
|
|
120
|
+
const {
|
|
121
|
+
getEntityRecords,
|
|
122
|
+
getTaxonomy,
|
|
123
|
+
hasFinishedResolution
|
|
124
|
+
} = select(_coreData.store);
|
|
125
|
+
const post = getCurrentPost();
|
|
128
126
|
|
|
129
|
-
|
|
130
|
-
const selectedTerms = terms.reduce((accumulator, termId) => {
|
|
131
|
-
const termObject = (0, _lodash.find)(this.state.availableTerms, term => term.id === termId);
|
|
127
|
+
const _taxonomy = getTaxonomy(slug);
|
|
132
128
|
|
|
133
|
-
|
|
134
|
-
accumulator.push(termObject.name);
|
|
135
|
-
}
|
|
129
|
+
const _termIds = _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : EMPTY_ARRAY;
|
|
136
130
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
const query = { ...DEFAULT_QUERY,
|
|
132
|
+
include: _termIds.join(','),
|
|
133
|
+
per_page: -1
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
hasCreateAction: _taxonomy ? (0, _lodash.get)(post, ['_links', 'wp:action-create-' + _taxonomy.rest_base], false) : false,
|
|
137
|
+
hasAssignAction: _taxonomy ? (0, _lodash.get)(post, ['_links', 'wp:action-assign-' + _taxonomy.rest_base], false) : false,
|
|
138
|
+
taxonomy: _taxonomy,
|
|
139
|
+
termIds: _termIds,
|
|
140
|
+
terms: _termIds.length ? getEntityRecords('taxonomy', slug, query) : EMPTY_ARRAY,
|
|
141
|
+
hasResolvedTerms: hasFinishedResolution('getEntityRecords', ['taxonomy', slug, query])
|
|
142
|
+
};
|
|
143
|
+
}, [slug]);
|
|
144
|
+
const {
|
|
145
|
+
searchResults
|
|
146
|
+
} = (0, _data.useSelect)(select => {
|
|
147
|
+
const {
|
|
148
|
+
getEntityRecords
|
|
149
|
+
} = select(_coreData.store);
|
|
150
|
+
return {
|
|
151
|
+
searchResults: !!search ? getEntityRecords('taxonomy', slug, { ...DEFAULT_QUERY,
|
|
152
|
+
search
|
|
153
|
+
}) : EMPTY_ARRAY
|
|
154
|
+
};
|
|
155
|
+
}, [search]); // Update terms state only after the selectors are resolved.
|
|
156
|
+
// We're using this to avoid terms temporarily disappearing on slow networks
|
|
157
|
+
// while core data makes REST API requests.
|
|
158
|
+
|
|
159
|
+
(0, _element.useEffect)(() => {
|
|
160
|
+
if (hasResolvedTerms) {
|
|
161
|
+
const newValues = terms.map(term => (0, _terms.unescapeString)(term.name));
|
|
162
|
+
setValues(newValues);
|
|
163
|
+
}
|
|
164
|
+
}, [terms, hasResolvedTerms]);
|
|
165
|
+
const suggestions = (0, _element.useMemo)(() => {
|
|
166
|
+
return (searchResults !== null && searchResults !== void 0 ? searchResults : []).map(term => (0, _terms.unescapeString)(term.name));
|
|
167
|
+
}, [searchResults]);
|
|
168
|
+
const {
|
|
169
|
+
editPost
|
|
170
|
+
} = (0, _data.useDispatch)(_store.store);
|
|
171
|
+
|
|
172
|
+
if (!hasAssignAction) {
|
|
173
|
+
return null;
|
|
142
174
|
}
|
|
143
175
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
taxonomy
|
|
147
|
-
}
|
|
148
|
-
const termNameEscaped = (0, _lodash.escape)(termName); // Tries to create a term or fetch it if it already exists.
|
|
149
|
-
|
|
150
|
-
return (0, _apiFetch.default)({
|
|
151
|
-
path: `/wp/v2/${taxonomy.rest_base}`,
|
|
152
|
-
method: 'POST',
|
|
153
|
-
data: {
|
|
154
|
-
name: termNameEscaped
|
|
155
|
-
}
|
|
156
|
-
}).catch(error => {
|
|
157
|
-
const errorCode = error.code;
|
|
158
|
-
|
|
159
|
-
if (errorCode === 'term_exists') {
|
|
160
|
-
// If the terms exist, fetch it instead of creating a new one.
|
|
161
|
-
this.addRequest = (0, _apiFetch.default)({
|
|
162
|
-
path: (0, _url.addQueryArgs)(`/wp/v2/${taxonomy.rest_base}`, { ...DEFAULT_QUERY,
|
|
163
|
-
search: termNameEscaped
|
|
164
|
-
})
|
|
165
|
-
}).then(_terms.unescapeTerms);
|
|
166
|
-
return this.addRequest.then(searchResult => {
|
|
167
|
-
return (0, _lodash.find)(searchResult, result => isSameTermName(result.name, termName));
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return Promise.reject(error);
|
|
172
|
-
}).then(_terms.unescapeTerm);
|
|
176
|
+
function onUpdateTerms(newTermIds) {
|
|
177
|
+
editPost({
|
|
178
|
+
[taxonomy.rest_base]: newTermIds
|
|
179
|
+
});
|
|
173
180
|
}
|
|
174
181
|
|
|
175
|
-
onChange(termNames) {
|
|
182
|
+
function onChange(termNames) {
|
|
183
|
+
const availableTerms = [...terms, ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])];
|
|
176
184
|
const uniqueTerms = (0, _lodash.uniqBy)(termNames, term => term.toLowerCase());
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
const newTermNames = uniqueTerms.filter(termName => !(0, _lodash.find)(availableTerms, term => isSameTermName(term.name, termName))); // Optimistically update term values.
|
|
186
|
+
// The selector will always re-fetch terms later.
|
|
187
|
+
|
|
188
|
+
setValues(uniqueTerms);
|
|
181
189
|
|
|
182
190
|
if (newTermNames.length === 0) {
|
|
183
|
-
return
|
|
191
|
+
return onUpdateTerms(termNamesToIds(uniqueTerms, availableTerms));
|
|
184
192
|
}
|
|
185
193
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
this.setState({
|
|
189
|
-
availableTerms: newAvailableTerms
|
|
190
|
-
});
|
|
191
|
-
return this.props.onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms), this.props.taxonomy.rest_base);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
searchTerms(search = '') {
|
|
196
|
-
(0, _lodash.invoke)(this.searchRequest, ['abort']);
|
|
197
|
-
|
|
198
|
-
if (search.length >= 3) {
|
|
199
|
-
this.searchRequest = this.fetchTerms({
|
|
200
|
-
search
|
|
201
|
-
});
|
|
194
|
+
if (!hasCreateAction) {
|
|
195
|
+
return;
|
|
202
196
|
}
|
|
197
|
+
|
|
198
|
+
Promise.all(newTermNames.map(termName => findOrCreateTerm(termName, taxonomy.rest_base))).then(newTerms => {
|
|
199
|
+
const newAvailableTerms = availableTerms.concat(newTerms);
|
|
200
|
+
return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms));
|
|
201
|
+
});
|
|
203
202
|
}
|
|
204
203
|
|
|
205
|
-
appendTerm(newTerm) {
|
|
206
|
-
|
|
207
|
-
onUpdateTerms,
|
|
208
|
-
taxonomy,
|
|
209
|
-
terms = [],
|
|
210
|
-
slug,
|
|
211
|
-
speak
|
|
212
|
-
} = this.props;
|
|
213
|
-
|
|
214
|
-
if (terms.includes(newTerm.id)) {
|
|
204
|
+
function appendTerm(newTerm) {
|
|
205
|
+
if (termIds.includes(newTerm.id)) {
|
|
215
206
|
return;
|
|
216
207
|
}
|
|
217
208
|
|
|
218
|
-
const
|
|
209
|
+
const newTermIds = [...termIds, newTerm.id];
|
|
219
210
|
const termAddedMessage = (0, _i18n.sprintf)(
|
|
220
211
|
/* translators: %s: term name. */
|
|
221
212
|
(0, _i18n._x)('%s added', 'term'), (0, _lodash.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0, _i18n.__)('Tag') : (0, _i18n.__)('Term')));
|
|
222
|
-
speak(termAddedMessage, 'assertive');
|
|
223
|
-
|
|
224
|
-
availableTerms: [...this.state.availableTerms, newTerm]
|
|
225
|
-
});
|
|
226
|
-
onUpdateTerms(newTerms, taxonomy.rest_base);
|
|
213
|
+
(0, _a11y.speak)(termAddedMessage, 'assertive');
|
|
214
|
+
onUpdateTerms(newTermIds);
|
|
227
215
|
}
|
|
228
216
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
217
|
+
const newTermLabel = (0, _lodash.get)(taxonomy, ['labels', 'add_new_item'], slug === 'post_tag' ? (0, _i18n.__)('Add new tag') : (0, _i18n.__)('Add new Term'));
|
|
218
|
+
const singularName = (0, _lodash.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0, _i18n.__)('Tag') : (0, _i18n.__)('Term'));
|
|
219
|
+
const termAddedLabel = (0, _i18n.sprintf)(
|
|
220
|
+
/* translators: %s: term name. */
|
|
221
|
+
(0, _i18n._x)('%s added', 'term'), singularName);
|
|
222
|
+
const termRemovedLabel = (0, _i18n.sprintf)(
|
|
223
|
+
/* translators: %s: term name. */
|
|
224
|
+
(0, _i18n._x)('%s removed', 'term'), singularName);
|
|
225
|
+
const removeTermLabel = (0, _i18n.sprintf)(
|
|
226
|
+
/* translators: %s: term name. */
|
|
227
|
+
(0, _i18n._x)('Remove %s', 'term'), singularName);
|
|
228
|
+
return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.FormTokenField, {
|
|
229
|
+
value: values,
|
|
230
|
+
suggestions: suggestions,
|
|
231
|
+
onChange: onChange,
|
|
232
|
+
onInputChange: debouncedSearch,
|
|
233
|
+
maxSuggestions: MAX_TERMS_SUGGESTIONS,
|
|
234
|
+
label: newTermLabel,
|
|
235
|
+
messages: {
|
|
236
|
+
added: termAddedLabel,
|
|
237
|
+
removed: termRemovedLabel,
|
|
238
|
+
remove: removeTermLabel
|
|
238
239
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
selectedTerms
|
|
244
|
-
} = this.state;
|
|
245
|
-
const termNames = availableTerms.map(term => term.name);
|
|
246
|
-
const newTermLabel = (0, _lodash.get)(taxonomy, ['labels', 'add_new_item'], slug === 'post_tag' ? (0, _i18n.__)('Add new tag') : (0, _i18n.__)('Add new Term'));
|
|
247
|
-
const singularName = (0, _lodash.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0, _i18n.__)('Tag') : (0, _i18n.__)('Term'));
|
|
248
|
-
const termAddedLabel = (0, _i18n.sprintf)(
|
|
249
|
-
/* translators: %s: term name. */
|
|
250
|
-
(0, _i18n._x)('%s added', 'term'), singularName);
|
|
251
|
-
const termRemovedLabel = (0, _i18n.sprintf)(
|
|
252
|
-
/* translators: %s: term name. */
|
|
253
|
-
(0, _i18n._x)('%s removed', 'term'), singularName);
|
|
254
|
-
const removeTermLabel = (0, _i18n.sprintf)(
|
|
255
|
-
/* translators: %s: term name. */
|
|
256
|
-
(0, _i18n._x)('Remove %s', 'term'), singularName);
|
|
257
|
-
return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.FormTokenField, {
|
|
258
|
-
value: selectedTerms,
|
|
259
|
-
suggestions: termNames,
|
|
260
|
-
onChange: this.onChange,
|
|
261
|
-
onInputChange: this.searchTerms,
|
|
262
|
-
maxSuggestions: MAX_TERMS_SUGGESTIONS,
|
|
263
|
-
disabled: loading,
|
|
264
|
-
label: newTermLabel,
|
|
265
|
-
messages: {
|
|
266
|
-
added: termAddedLabel,
|
|
267
|
-
removed: termRemovedLabel,
|
|
268
|
-
remove: removeTermLabel
|
|
269
|
-
}
|
|
270
|
-
}), (0, _element.createElement)(_mostUsedTerms.default, {
|
|
271
|
-
taxonomy: taxonomy,
|
|
272
|
-
onSelect: this.appendTerm
|
|
273
|
-
}));
|
|
274
|
-
}
|
|
275
|
-
|
|
240
|
+
}), (0, _element.createElement)(_mostUsedTerms.default, {
|
|
241
|
+
taxonomy: taxonomy,
|
|
242
|
+
onSelect: appendTerm
|
|
243
|
+
}));
|
|
276
244
|
}
|
|
277
245
|
|
|
278
|
-
var _default = (0,
|
|
279
|
-
slug
|
|
280
|
-
}) => {
|
|
281
|
-
const {
|
|
282
|
-
getCurrentPost
|
|
283
|
-
} = select(_store.store);
|
|
284
|
-
const {
|
|
285
|
-
getTaxonomy
|
|
286
|
-
} = select(_coreData.store);
|
|
287
|
-
const taxonomy = getTaxonomy(slug);
|
|
288
|
-
return {
|
|
289
|
-
hasCreateAction: taxonomy ? (0, _lodash.get)(getCurrentPost(), ['_links', 'wp:action-create-' + taxonomy.rest_base], false) : false,
|
|
290
|
-
hasAssignAction: taxonomy ? (0, _lodash.get)(getCurrentPost(), ['_links', 'wp:action-assign-' + taxonomy.rest_base], false) : false,
|
|
291
|
-
terms: taxonomy ? select(_store.store).getEditedPostAttribute(taxonomy.rest_base) : [],
|
|
292
|
-
taxonomy
|
|
293
|
-
};
|
|
294
|
-
}), (0, _data.withDispatch)(dispatch => {
|
|
295
|
-
return {
|
|
296
|
-
onUpdateTerms(terms, restBase) {
|
|
297
|
-
dispatch(_store.store).editPost({
|
|
298
|
-
[restBase]: terms
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
};
|
|
303
|
-
}), _components.withSpokenMessages, (0, _components.withFilters)('editor.PostTaxonomyType'))(FlatTermSelector);
|
|
246
|
+
var _default = (0, _components.withFilters)('editor.PostTaxonomyType')(FlatTermSelector);
|
|
304
247
|
|
|
305
248
|
exports.default = _default;
|
|
306
249
|
//# sourceMappingURL=flat-term-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","orderby","order","_fields","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","term","name","id","FlatTermSelector","Component","constructor","arguments","onChange","bind","searchTerms","findOrCreateTerm","appendTerm","state","loading","props","availableTerms","selectedTerms","componentDidMount","initRequest","fetchTerms","include","join","then","setState","xhr","statusText","componentWillUnmount","searchRequest","componentDidUpdate","prevProps","updateSelectedTerms","params","taxonomy","query","request","path","rest_base","unescapeTerms","concat","filter","availableTerm","reduce","accumulator","termId","termObject","push","termNameEscaped","method","data","catch","error","errorCode","code","addRequest","search","searchResult","result","Promise","reject","unescapeTerm","termNames","uniqueTerms","newTermNames","length","onUpdateTerms","all","newTerms","newAvailableTerms","newTerm","slug","speak","includes","termAddedMessage","render","hasAssignAction","newTermLabel","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove","select","getCurrentPost","editorStore","getTaxonomy","coreStore","hasCreateAction","getEditedPostAttribute","dispatch","restBase","editPost","withSpokenMessages"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tdebounce,\n\tescape as escapeString,\n\tfind,\n\tget,\n\tinvoke,\n\tisEmpty,\n\tuniqBy,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport {\n\tFormTokenField,\n\twithFilters,\n\twithSpokenMessages,\n} from '@wordpress/components';\nimport { withSelect, withDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { compose } from '@wordpress/compose';\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm, unescapeTerms } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\torderby: 'count',\n\torder: 'desc',\n\t_fields: 'id,name,count',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tfind( terms, ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nclass FlatTermSelector extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.searchTerms = debounce( this.searchTerms.bind( this ), 500 );\n\t\tthis.findOrCreateTerm = this.findOrCreateTerm.bind( this );\n\t\tthis.appendTerm = this.appendTerm.bind( this );\n\t\tthis.state = {\n\t\t\tloading: ! isEmpty( this.props.terms ),\n\t\t\tavailableTerms: [],\n\t\t\tselectedTerms: [],\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( ! isEmpty( this.props.terms ) ) {\n\t\t\tthis.initRequest = this.fetchTerms( {\n\t\t\t\tinclude: this.props.terms.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t} );\n\t\t\tthis.initRequest.then(\n\t\t\t\t() => {\n\t\t\t\t\tthis.setState( { loading: false } );\n\t\t\t\t},\n\t\t\t\t( xhr ) => {\n\t\t\t\t\tif ( xhr.statusText === 'abort' ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tinvoke( this.initRequest, [ 'abort' ] );\n\t\tinvoke( this.searchRequest, [ 'abort' ] );\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tif ( prevProps.terms !== this.props.terms ) {\n\t\t\tthis.updateSelectedTerms( this.props.terms );\n\t\t}\n\t}\n\n\tfetchTerms( params = {} ) {\n\t\tconst { taxonomy } = this.props;\n\t\tconst query = { ...DEFAULT_QUERY, ...params };\n\t\tconst request = apiFetch( {\n\t\t\tpath: addQueryArgs( `/wp/v2/${ taxonomy.rest_base }`, query ),\n\t\t} );\n\t\trequest.then( unescapeTerms ).then( ( terms ) => {\n\t\t\tthis.setState( ( state ) => ( {\n\t\t\t\tavailableTerms: state.availableTerms.concat(\n\t\t\t\t\tterms.filter(\n\t\t\t\t\t\t( term ) =>\n\t\t\t\t\t\t\t! find(\n\t\t\t\t\t\t\t\tstate.availableTerms,\n\t\t\t\t\t\t\t\t( availableTerm ) =>\n\t\t\t\t\t\t\t\t\tavailableTerm.id === term.id\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t} ) );\n\t\t\tthis.updateSelectedTerms( this.props.terms );\n\t\t} );\n\n\t\treturn request;\n\t}\n\n\tupdateSelectedTerms( terms = [] ) {\n\t\tconst selectedTerms = terms.reduce( ( accumulator, termId ) => {\n\t\t\tconst termObject = find(\n\t\t\t\tthis.state.availableTerms,\n\t\t\t\t( term ) => term.id === termId\n\t\t\t);\n\t\t\tif ( termObject ) {\n\t\t\t\taccumulator.push( termObject.name );\n\t\t\t}\n\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\tthis.setState( {\n\t\t\tselectedTerms,\n\t\t} );\n\t}\n\n\tfindOrCreateTerm( termName ) {\n\t\tconst { taxonomy } = this.props;\n\t\tconst termNameEscaped = escapeString( termName );\n\t\t// Tries to create a term or fetch it if it already exists.\n\t\treturn apiFetch( {\n\t\t\tpath: `/wp/v2/${ taxonomy.rest_base }`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { name: termNameEscaped },\n\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst errorCode = error.code;\n\t\t\t\tif ( errorCode === 'term_exists' ) {\n\t\t\t\t\t// If the terms exist, fetch it instead of creating a new one.\n\t\t\t\t\tthis.addRequest = apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( `/wp/v2/${ taxonomy.rest_base }`, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch: termNameEscaped,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t} ).then( unescapeTerms );\n\t\t\t\t\treturn this.addRequest.then( ( searchResult ) => {\n\t\t\t\t\t\treturn find( searchResult, ( result ) =>\n\t\t\t\t\t\t\tisSameTermName( result.name, termName )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn Promise.reject( error );\n\t\t\t} )\n\t\t\t.then( unescapeTerm );\n\t}\n\n\tonChange( termNames ) {\n\t\tconst uniqueTerms = uniqBy( termNames, ( term ) => term.toLowerCase() );\n\t\tthis.setState( { selectedTerms: uniqueTerms } );\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! find( this.state.availableTerms, ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn this.props.onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, this.state.availableTerms ),\n\t\t\t\tthis.props.taxonomy.rest_base\n\t\t\t);\n\t\t}\n\t\tPromise.all( newTermNames.map( this.findOrCreateTerm ) ).then(\n\t\t\t( newTerms ) => {\n\t\t\t\tconst newAvailableTerms = this.state.availableTerms.concat(\n\t\t\t\t\tnewTerms\n\t\t\t\t);\n\t\t\t\tthis.setState( { availableTerms: newAvailableTerms } );\n\t\t\t\treturn this.props.onUpdateTerms(\n\t\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms ),\n\t\t\t\t\tthis.props.taxonomy.rest_base\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n\n\tsearchTerms( search = '' ) {\n\t\tinvoke( this.searchRequest, [ 'abort' ] );\n\t\tif ( search.length >= 3 ) {\n\t\t\tthis.searchRequest = this.fetchTerms( { search } );\n\t\t}\n\t}\n\n\tappendTerm( newTerm ) {\n\t\tconst { onUpdateTerms, taxonomy, terms = [], slug, speak } = this.props;\n\n\t\tif ( terms.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTerms = [ ...terms, newTerm.id ];\n\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\tget(\n\t\t\t\ttaxonomy,\n\t\t\t\t[ 'labels', 'singular_name' ],\n\t\t\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t\t\t)\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\n\t\tthis.setState( {\n\t\t\tavailableTerms: [ ...this.state.availableTerms, newTerm ],\n\t\t} );\n\n\t\tonUpdateTerms( newTerms, taxonomy.rest_base );\n\t}\n\n\trender() {\n\t\tconst { slug, taxonomy, hasAssignAction } = this.props;\n\n\t\tif ( ! hasAssignAction ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { loading, availableTerms, selectedTerms } = this.state;\n\t\tconst termNames = availableTerms.map( ( term ) => term.name );\n\t\tconst newTermLabel = get(\n\t\t\ttaxonomy,\n\t\t\t[ 'labels', 'add_new_item' ],\n\t\t\tslug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' )\n\t\t);\n\t\tconst singularName = get(\n\t\t\ttaxonomy,\n\t\t\t[ 'labels', 'singular_name' ],\n\t\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t\t);\n\t\tconst termAddedLabel = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\tsingularName\n\t\t);\n\t\tconst termRemovedLabel = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s removed', 'term' ),\n\t\t\tsingularName\n\t\t);\n\t\tconst removeTermLabel = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( 'Remove %s', 'term' ),\n\t\t\tsingularName\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<FormTokenField\n\t\t\t\t\tvalue={ selectedTerms }\n\t\t\t\t\tsuggestions={ termNames }\n\t\t\t\t\tonChange={ this.onChange }\n\t\t\t\t\tonInputChange={ this.searchTerms }\n\t\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\t\tdisabled={ loading }\n\t\t\t\t\tlabel={ newTermLabel }\n\t\t\t\t\tmessages={ {\n\t\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<MostUsedTerms\n\t\t\t\t\ttaxonomy={ taxonomy }\n\t\t\t\t\tonSelect={ this.appendTerm }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n}\n\nexport default compose(\n\twithSelect( ( select, { slug } ) => {\n\t\tconst { getCurrentPost } = select( editorStore );\n\t\tconst { getTaxonomy } = select( coreStore );\n\t\tconst taxonomy = getTaxonomy( slug );\n\t\treturn {\n\t\t\thasCreateAction: taxonomy\n\t\t\t\t? get(\n\t\t\t\t\t\tgetCurrentPost(),\n\t\t\t\t\t\t[ '_links', 'wp:action-create-' + taxonomy.rest_base ],\n\t\t\t\t\t\tfalse\n\t\t\t\t )\n\t\t\t\t: false,\n\t\t\thasAssignAction: taxonomy\n\t\t\t\t? get(\n\t\t\t\t\t\tgetCurrentPost(),\n\t\t\t\t\t\t[ '_links', 'wp:action-assign-' + taxonomy.rest_base ],\n\t\t\t\t\t\tfalse\n\t\t\t\t )\n\t\t\t\t: false,\n\t\t\tterms: taxonomy\n\t\t\t\t? select( editorStore ).getEditedPostAttribute(\n\t\t\t\t\t\ttaxonomy.rest_base\n\t\t\t\t )\n\t\t\t\t: [],\n\t\t\ttaxonomy,\n\t\t};\n\t} ),\n\twithDispatch( ( dispatch ) => {\n\t\treturn {\n\t\t\tonUpdateTerms( terms, restBase ) {\n\t\t\t\tdispatch( editorStore ).editPost( { [ restBase ]: terms } );\n\t\t\t},\n\t\t};\n\t} ),\n\twithSpokenMessages,\n\twithFilters( 'editor.PostTaxonomyType' )\n)( FlatTermSelector );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","orderby","order","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","term","name","id","findOrCreateTerm","restBase","escapedTermName","path","method","data","catch","error","errorCode","code","addRequest","search","then","unescapeTerms","searchResult","result","Promise","reject","unescapeTerm","FlatTermSelector","slug","values","setValues","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","editorStore","getEntityRecords","getTaxonomy","hasFinishedResolution","coreStore","post","_taxonomy","_termIds","rest_base","query","include","join","length","searchResults","newValues","suggestions","editPost","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","newTermNames","filter","all","newTerms","newAvailableTerms","concat","appendTerm","newTerm","includes","termAddedMessage","newTermLabel","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { escape as escapeString, find, get, uniqBy } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, withFilters } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm, unescapeTerms } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\torderby: 'count',\n\torder: 'desc',\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tfind( terms, ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\n// Tries to create a term or fetch it if it already exists.\nfunction findOrCreateTerm( termName, restBase ) {\n\tconst escapedTermName = escapeString( termName );\n\n\treturn apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }`,\n\t\tmethod: 'POST',\n\t\tdata: { name: escapedTermName },\n\t} )\n\t\t.catch( ( error ) => {\n\t\t\tconst errorCode = error.code;\n\t\t\tif ( errorCode === 'term_exists' ) {\n\t\t\t\t// If the terms exist, fetch it instead of creating a new one.\n\t\t\t\tconst addRequest = apiFetch( {\n\t\t\t\t\tpath: addQueryArgs( `/wp/v2/${ restBase }`, {\n\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\tsearch: escapedTermName,\n\t\t\t\t\t} ),\n\t\t\t\t} ).then( unescapeTerms );\n\n\t\t\t\treturn addRequest.then( ( searchResult ) => {\n\t\t\t\t\treturn find( searchResult, ( result ) =>\n\t\t\t\t\t\tisSameTermName( result.name, termName )\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn Promise.reject( error );\n\t\t} )\n\t\t.then( unescapeTerm );\n}\n\nfunction FlatTermSelector( { slug } ) {\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttermIds,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPost, getEditedPostAttribute } = select(\n\t\t\t\teditorStore\n\t\t\t);\n\t\t\tconst {\n\t\t\t\tgetEntityRecords,\n\t\t\t\tgetTaxonomy,\n\t\t\t\thasFinishedResolution,\n\t\t\t} = select( coreStore );\n\t\t\tconst post = getCurrentPost();\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds = _taxonomy\n\t\t\t\t? getEditedPostAttribute( _taxonomy.rest_base )\n\t\t\t\t: EMPTY_ARRAY;\n\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? get(\n\t\t\t\t\t\t\tpost,\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'_links',\n\t\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t )\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = terms.map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditPost( { [ taxonomy.rest_base ]: newTermIds } );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [ ...terms, ...( searchResults ?? [] ) ];\n\t\tconst uniqueTerms = uniqBy( termNames, ( term ) => term.toLowerCase() );\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! find( availableTerms, ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( termName, taxonomy.rest_base )\n\t\t\t)\n\t\t).then( ( newTerms ) => {\n\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction appendTerm( newTerm ) {\n\t\tif ( termIds.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTermIds = [ ...termIds, newTerm.id ];\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\tget(\n\t\t\t\ttaxonomy,\n\t\t\t\t[ 'labels', 'singular_name' ],\n\t\t\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t\t\t)\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'add_new_item' ],\n\t\tslug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' )\n\t);\n\tconst singularName = get(\n\t\ttaxonomy,\n\t\t[ 'labels', 'singular_name' ],\n\t\tslug === 'post_tag' ? __( 'Tag' ) : __( 'Term' )\n\t);\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<FormTokenField\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ newTermLabel }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />\n\t\t</>\n\t);\n}\n\nexport default withFilters( 'editor.PostTaxonomyType' )( FlatTermSelector );\n"]}
|
|
@@ -224,7 +224,7 @@ function PostTitle() {
|
|
|
224
224
|
__unstableDisableFormats: true,
|
|
225
225
|
preserveWhiteSpace: true
|
|
226
226
|
});
|
|
227
|
-
/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-
|
|
227
|
+
/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
228
228
|
|
|
229
229
|
return (0, _element.createElement)(_postTypeSupportCheck.default, {
|
|
230
230
|
supportKeys: "title"
|
|
@@ -233,12 +233,14 @@ function PostTitle() {
|
|
|
233
233
|
contentEditable: true,
|
|
234
234
|
className: className,
|
|
235
235
|
"aria-label": decodedPlaceholder,
|
|
236
|
+
role: "textbox",
|
|
237
|
+
"aria-multiline": "true",
|
|
236
238
|
onFocus: onSelect,
|
|
237
239
|
onBlur: onUnselect,
|
|
238
240
|
onKeyDown: onKeyDown,
|
|
239
241
|
onKeyPress: onUnselect,
|
|
240
242
|
onPaste: onPaste
|
|
241
243
|
}));
|
|
242
|
-
/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-
|
|
244
|
+
/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
243
245
|
}
|
|
244
246
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["REGEXP_NEWLINES","PostTitle","ref","isSelected","setIsSelected","editPost","editorStore","insertDefaultBlock","clearSelectedBlock","insertBlocks","blockEditorStore","isCleanNewPost","title","placeholder","isFocusMode","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","focusMode","_hasFixedToolbar","current","ownerDocument","activeElement","body","focus","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","ENTER","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","name","attributes","slice","className","decodedPlaceholder","richTextRef","selectionStart","start","selectionEnd","end","onSelectionChange","newStart","newEnd","sel","__unstableDisableFormats","preserveWhiteSpace"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { pasteHandler } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { __unstableUseRichText as useRichText } from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport PostTypeSupportCheck from '../post-type-support-check';\nimport { store as editorStore } from '../../store';\n\n/**\n * Constants\n */\nconst REGEXP_NEWLINES = /[\\r\\n]+/g;\n\nexport default function PostTitle() {\n\tconst ref = useRef();\n\tconst [ isSelected, setIsSelected ] = useState( false );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst {\n\t\tinsertDefaultBlock,\n\t\tclearSelectedBlock,\n\t\tinsertBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tisCleanNewPost,\n\t\ttitle,\n\t\tplaceholder,\n\t\tisFocusMode,\n\t\thasFixedToolbar,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetEditedPostAttribute,\n\t\t\tisCleanNewPost: _isCleanNewPost,\n\t\t} = select( editorStore );\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst {\n\t\t\ttitlePlaceholder,\n\t\t\tfocusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t} = getSettings();\n\n\t\treturn {\n\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\tplaceholder: titlePlaceholder,\n\t\t\tisFocusMode: focusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { activeElement, body } = ownerDocument;\n\n\t\t// Only autofocus the title when the post is entirely empty. This should\n\t\t// only happen for a new post, which means we focus the title on new\n\t\t// post so the author can start typing right away, without needing to\n\t\t// click anything.\n\t\tif ( isCleanNewPost && ( ! activeElement || body === activeElement ) ) {\n\t\t\tref.current.focus();\n\t\t}\n\t}, [ isCleanNewPost ] );\n\n\tfunction onEnterPress() {\n\t\tinsertDefaultBlock( undefined, undefined, 0 );\n\t}\n\n\tfunction onInsertBlockAfter( blocks ) {\n\t\tinsertBlocks( blocks, 0 );\n\t}\n\n\tfunction onUpdate( newTitle ) {\n\t\teditPost( { title: newTitle } );\n\t}\n\n\tconst [ selection, setSelection ] = useState( {} );\n\n\tfunction onSelect() {\n\t\tsetIsSelected( true );\n\t\tclearSelectedBlock();\n\t}\n\n\tfunction onUnselect() {\n\t\tsetIsSelected( false );\n\t\tsetSelection( {} );\n\t}\n\n\tfunction onChange( value ) {\n\t\tonUpdate( value.replace( REGEXP_NEWLINES, ' ' ) );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER ) {\n\t\t\tevent.preventDefault();\n\t\t\tonEnterPress();\n\t\t}\n\t}\n\n\tfunction onPaste( event ) {\n\t\tconst clipboardData = event.clipboardData;\n\n\t\tlet plainText = '';\n\t\tlet html = '';\n\n\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t// arguments first, then fallback to `Text` if they fail.\n\t\ttry {\n\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t} catch ( error1 ) {\n\t\t\ttry {\n\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t} catch ( error2 ) {\n\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t// behaviour.\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t} );\n\n\t\tif ( typeof content !== 'string' && content.length ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst [ firstBlock ] = content;\n\n\t\t\tif (\n\t\t\t\t! title &&\n\t\t\t\t( firstBlock.name === 'core/heading' ||\n\t\t\t\t\tfirstBlock.name === 'core/paragraph' )\n\t\t\t) {\n\t\t\t\tonUpdate( firstBlock.attributes.content );\n\t\t\t\tonInsertBlockAfter( content.slice( 1 ) );\n\t\t\t} else {\n\t\t\t\tonInsertBlockAfter( content );\n\t\t\t}\n\t\t}\n\t}\n\n\t// The wp-block className is important for editor styles.\n\t// This same block is used in both the visual and the code editor.\n\tconst className = classnames(\n\t\t'wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text',\n\t\t{\n\t\t\t'is-selected': isSelected,\n\t\t\t'is-focus-mode': isFocusMode,\n\t\t\t'has-fixed-toolbar': hasFixedToolbar,\n\t\t}\n\t);\n\tconst decodedPlaceholder =\n\t\tdecodeEntities( placeholder ) || __( 'Add title' );\n\tconst { ref: richTextRef } = useRichText( {\n\t\tvalue: title,\n\t\tonChange,\n\t\tplaceholder: decodedPlaceholder,\n\t\tselectionStart: selection.start,\n\t\tselectionEnd: selection.end,\n\t\tonSelectionChange( newStart, newEnd ) {\n\t\t\tsetSelection( ( sel ) => {\n\t\t\t\tconst { start, end } = sel;\n\t\t\t\tif ( start === newStart && end === newEnd ) {\n\t\t\t\t\treturn sel;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstart: newStart,\n\t\t\t\t\tend: newEnd,\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t\t__unstableDisableFormats: true,\n\t\tpreserveWhiteSpace: true,\n\t} );\n\n\t/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-interactions */\n\treturn (\n\t\t<PostTypeSupportCheck supportKeys=\"title\">\n\t\t\t<h1\n\t\t\t\tref={ useMergeRefs( [ richTextRef, ref ] ) }\n\t\t\t\tcontentEditable\n\t\t\t\tclassName={ className }\n\t\t\t\taria-label={ decodedPlaceholder }\n\t\t\t\tonFocus={ onSelect }\n\t\t\t\tonBlur={ onUnselect }\n\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\tonKeyPress={ onUnselect }\n\t\t\t\tonPaste={ onPaste }\n\t\t\t/>\n\t\t</PostTypeSupportCheck>\n\t);\n\t/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-interactions */\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["REGEXP_NEWLINES","PostTitle","ref","isSelected","setIsSelected","editPost","editorStore","insertDefaultBlock","clearSelectedBlock","insertBlocks","blockEditorStore","isCleanNewPost","title","placeholder","isFocusMode","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","focusMode","_hasFixedToolbar","current","ownerDocument","activeElement","body","focus","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","ENTER","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","name","attributes","slice","className","decodedPlaceholder","richTextRef","selectionStart","start","selectionEnd","end","onSelectionChange","newStart","newEnd","sel","__unstableDisableFormats","preserveWhiteSpace"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { pasteHandler } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { __unstableUseRichText as useRichText } from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport PostTypeSupportCheck from '../post-type-support-check';\nimport { store as editorStore } from '../../store';\n\n/**\n * Constants\n */\nconst REGEXP_NEWLINES = /[\\r\\n]+/g;\n\nexport default function PostTitle() {\n\tconst ref = useRef();\n\tconst [ isSelected, setIsSelected ] = useState( false );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst {\n\t\tinsertDefaultBlock,\n\t\tclearSelectedBlock,\n\t\tinsertBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tisCleanNewPost,\n\t\ttitle,\n\t\tplaceholder,\n\t\tisFocusMode,\n\t\thasFixedToolbar,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetEditedPostAttribute,\n\t\t\tisCleanNewPost: _isCleanNewPost,\n\t\t} = select( editorStore );\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst {\n\t\t\ttitlePlaceholder,\n\t\t\tfocusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t} = getSettings();\n\n\t\treturn {\n\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\tplaceholder: titlePlaceholder,\n\t\t\tisFocusMode: focusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { activeElement, body } = ownerDocument;\n\n\t\t// Only autofocus the title when the post is entirely empty. This should\n\t\t// only happen for a new post, which means we focus the title on new\n\t\t// post so the author can start typing right away, without needing to\n\t\t// click anything.\n\t\tif ( isCleanNewPost && ( ! activeElement || body === activeElement ) ) {\n\t\t\tref.current.focus();\n\t\t}\n\t}, [ isCleanNewPost ] );\n\n\tfunction onEnterPress() {\n\t\tinsertDefaultBlock( undefined, undefined, 0 );\n\t}\n\n\tfunction onInsertBlockAfter( blocks ) {\n\t\tinsertBlocks( blocks, 0 );\n\t}\n\n\tfunction onUpdate( newTitle ) {\n\t\teditPost( { title: newTitle } );\n\t}\n\n\tconst [ selection, setSelection ] = useState( {} );\n\n\tfunction onSelect() {\n\t\tsetIsSelected( true );\n\t\tclearSelectedBlock();\n\t}\n\n\tfunction onUnselect() {\n\t\tsetIsSelected( false );\n\t\tsetSelection( {} );\n\t}\n\n\tfunction onChange( value ) {\n\t\tonUpdate( value.replace( REGEXP_NEWLINES, ' ' ) );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER ) {\n\t\t\tevent.preventDefault();\n\t\t\tonEnterPress();\n\t\t}\n\t}\n\n\tfunction onPaste( event ) {\n\t\tconst clipboardData = event.clipboardData;\n\n\t\tlet plainText = '';\n\t\tlet html = '';\n\n\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t// arguments first, then fallback to `Text` if they fail.\n\t\ttry {\n\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t} catch ( error1 ) {\n\t\t\ttry {\n\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t} catch ( error2 ) {\n\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t// behaviour.\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t} );\n\n\t\tif ( typeof content !== 'string' && content.length ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst [ firstBlock ] = content;\n\n\t\t\tif (\n\t\t\t\t! title &&\n\t\t\t\t( firstBlock.name === 'core/heading' ||\n\t\t\t\t\tfirstBlock.name === 'core/paragraph' )\n\t\t\t) {\n\t\t\t\tonUpdate( firstBlock.attributes.content );\n\t\t\t\tonInsertBlockAfter( content.slice( 1 ) );\n\t\t\t} else {\n\t\t\t\tonInsertBlockAfter( content );\n\t\t\t}\n\t\t}\n\t}\n\n\t// The wp-block className is important for editor styles.\n\t// This same block is used in both the visual and the code editor.\n\tconst className = classnames(\n\t\t'wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text',\n\t\t{\n\t\t\t'is-selected': isSelected,\n\t\t\t'is-focus-mode': isFocusMode,\n\t\t\t'has-fixed-toolbar': hasFixedToolbar,\n\t\t}\n\t);\n\tconst decodedPlaceholder =\n\t\tdecodeEntities( placeholder ) || __( 'Add title' );\n\tconst { ref: richTextRef } = useRichText( {\n\t\tvalue: title,\n\t\tonChange,\n\t\tplaceholder: decodedPlaceholder,\n\t\tselectionStart: selection.start,\n\t\tselectionEnd: selection.end,\n\t\tonSelectionChange( newStart, newEnd ) {\n\t\t\tsetSelection( ( sel ) => {\n\t\t\t\tconst { start, end } = sel;\n\t\t\t\tif ( start === newStart && end === newEnd ) {\n\t\t\t\t\treturn sel;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstart: newStart,\n\t\t\t\t\tend: newEnd,\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t\t__unstableDisableFormats: true,\n\t\tpreserveWhiteSpace: true,\n\t} );\n\n\t/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n\treturn (\n\t\t<PostTypeSupportCheck supportKeys=\"title\">\n\t\t\t<h1\n\t\t\t\tref={ useMergeRefs( [ richTextRef, ref ] ) }\n\t\t\t\tcontentEditable\n\t\t\t\tclassName={ className }\n\t\t\t\taria-label={ decodedPlaceholder }\n\t\t\t\trole=\"textbox\"\n\t\t\t\taria-multiline=\"true\"\n\t\t\t\tonFocus={ onSelect }\n\t\t\t\tonBlur={ onUnselect }\n\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\tonKeyPress={ onUnselect }\n\t\t\t\tonPaste={ onPaste }\n\t\t\t/>\n\t\t</PostTypeSupportCheck>\n\t);\n\t/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n}\n"]}
|
|
@@ -93,7 +93,7 @@ function useBlockEditorSettings(settings, hasTemplate) {
|
|
|
93
93
|
return saveEntityRecord('postType', 'page', options);
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
-
return (0, _element.useMemo)(() => ({ ...(0, _lodash.pick)(settings, ['__experimentalBlockDirectory', '__experimentalBlockPatternCategories', '__experimentalBlockPatterns', '__experimentalFeatures', '
|
|
96
|
+
return (0, _element.useMemo)(() => ({ ...(0, _lodash.pick)(settings, ['__experimentalBlockDirectory', '__experimentalBlockPatternCategories', '__experimentalBlockPatterns', '__experimentalFeatures', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', '__unstableGalleryWithImageBlocks', 'alignWide', 'allowedBlockTypes', 'bodyPlaceholder', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomGradients', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'focusMode', 'fontSizes', 'gradients', 'hasFixedToolbar', 'hasReducedUI', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'maxWidth', 'onUpdateDefaultBlockStyles', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock']),
|
|
97
97
|
mediaUpload: hasUploadPermissions ? _utils.mediaUpload : undefined,
|
|
98
98
|
__experimentalReusableBlocks: reusableBlocks,
|
|
99
99
|
__experimentalFetchLinkSuggestions: (search, searchOptions) => (0, _coreData.__experimentalFetchLinkSuggestions)(search, searchOptions, settings),
|