import { createElement, useContext } from '@wordpress/element' import { getOptionIdFor } from './BuilderRoot' import cls from 'classnames' import Sortable from './Sortable' import { DragDropContext } from './BuilderRoot' export const DraggableItem = ({ item, index, panelType, onRemove, renderItem, className }) => { const itemData = ct_customizer_localizations.header_builder_data[ panelType ].find(({ id }) => id === item) if (renderItem) { return renderItem({ item, itemData }) } return (
wp.customize .section(`${getOptionIdFor(panelType, item)}_panel`) .expand() }> {itemData.config.name}
) } const DraggableItems = ({ items, draggableId, hasPointers = true, className, tagName = 'div', direction = 'horizontal', group = 'header_sortables', options = {}, propsForItem = item => ({}), ...props }) => { const { isDragging, setIsDragging, onChange, setList } = useContext( DragDropContext ) return ( { setIsDragging(false) document.body.classList.remove('ct-builder-dragging') ;[...document.querySelectorAll('.ct-panel-builder .ct-is-over')].map( el => el.classList.remove('ct-is-over') ) }, onMove: (event, originalEvent) => { if (event.from.closest('#ct-option-header-builder-items')) { Promise.resolve().then(() => [ ...event.from.querySelectorAll( `[data-id="${event.dragged.dataset.id}"]` ) ].map(el => { el.classList.remove('ct-builder-item') el.classList.add('ct-item-in-builder') }) ) } ;[...document.querySelectorAll('.ct-panel-builder .ct-is-over')].map( el => el.classList.remove('ct-is-over') ) if (event.to) { event.to.classList.add('ct-is-over') } }, ...options }} onChange={(order, sortable, evt) => { onChange({ id: draggableId, value: order.filter(i => i !== '__pointer__' && i !== '__filler__') }) }} tag={tagName} className={cls('ct-builder-items', className)} {...props}> {['end', 'start-middle'].indexOf(draggableId.split(':')[1]) > -1 && (
)} {hasPointers && isDragging && (
)} {items.map((item, index) => ( setList({ [draggableId]: items.filter(id => id !== item), 'available-items': null }) } {...propsForItem(item)} /> ))}
) } export default DraggableItems