Migrate Angular 21 Conduit app to React 19 + TypeScript + Vite#30
Open
devin-ai-integration[bot] wants to merge 8 commits into
Open
Migrate Angular 21 Conduit app to React 19 + TypeScript + Vite#30devin-ai-integration[bot] wants to merge 8 commits into
devin-ai-integration[bot] wants to merge 8 commits into
Conversation
- Port all Angular services to fetch-based API services with AbortController - Convert Angular components to React functional components with hooks - Set up React Router v6 with same URL structure - Auth context with JWT token persistence via localStorage - Markdown rendering with marked + DOMPurify - 15 Vitest tests (services, utils, components) - Build passes with zero TypeScript errors - All original routes and functionality preserved Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
…tale tag - Add window.__conduit_debug__ interface for e2e tests (getToken, getAuthState, getCurrentUser) - Clear invalid JWT from localStorage on auth failure - Memoize listConfig in Home and articlesConfig in Profile to prevent duplicate fetches - Fix stale tagList in Editor handleSubmit by computing finalTagList synchronously Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
…atch - Filter AbortError in AuthContext catch handler to prevent token deletion on StrictMode double-mount - Only include password in Settings updateUser when non-empty to avoid 422 validation errors - Add .catch() handler to Editor useEffect getArticle call matching codebase pattern Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
…ndling - Reset profile/errors state on username change to prevent stale data flash - Add try/catch/finally to handleDeleteArticle to handle API failures Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
- Use authState instead of user for feed=following redirect to avoid redirecting during auth loading phase - Wrap fetch() in try/catch in api.ts to transform network errors into displayable Errors objects with 'Unable to connect' message - Re-throw AbortError as-is for signal cancellation Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
- Add currentPage state and onPageChange to Profile's ArticleList - Reset page to 1 when switching tabs or navigating between profiles - Update Errors type to accept string | string[] matching API format - Fix formatErrors to handle array values with flatMap Co-Authored-By: Lukas Burger <lukaskburger@gmail.com>
…n, consistent redirect - Add catch blocks to both FavoriteButton and FollowButton to prevent unhandled promise rejections - Change FavoriteButton redirect from /register to /login for consistency with FollowButton Co-Authored-By: Lukas Burger <lukaskburger@gmail.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.
Summary
Migrates the Angular 21 Conduit blogging platform to React 19 + TypeScript + Vite. The React app is scaffolded in
react-app/alongside the existing Angular source.What was migrated:
window.__conduit_debug__for e2emarked+dompurify), tags, favoritesTech stack: React 19 + TypeScript + Vite 8, Vitest (15/15 tests passing),
fetch+AbortControllerDevin Review fixes applied:
window.__conduit_debug__interface for e2e test compatibilitylistConfig/articlesConfigto prevent duplicate fetches.catch()handler to Editor useEffectReview & Testing Checklist for Human
cd react-app && npm install && npm run build— should compile with zero errorscd react-app && npm test— 15 tests should passwindow.__conduit_debug__exposesgetToken(),getAuthState(),getCurrentUser()Notes
react-app/and README changedsecurity-testsandtestfailures are preexisting — they run Playwright e2e against the Angular app + external RealWorld API, not the React app. Our diff only touchesreact-app/files.https://api.realworld.show/apiLink to Devin session: https://app.devin.ai/sessions/0a4a9b6d351e4f21b97c270ce626d02c
Requested by: @lburgers
Devin Review
1d31cea