Skip to content

Reader Spaces: stepped create wizard + Feeds/Topics reorganization - #112470

Merged
gabrielcaires merged 7 commits into
trunkfrom
update/reader-RSM-4651
Jul 9, 2026
Merged

Reader Spaces: stepped create wizard + Feeds/Topics reorganization#112470
gabrielcaires merged 7 commits into
trunkfrom
update/reader-RSM-4651

Conversation

@gabrielcaires

Copy link
Copy Markdown
Contributor

Part of RSM-4651

Proposed Changes

  • Turn space creation into a guided multi-step wizard — Identity → Layout → Feeds → Topics — with clear Back / Next / Create navigation and a step indicator, so the options behind the former tabs aren't skipped. Editing a space keeps the tabbed layout for direct access to any section.
  • Reorganize the shared modal into four sections: Identity (name, icon, colors), Layout, Feeds (subscription picker), and Topics (tags + languages), each with a short description of how it's used.
  • Rename the user-facing "Sources" wording to "Feeds" across the modal (tab label, footer summary, edit subtitle) and the feed empty state ("Add feeds to get started"). Internal data/analytics identifiers are unchanged.
  • Add and update unit tests for the wizard flow, the section reorganization, and the renamed copy.

Why are these changes being made?

In the create-space modal the extra options behind the Layout and Feeds tabs were easy to overlook — users saw the tabs but skipped them, or expected Create to advance to the next tab. Walking through each section in sequence makes every option visible before the space is created, while editing keeps the faster tabbed access.

Testing Instructions

Scenario 1 - Create a space with the wizard:

  • Go to /reader and start the "Add a space" flow from the sidebar
  • Check you move through Identity → Layout → Feeds → Topics with Back / Next and a step indicator, and that the Create button appears only on the final Topics step

Scenario 2 - Name is required to advance:

  • Start the create wizard on the Identity step
  • Check that Next stays disabled until a valid space name is entered, and shows a "Name is required" error when cleared

Scenario 3 - Editing keeps the tabs:

  • Open an existing space and choose Customize
  • Check the modal shows tabs Identity / Layout / Feeds / Topics / Delete, with tags and languages together under Topics

Scenario 4 - Empty state wording:

  • Open a Reader Space that has no feeds at /reader/spaces/<id>
  • Check the empty state reads "Add feeds to get started" with an Add feeds button that opens the Customize modal on the Feeds tab

Pre-merge Checklist

  • Has the general commit checklist been followed? (PCYsg-hS-p2)
  • Have you written new tests for your changes?
  • Have you tested the feature in Simple (P9HQHe-k8-p2), Atomic (P9HQHe-jW-p2), and self-hosted Jetpack sites (PCYsg-g6b-p2)?
  • Have you checked for TypeScript, React or other console errors?
  • For UI changes, have you tested the affected components in dark mode?
  • Have you tested accessibility for your changes? Ensure the feature remains usable with various user agents (e.g., browsers), interfaces (e.g., keyboard navigation), and assistive technologies (e.g., screen readers) (PCYsg-S3g-p2).
  • Have you used memoizing on expensive computations? More info in Memoizing with create-selector and Using memoizing selectors and Our Approach to Data
  • Have we added the "[Status] String Freeze" label as soon as any new strings were ready for translation (p4TIVU-5Jq-p2)?
    • For UI changes, have we tested the change in various languages (for example, ES, PT, FR, or DE)? The length of text and words vary significantly between languages.
  • For changes affecting Jetpack: Have we added the "[Status] Needs Privacy Updates" label if this pull request changes what data or activity we track or use (p4TIVU-aUh-p2)?

@gabrielcaires
gabrielcaires requested a review from Copilot July 9, 2026 12:38
@matticbot matticbot added the [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. label Jul 9, 2026
@matticbot

matticbot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Here is how your PR affects size of JS and CSS bundles shipped to the user's browser:

Async-loaded Components (~443 bytes added 📈 [gzipped])

Details
name                                   parsed_size           gzip_size
async-load-calypso-reader-sidebar          +1870 B  (+0.8%)     +443 B  (+0.7%)
async-load-calypso-reader-spaces-view      +1866 B  (+3.6%)     +443 B  (+2.8%)

React components that are loaded lazily, when a certain part of UI is displayed for the first time.

Legend

What is parsed and gzip size?

Parsed Size: Uncompressed size of the JS and CSS files. This much code needs to be parsed and stored in memory.
Gzip Size: Compressed size of the JS and CSS files. This much data needs to be downloaded over network.

Generated by performance advisor bot at iscalypsofastyet.com.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

Looks like one of the E2E tests has failed.

You can fix them following these steps:

  1. Check out this branch locally:
    gh pr checkout 112470
  2. Start Claude Code in the repo:
    claude
  3. Run the /fix-e2e-tests skill, passing this PR number:
    /fix-e2e-tests 112470
    

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR updates Reader Spaces terminology from “Sources” to “Feeds” and expands the Customize/Create Space UI by introducing a dedicated “Topics” section (tags + languages), including a guided step-by-step wizard flow for space creation.

Changes:

  • Rename “Sources” UI copy/tests to “Feeds” across the Spaces feed empty states and modals.
  • Add a new Topics tab (tags + languages) to the Customize modal and cover it with unit tests.
  • Replace the tab-strip with a step-based wizard during space creation, including a step indicator and updated create-flow tests.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
client/reader/spaces/test/view.test.tsx Updates test expectations to “Feeds” tab/CTA wording.
client/reader/spaces/feed/test/index.test.tsx Updates feed empty-state copy and CTA labels from “sources” to “feeds”.
client/reader/spaces/feed/components/states.tsx Renames user-facing empty-state strings to “Add feeds…”.
client/reader/spaces/customize-modal/topics-tab.tsx Adds new Topics tab UI for tags + languages token fields.
client/reader/spaces/customize-modal/test/topics-tab.test.tsx Adds tests covering Topics tab rendering and change callbacks.
client/reader/spaces/customize-modal/test/index.test.tsx Updates Customize modal tab coverage to include Feeds + Topics.
client/reader/spaces/customize-modal/style.scss Adds wizard step styling and removes old sources description style.
client/reader/spaces/customize-modal/sources-tab.tsx Updates helper text and switches to shared help class.
client/reader/spaces/customize-modal/index.tsx Adds Topics tab and implements create-mode step wizard + footer controls.
client/reader/spaces/customize-modal/identity-tab.tsx Removes tags/languages controls (moved to Topics tab).
client/reader/spaces/create-modal/test/index.test.tsx Updates create-flow tests for the new wizard navigation and Topics step.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +450 to +453
<div className="customize-space-modal__step">
<h2 className="customize-space-modal__step-heading">{ currentStep.title }</h2>
<div className="customize-space-modal__panel">{ renderTab( currentStep.name ) }</div>
</div>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked this against the current code: ModalTab declares name: CustomizeTab, and baseTabs is typed as ModalTab[], so currentStep.name is already a CustomizeTab. No cast or type change is needed here.

Comment on lines +9 to +10
function setup( overrides: Partial< React.ComponentProps< typeof TopicsTab > > = {} ) {
const props: React.ComponentProps< typeof TopicsTab > = {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in ad4a7db245b by importing ComponentProps from react explicitly and using that instead of the React.ComponentProps namespace.

Comment on lines 61 to 64
{ onAddSources && (
<Button variant="primary" onClick={ onAddSources }>
{ translate( 'Add sources' ) }
{ translate( 'Add feeds' ) }
</Button>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping this internal prop as onAddSources intentionally. The Reader Spaces data model still uses sources internally (ReadSpace.sources, wire follows mapped to sources), while the user-facing UI copy now says “Feeds”. The local AGENTS.md now documents that split so future changes preserve the distinction.

gabrielcaires and others added 2 commits July 9, 2026 14:17
Turn space creation into a guided multi-step wizard (Identity → Layout →
Feeds → Topics) with Back/Next/Create navigation and a step indicator, so
the options behind the former tabs aren't missed. Editing keeps the tabbed
layout. Reorganize the shared modal into Identity, Layout, Feeds, and Topics
(tags + languages) sections, add per-section descriptions, and rename the
user-facing "Sources" wording to "Feeds" across the modal and the feed empty
state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@gabrielcaires
gabrielcaires force-pushed the update/reader-RSM-4651 branch from e02618d to 2df9e0c Compare July 9, 2026 13:18
@gabrielcaires
gabrielcaires marked this pull request as ready for review July 9, 2026 13:40
@gabrielcaires
gabrielcaires requested a review from a team as a code owner July 9, 2026 13:40
@gabrielcaires
gabrielcaires enabled auto-merge July 9, 2026 13:40
@gabrielcaires
gabrielcaires added this pull request to the merge queue Jul 9, 2026
Merged via the queue into trunk with commit 2794fcd Jul 9, 2026
10 checks passed
@gabrielcaires
gabrielcaires deleted the update/reader-RSM-4651 branch July 9, 2026 17:17
@github-actions github-actions Bot removed the [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. label Jul 9, 2026
@a8ci18n

a8ci18n commented Jul 9, 2026

Copy link
Copy Markdown

This Pull Request is now available for translation here: https://translate.wordpress.com/deliverables/34257290

Some locales (Hebrew) have been temporarily machine-translated due to translator availability. All other translations are usually ready within a few days. Untranslated and machine-translated strings will be sent for translation next Monday and are expected to be completed by the following Friday.

Hi @gabrielcaires, could you please edit the description of this PR and add a screenshot for our translators? Ideally it'd include all of the following strings:

  • Pick the subscriptions whose posts make up this space’s main feed.
  • Besides posts from the feeds you follow, this space can show posts that match these tags, in the languages you choose.
  • Add feeds to get started
  • Add feeds

Thank you in advance!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants