@gechiui/block-editor
Version:
121 lines (109 loc) • 2.88 kB
JavaScript
/**
* External dependencies
*/
import classnames from 'classnames';
/**
* GeChiUI dependencies
*/
import { __, sprintf } from '@gechiui/i18n';
import { Fragment } from '@gechiui/element';
import { ToggleControl } from '@gechiui/components';
/**
* Internal dependencies
*/
import ResponsiveBlockControlLabel from './label';
function ResponsiveBlockControl( props ) {
const {
title,
property,
toggleLabel,
onIsResponsiveChange,
renderDefaultControl,
renderResponsiveControls,
isResponsive = false,
defaultLabel = {
id: 'all',
/* translators: 'Label. Used to signify a layout property (eg: margin, padding) will apply uniformly to all screensizes.' */
label: __( '全部' ),
},
viewports = [
{
id: 'small',
label: __( '小型屏幕' ),
},
{
id: 'medium',
label: __( '中型屏幕' ),
},
{
id: 'large',
label: __( '大型屏幕' ),
},
],
} = props;
if ( ! title || ! property || ! renderDefaultControl ) {
return null;
}
const toggleControlLabel =
toggleLabel ||
sprintf(
/* translators: 'Toggle control label. Should the property be the same across all screen sizes or unique per screen size.'. %s property value for the control (eg: margin, padding...etc) */
__( '在所有屏幕尺寸上使用相同的%s。' ),
property
);
/* translators: 'Help text for the responsive mode toggle control.' */
const toggleHelpText = __(
'在对所有屏幕尺寸使用相同值或对每个屏幕尺寸使用唯一值之间进行切换。'
);
const defaultControl = renderDefaultControl(
<ResponsiveBlockControlLabel
property={ property }
viewport={ defaultLabel }
/>,
defaultLabel
);
const defaultResponsiveControls = () => {
return viewports.map( ( viewport ) => (
<Fragment key={ viewport.id }>
{ renderDefaultControl(
<ResponsiveBlockControlLabel
property={ property }
viewport={ viewport }
/>,
viewport
) }
</Fragment>
) );
};
return (
<fieldset className="block-editor-responsive-block-control">
<legend className="block-editor-responsive-block-control__title">
{ title }
</legend>
<div className="block-editor-responsive-block-control__inner">
<ToggleControl
className="block-editor-responsive-block-control__toggle"
label={ toggleControlLabel }
checked={ ! isResponsive }
onChange={ onIsResponsiveChange }
help={ toggleHelpText }
/>
<div
className={ classnames(
'block-editor-responsive-block-control__group',
{
'is-responsive': isResponsive,
}
) }
>
{ ! isResponsive && defaultControl }
{ isResponsive &&
( renderResponsiveControls
? renderResponsiveControls( viewports )
: defaultResponsiveControls() ) }
</div>
</div>
</fieldset>
);
}
export default ResponsiveBlockControl;