-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
index.js
112 lines (105 loc) · 2.85 KB
/
index.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
/**
* External dependencies
*/
import { defaultTo } from 'lodash';
/**
* WordPress dependencies
*/
import {
DropZoneProvider,
SlotFillProvider,
FocusReturnProvider,
} from '@wordpress/components';
import { uploadMedia } from '@wordpress/media-utils';
import { useDispatch, useSelect } from '@wordpress/data';
import { useMemo } from '@wordpress/element';
import {
BlockEditorProvider,
BlockEditorKeyboardShortcuts,
__unstableEditorStyles as EditorStyles,
} from '@wordpress/block-editor';
import { ReusableBlocksMenuItems } from '@wordpress/reusable-blocks';
/**
* Internal dependencies
*/
import KeyboardShortcuts from '../keyboard-shortcuts';
import { useEntityBlockEditor } from '@wordpress/core-data';
import { buildWidgetAreasPostId, KIND, POST_TYPE } from '../../store/utils';
import useLastSelectedWidgetArea from '../../hooks/use-last-selected-widget-area';
export default function WidgetAreasBlockEditorProvider( {
blockEditorSettings,
children,
...props
} ) {
const { hasUploadPermissions, reusableBlocks } = useSelect(
( select ) => ( {
hasUploadPermissions: defaultTo(
select( 'core' ).canUser( 'create', 'media' ),
true
),
widgetAreas: select( 'core/edit-widgets' ).getWidgetAreas(),
widgets: select( 'core/edit-widgets' ).getWidgets(),
reusableBlocks: select( 'core' ).getEntityRecords(
'postType',
'wp_block'
),
} )
);
const { setIsInserterOpened } = useDispatch( 'core/edit-widgets' );
const settings = useMemo( () => {
let mediaUploadBlockEditor;
if ( hasUploadPermissions ) {
mediaUploadBlockEditor = ( { onError, ...argumentsObject } ) => {
uploadMedia( {
wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes,
onError: ( { message } ) => onError( message ),
...argumentsObject,
} );
};
}
return {
...blockEditorSettings,
__experimentalReusableBlocks: reusableBlocks,
mediaUpload: mediaUploadBlockEditor,
templateLock: 'all',
__experimentalSetIsInserterOpened: setIsInserterOpened,
};
}, [
blockEditorSettings,
hasUploadPermissions,
reusableBlocks,
setIsInserterOpened,
] );
const widgetAreaId = useLastSelectedWidgetArea();
const [ blocks, onInput, onChange ] = useEntityBlockEditor(
KIND,
POST_TYPE,
{ id: buildWidgetAreasPostId() }
);
return (
<>
<EditorStyles styles={ settings.styles } />
<BlockEditorKeyboardShortcuts.Register />
<KeyboardShortcuts.Register />
<SlotFillProvider>
<DropZoneProvider>
<FocusReturnProvider>
<BlockEditorProvider
value={ blocks }
onInput={ onInput }
onChange={ onChange }
settings={ settings }
useSubRegistry={ false }
{ ...props }
>
{ children }
<ReusableBlocksMenuItems
rootClientId={ widgetAreaId }
/>
</BlockEditorProvider>
</FocusReturnProvider>
</DropZoneProvider>
</SlotFillProvider>
</>
);
}