| 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, createElement, useRef, useEffect } from '@wordpress/element'
import { __ } from 'ct-i18n'
import { TextControl, ToolbarGroup, ToolbarButton } from '@wordpress/components'
import { dispatch, useSelect, useDispatch } from '@wordpress/data'
import {
InspectorControls,
useBlockProps,
BlockControls,
withColors,
useInnerBlocksProps,
store as blockEditorStore,
__experimentalUseBorderProps as useBorderProps,
} from '@wordpress/block-editor'
import Preview from './Preview'
import ColorsPanel from '../../components/ColorsPanel'
import { OptionsPanel, mountFlexy } from 'blocksy-options'
import { PanelBody } from '@wordpress/components'
import { useUniqueId } from '../../hooks/use-unique-id'
import PostsPlaceholder from './edit/PostsPlaceholder'
import PostsInspectorControls from './edit/PostsInspectorControls'
import PatternSelectionModal from './edit/PatternSelectionModal'
import { usePostTypes } from './edit/utils/utils'
const Edit = ({
clientId,
className,
attributes,
setAttributes,
context,
}) => {
const innerBlocksProps = useInnerBlocksProps({}, {})
const hasInnerBlocks = useSelect(
(select) => !!select(blockEditorStore).getBlocks(clientId).length,
[clientId]
)
const isOnboarding = !hasInnerBlocks && attributes.design !== 'default'
const { postTypesSelectOptions } = usePostTypes({
hasPages: hasInnerBlocks,
})
const { uniqueId, props: wrapperProps } = useUniqueId({
attributes,
setAttributes,
clientId,
blockType: 'blocksy/query',
})
const { postId, postType } = context
const navRef = useRef()
const [flexyInstance, setFlexyInstance] = useState(null)
const borderProps = useBorderProps(attributes)
const blockProps = useBlockProps({
ref: navRef,
className,
style: {
...borderProps.style,
},
})
const [isPatternSelectionModalOpen, setIsPatternSelectionModalOpen] =
useState(false)
return (
<>
{isPatternSelectionModalOpen && (
<PatternSelectionModal
clientId={clientId}
attributes={attributes}
setIsPatternSelectionModalOpen={
setIsPatternSelectionModalOpen
}
postType={attributes.post_type}
/>
)}
{!isOnboarding ? (
<div {...blockProps} {...wrapperProps}>
{attributes.design === 'default' && (
<Preview
uniqueId={uniqueId}
attributes={attributes}
postId={postId}
/>
)}
{hasInnerBlocks && <div {...innerBlocksProps} />}
</div>
) : (
<div {...blockProps} {...wrapperProps}>
<PostsPlaceholder
setIsPatternSelectionModalOpen={
setIsPatternSelectionModalOpen
}
attributes={attributes}
setAttributes={setAttributes}
clientId={clientId}
/>
</div>
)}
<BlockControls>
<ToolbarGroup>
<ToolbarButton
className="components-toolbar__control"
icon="layout"
label={__('Reset layout', 'blocksy-companion')}
disabled={isOnboarding}
onClick={() => {
if (hasInnerBlocks) {
dispatch(
'core/block-editor'
).replaceInnerBlocks(clientId, [], false)
} else {
dispatch(
'core/block-editor'
).updateBlockAttributes(clientId, {
design: '',
})
}
}}
/>
</ToolbarGroup>
</BlockControls>
{!isOnboarding && (
<>
<InspectorControls>
<PanelBody>
<OptionsPanel
purpose="gutenberg"
onChange={(optionId, optionValue) => {
setAttributes({
[optionId]: optionValue,
...(optionId === 'post_type'
? {
include_term_ids: {},
exclude_term_ids: {},
include_post_ids: {
ids: [],
current_post: false,
},
exclude_post_ids: {
ids: [],
current_post: false,
},
}
: {}),
})
}}
options={{
post_type: {
type: 'ct-select',
label: __(
'Post Type',
'blocksy-companion'
),
value: '',
defaultToFirstItem: false,
choices: postTypesSelectOptions,
purpose: 'default',
},
limit: {
type: 'ct-number',
label: __('Limit', 'blocksy-companion'),
value: '',
min: 1,
max: 100,
},
has_slideshow: {
type: 'ct-switch',
label: __(
'Slideshow',
'blocksy-companion'
),
value: '',
},
has_slideshow_condition: {
type: 'ct-condition',
condition: { has_slideshow: 'yes' },
options: {
has_slideshow_arrows: {
type: 'ct-switch',
label: __(
'Arrows',
'blocksy-companion'
),
value: '',
},
has_slideshow_autoplay: {
type: 'ct-switch',
label: __(
'Autoplay',
'blocksy-companion'
),
value: '',
},
has_slideshow_autoplay_condition: {
type: 'ct-condition',
condition: {
has_slideshow_autoplay:
'yes',
},
options: {
has_slideshow_autoplay_speed:
{
type: 'ct-number',
label: __(
'Autoplay Speed',
'blocksy-companion'
),
value: '',
min: 1,
max: 100,
},
},
},
},
},
has_pagination_condition: {
type: 'ct-condition',
condition: { has_slideshow: 'no' },
options: {
has_pagination: {
type: 'ct-switch',
label: __(
'Pagination',
'blocksy-companion'
),
value: '',
},
},
},
}}
value={attributes}
hasRevertButton={false}
/>
</PanelBody>
</InspectorControls>
<PostsInspectorControls
attributes={attributes}
setAttributes={setAttributes}
context={context}
/>
</>
)}
<InspectorControls group="advanced">
<TextControl
__nextHasNoMarginBottom
autoComplete="off"
label={__('Block ID', 'blocksy-companion')}
value={uniqueId}
onChange={(nextValue) => {}}
onFocus={(e) => {
e.target.select()
}}
help={__(
'Please look at the documentation for more information on why this is useful.',
'blocksy-companion'
)}
/>
</InspectorControls>
</>
)
}
export default Edit