Frontend Removal Plan
Overview
This document provides step-by-step instructions for removing discussion-related frontend code from the React application.
Prerequisites
- Create a git branch:
git checkout -b remove-discussions-frontend - Ensure you have a backup of the current frontend state
- Have the application running locally for testing
Phase 1: Remove Pages
1.1 Remove Channel Pages
# Remove channel-specific pages
rm frontends/open-discussions/src/pages/ChannelAboutPage.js
rm frontends/open-discussions/src/pages/ChannelAboutPage_test.js
rm frontends/open-discussions/src/pages/ChannelRouter.js
rm frontends/open-discussions/src/pages/PostDetailSidebar.js
# Remove admin pages
rm frontends/open-discussions/src/pages/admin/CreateChannelPage.js
rm frontends/open-discussions/src/pages/admin/EditChannelBasicPage.js
rm frontends/open-discussions/src/pages/admin/EditChannelBasicPage_test.js
rm frontends/open-discussions/src/pages/admin/EditChannelAppearancePage.js
rm frontends/open-discussions/src/pages/admin/EditChannelAppearancePage_test.js
rm frontends/open-discussions/src/pages/admin/EditChannelContributorsPage.js
rm frontends/open-discussions/src/pages/admin/EditChannelContributorsPage_test.js
rm frontends/open-discussions/src/pages/admin/EditChannelModeratorsPage.js
rm frontends/open-discussions/src/pages/admin/EditChannelModeratorsPage_test.js
rm frontends/open-discussions/src/pages/admin/EditChannelMembershipPage.js
rm frontends/open-discussions/src/pages/admin/ChannelModerationPage.js
rm frontends/open-discussions/src/pages/admin/ChannelModerationPage_test.js
1.2 Modify HomePage
The HomePage may need modification rather than removal if it shows a mix of content.
Action: Open frontends/open-discussions/src/pages/HomePage.js
Changes:
- Remove imports related to channels/posts
- Remove channel/post display components
- Keep search, podcast, and course sections
- Update to show learning resources instead of discussion posts
Phase 2: Remove Components
2.1 Remove Channel Components
rm frontends/open-discussions/src/components/ChannelHeader.js
rm frontends/open-discussions/src/components/ChannelBanner.js
rm frontends/open-discussions/src/components/ChannelAvatar.js
rm frontends/open-discussions/src/components/ChannelNavbar.js
rm frontends/open-discussions/src/components/widgets/ChannelWidgetList.js
2.2 Remove Post Components
rm frontends/open-discussions/src/components/CreatePostForm.js
rm frontends/open-discussions/src/components/EditPostForm.js
rm frontends/open-discussions/src/components/CompactPostDisplay.js
rm frontends/open-discussions/src/components/ExpandedPostDisplay.js
rm frontends/open-discussions/src/components/PostList.js
rm frontends/open-discussions/src/components/PostUpvoteButton.js
2.3 Remove Comment Components
rm frontends/open-discussions/src/components/Comment.js
rm frontends/open-discussions/src/components/CommentForm.js
rm frontends/open-discussions/src/components/CommentTree.js
rm frontends/open-discussions/src/components/CommentVoteForm.js
rm frontends/open-discussions/src/components/CommentReportDialog.js
rm frontends/open-discussions/src/components/CommentRemovalForm.js
2.4 Remove Admin Components
rm frontends/open-discussions/src/components/admin/CreateChannelForm.js
rm frontends/open-discussions/src/components/admin/EditChannelBasicForm.js
rm frontends/open-discussions/src/components/admin/EditChannelAppearanceForm.js
rm frontends/open-discussions/src/components/admin/EditChannelMembersForm.js
rm frontends/open-discussions/src/components/admin/EditChannelNavbar.js
2.5 Remove Test Files
# Remove all corresponding test files
find frontends/open-discussions/src/components -name "*Channel*_test.js" -delete
find frontends/open-discussions/src/components -name "*Post*_test.js" -delete
find frontends/open-discussions/src/components -name "*Comment*_test.js" -delete
Phase 3: Remove State Management
3.1 Remove Action Files
rm frontends/open-discussions/src/actions/channel.js
rm frontends/open-discussions/src/actions/post.js
rm frontends/open-discussions/src/actions/comment.js
rm frontends/open-discussions/src/actions/posts_for_channel.js
3.2 Remove Reducer Files
rm frontends/open-discussions/src/reducers/channels.js
rm frontends/open-discussions/src/reducers/posts.js
rm frontends/open-discussions/src/reducers/comments.js
rm frontends/open-discussions/src/reducers/posts_for_channel.js
rm frontends/open-discussions/src/reducers/posts_for_channel_test.js
rm frontends/open-discussions/src/reducers/channel_avatar.js
rm frontends/open-discussions/src/reducers/channel_contributors.js
rm frontends/open-discussions/src/reducers/channel_contributors_test.js
rm frontends/open-discussions/src/reducers/channel_invitations.js
rm frontends/open-discussions/src/reducers/channel_invitations_test.js
rm frontends/open-discussions/src/reducers/channel_subscribers.js
rm frontends/open-discussions/src/reducers/post_removed.js
rm frontends/open-discussions/src/reducers/post_removed_test.js
rm frontends/open-discussions/src/reducers/related_posts.js
rm frontends/open-discussions/src/reducers/user_contributions.js
rm frontends/open-discussions/src/reducers/user_contributions_test.js
3.3 Update Root Reducer
File: frontends/open-discussions/src/reducers/index.js (or wherever reducers are combined)
Action:
- Remove imports for deleted reducers
- Remove them from
combineReducers()call
// REMOVE these imports
import channels from './channels'
import posts from './posts'
import comments from './comments'
// ... etc
// REMOVE from combineReducers
const rootReducer = combineReducers({
// Remove:
// channels,
// posts,
// comments,
// ... etc
// Keep:
auth,
search,
profiles,
// ... etc
})
3.4 Update Action Index
File: frontends/open-discussions/src/actions/index.js
Action: Remove exports for deleted action files
Phase 4: Remove API Layer
4.1 Remove API Files
rm frontends/open-discussions/src/lib/api/channels.js
rm frontends/open-discussions/src/lib/api/channels_test.js
rm frontends/open-discussions/src/lib/api/posts.js
rm frontends/open-discussions/src/lib/api/posts_test.js
rm frontends/open-discussions/src/lib/api/comments.js
rm frontends/open-discussions/src/lib/api/comments_test.js
rm frontends/open-discussions/src/lib/api/frontpage.js
rm frontends/open-discussions/src/lib/api/frontpage_test.js
rm frontends/open-discussions/src/lib/api/moderation.js
rm frontends/open-discussions/src/lib/api/moderation_test.js
rm frontends/open-discussions/src/lib/api/embedly.js
rm frontends/open-discussions/src/lib/api/embedly_test.js
Phase 5: Remove Factories
rm frontends/open-discussions/src/factories/channels.js
rm frontends/open-discussions/src/factories/channels_test.js
rm frontends/open-discussions/src/factories/posts.js
rm frontends/open-discussions/src/factories/posts_test.js
rm frontends/open-discussions/src/factories/comments.js
rm frontends/open-discussions/src/factories/comments_test.js
rm frontends/open-discussions/src/factories/embedly.js
rm frontends/open-discussions/src/factories/reports.js
rm frontends/open-discussions/src/factories/reports_test.js
Phase 6: Remove Type Definitions
rm frontends/open-discussions/src/flow/discussionTypes.js
Phase 7: Remove Utility Files
7.1 Remove Reddit-Specific Utilities
rm frontends/open-discussions/src/lib/reddit_objects.js
# Remove any markdown utilities specific to discussions
7.2 Update Markdown.js
File: frontends/open-discussions/src/components/Markdown.js
Action:
- Remove import:
import { addEditedMarker } from "../lib/reddit_objects" - Remove usage of
addEditedMarker
Phase 8: Remove Hooks
rm frontends/open-discussions/src/hooks/comments.js
# Remove any other discussion-specific hooks
Phase 9: Update Routing
9.1 Update App.js
File: frontends/open-discussions/src/pages/App.js
Action: Remove routes for:
- Channel pages (
/c/:channel_name) - Post pages (
/c/:channel_name/:post_id/:slug) - Post creation (
/create_post) - Channel management (
/manage/c/...) - Channel redirect (
/channel/...)
// REMOVE these routes
<Route path="/c/:channel_name/:post_id/:slug" component={...} />
<Route path="/c/:channel_name" component={...} />
<Route path="/create_post" component={...} />
<Route path="/manage/c/edit/:channel_name/:tab" component={...} />
9.2 Update Navigation
Files: Any navigation components (header, sidebar, menu)
Action: Remove links to:
- Create channel
- Browse channels
- Create post
- Channel management
Phase 10: Update Profile Pages
File: frontends/open-discussions/src/pages/ProfilePage.js (or similar)
Action:
- Remove tabs/sections showing user posts and comments
- Keep user information, settings, and non-discussion content
- Update to show only learning resources, lists, etc.
Phase 11: Clean Up Search Integration
File: frontends/open-discussions/src/pages/SearchPage.js
Action:
- Remove post/comment result types from search filters
- Keep podcast, course, program, video result types
- Update result display components to handle only preserved types
Phase 12: Build and Test
12.1 Fix Import Errors
After deletions, run the build to find broken imports:
cd frontends/open-discussions
npm run build
Fix any import errors by:
- Removing imports of deleted files
- Removing code that depends on deleted modules
- Updating component props that referenced discussion data
12.2 Fix Tests
Run tests to find failures:
npm test
Fix by:
- Removing tests for deleted components
- Updating tests that import deleted modules
- Mocking or removing discussion-related test data
12.3 Manual Testing
Start the development server:
npm run dev
Test:
- ✅ Application loads without errors
- ✅ Search works (podcasts, courses, etc.)
- ✅ Podcast pages load and work
- ✅ Profile pages work
- ✅ No broken links or 404s for discussion pages
- ✅ Navigation doesn’t show discussion-related items
Phase 13: Cleanup Package Dependencies
13.1 Check for Unused Dependencies
Look for npm packages that were only used for discussions:
npm ls praw # If there's a JS Reddit library
npm ls marked # If only used for discussion markdown
npm ls draftjs # If only used for post editor
13.2 Remove Unused Dependencies
If any packages were only used for discussions:
npm uninstall <package-name>
Rollback Plan
If issues arise:
# Abort and return to main branch
git checkout main
git branch -D remove-discussions-frontend
# Or revert specific commits
git revert <commit-hash>
Checklist
Before moving to backend removal:
- All discussion pages removed
- All discussion components removed
- All discussion actions/reducers removed
- All discussion API calls removed
- Routes updated
- Navigation updated
- Profile pages updated
- Search pages updated
- Build succeeds without errors
- Tests pass (excluding removed tests)
- Manual testing completed
- No console errors in browser
- Unused npm packages removed
- Changes committed to git
Next Steps
Proceed to 03-backend-removal.md for backend removal instructions.