Backup: add Jetpack footer to the WP.com page#109886
Open
Conversation
Wires the simplified `JetpackFooter` component (introduced in #109765) into the Backup page entry point, gated on the existing `isWpcom` variable so it only renders on the WP.com (Calypso) variant — Jetpack Cloud and A8C-for-Agencies have their own chrome and don't get a duplicate footer. Pattern matches Podcasting (`client/my-sites/site-settings/podcasting-details/index.jsx`) which uses the same `<Page>` from `@wordpress/admin-ui` and renders `<JetpackFooter />` after `</Page>` but inside `<Main>`. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Jetpack Cloud Live (direct link)
Automattic for Agencies Live (direct link)
Dashboard Live (dotcom) (direct link)
|
Contributor
|
This PR modifies the release build for the following Calypso Apps: For info about this notification, see here: PCYsg-OT6-p2
To test WordPress.com changes, run |
vianasw
added a commit
that referenced
this pull request
Apr 8, 2026
Wires the simplified `JetpackFooter` component (introduced in #109765) into the Scan page entry point, gated on the existing `isWpcom` variable so it only renders on the WP.com (Calypso) variant — Jetpack Cloud and A8C-for-Agencies have their own chrome and don't get a duplicate footer. Pattern matches Backup (#109886) and Podcasting from #109765: render `<JetpackFooter />` after the `<Page>`/fragment branch but inside `<Main>`, with the same `isWpcom` gate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9 tasks
The original commit only covered the happy-path BackupPage from
main.jsx. Investigation against /backup/<simple-site> revealed three
additional WP.com render paths reachable through the upsell middleware
chain in client/my-sites/backup/index.js that were missing a footer:
1. wpcom-backup-upsell.tsx (WPCOMUpsellPage) — reached via the
showUpsellIfNoBackup / showUpsellIfNoBackupRestoreFeature middlewares
when the site has no backup product or feature.
2. wpcom-upsell.tsx (WPCOMUpsellPage) — reached via WPCOMBusinessAT on
Business-plan WP.com sites that lack WPCOM_FEATURES_BACKUPS_SELF_SERVE.
3. client/components/jetpack/wpcom-business-at/index.tsx — the shared
Atomic-transfer component, gated on \`! isJetpackCloud()\` because the
same component is also rendered by Jetpack Cloud paths. Both <Main>
branches (featuresNotLoaded placeholder and transfer CTA) get a footer.
Both wpcom-{backup-,}upsell.tsx are wpcom-only by construction (Jetpack
Cloud uses a separate backup-upsell component) so no isJetpackCloud()
gate is needed there.
Verified on willstestdotblog.wordpress.com (Simple, upsell path) and
curlingforbeginners9.wpcomstaging.com (Atomic with backup, no regression
on the main.jsx path — single footer, not duplicated).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
vianasw
added a commit
that referenced
this pull request
Apr 8, 2026
The original commit only covered the happy-path ScanPage from main.tsx. Investigation against /scan/<simple-site> revealed three additional WP.com render paths reachable through the Scan controller middleware chain (client/my-sites/scan/index.js) that were missing a footer: 1. wpcom-scan-upsell.tsx (WPCOMScanUpsellPage) — reached via the showUpsellIfNoScan / showUpsellIfNoScanSelfServeFeature middlewares (and also for the no_connected_jetpack / vp_active / multisite reasons). Renders one of several PromoCard variants based on the reason prop. File is wpcom-only by construction — the scan controller gates between this and ScanUpsellPage (the Jetpack Cloud variant) at isJetpackCloud() || isA8CForAgencies(), so no gate is needed inside the file itself. 2. wpcom-upsell.tsx (WPCOMScanUpsellPage — same export name, simpler component) — reached via ScanAtomicTransferWrapper in wpcom-atomic-transfer.tsx when ! hasScanFeature. Same wpcom-only construction. 3. wpcom-atomic-transfer.tsx (ScanLoadingPlaceholder) — the loading state rendered by ScanAtomicTransferWrapper while site features or scan data are still loading. Scan-specific local component (not shared infrastructure), reachable only for non-Jetpack-Cloud sites (wpcomJetpackScanAtomicTransfer short-circuits on isJetpackCloud() || isA8CForAgencies() at the middleware level). The inner atomic-transfer CTA path routes through the shared <WPCOMBusinessAT /> component from client/components/jetpack/wpcom-business-at/index.tsx. That component was footered separately in HEADER-008's sibling PR #109886 and will reach this branch via trunk once that PR merges. Verified on willstestdotblog.wordpress.com (Simple, no scan feature → upsell render path via wpcom-atomic-transfer.tsx → wpcom-upsell.tsx) at mobile viewport (390×844): footer present, single instance, no layout issues. Verified the main.tsx happy path still works on curlingforbeginners9.wpcomstaging.com with footerCount === 1 (no duplication from the new additions). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of JETPACK-1504
Proposed Changes
#109765 added the simplified Jetpack footer to four Calypso pages (Activity Log, Monetize, Traffic, Podcasting) but explicitly left Backup and Scan out due to the additional complexity of testing them. This PR closes the Backup half across all WP.com render paths reachable from
/backup/<site-slug>.Files touched
client/my-sites/backup/main.jsx— happy-pathBackupPage(when the site has the backup product). Footer gated onisWpcom. Pattern matches Podcasting (client/my-sites/site-settings/podcasting-details/index.jsx) which uses the same<Page>from@wordpress/admin-uiand renders<JetpackFooter />after</Page>but inside<Main>.client/my-sites/backup/wpcom-backup-upsell.tsx—WPCOMUpsellPagereached via theshowUpsellIfNoBackup/showUpsellIfNoBackupRestoreFeaturemiddlewares (client/my-sites/backup/index.js) when the site has no backup product or feature. File is wpcom-only by construction (Jetpack Cloud uses a separatebackup-upsellcomponent) so noisJetpackCloud()gate is needed.client/my-sites/backup/wpcom-upsell.tsx—WPCOMUpsellPagereached viaWPCOMBusinessATon Business-plan WP.com sites that lackWPCOM_FEATURES_BACKUPS_SELF_SERVE. Same wpcom-only construction.client/components/jetpack/wpcom-business-at/index.tsx— shared Atomic-transfer component used by both Backup and Scan. Footer added on both<Main>branches (thefeaturesNotLoadedplaceholder and the transfer CTA), gated on! isJetpackCloud()because the same component is also rendered by Jetpack Cloud paths. Side effect: this fix also benefits Scan's atomic-transfer flow as a free side-effect, since the component is shared.Total diff is 9 added lines across 4 files (one import + one render line per file, with the wpcom-business-at file getting two render lines for its two
<Main>branches).Render path coverage
Backup's route middleware chain (
client/my-sites/backup/index.jsline 97-114) means/backup/<site>can resolve to one of several components depending on the site's plan/features and whether it's WP.com Simple, WP.com Atomic, or Jetpack Cloud:main.jsx::BackupPagewpcom-backup-upsell.tsx::WPCOMUpsellPageWPCOMBusinessATwpcom-upsell.tsx::WPCOMUpsellPagefeaturesNotLoadedwpcom-business-at/index.tsx(Main #1)wpcom-business-at/index.tsx(Main #2)UpsellSwitchupsell-switch/index.tsxbackup-upsell(separate component)Out of scope:
UpsellSwitchloading flashclient/components/jetpack/upsell-switch/index.tsxwraps its placeholder children in a<Main className="upsell-switch__loading">during the brief moment between mount and the "do we have a backup product?" data load. This<Main>has no footer, so there's a momentary flash before the loaded state takes over.This PR intentionally does not modify
UpsellSwitchbecause it's generic Jetpack-feature shared infrastructure used beyond Backup (Anti-Spam, Search, etc.). Adding a footer there would change loading-state appearance for every feature using it, which is a much broader discussion than HEADER-008's scope. Worth its own ticket if we want loading-state footers everywhere.Why are these changes being made?
#109765 added the simplified Jetpack footer to four Calypso pages (Activity Log, Monetize, Traffic, Podcasting) but explicitly left Backup and Scan out — quoting that PR's description:
This PR closes the Backup half. Scan will follow in a sibling PR (#109888). After both land, JETPACK-1504's checklist will be complete and the parent issue (JETPACK-1391) can tick its remaining Calypso boxes.
Testing Instructions
Before / After (happy path,
main.jsx)Before: Backup page ends right at the bottom of the "More backups from today" card with empty white space below it — no footer chrome.
After: Same content with a new row at the bottom showing the green Jetpack pill on the left and the "An Automattic airline" byline on the right, matching the existing footer on Activity Log / Monetize / Traffic / Podcasting.
Steps to verify
/backup/<site-slug>. Expected: footer renders at the bottom of the page./backup/<site-slug>. The page renders the upsell (WPCOMUpsellPagefrom eitherwpcom-backup-upsell.tsxorwpcom-upsell.tsxdepending on the plan/feature combo). Expected: footer renders at the bottom./backup/<site-slug>. Expected: footer renders below both the loading placeholder and the transfer CTA.isWpcom/isJetpackCloud()gates suppress the new footer for that platform.DOM check
Quickly verifiable from the browser console:
To confirm there's no duplicate footer rendering:
Local validation already performed
Desktop:
WPCOMBusinessAT→wpcom-upsell.tsx): footer present after fix; absent beforemain.jsxhappy path): footer present,footerCount === 1(no duplicate from the upsell-switchdisplayprop chain)Mobile viewport (390×844, ≤460px breakpoint):
Pre-merge Checklist
<footer role="contentinfo" aria-label="Jetpack">inherits the same a11y as the existingJetpackFooterusagesJetpackFooteritself and are already translated