feat: add bounty page search bar#1329
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a debounced search input to the /bounties page that filters loaded bounties by title, description, category, org/repo, and skills, with a clear button and search-aware empty-state messaging. Also introduces shared lib/utils.ts and lib/animations.ts modules that several existing components already import.
Changes:
- Add
Search/clear UI and 250ms debounced query state toBountyGrid, with client-side filtering via a newbountyMatchesQueryhelper. - Update the empty-state copy to be search-aware while keeping existing skill/status filter behavior.
- Add
frontend/src/lib/utils.ts(LANG_COLORS,formatCurrency,timeAgo,timeLeft) andfrontend/src/lib/animations.ts(framer-motion variants) consumed by bounty/home/profile/leaderboard components.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| frontend/src/components/bounty/BountyGrid.tsx | Adds debounced search input, clear button, client-side filtering, and search-aware empty state. |
| frontend/src/lib/utils.ts | New shared utilities (LANG_COLORS, formatCurrency, timeAgo, timeLeft) referenced by existing components. |
| frontend/src/lib/animations.ts | New shared framer-motion Variants used across pages and components. |
| const filteredBounties = useMemo( | ||
| () => allBounties.filter((bounty) => bountyMatchesQuery(bounty, debouncedSearch)), | ||
| [allBounties, debouncedSearch] | ||
| ); |
|
Follow-up update: addressed the Copilot search-scope concern in |
Summary
Closes #823
Test Plan
Notes