import { __, sprintf } from '@wordpress/i18n'; import { useState, useEffect } from '@wordpress/element'; import { Button, Icon } from '@wordpress/components'; import { useDispatch } from '@wordpress/data'; import { reusableBlock } from '@wordpress/icons'; import { store as noticesStore } from '@wordpress/notices'; import { TodoSettingsBlock, FeatureSettingsBlock, } from '../../../ReusableComponents/SettingsBlocks'; import { Content, ContentWrapper } from '../../../ReusableComponents/Elements'; import SettingsCard from '../../../ReusableComponents/SettingsCard'; import { TITLE_BADGE_POSITIVE } from '../../../ReusableComponents/TitleBadge'; import { CommonStoreName, TodosStoreName, CommonHooks, TodosHooks, } from '../../../../data'; import { NOTIFICATION_ERROR, NOTIFICATION_SUCCESS, } from '../../../ReusableComponents/Icons'; import SpinnerOverlay from '../../../ReusableComponents/SpinnerOverlay'; import { useFeatures } from '../../../../data/features/hooks'; import { selectTab, TAB_IDS } from '../../../../utils/tabSelector'; import { setActiveModal } from '../../../../data/common/actions'; const TabOverview = () => { const { isReady: areTodosReady } = TodosHooks.useStore(); const { isReady: merchantIsReady } = CommonHooks.useStore(); if ( ! areTodosReady || ! merchantIsReady ) { return ; } return (
); }; export default TabOverview; const OverviewTodos = () => { const [ isResetting, setIsResetting ] = useState( false ); const { todos, dismissTodo } = TodosHooks.useTodos(); const { isReady: areTodosReady } = TodosHooks.useStore(); const { setActiveModal, setActiveHighlight } = useDispatch( CommonStoreName ); const { resetDismissedTodos, setDismissedTodos } = useDispatch( TodosStoreName ); const { createSuccessNotice } = useDispatch( noticesStore ); const showTodos = areTodosReady && todos.length > 0; const resetHandler = async () => { setIsResetting( true ); try { await setDismissedTodos( [] ); await resetDismissedTodos(); createSuccessNotice( __( 'Dismissed items restored successfully.', 'woocommerce-paypal-payments' ), { icon: NOTIFICATION_SUCCESS } ); } finally { setIsResetting( false ); } }; if ( ! showTodos ) { return null; } return (

{ __( 'Complete these tasks to keep your store updated with the latest products and services.', 'woocommerce-paypal-payments' ) }

} >
); }; const OverviewFeatures = () => { const [ isRefreshing, setIsRefreshing ] = useState( false ); const { merchant } = CommonHooks.useMerchantInfo(); const { refreshFeatureStatuses } = useDispatch( CommonStoreName ); const { createSuccessNotice, createErrorNotice } = useDispatch( noticesStore ); const { features, fetchFeatures } = useFeatures(); useEffect( () => { fetchFeatures(); }, [ fetchFeatures ] ); const refreshHandler = async () => { setIsRefreshing( true ); try { const result = await refreshFeatureStatuses(); if ( result && ! result.success ) { const errorMessage = sprintf( /* translators: %s: error message */ __( 'Operation failed: %s Check WooCommerce logs for more details.', 'woocommerce-paypal-payments' ), result.message || __( 'Unknown error', 'woocommerce-paypal-payments' ) ); createErrorNotice( errorMessage, { icon: NOTIFICATION_ERROR, } ); console.error( 'Failed to refresh features:', result.message || 'Unknown error' ); } else { createSuccessNotice( __( 'Features refreshed successfully.', 'woocommerce-paypal-payments' ), { icon: NOTIFICATION_SUCCESS, } ); } } finally { setIsRefreshing( false ); } }; return ( } contentContainer={ false } > { features.map( ( { id, ...feature } ) => ( ) ) } ); }; const OverviewFeatureItem = ( { isBusy, isSandbox, title, description, buttons, enabled, notes, } ) => { const getButtonUrl = ( button ) => { if ( button.urls ) { return isSandbox ? button.urls.sandbox : button.urls.live; } return button.url; }; const visibleButtons = buttons.filter( ( button ) => ! button.showWhen || // Learn more buttons ( enabled && button.showWhen === 'enabled' ) || ( ! enabled && button.showWhen === 'disabled' ) ); const handleClick = async ( feature ) => { if ( feature.action?.type === 'tab' ) { const tabId = TAB_IDS[ feature.action.tab.toUpperCase() ]; await selectTab( tabId, feature.action.section ); } if ( feature.action?.modal ) { setActiveModal( feature.action.modal ); } }; const actionProps = { isBusy, enabled, notes, buttons: visibleButtons.map( ( button ) => ( { ...button, url: getButtonUrl( button ), onClick: () => handleClick( button ), } ) ), }; if ( enabled ) { actionProps.badge = { text: __( 'Active', 'woocommerce-paypal-payments' ), type: TITLE_BADGE_POSITIVE, }; } return ( ); }; const OverviewFeatureDescription = ( { refreshHandler, isRefreshing } ) => { const buttonLabel = isRefreshing ? __( 'Refreshing…', 'woocommerce-paypal-payments' ) : __( 'Refresh', 'woocommerce-paypal-payments' ); return ( <>

{ __( 'Enable additional features and capabilities on your WooCommerce store.', 'woocommerce-paypal-payments' ) }

{ __( 'Click Refresh to update your current features after making changes.', 'woocommerce-paypal-payments' ) }

); }; const OverviewHelp = () => { return ( ); };