From 16afd76e8778ce4497f91ed056f1b06d12211de0 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 14:56:40 +0000 Subject: [PATCH] feat: Migrate Angular components to React (Phase 1 & 2) Phase 1 - Shared/Utility Components: - LoaderComponent: Pure presentational loading indicator - ErrorMessageComponent: Error display with skull icon - ItemComponent: Story card with settings integration Phase 2 - Core Layout Components: - FooterComponent: Static footer with GitHub link - HeaderComponent: Navigation header with React Router - SettingsComponent: Settings panel for app preferences Additional: - SettingsContext: React Context for settings state management - TypeScript interfaces for Story, Settings, Comment types - formatComment utility function - README with usage documentation Co-Authored-By: Ian Moritz --- src/react/README.md | 141 +++++++++++++++ src/react/components/core/Footer/Footer.css | 22 +++ src/react/components/core/Footer/Footer.tsx | 17 ++ src/react/components/core/Footer/index.ts | 1 + src/react/components/core/Header/Header.css | 164 ++++++++++++++++++ src/react/components/core/Header/Header.tsx | 64 +++++++ src/react/components/core/Header/index.ts | 1 + .../components/core/Settings/Settings.css | 79 +++++++++ .../components/core/Settings/Settings.tsx | 133 ++++++++++++++ src/react/components/core/Settings/index.ts | 1 + src/react/components/feeds/Item/Item.css | 69 ++++++++ src/react/components/feeds/Item/Item.tsx | 84 +++++++++ src/react/components/feeds/Item/index.ts | 1 + .../shared/ErrorMessage/ErrorMessage.css | 125 +++++++++++++ .../shared/ErrorMessage/ErrorMessage.tsx | 28 +++ .../components/shared/ErrorMessage/index.ts | 1 + src/react/components/shared/Loader/Loader.css | 109 ++++++++++++ src/react/components/shared/Loader/Loader.tsx | 12 ++ src/react/components/shared/Loader/index.ts | 1 + src/react/contexts/SettingsContext.tsx | 126 ++++++++++++++ src/react/index.ts | 16 ++ src/react/tsconfig.json | 23 +++ src/react/types/index.ts | 44 +++++ src/react/utils/formatComment.ts | 7 + 24 files changed, 1269 insertions(+) create mode 100644 src/react/README.md create mode 100644 src/react/components/core/Footer/Footer.css create mode 100644 src/react/components/core/Footer/Footer.tsx create mode 100644 src/react/components/core/Footer/index.ts create mode 100644 src/react/components/core/Header/Header.css create mode 100644 src/react/components/core/Header/Header.tsx create mode 100644 src/react/components/core/Header/index.ts create mode 100644 src/react/components/core/Settings/Settings.css create mode 100644 src/react/components/core/Settings/Settings.tsx create mode 100644 src/react/components/core/Settings/index.ts create mode 100644 src/react/components/feeds/Item/Item.css create mode 100644 src/react/components/feeds/Item/Item.tsx create mode 100644 src/react/components/feeds/Item/index.ts create mode 100644 src/react/components/shared/ErrorMessage/ErrorMessage.css create mode 100644 src/react/components/shared/ErrorMessage/ErrorMessage.tsx create mode 100644 src/react/components/shared/ErrorMessage/index.ts create mode 100644 src/react/components/shared/Loader/Loader.css create mode 100644 src/react/components/shared/Loader/Loader.tsx create mode 100644 src/react/components/shared/Loader/index.ts create mode 100644 src/react/contexts/SettingsContext.tsx create mode 100644 src/react/index.ts create mode 100644 src/react/tsconfig.json create mode 100644 src/react/types/index.ts create mode 100644 src/react/utils/formatComment.ts diff --git a/src/react/README.md b/src/react/README.md new file mode 100644 index 00000000..3b12b5b2 --- /dev/null +++ b/src/react/README.md @@ -0,0 +1,141 @@ +# React Components for Angular2-HN Migration + +This directory contains React components migrated from the Angular 9 Hacker News application as part of Phase 1 and Phase 2 of the migration plan. + +## Prerequisites + +To use these components, you'll need to install the following dependencies: + +```bash +npm install react react-dom react-router-dom +npm install -D @types/react @types/react-dom +``` + +## Directory Structure + +``` +src/react/ +├── contexts/ +│ └── SettingsContext.tsx # React Context for settings state management +├── components/ +│ ├── shared/ +│ │ ├── Loader/ # Loading indicator component +│ │ └── ErrorMessage/ # Error message display component +│ ├── feeds/ +│ │ └── Item/ # Story card component +│ └── core/ +│ ├── Footer/ # Footer component +│ ├── Header/ # Navigation header component +│ └── Settings/ # Settings panel component +├── types/ +│ └── index.ts # TypeScript interfaces +├── utils/ +│ └── formatComment.ts # Comment formatting utility +├── index.ts # Main exports +├── tsconfig.json # TypeScript configuration for React +└── README.md # This file +``` + +## Components + +### Phase 1: Shared/Utility Components + +#### Loader +A pure presentational component that displays a loading animation. + +```tsx +import { Loader } from './react'; + + +``` + +#### ErrorMessage +A presentational component that displays error messages with a skull icon. + +```tsx +import { ErrorMessage } from './react'; + + +``` + +#### Item +A story card component that displays individual Hacker News items. + +```tsx +import { Item } from './react'; +import { Story } from './react/types'; + +const story: Story = { /* ... */ }; + +``` + +### Phase 2: Core Layout Components + +#### Footer +A static footer component with a GitHub link. + +```tsx +import { Footer } from './react'; + +