| Server IP : 38.190.208.107 / Your IP : 216.73.217.105 Web Server : nginx/1.28.1 System : Linux ht2026040333114 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64 User : root ( 0) PHP Version : 8.2.28 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv,eval,assert,passthru,system,exec,shell_exec,popen,proc_open MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/wp.2/wp-content/plugins/blocksy-companion-pro/static/js/editor/blocks/query/ |
Upload File : |
import {
useState,
useEffect,
createElement,
useMemo,
RawHTML,
} from '@wordpress/element'
import { withSelect, withDispatch } from '@wordpress/data'
import { Spinner } from '@wordpress/components'
import { __ } from 'ct-i18n'
import { usePostsBlockData } from './hooks/use-posts-block-data'
import { useFlexySlider } from '../../hooks/use-flexy-slider'
import { getStylesForBlock } from '../../utils/css'
import classnames from 'classnames'
import parse, { domToReact, attributesToProps } from 'html-react-parser'
const getReactElement = ({ isSlideshow, sliderDescriptor, blockData }) => {
if (!isSlideshow) {
return <RawHTML>{blockData.customizer_preview}</RawHTML>
}
const options = {
replace: ({ attribs, children, name }, index) => {
if (
attribs &&
attribs.class &&
attribs.class.includes('flexy-container')
) {
return (
<div
{...attributesToProps(attribs)}
{...sliderDescriptor.flexyContainerAttr}>
{domToReact(children, options)}
</div>
)
}
if (
attribs &&
attribs.class &&
attribs.class.includes('flexy-arrow-')
) {
const TagName = name
const arrowDescriptor = attribs.class.includes(
'flexy-arrow-next'
)
? sliderDescriptor.arrowsDescritor.right
: sliderDescriptor.arrowsDescritor.left
return (
<TagName
{...attributesToProps(attribs)}
{...arrowDescriptor}>
{domToReact(children, options)}
</TagName>
)
}
const className =
attribs && attribs.class ? attribs.class.split(' ') : []
if (className.includes('flexy-item')) {
let maybeElementDescriptor =
sliderDescriptor.elementDescriptorForIndex(index)
if (maybeElementDescriptor) {
maybeElementDescriptor = maybeElementDescriptor.attr
}
let { className, ...props } = attributesToProps(attribs)
if (maybeElementDescriptor) {
const {
className: maybeElementClassName,
...maybeElementProps
} = maybeElementDescriptor
className = classnames(className, maybeElementClassName)
props = {
...props,
...maybeElementProps,
}
}
return (
<div className={classnames(className)} {...props}>
{domToReact(children, options)}
</div>
)
}
},
}
return parse(blockData.customizer_preview, options)
}
const Preview = ({ attributes, postId, uniqueId }) => {
const { blockData } = usePostsBlockData({
attributes,
previewedPostId: postId,
})
const isSlideshow = attributes.has_slideshow === 'yes'
const sliderDescriptor = useFlexySlider({
isSlideshow,
attributes,
toWatch: blockData ? blockData.customizer_preview : {},
})
const blockStyles = getStylesForBlock([])
if (!blockData) {
return <Spinner />
}
if (!blockData.customizer_preview) {
return <p>{__('No results found.', 'blocksy-companion')}</p>
}
return (
<>
{getReactElement({ isSlideshow, sliderDescriptor, blockData })}
{blockStyles}
</>
)
}
export default Preview