Reader Spaces: stepped create wizard + Feeds/Topics reorganization - #112470
Conversation
Jetpack Cloud Live (direct link)
Automattic for Agencies Live (direct link)
Dashboard Live (dotcom) (direct link)
|
|
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]) DetailsReact 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. Generated by performance advisor bot at iscalypsofastyet.com. |
|
Looks like one of the E2E tests has failed. You can fix them following these steps:
|
There was a problem hiding this comment.
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.
| <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> |
There was a problem hiding this comment.
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.
| function setup( overrides: Partial< React.ComponentProps< typeof TopicsTab > > = {} ) { | ||
| const props: React.ComponentProps< typeof TopicsTab > = { |
There was a problem hiding this comment.
Fixed in ad4a7db245b by importing ComponentProps from react explicitly and using that instead of the React.ComponentProps namespace.
| { onAddSources && ( | ||
| <Button variant="primary" onClick={ onAddSources }> | ||
| { translate( 'Add sources' ) } | ||
| { translate( 'Add feeds' ) } | ||
| </Button> |
There was a problem hiding this comment.
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.
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>
e02618d to
2df9e0c
Compare
|
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:
Thank you in advance! |
Part of RSM-4651
Proposed Changes
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:
/readerand start the "Add a space" flow from the sidebarScenario 2 - Name is required to advance:
Scenario 3 - Editing keeps the tabs:
Scenario 4 - Empty state wording:
/reader/spaces/<id>Pre-merge Checklist