Phase 4: shared and leaf components - #682
Open
devin-ai-integration[bot] wants to merge 1 commit into
Open
Conversation
…nents to React Co-Authored-By: Paul Abboud <abboudpaul112@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:
|
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
Phase 4 of the Angular → React migration (stacked on #681). Presentational components only — nothing routes yet, so
App.tsxstill renders the placeholder.Loader.tsx,ErrorMessage.tsx(messageprop),Item.tsx(itemprop),Comment.tsx(commentprop) andSettings.tsxinsrc/components/, each importing the component.scsscopied over from its Angular counterpart.Item.tsx:hasUrlbecomes an exported helper (item.url.indexOf('http') === 0, now null-safe since the API omitsurlfor Ask HN posts), settings come fromuseSettings(), andcomments_countrenders throughformatCommentCount.[ngStyle]→ inlinestyle,routerLink→<Link>.Comment.tsxrecurses oncomment.commentswithcollapseinuseState, keeps the[hidden]subtree (so collapse state of children survives) and renderscomment.contentviadangerouslySetInnerHTML; the deleted branch returns early. Each comment gets a.commentwrapper, which is what Angular's:host >>> aselector becomes inComment.scss:Settings.tsx: theme radios are generated from aTHEMESlist instead of Angular template refs (#default/#night/#amoledblack), and font size / list spacing move from(keyup)to controlledonChange, so programmatic and paste changes register too. The "Open links in a new tab" text is now inside its<label>so clicking it toggles the checkbox.Story.time_agois typedstring(it holds"2 hours ago"; the Angular model declarednumber).@testing-library/reactcoveringhasUrl, external vs internal item links,openLinkInNewTab/font-size/list-spacing application, the jobs variant, recursive rendering, collapse/expand, the deleted branch, and each settings control's persistence.src/test/setup.tsstubswindow.matchMedia, which jsdom lacks.Verification
npm run lint,npm test(32 passed) andnpm run buildpass.Remaining
Phases 5–8: page components (Feed, ItemDetails, User, Header, Footer), routing/app composition, PWA, Angular cleanup + docs.
Devin-Org: engineering
Link to Devin session: https://app.devin.ai/sessions/f5e6c49cc7f344bf80df57ffee2e7939
Requested by: @abboudp
Note
Devin errored when opening this Pull Request as abboudp.
As a fallback, Devin opened this PR as itself.
Devin Review