@wordpress/edit-site 7.3.2-next.v.202608281122.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -1
- package/build/components/add-new-template/add-custom-template-modal-content.cjs +3 -1
- package/build/components/add-new-template/add-custom-template-modal-content.cjs.map +2 -2
- package/build/components/add-new-template/index.cjs +6 -4
- package/build/components/add-new-template/index.cjs.map +2 -2
- package/build/components/add-new-template/utils.cjs +84 -9
- package/build/components/add-new-template/utils.cjs.map +2 -2
- package/build/components/dataviews-actions/index.cjs +2 -55
- package/build/components/dataviews-actions/index.cjs.map +3 -3
- package/build/components/layout/index.cjs +2 -2
- package/build/components/layout/index.cjs.map +2 -2
- package/build/components/more-menu/welcome-guide-menu-item.cjs +10 -2
- package/build/components/more-menu/welcome-guide-menu-item.cjs.map +3 -3
- package/build/components/page-templates/fields.cjs +2 -126
- package/build/components/page-templates/fields.cjs.map +3 -3
- package/build/components/page-templates/index.cjs +46 -230
- package/build/components/page-templates/index.cjs.map +3 -3
- package/build/components/post-list/index.cjs +7 -17
- package/build/components/post-list/index.cjs.map +2 -2
- package/build/components/sidebar-global-styles/index.cjs +2 -2
- package/build/components/sidebar-global-styles/index.cjs.map +2 -2
- package/build/components/sidebar-identity/index.cjs +17 -22
- package/build/components/sidebar-identity/index.cjs.map +2 -2
- package/build/components/sidebar-navigation-item/index.cjs +1 -8
- package/build/components/sidebar-navigation-item/index.cjs.map +2 -2
- package/build/components/sidebar-navigation-screen-templates-browse/content.cjs +34 -72
- package/build/components/sidebar-navigation-screen-templates-browse/content.cjs.map +3 -3
- package/build/components/sidebar-navigation-screen-templates-browse/index.cjs +1 -2
- package/build/components/sidebar-navigation-screen-templates-browse/index.cjs.map +3 -3
- package/build/components/site-editor-routes/templates.cjs +2 -4
- package/build/components/site-editor-routes/templates.cjs.map +3 -3
- package/build/index.cjs +0 -1
- package/build/index.cjs.map +2 -2
- package/build-module/components/add-new-template/add-custom-template-modal-content.mjs +3 -1
- package/build-module/components/add-new-template/add-custom-template-modal-content.mjs.map +2 -2
- package/build-module/components/add-new-template/index.mjs +7 -4
- package/build-module/components/add-new-template/index.mjs.map +2 -2
- package/build-module/components/add-new-template/utils.mjs +84 -9
- package/build-module/components/add-new-template/utils.mjs.map +2 -2
- package/build-module/components/dataviews-actions/index.mjs +1 -53
- package/build-module/components/dataviews-actions/index.mjs.map +2 -2
- package/build-module/components/layout/index.mjs +2 -2
- package/build-module/components/layout/index.mjs.map +2 -2
- package/build-module/components/more-menu/welcome-guide-menu-item.mjs +10 -2
- package/build-module/components/more-menu/welcome-guide-menu-item.mjs.map +2 -2
- package/build-module/components/page-templates/fields.mjs +3 -129
- package/build-module/components/page-templates/fields.mjs.map +3 -3
- package/build-module/components/page-templates/index.mjs +52 -253
- package/build-module/components/page-templates/index.mjs.map +2 -2
- package/build-module/components/post-list/index.mjs +8 -18
- package/build-module/components/post-list/index.mjs.map +2 -2
- package/build-module/components/sidebar-global-styles/index.mjs +2 -2
- package/build-module/components/sidebar-global-styles/index.mjs.map +2 -2
- package/build-module/components/sidebar-identity/index.mjs +17 -22
- package/build-module/components/sidebar-identity/index.mjs.map +2 -2
- package/build-module/components/sidebar-navigation-item/index.mjs +1 -8
- package/build-module/components/sidebar-navigation-item/index.mjs.map +2 -2
- package/build-module/components/sidebar-navigation-screen-templates-browse/content.mjs +42 -75
- package/build-module/components/sidebar-navigation-screen-templates-browse/content.mjs.map +2 -2
- package/build-module/components/sidebar-navigation-screen-templates-browse/index.mjs +1 -2
- package/build-module/components/sidebar-navigation-screen-templates-browse/index.mjs.map +2 -2
- package/build-module/components/site-editor-routes/templates.mjs +2 -4
- package/build-module/components/site-editor-routes/templates.mjs.map +2 -2
- package/build-module/index.mjs +0 -1
- package/build-module/index.mjs.map +2 -2
- package/build-style/style-rtl.css +38 -81
- package/build-style/style.css +38 -81
- package/package.json +41 -38
- package/src/components/add-new-template/add-custom-template-modal-content.jsx +3 -1
- package/src/components/add-new-template/index.jsx +9 -4
- package/src/components/add-new-template/style.scss +8 -21
- package/src/components/add-new-template/utils.js +118 -9
- package/src/components/dataviews-actions/index.js +0 -61
- package/src/components/layout/index.jsx +5 -2
- package/src/components/more-menu/welcome-guide-menu-item.jsx +8 -3
- package/src/components/page-templates/fields.jsx +2 -146
- package/src/components/page-templates/index.jsx +30 -256
- package/src/components/post-list/index.jsx +7 -20
- package/src/components/sidebar-global-styles/index.jsx +7 -5
- package/src/components/sidebar-global-styles/style.scss +6 -0
- package/src/components/sidebar-identity/index.jsx +23 -19
- package/src/components/sidebar-identity/style.scss +7 -0
- package/src/components/sidebar-navigation-item/index.jsx +1 -7
- package/src/components/sidebar-navigation-screen-templates-browse/content.jsx +45 -80
- package/src/components/sidebar-navigation-screen-templates-browse/index.jsx +1 -8
- package/src/components/site-editor-routes/templates.jsx +2 -19
- package/src/components/welcome-guide/style.scss +1 -1
- package/src/index.jsx +0 -1
- package/src/style.scss +1 -1
- package/src/utils/test/get-filtered-template-parts.js +1 -0
- package/build/components/add-new-template-legacy/add-custom-generic-template-modal-content.cjs +0 -107
- package/build/components/add-new-template-legacy/add-custom-generic-template-modal-content.cjs.map +0 -7
- package/build/components/add-new-template-legacy/add-custom-template-modal-content.cjs +0 -327
- package/build/components/add-new-template-legacy/add-custom-template-modal-content.cjs.map +0 -7
- package/build/components/add-new-template-legacy/index.cjs +0 -390
- package/build/components/add-new-template-legacy/index.cjs.map +0 -7
- package/build/components/add-new-template-legacy/utils.cjs +0 -623
- package/build/components/add-new-template-legacy/utils.cjs.map +0 -7
- package/build/components/page-templates/hooks.cjs +0 -94
- package/build/components/page-templates/hooks.cjs.map +0 -7
- package/build/components/page-templates/index-legacy.cjs +0 -167
- package/build/components/page-templates/index-legacy.cjs.map +0 -7
- package/build/components/page-templates/view-utils.cjs +0 -79
- package/build/components/page-templates/view-utils.cjs.map +0 -7
- package/build/components/sidebar-navigation-screen-templates-browse/content-legacy.cjs +0 -78
- package/build/components/sidebar-navigation-screen-templates-browse/content-legacy.cjs.map +0 -7
- package/build-module/components/add-new-template-legacy/add-custom-generic-template-modal-content.mjs +0 -91
- package/build-module/components/add-new-template-legacy/add-custom-generic-template-modal-content.mjs.map +0 -7
- package/build-module/components/add-new-template-legacy/add-custom-template-modal-content.mjs +0 -315
- package/build-module/components/add-new-template-legacy/add-custom-template-modal-content.mjs.map +0 -7
- package/build-module/components/add-new-template-legacy/index.mjs +0 -391
- package/build-module/components/add-new-template-legacy/index.mjs.map +0 -7
- package/build-module/components/add-new-template-legacy/utils.mjs +0 -592
- package/build-module/components/add-new-template-legacy/utils.mjs.map +0 -7
- package/build-module/components/page-templates/hooks.mjs +0 -74
- package/build-module/components/page-templates/hooks.mjs.map +0 -7
- package/build-module/components/page-templates/index-legacy.mjs +0 -136
- package/build-module/components/page-templates/index-legacy.mjs.map +0 -7
- package/build-module/components/page-templates/view-utils.mjs +0 -52
- package/build-module/components/page-templates/view-utils.mjs.map +0 -7
- package/build-module/components/sidebar-navigation-screen-templates-browse/content-legacy.mjs +0 -52
- package/build-module/components/sidebar-navigation-screen-templates-browse/content-legacy.mjs.map +0 -7
- package/src/components/add-new-template-legacy/add-custom-generic-template-modal-content.jsx +0 -85
- package/src/components/add-new-template-legacy/add-custom-template-modal-content.jsx +0 -306
- package/src/components/add-new-template-legacy/index.jsx +0 -440
- package/src/components/add-new-template-legacy/utils.js +0 -757
- package/src/components/page-templates/hooks.js +0 -93
- package/src/components/page-templates/index-legacy.jsx +0 -143
- package/src/components/page-templates/view-utils.js +0 -50
- package/src/components/sidebar-navigation-screen-templates-browse/content-legacy.jsx +0 -52
- package/src/components/sidebar-navigation-screen-templates-browse/style.scss +0 -6
|
@@ -1,56 +1,42 @@
|
|
|
1
1
|
import { Page } from '@wordpress/admin-ui';
|
|
2
|
-
import { __
|
|
3
|
-
import { decodeEntities } from '@wordpress/html-entities';
|
|
2
|
+
import { __ } from '@wordpress/i18n';
|
|
4
3
|
import { useState, useMemo, useCallback } from '@wordpress/element';
|
|
5
|
-
import {
|
|
6
|
-
privateApis as corePrivateApis,
|
|
7
|
-
store as coreStore,
|
|
8
|
-
} from '@wordpress/core-data';
|
|
4
|
+
import { privateApis as corePrivateApis } from '@wordpress/core-data';
|
|
9
5
|
import { DataViews, filterSortAndPaginate } from '@wordpress/dataviews';
|
|
10
6
|
import { privateApis as routerPrivateApis } from '@wordpress/router';
|
|
11
7
|
import { privateApis as editorPrivateApis } from '@wordpress/editor';
|
|
12
8
|
import { addQueryArgs } from '@wordpress/url';
|
|
13
|
-
import { useSelect, useDispatch } from '@wordpress/data';
|
|
14
9
|
import { useEvent } from '@wordpress/compose';
|
|
15
|
-
import { useView } from '@wordpress/views';
|
|
16
|
-
import { Modal } from '@wordpress/components';
|
|
17
|
-
import { store as noticesStore } from '@wordpress/notices';
|
|
10
|
+
import { useView, useViewConfig } from '@wordpress/views';
|
|
18
11
|
import AddNewTemplate from '../add-new-template';
|
|
19
12
|
import { TEMPLATE_POST_TYPE } from '../../utils/constants';
|
|
20
13
|
import { unlock } from '../../lock-unlock';
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
useSetActiveTemplateAction,
|
|
24
|
-
} from '../dataviews-actions';
|
|
25
|
-
import {
|
|
26
|
-
authorField,
|
|
27
|
-
descriptionField,
|
|
28
|
-
previewField,
|
|
29
|
-
activeField,
|
|
30
|
-
slugField,
|
|
31
|
-
useThemeField,
|
|
32
|
-
} from './fields';
|
|
33
|
-
import {
|
|
34
|
-
defaultLayouts,
|
|
35
|
-
DEFAULT_VIEW,
|
|
36
|
-
getActiveViewOverridesForTab,
|
|
37
|
-
} from './view-utils';
|
|
14
|
+
import { useEditPostAction } from '../dataviews-actions';
|
|
15
|
+
import { previewField } from './fields';
|
|
38
16
|
|
|
39
|
-
const { usePostActions, usePostFields
|
|
40
|
-
unlock( editorPrivateApis );
|
|
17
|
+
const { usePostActions, usePostFields } = unlock( editorPrivateApis );
|
|
41
18
|
const { useHistory, useLocation } = unlock( routerPrivateApis );
|
|
42
19
|
const { useEntityRecordsWithPermissions } = unlock( corePrivateApis );
|
|
43
20
|
|
|
21
|
+
const VIEW_CONFIG_FIELDS = [ 'default_view', 'default_layouts', 'view_list' ];
|
|
22
|
+
|
|
44
23
|
export default function PageTemplates() {
|
|
45
24
|
const { path, query } = useLocation();
|
|
46
|
-
const { activeView = '
|
|
25
|
+
const { activeView = 'all', postId } = query;
|
|
47
26
|
const [ selection, setSelection ] = useState( [ postId ] );
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
27
|
+
|
|
28
|
+
const {
|
|
29
|
+
default_view: defaultView,
|
|
30
|
+
default_layouts: defaultLayouts,
|
|
31
|
+
view_list: viewList,
|
|
32
|
+
} = useViewConfig( {
|
|
33
|
+
kind: 'postType',
|
|
34
|
+
name: TEMPLATE_POST_TYPE,
|
|
35
|
+
fields: VIEW_CONFIG_FIELDS,
|
|
36
|
+
} );
|
|
51
37
|
const activeViewOverrides = useMemo(
|
|
52
|
-
() =>
|
|
53
|
-
[ activeView ]
|
|
38
|
+
() => viewList?.find( ( v ) => v.slug === activeView )?.view ?? {},
|
|
39
|
+
[ viewList, activeView ]
|
|
54
40
|
);
|
|
55
41
|
const { view, updateView, isModified, resetToDefault } = useView( {
|
|
56
42
|
kind: 'postType',
|
|
@@ -58,6 +44,7 @@ export default function PageTemplates() {
|
|
|
58
44
|
slug: 'default',
|
|
59
45
|
defaultView,
|
|
60
46
|
activeViewOverrides,
|
|
47
|
+
defaultLayouts,
|
|
61
48
|
queryParams: {
|
|
62
49
|
page: query.pageNumber,
|
|
63
50
|
search: query.search,
|
|
@@ -73,129 +60,10 @@ export default function PageTemplates() {
|
|
|
73
60
|
},
|
|
74
61
|
} );
|
|
75
62
|
|
|
76
|
-
const {
|
|
77
|
-
useSelect( ( select ) => {
|
|
78
|
-
const { getEntityRecord, getCurrentTheme } = select( coreStore );
|
|
79
|
-
return {
|
|
80
|
-
activeTemplatesOption: getEntityRecord( 'root', 'site' )
|
|
81
|
-
?.active_templates,
|
|
82
|
-
activeTheme: getCurrentTheme(),
|
|
83
|
-
defaultTemplateTypes:
|
|
84
|
-
select( coreStore ).getCurrentTheme()
|
|
85
|
-
?.default_template_types,
|
|
86
|
-
};
|
|
87
|
-
} );
|
|
88
|
-
// Todo: this will have to be better so that we're not fetching all the
|
|
89
|
-
// records all the time. Active templates query will need to move server
|
|
90
|
-
// side.
|
|
91
|
-
const { records: userRecords, isResolving: isLoadingUserRecords } =
|
|
63
|
+
const { records, isResolving: isLoadingData } =
|
|
92
64
|
useEntityRecordsWithPermissions( 'postType', TEMPLATE_POST_TYPE, {
|
|
93
65
|
per_page: -1,
|
|
94
|
-
combinedTemplates: false,
|
|
95
|
-
} );
|
|
96
|
-
const { records: staticRecords, isResolving: isLoadingStaticData } =
|
|
97
|
-
useEntityRecordsWithPermissions( 'root', 'registeredTemplate', {
|
|
98
|
-
// This should not be needed, the endpoint returns all registered
|
|
99
|
-
// templates, but it's not possible right now to turn off pagination
|
|
100
|
-
// for entity configs.
|
|
101
|
-
per_page: -1,
|
|
102
66
|
} );
|
|
103
|
-
|
|
104
|
-
const activeTemplates = useMemo( () => {
|
|
105
|
-
const _active = [ ...staticRecords ];
|
|
106
|
-
if ( activeTemplatesOption ) {
|
|
107
|
-
for ( const activeSlug in activeTemplatesOption ) {
|
|
108
|
-
const activeId = activeTemplatesOption[ activeSlug ];
|
|
109
|
-
// Replace the template in the array.
|
|
110
|
-
const template = userRecords.find(
|
|
111
|
-
( userRecord ) =>
|
|
112
|
-
userRecord.id === activeId &&
|
|
113
|
-
userRecord.theme === activeTheme.stylesheet
|
|
114
|
-
);
|
|
115
|
-
if ( template ) {
|
|
116
|
-
const index = _active.findIndex(
|
|
117
|
-
( { slug } ) => slug === template.slug
|
|
118
|
-
);
|
|
119
|
-
if ( index !== -1 ) {
|
|
120
|
-
_active[ index ] = template;
|
|
121
|
-
} else {
|
|
122
|
-
_active.push( template );
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return _active;
|
|
128
|
-
}, [ userRecords, staticRecords, activeTemplatesOption, activeTheme ] );
|
|
129
|
-
|
|
130
|
-
let isLoadingData;
|
|
131
|
-
if ( activeView === 'active' ) {
|
|
132
|
-
isLoadingData = isLoadingUserRecords || isLoadingStaticData;
|
|
133
|
-
} else if ( activeView === 'user' ) {
|
|
134
|
-
isLoadingData = isLoadingUserRecords;
|
|
135
|
-
} else {
|
|
136
|
-
isLoadingData = isLoadingStaticData;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const records = useMemo( () => {
|
|
140
|
-
function isCustom( record ) {
|
|
141
|
-
// For registered templates, the is_custom field is defined.
|
|
142
|
-
return (
|
|
143
|
-
record.is_custom ??
|
|
144
|
-
// For user templates it's custom if the is_wp_suggestion meta
|
|
145
|
-
// field is not set and the slug is not found in the default
|
|
146
|
-
// template types.
|
|
147
|
-
( ! record.meta?.is_wp_suggestion &&
|
|
148
|
-
! defaultTemplateTypes.some(
|
|
149
|
-
( type ) => type.slug === record.slug
|
|
150
|
-
) )
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
let _records;
|
|
155
|
-
if ( activeView === 'active' ) {
|
|
156
|
-
// Don't show active custom templates in the active view.
|
|
157
|
-
_records = activeTemplates.filter(
|
|
158
|
-
( record ) => ! isCustom( record )
|
|
159
|
-
);
|
|
160
|
-
} else if ( activeView === 'user' ) {
|
|
161
|
-
_records = userRecords;
|
|
162
|
-
} else {
|
|
163
|
-
_records = staticRecords;
|
|
164
|
-
}
|
|
165
|
-
return _records.map( ( record ) => ( {
|
|
166
|
-
...record,
|
|
167
|
-
_isActive: activeTemplates.some(
|
|
168
|
-
( template ) => template.id === record.id
|
|
169
|
-
),
|
|
170
|
-
_isCustom: isCustom( record ),
|
|
171
|
-
} ) );
|
|
172
|
-
}, [
|
|
173
|
-
activeTemplates,
|
|
174
|
-
defaultTemplateTypes,
|
|
175
|
-
userRecords,
|
|
176
|
-
staticRecords,
|
|
177
|
-
activeView,
|
|
178
|
-
] );
|
|
179
|
-
|
|
180
|
-
const users = useSelect(
|
|
181
|
-
( select ) => {
|
|
182
|
-
const { getUser } = select( coreStore );
|
|
183
|
-
return records.reduce( ( acc, record ) => {
|
|
184
|
-
if ( record.author_text ) {
|
|
185
|
-
if ( ! acc[ record.author_text ] ) {
|
|
186
|
-
acc[ record.author_text ] = record.author_text;
|
|
187
|
-
}
|
|
188
|
-
} else if ( record.author ) {
|
|
189
|
-
if ( ! acc[ record.author ] ) {
|
|
190
|
-
acc[ record.author ] = getUser( record.author );
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return acc;
|
|
194
|
-
}, {} );
|
|
195
|
-
},
|
|
196
|
-
[ records ]
|
|
197
|
-
);
|
|
198
|
-
|
|
199
67
|
const history = useHistory();
|
|
200
68
|
const onChangeSelection = useCallback(
|
|
201
69
|
( items ) => {
|
|
@@ -211,95 +79,23 @@ export default function PageTemplates() {
|
|
|
211
79
|
[ history, path, view?.type ]
|
|
212
80
|
);
|
|
213
81
|
|
|
214
|
-
const
|
|
215
|
-
postType: TEMPLATE_POST_TYPE,
|
|
216
|
-
} );
|
|
217
|
-
const dateField = postTypeFields.find( ( field ) => field.id === 'date' );
|
|
218
|
-
const themeField = useThemeField();
|
|
82
|
+
const postFields = usePostFields( { postType: TEMPLATE_POST_TYPE } );
|
|
219
83
|
const fields = useMemo( () => {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
templateTitleField,
|
|
223
|
-
descriptionField,
|
|
224
|
-
activeField,
|
|
225
|
-
slugField,
|
|
226
|
-
];
|
|
227
|
-
if ( activeView === 'user' ) {
|
|
228
|
-
_fields.push( themeField );
|
|
229
|
-
if ( dateField ) {
|
|
230
|
-
_fields.push( dateField );
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
const elements = [];
|
|
234
|
-
for ( const author in users ) {
|
|
235
|
-
elements.push( {
|
|
236
|
-
value: users[ author ]?.id ?? author,
|
|
237
|
-
label: users[ author ]?.name ?? author,
|
|
238
|
-
} );
|
|
239
|
-
}
|
|
240
|
-
_fields.push( {
|
|
241
|
-
...authorField,
|
|
242
|
-
elements,
|
|
243
|
-
} );
|
|
244
|
-
return _fields;
|
|
245
|
-
}, [ users, activeView, themeField, dateField ] );
|
|
84
|
+
return [ previewField, ...( postFields || [] ) ];
|
|
85
|
+
}, [ postFields ] );
|
|
246
86
|
|
|
247
87
|
const { data, paginationInfo } = useMemo( () => {
|
|
248
88
|
return filterSortAndPaginate( records, view, fields );
|
|
249
89
|
}, [ records, view, fields ] );
|
|
250
90
|
|
|
251
|
-
const { createSuccessNotice } = useDispatch( noticesStore );
|
|
252
|
-
const onActionPerformed = useCallback(
|
|
253
|
-
( actionId, items ) => {
|
|
254
|
-
switch ( actionId ) {
|
|
255
|
-
case 'duplicate-post':
|
|
256
|
-
{
|
|
257
|
-
const newItem = items[ 0 ];
|
|
258
|
-
const _title =
|
|
259
|
-
typeof newItem.title === 'string'
|
|
260
|
-
? newItem.title
|
|
261
|
-
: newItem.title?.rendered;
|
|
262
|
-
history.navigate( `/template?activeView=user` );
|
|
263
|
-
createSuccessNotice(
|
|
264
|
-
sprintf(
|
|
265
|
-
// translators: %s: Title of the created post or template, e.g: "Hello world".
|
|
266
|
-
__( '"%s" successfully created.' ),
|
|
267
|
-
decodeEntities( _title ) || __( '(no title)' )
|
|
268
|
-
),
|
|
269
|
-
{
|
|
270
|
-
type: 'snackbar',
|
|
271
|
-
id: 'duplicate-post-action',
|
|
272
|
-
actions: [
|
|
273
|
-
{
|
|
274
|
-
label: __( 'Edit' ),
|
|
275
|
-
onClick: () => {
|
|
276
|
-
history.navigate(
|
|
277
|
-
`/${ newItem.type }/${ newItem.id }?canvas=edit`
|
|
278
|
-
);
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
],
|
|
282
|
-
}
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
},
|
|
288
|
-
[ history, createSuccessNotice ]
|
|
289
|
-
);
|
|
290
91
|
const postTypeActions = usePostActions( {
|
|
291
92
|
postType: TEMPLATE_POST_TYPE,
|
|
292
93
|
context: 'list',
|
|
293
|
-
onActionPerformed,
|
|
294
94
|
} );
|
|
295
95
|
const editAction = useEditPostAction();
|
|
296
|
-
const setActiveTemplateAction = useSetActiveTemplateAction();
|
|
297
96
|
const actions = useMemo(
|
|
298
|
-
() =>
|
|
299
|
-
|
|
300
|
-
? [ setActiveTemplateAction, editAction, ...postTypeActions ]
|
|
301
|
-
: [ setActiveTemplateAction, ...postTypeActions ],
|
|
302
|
-
[ postTypeActions, setActiveTemplateAction, editAction, activeView ]
|
|
97
|
+
() => [ editAction, ...postTypeActions ],
|
|
98
|
+
[ postTypeActions, editAction ]
|
|
303
99
|
);
|
|
304
100
|
|
|
305
101
|
const onChangeView = useEvent( ( newView ) => {
|
|
@@ -310,10 +106,6 @@ export default function PageTemplates() {
|
|
|
310
106
|
}
|
|
311
107
|
} );
|
|
312
108
|
|
|
313
|
-
const duplicateAction = actions.find(
|
|
314
|
-
( action ) => action.id === 'duplicate-post'
|
|
315
|
-
);
|
|
316
|
-
|
|
317
109
|
return (
|
|
318
110
|
<Page
|
|
319
111
|
className="edit-site-page-templates"
|
|
@@ -332,14 +124,8 @@ export default function PageTemplates() {
|
|
|
332
124
|
onChangeView={ onChangeView }
|
|
333
125
|
onChangeSelection={ onChangeSelection }
|
|
334
126
|
isItemClickable={ () => true }
|
|
335
|
-
onClickItem={ (
|
|
336
|
-
|
|
337
|
-
setSelectedRegisteredTemplate( item );
|
|
338
|
-
} else {
|
|
339
|
-
history.navigate(
|
|
340
|
-
`/${ item.type }/${ item.id }?canvas=edit`
|
|
341
|
-
);
|
|
342
|
-
}
|
|
127
|
+
onClickItem={ ( { id } ) => {
|
|
128
|
+
history.navigate( `/wp_template/${ id }?canvas=edit` );
|
|
343
129
|
} }
|
|
344
130
|
selection={ selection }
|
|
345
131
|
defaultLayouts={ defaultLayouts }
|
|
@@ -352,18 +138,6 @@ export default function PageTemplates() {
|
|
|
352
138
|
: false
|
|
353
139
|
}
|
|
354
140
|
/>
|
|
355
|
-
{ selectedRegisteredTemplate && duplicateAction && (
|
|
356
|
-
<Modal
|
|
357
|
-
title={ __( 'Duplicate' ) }
|
|
358
|
-
onRequestClose={ () => setSelectedRegisteredTemplate() }
|
|
359
|
-
size="small"
|
|
360
|
-
>
|
|
361
|
-
<duplicateAction.RenderModal
|
|
362
|
-
items={ [ selectedRegisteredTemplate ] }
|
|
363
|
-
closeModal={ () => setSelectedRegisteredTemplate() }
|
|
364
|
-
/>
|
|
365
|
-
</Modal>
|
|
366
|
-
) }
|
|
367
141
|
</Page>
|
|
368
142
|
);
|
|
369
143
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
|
|
8
8
|
import { privateApis as routerPrivateApis } from '@wordpress/router';
|
|
9
9
|
import { useSelect } from '@wordpress/data';
|
|
10
|
-
import { DataViews
|
|
10
|
+
import { DataViews } from '@wordpress/dataviews';
|
|
11
11
|
import { privateApis as editorPrivateApis } from '@wordpress/editor';
|
|
12
12
|
import { useEvent, usePrevious } from '@wordpress/compose';
|
|
13
13
|
import { addQueryArgs } from '@wordpress/url';
|
|
@@ -176,27 +176,14 @@ export default function PostList( { postType } ) {
|
|
|
176
176
|
const { notesCount, isLoading: isLoadingNotesCount } =
|
|
177
177
|
useNotesCount( postIds );
|
|
178
178
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if ( view?.sort?.field === 'author' ) {
|
|
184
|
-
processedRecords = filterSortAndPaginate(
|
|
185
|
-
records,
|
|
186
|
-
{ sort: { ...view.sort } },
|
|
187
|
-
fields
|
|
188
|
-
).data;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
if ( processedRecords ) {
|
|
192
|
-
return processedRecords.map( ( record ) => ( {
|
|
179
|
+
const data = useMemo(
|
|
180
|
+
() =>
|
|
181
|
+
records?.map( ( record ) => ( {
|
|
193
182
|
...record,
|
|
194
183
|
notesCount: notesCount[ record.id ] ?? 0,
|
|
195
|
-
} ) )
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
return processedRecords;
|
|
199
|
-
}, [ records, fields, view?.sort, notesCount ] );
|
|
184
|
+
} ) ),
|
|
185
|
+
[ records, notesCount ]
|
|
186
|
+
);
|
|
200
187
|
|
|
201
188
|
const ids = data?.map( ( record ) => getItemId( record ) ) ?? [];
|
|
202
189
|
const prevIds = usePrevious( ids ) ?? [];
|
|
@@ -98,11 +98,13 @@ export default function SidebarGlobalStyles() {
|
|
|
98
98
|
title={ __( 'Styles' ) }
|
|
99
99
|
headingLevel={ 2 }
|
|
100
100
|
>
|
|
101
|
-
<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
<div className="edit-site-styles__content">
|
|
102
|
+
<GlobalStylesUIWrapper
|
|
103
|
+
path={ section }
|
|
104
|
+
onPathChange={ onChangeSection }
|
|
105
|
+
settings={ settings }
|
|
106
|
+
/>
|
|
107
|
+
</div>
|
|
106
108
|
</Page>
|
|
107
109
|
);
|
|
108
110
|
}
|
|
@@ -31,6 +31,12 @@
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
.edit-site-styles__content {
|
|
35
|
+
flex-grow: 1;
|
|
36
|
+
min-height: 0;
|
|
37
|
+
background-color: var(--wpds-color-background-surface-neutral-strong);
|
|
38
|
+
}
|
|
39
|
+
|
|
34
40
|
// Show button text labels when preference is enabled.
|
|
35
41
|
.show-icon-labels {
|
|
36
42
|
.edit-site-styles__header-actions {
|
|
@@ -5,6 +5,11 @@ import { store as coreStore } from '@wordpress/core-data';
|
|
|
5
5
|
import { DataForm } from '@wordpress/dataviews';
|
|
6
6
|
import { MediaEdit } from '@wordpress/fields';
|
|
7
7
|
import { decodeEntities } from '@wordpress/html-entities';
|
|
8
|
+
import { useViewConfig } from '@wordpress/views';
|
|
9
|
+
|
|
10
|
+
// The screen only renders a form, so it requests the `form` of the entity
|
|
11
|
+
// view configuration alone.
|
|
12
|
+
const VIEW_CONFIG_FIELDS = [ 'form' ];
|
|
8
13
|
|
|
9
14
|
const fields = [
|
|
10
15
|
{
|
|
@@ -53,14 +58,6 @@ const fields = [
|
|
|
53
58
|
},
|
|
54
59
|
];
|
|
55
60
|
|
|
56
|
-
const form = {
|
|
57
|
-
layout: {
|
|
58
|
-
type: 'regular',
|
|
59
|
-
labelPosition: 'top',
|
|
60
|
-
},
|
|
61
|
-
fields: [ 'title', 'description', 'site_logo', 'site_icon' ],
|
|
62
|
-
};
|
|
63
|
-
|
|
64
61
|
export default function SidebarIdentity() {
|
|
65
62
|
const data = useSelect(
|
|
66
63
|
( select ) =>
|
|
@@ -68,23 +65,30 @@ export default function SidebarIdentity() {
|
|
|
68
65
|
[]
|
|
69
66
|
);
|
|
70
67
|
const { editEntityRecord } = useDispatch( coreStore );
|
|
68
|
+
const { form } = useViewConfig( {
|
|
69
|
+
kind: 'root',
|
|
70
|
+
name: 'site',
|
|
71
|
+
fields: VIEW_CONFIG_FIELDS,
|
|
72
|
+
} );
|
|
71
73
|
|
|
72
74
|
const onChange = ( edits ) => {
|
|
73
75
|
editEntityRecord( 'root', 'site', undefined, edits );
|
|
74
76
|
};
|
|
75
77
|
|
|
78
|
+
if ( ! form ) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
|
|
76
82
|
return (
|
|
77
|
-
<Page
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
onChange={ onChange }
|
|
87
|
-
/>
|
|
83
|
+
<Page title={ _x( 'Identity', 'site identity' ) } headingLevel={ 2 }>
|
|
84
|
+
<div className="edit-site-sidebar-identity__form">
|
|
85
|
+
<DataForm
|
|
86
|
+
data={ data }
|
|
87
|
+
fields={ fields }
|
|
88
|
+
form={ form }
|
|
89
|
+
onChange={ onChange }
|
|
90
|
+
/>
|
|
91
|
+
</div>
|
|
88
92
|
</Page>
|
|
89
93
|
);
|
|
90
94
|
}
|
|
@@ -65,13 +65,7 @@ function SidebarNavigationItemContent( {
|
|
|
65
65
|
{ ...props }
|
|
66
66
|
>
|
|
67
67
|
<Stack direction="row" align="center" justify="start" gap="sm">
|
|
68
|
-
{ icon &&
|
|
69
|
-
<Icon
|
|
70
|
-
style={ { fill: 'currentcolor' } }
|
|
71
|
-
icon={ icon }
|
|
72
|
-
size={ 24 }
|
|
73
|
-
/>
|
|
74
|
-
) }
|
|
68
|
+
{ icon && <Icon icon={ icon } size={ 24 } /> }
|
|
75
69
|
<FlexBlock>{ children }</FlexBlock>
|
|
76
70
|
{ withChevron && (
|
|
77
71
|
<Icon
|
|
@@ -1,87 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
const { useLocation } = unlock( routerPrivateApis );
|
|
13
|
-
|
|
14
|
-
const EMPTY_ARRAY = [];
|
|
15
|
-
|
|
16
|
-
function TemplateDataviewItem( { template, isActive } ) {
|
|
17
|
-
const { text, icon } = useAddedBy( template.type, template.id );
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<SidebarNavigationItem
|
|
21
|
-
to={ addQueryArgs( '/template', { activeView: text } ) }
|
|
22
|
-
icon={ icon }
|
|
23
|
-
aria-current={ isActive }
|
|
24
|
-
>
|
|
25
|
-
{ text }
|
|
26
|
-
</SidebarNavigationItem>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
1
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
2
|
+
import { useSelect } from '@wordpress/data';
|
|
3
|
+
import {
|
|
4
|
+
commentAuthorAvatar,
|
|
5
|
+
layout,
|
|
6
|
+
plugins as pluginIcon,
|
|
7
|
+
globe,
|
|
8
|
+
} from '@wordpress/icons';
|
|
9
|
+
import { TEMPLATE_POST_TYPE } from '../../utils/constants';
|
|
10
|
+
import DataViewsSidebarContent from '../sidebar-dataviews';
|
|
29
11
|
|
|
12
|
+
const SOURCE_TO_ICON = {
|
|
13
|
+
user: commentAuthorAvatar,
|
|
14
|
+
theme: layout,
|
|
15
|
+
plugin: pluginIcon,
|
|
16
|
+
site: globe,
|
|
17
|
+
};
|
|
30
18
|
export default function DataviewsTemplatesSidebarContent() {
|
|
31
|
-
const {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// templates, but it's not possible right now to turn off pagination for
|
|
37
|
-
// entity configs.
|
|
38
|
-
per_page: -1,
|
|
39
|
-
} );
|
|
40
|
-
const firstItemPerAuthorText = useMemo( () => {
|
|
41
|
-
const firstItemPerAuthor = records?.reduce( ( acc, template ) => {
|
|
42
|
-
const author = template.author_text;
|
|
43
|
-
if ( author && ! acc[ author ] ) {
|
|
44
|
-
acc[ author ] = template;
|
|
45
|
-
}
|
|
46
|
-
return acc;
|
|
47
|
-
}, {} );
|
|
48
|
-
return (
|
|
49
|
-
( firstItemPerAuthor && Object.values( firstItemPerAuthor ) ) ??
|
|
50
|
-
EMPTY_ARRAY
|
|
19
|
+
const authorSourceMap = useSelect( ( select ) => {
|
|
20
|
+
const templates = select( coreStore ).getEntityRecords(
|
|
21
|
+
'postType',
|
|
22
|
+
TEMPLATE_POST_TYPE,
|
|
23
|
+
{ per_page: -1 }
|
|
51
24
|
);
|
|
52
|
-
|
|
25
|
+
if ( ! templates ) {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
const map = {};
|
|
29
|
+
for ( const template of templates ) {
|
|
30
|
+
if (
|
|
31
|
+
template.author_text &&
|
|
32
|
+
template.original_source &&
|
|
33
|
+
! map[ template.author_text ]
|
|
34
|
+
) {
|
|
35
|
+
map[ template.author_text ] = template.original_source;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return map;
|
|
39
|
+
}, [] );
|
|
40
|
+
|
|
41
|
+
const resolveIcon = ( view ) => {
|
|
42
|
+
const source = authorSourceMap[ view.slug ];
|
|
43
|
+
return SOURCE_TO_ICON[ source ] ?? layout;
|
|
44
|
+
};
|
|
53
45
|
|
|
54
46
|
return (
|
|
55
|
-
<
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
aria-current={ activeView === 'active' }
|
|
60
|
-
>
|
|
61
|
-
{ __( 'Active templates' ) }
|
|
62
|
-
</SidebarNavigationItem>
|
|
63
|
-
<SidebarNavigationItem
|
|
64
|
-
to={ addQueryArgs( '/template', { activeView: 'user' } ) }
|
|
65
|
-
icon={ commentAuthorAvatar }
|
|
66
|
-
aria-current={ activeView === 'user' }
|
|
67
|
-
>
|
|
68
|
-
{
|
|
69
|
-
// Let's avoid calling them "custom templates" to avoid
|
|
70
|
-
// confusion. "Created" is closest to meaning database
|
|
71
|
-
// templates, created by users.
|
|
72
|
-
// https://developer.wordpress.org/themes/classic-themes/templates/page-template-files/#creating-custom-page-templates-for-global-use
|
|
73
|
-
__( 'Created templates' )
|
|
74
|
-
}
|
|
75
|
-
</SidebarNavigationItem>
|
|
76
|
-
{ firstItemPerAuthorText.map( ( template ) => {
|
|
77
|
-
return (
|
|
78
|
-
<TemplateDataviewItem
|
|
79
|
-
key={ template.author_text }
|
|
80
|
-
template={ template }
|
|
81
|
-
isActive={ activeView === template.author_text }
|
|
82
|
-
/>
|
|
83
|
-
);
|
|
84
|
-
} ) }
|
|
85
|
-
</ItemGroup>
|
|
47
|
+
<DataViewsSidebarContent
|
|
48
|
+
postType={ TEMPLATE_POST_TYPE }
|
|
49
|
+
resolveIcon={ resolveIcon }
|
|
50
|
+
/>
|
|
86
51
|
);
|
|
87
52
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { __ } from '@wordpress/i18n';
|
|
2
2
|
import SidebarNavigationScreen from '../sidebar-navigation-screen';
|
|
3
3
|
import DataviewsTemplatesSidebarContent from './content';
|
|
4
|
-
import DataviewsTemplatesSidebarContentLegacy from './content-legacy';
|
|
5
4
|
|
|
6
5
|
export default function SidebarNavigationScreenTemplatesBrowse( { backPath } ) {
|
|
7
6
|
return (
|
|
@@ -11,13 +10,7 @@ export default function SidebarNavigationScreenTemplatesBrowse( { backPath } ) {
|
|
|
11
10
|
'Manage the templates that define the structure of your pages, or reset any customizations made to those supplied by your theme.'
|
|
12
11
|
) }
|
|
13
12
|
backPath={ backPath }
|
|
14
|
-
content={
|
|
15
|
-
window?.__experimentalTemplateActivate ? (
|
|
16
|
-
<DataviewsTemplatesSidebarContent />
|
|
17
|
-
) : (
|
|
18
|
-
<DataviewsTemplatesSidebarContentLegacy />
|
|
19
|
-
)
|
|
20
|
-
}
|
|
13
|
+
content={ <DataviewsTemplatesSidebarContent /> }
|
|
21
14
|
/>
|
|
22
15
|
);
|
|
23
16
|
}
|