UNPKG

@gechiui/block-editor

Version:
169 lines (157 loc) 5.12 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement } from "@gechiui/element"; /** * GeChiUI dependencies */ import { useDispatch } from '@gechiui/data'; import { cloneBlock } from '@gechiui/blocks'; import { VisuallyHidden, __unstableComposite as Composite, __unstableUseCompositeState as useCompositeState, __unstableCompositeItem as CompositeItem } from '@gechiui/components'; import { useState } from '@gechiui/element'; import { useInstanceId } from '@gechiui/compose'; import { __ } from '@gechiui/i18n'; /** * Internal dependencies */ import { store as blockEditorStore } from '../../store'; import BlockPreview from '../block-preview'; import SetupToolbar from './setup-toolbar'; import usePatternsSetup from './use-patterns-setup'; import { VIEWMODES } from './constants'; const SetupContent = _ref => { let { viewMode, activeSlide, patterns, onBlockPatternSelect } = _ref; const composite = useCompositeState(); const containerClass = 'block-editor-block-pattern-setup__container'; if (viewMode === VIEWMODES.carousel) { const slideClass = new Map([[activeSlide, 'active-slide'], [activeSlide - 1, 'previous-slide'], [activeSlide + 1, 'next-slide']]); return createElement("div", { className: containerClass }, createElement("ul", { className: "carousel-container" }, patterns.map((pattern, index) => createElement(BlockPatternSlide, { className: slideClass.get(index) || '', key: pattern.name, pattern: pattern })))); } return createElement(Composite, _extends({}, composite, { role: "listbox", className: containerClass, "aria-label": __('区块样板列表') }), patterns.map(pattern => createElement(BlockPattern, { key: pattern.name, pattern: pattern, onSelect: onBlockPatternSelect, composite: composite }))); }; function BlockPattern(_ref2) { let { pattern, onSelect, composite } = _ref2; const baseClassName = 'block-editor-block-pattern-setup-list'; const { blocks, title, description, viewportWidth = 700 } = pattern; const descriptionId = useInstanceId(BlockPattern, `${baseClassName}__item-description`); return createElement("div", { className: `${baseClassName}__list-item`, "aria-label": pattern.title, "aria-describedby": pattern.description ? descriptionId : undefined }, createElement(CompositeItem, _extends({ role: "option", as: "div" }, composite, { className: `${baseClassName}__item`, onClick: () => onSelect(blocks) }), createElement(BlockPreview, { blocks: blocks, viewportWidth: viewportWidth }), createElement("div", { className: `${baseClassName}__item-title` }, title)), !!description && createElement(VisuallyHidden, { id: descriptionId }, description)); } function BlockPatternSlide(_ref3) { let { className, pattern } = _ref3; const { blocks, title, description } = pattern; const descriptionId = useInstanceId(BlockPatternSlide, 'block-editor-block-pattern-setup-list__item-description'); return createElement("li", { className: `pattern-slide ${className}`, "aria-label": title, "aria-describedby": description ? descriptionId : undefined }, createElement(BlockPreview, { blocks: blocks, __experimentalLive: true }), !!description && createElement(VisuallyHidden, { id: descriptionId }, description)); } const BlockPatternSetup = _ref4 => { let { clientId, blockName, filterPatternsFn, startBlankComponent, onBlockPatternSelect } = _ref4; const [viewMode, setViewMode] = useState(VIEWMODES.carousel); const [activeSlide, setActiveSlide] = useState(0); const [showBlank, setShowBlank] = useState(false); const { replaceBlock } = useDispatch(blockEditorStore); const patterns = usePatternsSetup(clientId, blockName, filterPatternsFn); if (!(patterns !== null && patterns !== void 0 && patterns.length) || showBlank) { return startBlankComponent; } const onBlockPatternSelectDefault = blocks => { const clonedBlocks = blocks.map(block => cloneBlock(block)); replaceBlock(clientId, clonedBlocks); }; const onPatternSelectCallback = onBlockPatternSelect || onBlockPatternSelectDefault; return createElement("div", { className: `block-editor-block-pattern-setup view-mode-${viewMode}` }, createElement(SetupToolbar, { viewMode: viewMode, setViewMode: setViewMode, activeSlide: activeSlide, totalSlides: patterns.length, handleNext: () => { setActiveSlide(active => active + 1); }, handlePrevious: () => { setActiveSlide(active => active - 1); }, onBlockPatternSelect: () => { onPatternSelectCallback(patterns[activeSlide].blocks); }, onStartBlank: () => { setShowBlank(true); } }), createElement(SetupContent, { viewMode: viewMode, activeSlide: activeSlide, patterns: patterns, onBlockPatternSelect: onPatternSelectCallback })); }; export default BlockPatternSetup; //# sourceMappingURL=index.js.map