@gechiui/block-editor
Version:
76 lines (68 loc) • 2 kB
JavaScript
/**
* GeChiUI dependencies
*/
import { useMemo } from '@gechiui/element';
import { __ } from '@gechiui/i18n';
import { addQueryArgs } from '@gechiui/url';
/**
* Internal dependencies
*/
import BlockTypesList from '../block-types-list';
import InserterPanel from './panel';
import InserterNoResults from './no-results';
import useBlockTypesState from './hooks/use-block-types-state';
function ReusableBlocksList( { onHover, onInsert, rootClientId } ) {
const [ items, , , onSelectItem ] = useBlockTypesState(
rootClientId,
onInsert
);
const filteredItems = useMemo( () => {
return items.filter( ( { category } ) => category === 'reusable' );
}, [ items ] );
if ( filteredItems.length === 0 ) {
return <InserterNoResults />;
}
return (
<InserterPanel title={ __( '可重用区块' ) }>
<BlockTypesList
items={ filteredItems }
onSelect={ onSelectItem }
onHover={ onHover }
label={ __( '可重用区块' ) }
/>
</InserterPanel>
);
}
// The unwrapped component is only exported for use by unit tests.
/**
* List of reusable blocks shown in the "Reusable" tab of the inserter.
*
* @param {Object} props Component props.
* @param {?string} props.rootClientId Client id of block to insert into.
* @param {Function} props.onInsert Callback to run when item is inserted.
* @param {Function} props.onHover Callback to run when item is hovered.
*
* @return {GCComponent} The component.
*/
export function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {
return (
<>
<ReusableBlocksList
onHover={ onHover }
onInsert={ onInsert }
rootClientId={ rootClientId }
/>
<div className="block-editor-inserter__manage-reusable-blocks-container">
<a
className="block-editor-inserter__manage-reusable-blocks"
href={ addQueryArgs( 'edit.php', {
post_type: 'gc_block',
} ) }
>
{ __( '管理可重用区块' ) }
</a>
</div>
</>
);
}
export default ReusableBlocksTab;