diff --git a/projects/packages/search/changelog/fix-search-disabled-in-complete b/projects/packages/search/changelog/fix-search-disabled-in-complete new file mode 100644 index 000000000000..94cf1874943e --- /dev/null +++ b/projects/packages/search/changelog/fix-search-disabled-in-complete @@ -0,0 +1,5 @@ +Significance: patch +Type: fixed +Comment: Fix disabling search plan for Jetpack Complete + + diff --git a/projects/packages/search/package.json b/projects/packages/search/package.json index 4699408ed105..86f3838b52bc 100644 --- a/projects/packages/search/package.json +++ b/projects/packages/search/package.json @@ -1,6 +1,6 @@ { "name": "jetpack-search", - "version": "0.31.3", + "version": "0.31.4-alpha", "description": "Package for Jetpack Search products", "main": "main.js", "directories": { diff --git a/projects/packages/search/src/class-package.php b/projects/packages/search/src/class-package.php index 6c8a87b4f0e3..73431e2b52aa 100644 --- a/projects/packages/search/src/class-package.php +++ b/projects/packages/search/src/class-package.php @@ -11,7 +11,7 @@ * Search package general information */ class Package { - const VERSION = '0.31.3'; + const VERSION = '0.31.4-alpha'; const SLUG = 'search'; /** diff --git a/projects/packages/search/src/class-plan.php b/projects/packages/search/src/class-plan.php index edaff7c89f54..b3f05b6c2b16 100644 --- a/projects/packages/search/src/class-plan.php +++ b/projects/packages/search/src/class-plan.php @@ -102,6 +102,14 @@ public function supports_search() { return ( isset( $plan_info['supports_search'] ) && $plan_info['supports_search'] ) || $this->has_jetpack_search_product(); } + /** + * Returns true if the plan usage is exceeded and search should no longer work. + */ + public function must_upgrade() { + $plan_info = $this->get_plan_info(); + return isset( $plan_info['plan_usage']['must_upgrade'] ) && $plan_info['plan_usage']['must_upgrade']; + } + /** * Returns true if the plan only supports Classic Search. */ diff --git a/projects/packages/search/src/dashboard/class-dashboard.php b/projects/packages/search/src/dashboard/class-dashboard.php index 56726720999a..c889112916ce 100644 --- a/projects/packages/search/src/dashboard/class-dashboard.php +++ b/projects/packages/search/src/dashboard/class-dashboard.php @@ -217,7 +217,7 @@ public function check_plan_deactivate_search_module( $current_screen ) { if ( property_exists( $current_screen, 'base' ) && strpos( $current_screen->base, 'jetpack_page_' ) !== false && - ! $this->plan->supports_search() + ( ! $this->plan->supports_search() || $this->plan->must_upgrade() ) ) { $this->module_control->deactivate(); } diff --git a/projects/packages/search/src/dashboard/components/pages/dashboard-page.jsx b/projects/packages/search/src/dashboard/components/pages/dashboard-page.jsx index fc751cd6e78a..08609ec47d7d 100644 --- a/projects/packages/search/src/dashboard/components/pages/dashboard-page.jsx +++ b/projects/packages/search/src/dashboard/components/pages/dashboard-page.jsx @@ -64,7 +64,6 @@ export default function DashboardPage( { isLoading = false } ) { const isFreePlan = useSelect( select => select( STORE_ID ).isFreePlan() ); const isOverLimit = useSelect( select => select( STORE_ID ).isOverLimit() ); - const isDisabledFromOverLimitOnFreePlan = isOverLimit && isFreePlan; const updateOptions = useDispatch( STORE_ID ).updateJetpackSettings; const isInstantSearchPromotionActive = useSelect( select => @@ -146,7 +145,7 @@ export default function DashboardPage( { isLoading = false } ) { siteAdminUrl={ siteAdminUrl } updateOptions={ updateOptions } domain={ domain } - isDisabledFromOverLimit={ isDisabledFromOverLimitOnFreePlan } + isDisabledFromOverLimit={ isOverLimit } isInstantSearchPromotionActive={ isInstantSearchPromotionActive } supportsOnlyClassicSearch={ supportsOnlyClassicSearch } supportsSearch={ supportsSearch } diff --git a/projects/packages/search/src/dashboard/components/pages/sections/plan-usage-section.jsx b/projects/packages/search/src/dashboard/components/pages/sections/plan-usage-section.jsx index 95ac56a73726..81cd86501f89 100644 --- a/projects/packages/search/src/dashboard/components/pages/sections/plan-usage-section.jsx +++ b/projects/packages/search/src/dashboard/components/pages/sections/plan-usage-section.jsx @@ -150,6 +150,16 @@ const upgradeMessageRequests = apiData => { return { description: message, cta: cta }; }; +const upgradeMessageSearchDisabled = () => { + // Always returns a valid message. + const message = __( + 'You’ve exceeded the limits available for your search plan.', + 'jetpack-search-pkg' + ); + const cta = __( 'Upgrade now to restore Jetpack Search functionality.', 'jetpack-search-pkg' ); + return { description: message, cta: cta }; +}; + const upgradeMessageNoOverage = () => { // Always returns a valid message. const message = __( @@ -197,7 +207,10 @@ const upgradeMessageFromAPIData = apiData => { // apiData.currentUsage.upgrade_reason.requests // apiData.currentUsage.months_over_plan_records_limit // apiData.currentUsage.months_over_plan_requests_limit - if ( ! apiData.currentUsage.should_upgrade && ! apiData.currentUsage.must_upgrade ) { + if ( apiData.currentUsage.must_upgrade ) { + return upgradeMessageSearchDisabled(); + } + if ( ! apiData.currentUsage.should_upgrade ) { return null; } // Handle both case. @@ -220,7 +233,11 @@ const upgradeMessageFromAPIData = apiData => { }; const PlanUsageSection = ( { isFreePlan, planInfo, sendPaidPlanToCart, isPlanJustUpgraded } ) => { - const upgradeMessage = isFreePlan ? upgradeMessageFromAPIData( planInfo ) : null; + // For free plan, we want to show the CTA early. + // For complete plan, we only show the final CTA once search is already disabled. + // It's just because it was added later, and we didn't want to redesign existing CTAs at the time. + const upgradeMessage = + isFreePlan || planInfo.currentUsage.must_upgrade ? upgradeMessageFromAPIData( planInfo ) : null; const usageInfo = usageInfoFromAPIData( planInfo ); return (