@wordpress/editor 12.0.0 → 12.0.4
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 +4 -3
- 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/store/utils/notice-builder.js +15 -18
- package/build/store/utils/notice-builder.js.map +1 -1
- package/build/utils/get-template-part-icon.js +1 -1
- package/build/utils/get-template-part-icon.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 +5 -4
- 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/build-module/store/utils/notice-builder.js +15 -18
- package/build-module/store/utils/notice-builder.js.map +1 -1
- package/build-module/utils/get-template-part-icon.js +2 -2
- package/build-module/utils/get-template-part-icon.js.map +1 -1
- package/build-style/style-rtl.css +1 -1
- package/build-style/style.css +1 -1
- package/package.json +19 -19
- 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 -106
- package/src/components/editor-help/style.scss +4 -0
- 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-saved-state/style.scss +2 -0
- 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
- package/src/store/test/actions.js +4 -2
- package/src/store/utils/notice-builder.js +17 -19
- package/src/store/utils/test/notice-builder.js +1 -1
- package/src/utils/get-template-part-icon.js +2 -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),
|