import { Button } from '@wordpress/components' import { useState, useEffect, useRef } from '@wordpress/element' import { __ } from '@wordpress/i18n' import { Icon } from '@wordpress/icons' import { General } from '@extendify/api/General' import { useTestGroup } from '@extendify/hooks/useTestGroup' import { useGlobalStore } from '@extendify/state/GlobalState' import { useUserStore } from '@extendify/state/User' import { openModal } from '@extendify/util/general' import { brandMark } from './icons' import { NewImportsPopover } from './popovers/NewImportsPopover' export const MainButton = () => { const [showTooltip, setShowTooltip] = useState(false) const once = useRef(false) const buttonRef = useRef() const loggedIn = useUserStore((state) => state.apiKey.length) const hasImported = useUserStore((state) => state.imports > 0) const open = useGlobalStore((state) => state.open) const hasPendingNewImports = useUserStore( (state) => state.allowedImports === 0, ) const buttonText = useTestGroup('main-button-text', ['A', 'B', 'C']) const handleTooltipClose = async () => { await General.ping('mb-tooltip-closed') setShowTooltip(false) // If they close the tooltip, we can set the allowed imports // to -1 and when it opens it will fetch and update. Meanwhile, // -1 will be ignored by the this component. useUserStore.setState({ allowedImports: -1, }) } const libraryButtonText = () => { switch (buttonText) { // case 'A' is the default case 'B': return __('Add section', 'extendify') case 'C': return __('Add template', 'extendify') default: return __('Library', 'extendify') } } useEffect(() => { if (open) { setShowTooltip(false) once.current = true } if (!loggedIn && hasPendingNewImports && hasImported) { once.current || setShowTooltip(true) once.current = true } }, [loggedIn, hasPendingNewImports, hasImported, open]) return ( <> {showTooltip && ( { await General.ping('mb-tooltip-pressed') openModal('main-button-tooltip') }} onPressX={handleTooltipClose} /> )} ) } export const CtaButton = () => { return ( ) }