import { createElement } from '@wordpress/element'
/**
* External dependencies
*/
import { defaultTo } from 'lodash'
/**
* WordPress dependencies
*/
import { store as coreStore } from '@wordpress/core-data'
import { useSelect } from '@wordpress/data'
import { useMemo, createPortal } from '@wordpress/element'
import {
BlockList,
BlockTools,
BlockSelectionClearer,
BlockInspector,
CopyHandler,
ObserveTyping,
WritingFlow,
BlockEditorKeyboardShortcuts,
__unstableBlockSettingsMenuFirstItem,
__unstableEditorStyles as EditorStyles,
} from '@wordpress/block-editor'
import { uploadMedia } from '@wordpress/media-utils'
import { store as interfaceStore } from '../more-menu/interface/store'
/**
* Internal dependencies
*/
import BlockInspectorButton from '../block-inspector-button'
import Header from '../header'
import useInserter from '../inserter/use-inserter'
import SidebarEditorProvider from './sidebar-editor-provider'
import WelcomeGuide from '../welcome-guide'
import KeyboardShortcuts from '../keyboard-shortcuts'
import { ButtonBlockAppender } from '@wordpress/block-editor'
export default function SidebarBlockEditor({
blockEditorSettings,
sidebar,
inserter,
inspector,
}) {
const [isInserterOpened, setIsInserterOpened] = useInserter(inserter)
const {
hasUploadPermissions,
isFixedToolbarActive,
keepCaretInsideBlock,
isWelcomeGuideActive,
} = useSelect((select) => {
const { isFeatureActive } = select(interfaceStore)
return {
hasUploadPermissions: defaultTo(
select(coreStore).canUser('create', 'media'),
true
),
isFixedToolbarActive: isFeatureActive(
'core/customize-widgets',
'fixedToolbar'
),
keepCaretInsideBlock: isFeatureActive(
'core/customize-widgets',
'keepCaretInsideBlock'
),
isWelcomeGuideActive: isFeatureActive(
'core/customize-widgets',
'welcomeGuide'
),
}
}, [])
const settings = useMemo(() => {
let mediaUploadBlockEditor
if (hasUploadPermissions) {
mediaUploadBlockEditor = ({ onError, ...argumentsObject }) => {
uploadMedia({
wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes,
onError: ({ message }) => onError(message),
...argumentsObject,
})
}
}
return {
...blockEditorSettings,
__experimentalSetIsInserterOpened: (a) => {
return setIsInserterOpened(a)
},
mediaUpload: mediaUploadBlockEditor,
hasFixedToolbar: isFixedToolbarActive,
keepCaretInsideBlock,
__unstableHasCustomAppender: true,
}
}, [
hasUploadPermissions,
blockEditorSettings,
isFixedToolbarActive,
keepCaretInsideBlock,
setIsInserterOpened,
])
if (isWelcomeGuideActive) {
return
}
return (
<>
{createPortal(
// This is a temporary hack to prevent button component inside
// from submitting form when type="button" is not specified.
,
document
.querySelector(
'.ct-tmp-panel-wrapper .ct-customizer-panel'
)
.lastElementChild.querySelector(
'.customizer-panel-content'
)
)}
<__unstableBlockSettingsMenuFirstItem>
{({ onClose }) => (
)}
>
)
}