refactor: SearchBox.js is 2692 lines — extract subcomponents for maintainability

Open
#2,323 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
55/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Quiet
Tech stack
javascript, react
Domain
frontend, search

Research direction

Start by reading packages/web/src/components/search/SearchBox.js and reviewing the existing snapshot tests. Work on one suggested extraction at a time—AISection.js, SuggestionsSection.js, or SearchInput.js—using the indicated responsibilities and line ranges as boundaries. Done means the composite output remains unchanged and the snapshot tests still pass.

Written by the indexing model from the issue text.

Description

Problem

packages/web/src/components/search/SearchBox.js is 2,692 lines handling at least 6 distinct responsibilities:

  1. Search input management (value, focus, blur, keyboard)
  2. Suggestion rendering (8+ types: popular, recent, FAQ, featured, document, index, endpoint, predictive)
  3. AI Answer mode (full chat UI with session management)
  4. Voice/mic input
  5. Image search with camera
  6. URL param sync

The render method alone spans hundreds of lines with deeply nested ternaries.

Suggested Fix

Extract these as additive subcomponents (non-breaking, each can be a separate PR):

  1. AISection.js — The entire AI answer screen (~L1870-1988)
  2. SuggestionsSection.js — All 8 suggestion types rendering (~L1990-2180)
  3. SearchInput.js — The input element with mic, camera, and autofill addons

Each extraction is verifiable by existing snapshot tests since the composite output is unchanged.

Severity

High — maintainability bottleneck

Dominant language
JavaScript
Stars
4.9k
Forks
477
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from appbaseio/reactivesearch

All issues in appbaseio/reactivesearch

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.