Skip to content

Refactor questions/[id].tsx - 527-line monolith combining 8 responsibilities #164

Description

@amaydixit11

Issue

src/pages/questions/[id].tsx is 527 lines of JSX + TypeScript combining:

  • Data fetching (Firestore getDoc for problem)
  • Code execution (API call to execute code)
  • Codeforces submission verification
  • AI Hint generation and display
  • Comment section
  • Streak tracking
  • State management for 15+ useState hooks

Problems

  1. Hard to test - This component cannot be unit tested in isolation
  2. Performance - Every state change re-renders the entire page
  3. Maintainability - Adding a new feature (like hints) required touching 400+ lines of existing code

Suggestion

Extract into composable hooks and components:

  • useProblem(questionId) - Fetches and caches problem data
  • useCodeExecution(language, code, testCases) - handles run/submit
  • useAiHints(questionId) - handles hint fetching and coin deduction
  • <ProblemDescription> - Left panel with problem text
  • <CodeEditor> - IDE-like component
  • <SubmissionHistory> - Past submissions list
  • <CommentsSection> - Threaded discussion

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions