/**
* External dependencies
*/
import classnames from 'classnames';
/** @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-components/ */
import {
Disabled,
PanelBody,
SelectControl,
ToggleControl,
} from '@wordpress/components';
/** @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-server-side-render/ */
import ServerSideRender from '@wordpress/server-side-render';
/** @see https://developer.wordpress.org/block-editor/packages/packages-i18n/ */
import { __ } from '@wordpress/i18n';
/** @see https://developer.wordpress.org/block-editor/packages/packages-block-editor/ */
import { useBlockProps, InspectorControls } from '@wordpress/block-editor';
/** @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-data/ */
import { useSelect } from '@wordpress/data';
/** @see https://www.npmjs.com/package/@wordpress/scripts#using-css */
import './editor.scss';
/**
* @param props
* @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#edit
*
* @return {WPElement} Element to render.
*/
export default function Edit(props) {
const classnamesArg = {};
const { deviceType } = useSelect((select) => {
const editPost = select('core/edit-post');
if (editPost === null || editPost === undefined) {
return {
deviceType: false,
};
}
const { __experimentalGetPreviewDeviceType } = editPost;
return {
deviceType: __experimentalGetPreviewDeviceType(),
};
}, []);
if (typeof deviceType === 'string') {
classnamesArg[
`wp-block-fibosearch-search__device-preview-${deviceType.toLowerCase()}`
] = true;
}
const blockProps = useBlockProps({
className: classnames(classnamesArg),
});
const { attributes } = props;
const {
attributes: {
darkenedBackground,
mobileOverlay,
inheritPluginSettings,
layout,
},
name,
setAttributes,
} = props;
return (
<div {...blockProps}>
<InspectorControls key="inspector">
<PanelBody
title={__('Settings', 'ajax-search-for-woocommerce')}
initialOpen={false}
>
<ToggleControl
label={__(
'Inherit global plugin settings',
'ajax-search-for-woocommerce'
)}
checked={inheritPluginSettings}
onChange={() =>
setAttributes({
inheritPluginSettings: !inheritPluginSettings,
})
}
/>
{inheritPluginSettings ? null : (
<SelectControl
label={__('Layout', 'ajax-search-for-woocommerce')}
value={layout}
options={[
{
label: __(
'Search bar',
'ajax-search-for-woocommerce'
),
value: 'classic',
},
{
label: __(
'Search icon',
'ajax-search-for-woocommerce'
),
value: 'icon',
},
{
label: __(
'Icon on mobile, search bar on desktop',
'ajax-search-for-woocommerce'
),
value: 'icon-flexible',
},
{
label: __(
'Icon on desktop, search bar on mobile',
'ajax-search-for-woocommerce'
),
value: 'icon-flexible-inv',
},
]}
onChange={(newLayout) => {
setAttributes({
layout: newLayout,
});
if (
newLayout === 'icon' ||
newLayout === 'icon-flexible' ||
newLayout === 'icon-flexible-inv'
) {
setAttributes({
mobileOverlay: true,
});
}
}}
/>
)}
{inheritPluginSettings ? null : (
<ToggleControl
label={__(
'Darkened background',
'ajax-search-for-woocommerce'
)}
checked={darkenedBackground}
onChange={() =>
setAttributes({
darkenedBackground: !darkenedBackground,
})
}
/>
)}
{inheritPluginSettings ? null : (
<ToggleControl
label={__(
'Overlay on mobile',
'ajax-search-for-woocommerce'
)}
checked={mobileOverlay}
onChange={() =>
setAttributes({
mobileOverlay: !mobileOverlay,
})
}
help={
mobileOverlay
? __(
'The search will open in overlay on mobile',
'ajax-search-for-woocommerce'
)
: ''
}
/>
)}
</PanelBody>
</InspectorControls>
<Disabled>
<ServerSideRender block={name} attributes={attributes} />
</Disabled>
</div>
);
}