-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
editor.js
119 lines (105 loc) · 2.59 KB
/
editor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
* External dependencies
*/
import memize from 'memize';
import { size, map, without } from 'lodash';
/**
* WordPress dependencies
*/
import { withSelect } from '@wordpress/data';
import { EditorProvider, ErrorBoundary, PostLockedModal } from '@wordpress/editor';
import { StrictMode, Component } from '@wordpress/element';
import { KeyboardShortcuts } from '@wordpress/components';
/**
* Internal dependencies
*/
import preventEventDiscovery from './prevent-event-discovery';
import Layout from './components/layout';
class Editor extends Component {
constructor() {
super( ...arguments );
this.getEditorSettings = memize( this.getEditorSettings, {
maxSize: 1,
} );
}
getEditorSettings(
settings,
hasFixedToolbar,
focusMode,
hiddenBlockTypes,
blockTypes,
) {
settings = {
...settings,
hasFixedToolbar,
focusMode,
};
// Omit hidden block types if exists and non-empty.
if ( size( hiddenBlockTypes ) > 0 ) {
// Defer to passed setting for `allowedBlockTypes` if provided as
// anything other than `true` (where `true` is equivalent to allow
// all block types).
const defaultAllowedBlockTypes = (
true === settings.allowedBlockTypes ?
map( blockTypes, 'name' ) :
( settings.allowedBlockTypes || [] )
);
settings.allowedBlockTypes = without(
defaultAllowedBlockTypes,
...hiddenBlockTypes,
);
}
return settings;
}
render() {
const {
settings,
hasFixedToolbar,
focusMode,
post,
initialEdits,
onError,
hiddenBlockTypes,
blockTypes,
...props
} = this.props;
if ( ! post ) {
return null;
}
const editorSettings = this.getEditorSettings(
settings,
hasFixedToolbar,
focusMode,
hiddenBlockTypes,
blockTypes,
);
return (
<StrictMode>
<EditorProvider
settings={ editorSettings }
post={ post }
initialEdits={ initialEdits }
{ ...props }
>
<ErrorBoundary onError={ onError }>
<Layout />
<KeyboardShortcuts shortcuts={ preventEventDiscovery } />
</ErrorBoundary>
<PostLockedModal />
</EditorProvider>
</StrictMode>
);
}
}
export default withSelect( ( select, { postId, postType } ) => {
const { isFeatureActive, getPreference } = select( 'core/edit-post' );
const { getEntityRecord } = select( 'core' );
const { getBlockTypes } = select( 'core/blocks' );
return {
hasFixedToolbar: isFeatureActive( 'fixedToolbar' ),
focusMode: isFeatureActive( 'focusMode' ),
post: getEntityRecord( 'postType', postType, postId ),
hiddenBlockTypes: getPreference( 'hiddenBlockTypes' ),
blockTypes: getBlockTypes(),
};
} )( Editor );