%PDF- %PDF-
Direktori : /home/dopla/www/wp-content/plugins/ml-slider/extendify-sdk/src/components/ |
Current File : /home/dopla/www/wp-content/plugins/ml-slider/extendify-sdk/src/components/ImportTemplateBlock.js |
import { useEffect, useState, useRef, memo } from '@wordpress/element' import { AuthorizationCheck, Middleware } from '../middleware' import { injectTemplateBlocks } from '../util/templateInjection' import { useUserStore } from '../state/User' import { useGlobalStore } from '../state/GlobalState' import { __, sprintf } from '@wordpress/i18n' import { Templates as TemplatesApi } from '../api/Templates' import { useInView } from 'react-intersection-observer' import { BlockPreview } from '@wordpress/block-editor' import { rawHandler } from '@wordpress/blocks' import { render } from '@wordpress/element' import ExtendifyLibrary from '../ExtendifyLibrary' import Primary from './buttons/Primary' import SplitModal from './modals/SplitModal' import { brandLogo } from '../components/icons/' const LiveBlocksMemoized = memo( ({ blocks }) => { return ( <div className="with-light-shadow relative"> <BlockPreview blocks={blocks} live={false} viewportWidth={1400} /> </div> ) }, (oldBlocks, newBlocks) => oldBlocks.clientId == newBlocks.clientId, ) const canImportMiddleware = Middleware([ 'NeedsRegistrationModal', 'hasRequiredPlugins', 'hasPluginsActivated', ]) export function ImportTemplateBlock({ template }) { const importButtonRef = useRef(null) const once = useRef(false) const canImport = useUserStore((state) => state.canImport) const setOpen = useGlobalStore((state) => state.setOpen) const blocks = rawHandler({ HTML: template.fields.code }) const [hasBeenSeen, setHasBeenSeen] = useState(false) const [onlyLoadInView, inView] = useInView() const [showModal, setShowModal] = useState(false) const focusTrapInnerBlocks = () => { if (once.current) return once.current = true Array.from( importButtonRef.current.querySelectorAll( 'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])', ), ).forEach((el) => el.setAttribute('tabIndex', '-1')) } const importTemplates = async () => { await canImportMiddleware.check(template) AuthorizationCheck(canImportMiddleware.stack).then(() => { setTimeout(() => { injectTemplateBlocks(blocks, template) .then(() => setOpen(false)) .then(() => render( <ExtendifyLibrary />, document.getElementById('extendify-root'), ), ) .then(() => canImportMiddleware.reset()) }, 100) }) } const handleKeyDown = (event) => { if (['Enter', 'Space', ' '].includes(event.key)) { event.stopPropagation() event.preventDefault() importTemplate() } } const importTemplate = () => { if (!canImport()) { setShowModal(true) return } TemplatesApi.maybeImport(template) importTemplates() } useEffect(() => { if (!hasBeenSeen && inView) { setHasBeenSeen(true) } }, [inView, hasBeenSeen, template]) return ( <> <div role="button" tabIndex="0" ref={importButtonRef} aria-label={sprintf( __('Press to import %s', 'extendify-sdk'), template?.fields?.type, )} className="mb-8 cursor-pointer button-focus" onFocus={focusTrapInnerBlocks} onClick={importTemplate} onKeyDown={handleKeyDown}> <div ref={onlyLoadInView} className="invisible absolute inset-0 pointer-events-none"></div> {hasBeenSeen && <LiveBlocksMemoized blocks={blocks} />} </div> {showModal && ( <SplitModal isOpen={showModal} onRequestClose={() => setShowModal(false)} left={ <> <div className="flex space-x-2 items-center justify-center mb-10 text-extendify-black"> {brandLogo} </div> <h3 className="text-xl md:leading-3"> {__("You're out of imports", 'extendify-sdk')} </h3> <p className="text-sm text-black"> {__( 'Sign up today and get unlimited access to our entire collection of patterns and page layouts.', 'extendify-sdk', )} </p> <div> <Primary tagName="a" target="_blank" className="m-auto mt-10" href={`https://extendify.com/pricing/?utm_source=${window.extendifySdkData.sdk_partner}&utm_medium=library&utm_campaign=no-imports-modal&utm_content=get-unlimited-imports`} rel="noreferrer"> {__( 'Get Unlimited Imports', 'extendify-sdk', )} <svg fill="none" height="24" viewBox="0 0 25 24" width="25" xmlns="http://www.w3.org/2000/svg"> <path d="m10.3949 8.7864 5.5476-.02507m0 0-.0476 5.52507m.0476-5.52507c-2.357 2.35707-5.4183 5.41827-7.68101 7.68097" stroke="currentColor" strokeWidth="1.5" /> </svg> </Primary> </div> </> } right={ <div className="space-y-2"> <div className="flex items-center space-x-2"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fillRule="evenodd" clipRule="evenodd" d="M7.49271 18.0092C6.97815 17.1176 7.28413 15.9755 8.17569 15.4609C9.06724 14.946 10.2094 15.252 10.7243 16.1435C11.2389 17.0355 10.9329 18.1772 10.0413 18.6922C9.14978 19.2071 8.00764 18.9011 7.49271 18.0092V18.0092Z" fill="currentColor" /> <path fillRule="evenodd" clipRule="evenodd" d="M16.5073 6.12747C17.0218 7.01903 16.7158 8.16117 15.8243 8.67573C14.9327 9.19066 13.7906 8.88467 13.2757 7.99312C12.7611 7.10119 13.0671 5.95942 13.9586 5.44449C14.8502 4.92956 15.9923 5.23555 16.5073 6.12747V6.12747Z" fill="currentColor" /> <path fillRule="evenodd" clipRule="evenodd" d="M4.60135 11.1355C5.11628 10.2439 6.25805 9.93793 7.14998 10.4525C8.04153 10.9674 8.34752 12.1096 7.83296 13.0011C7.31803 13.8927 6.17588 14.1987 5.28433 13.6841C4.39278 13.1692 4.08679 12.0274 4.60135 11.1355V11.1355Z" fill="currentColor" /> <path fillRule="evenodd" clipRule="evenodd" d="M19.3986 13.0011C18.8837 13.8927 17.7419 14.1987 16.85 13.6841C15.9584 13.1692 15.6525 12.027 16.167 11.1355C16.682 10.2439 17.8241 9.93793 18.7157 10.4525C19.6072 10.9674 19.9132 12.1092 19.3986 13.0011V13.0011Z" fill="currentColor" /> <path d="M9.10857 8.92594C10.1389 8.92594 10.9742 8.09066 10.9742 7.06029C10.9742 6.02992 10.1389 5.19464 9.10857 5.19464C8.0782 5.19464 7.24292 6.02992 7.24292 7.06029C7.24292 8.09066 8.0782 8.92594 9.10857 8.92594Z" fill="currentColor" /> <path d="M14.8913 18.942C15.9217 18.942 16.7569 18.1067 16.7569 17.0763C16.7569 16.046 15.9217 15.2107 14.8913 15.2107C13.8609 15.2107 13.0256 16.046 13.0256 17.0763C13.0256 18.1067 13.8609 18.942 14.8913 18.942Z" fill="currentColor" /> <path fillRule="evenodd" clipRule="evenodd" d="M10.3841 13.0011C9.86951 12.1096 10.1755 10.9674 11.067 10.4525C11.9586 9.93793 13.1007 10.2439 13.6157 11.1355C14.1302 12.0274 13.8242 13.1692 12.9327 13.6841C12.0411 14.1987 10.899 13.8927 10.3841 13.0011V13.0011Z" fill="currentColor" /> </svg> <span className="text-sm leading-none"> {__( "Access to 100's of Patterns", 'extendify-sdk', )} </span> </div> <div className="flex items-center space-x-2"> <svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> <g stroke="currentColor" strokeWidth="1.5"> <path d="m6 4.75h12c.6904 0 1.25.55964 1.25 1.25v12c0 .6904-.5596 1.25-1.25 1.25h-12c-.69036 0-1.25-.5596-1.25-1.25v-12c0-.69036.55964-1.25 1.25-1.25z" /> <path d="m9.25 19v-14" /> </g> </svg> <span className="text-sm leading-none"> {__( 'Beautiful full page layouts', 'extendify-sdk', )} </span> </div> <div className="flex items-center space-x-2"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="12" cy="12" r="7.25" stroke="currentColor" strokeWidth="1.5" /> <circle cx="12" cy="12" r="4.25" stroke="currentColor" strokeWidth="1.5" /> <circle cx="11.9999" cy="12.2" r="6" transform="rotate(-45 11.9999 12.2)" stroke="currentColor" strokeWidth="3" strokeDasharray="1.5 4" /> </svg> <span className="text-sm leading-none"> {__( 'Fast and friendly support', 'extendify-sdk', )} </span> </div> <div className="flex items-center space-x-2"> <svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> <path d="m11.7758 3.45425c.0917-.18582.3567-.18581.4484 0l2.3627 4.78731c.0364.07379.1068.12493.1882.13676l5.2831.76769c.2051.02979.287.28178.1386.42642l-3.8229 3.72637c-.0589.0575-.0858.1402-.0719.2213l.9024 5.2618c.0351.2042-.1793.36-.3627.2635l-4.7254-2.4842c-.0728-.0383-.1598-.0383-.2326 0l-4.7254 2.4842c-.18341.0965-.39776-.0593-.36274-.2635l.90247-5.2618c.01391-.0811-.01298-.1638-.0719-.2213l-3.8229-3.72637c-.14838-.14464-.0665-.39663.13855-.42642l5.28312-.76769c.08143-.01183.15182-.06297.18823-.13676z" fill="currentColor" /> </svg> <span className="text-sm leading-none"> {__('14-Day guarantee', 'extendify-sdk')} </span> </div> </div> } /> )} </> ) }