import { createElement, useContext } from '@wordpress/element'
import { __ } from 'ct-i18n'
import cls from 'classnames'
import DraggableItems from './DraggableItems'
import { PanelContext } from '../../../options/components/PanelLevel'
const PrimaryPlacement = ({ placementName, bar, direction }) => {
const placement = bar.placements.find(({ id }) => id === placementName)
let placementsToRender = [placement]
if (placementName !== 'middle') {
const middle = bar.placements.find(({ id }) => id === 'middle')
if (middle && middle.items.length > 0) {
if (placementName === 'start') {
const startMiddle = bar.placements.find(
({ id }) => id === 'start-middle'
)
placementsToRender = [placement, startMiddle]
}
if (placementName === 'end') {
const endMiddle = bar.placements.find(
({ id }) => id === 'end-middle'
)
placementsToRender = [endMiddle, placement]
}
}
}
return (
{placementsToRender.map(placement => (
-1
? 'secondary'
: 'primary'
}-column`
}
draggableId={`${bar.id}:${placement.id}`}
items={placement.items}
/>
))}
)
}
const Bar = ({ bar, direction = 'horizontal' }) => {
const { panelsHelpers } = useContext(PanelContext)
return (
panelsHelpers.open(`builder_panel_${bar.id}`)}>
{
{
'top-row': __('Top Row', 'blocksy'),
'middle-row': __('Middle Row', 'blocksy'),
'bottom-row': __('Bottom Row', 'blocksy'),
offcanvas: __('Offcanvas', 'blocksy')
}[bar.id]
}
{['start', 'middle', 'end']
.filter(
placementName =>
!!bar.placements.find(
({ id }) => id === placementName
)
)
.map(placementName => (
))}
)
}
const shallowCompare = (prev, next) => {
for (let key in next) {
if (next[key] !== prev[key]) return false
}
return true
}
export function memo(Component, areEqual = shallowCompare) {
let prevProps = {}
let prevResult
return nextProps => {
if (prevResult !== undefined && areEqual(prevProps, nextProps)) {
return prevResult
}
prevProps = nextProps
prevResult = createElement(Component, Object.assign({}, nextProps))
return prevResult
}
}
const PlacementsBuilder = memo(({ view, builderValueWithView }) => {
return (
{view === 'mobile' && (
)}
{['top-row', 'middle-row', 'bottom-row'].map(bar => (
id === bar)}
key={bar}
/>
))}
)
})
export default PlacementsBuilder