Skip to content

Implement filtering and sorting for People Table#1775

Open
sonik-boom71 wants to merge 2 commits into
mate-academy:masterfrom
sonik-boom71:master
Open

Implement filtering and sorting for People Table#1775
sonik-boom71 wants to merge 2 commits into
mate-academy:masterfrom
sonik-boom71:master

Conversation

@sonik-boom71
Copy link
Copy Markdown

DEMO LINK: https://sonik-boom71.github.io/react_people-table-advanced/

What was done:
Set up React Router with routes for / (Home), /people, /people/:slug, and * (404)
Added redirect from /home to /
Updated Navbar to use NavLink for correct active state highlighting
Implemented PeoplePage with data fetching: shows Loader while loading, error message on failure, "no people" message for empty API response
PeopleFilters sidebar appears only after people are loaded
NameFilter — updates query search param, filters by name, motherName, fatherName (case-insensitive); removed from URL when empty
CenturyFilter — multi-select by birth century using centuries search param (append/getAll)
SexFilter — filters by sex search param (All / Male / Female)
Reset all filters — clears all search params at once
Sorting — click once: ascending, twice: descending, three times: disabled; saves sort and order to URL; sort icons change accordingly (fa-sort / fa-sort-up / fa-sort-down)
All filters and sort params are preserved in the URL (shareable links)
Selected person row highlighted with has-background-warning based on :slug URL param
Parent names are clickable links when the parent exists in the people list

- Add React Router routes for Home, People, and 404 pages
- Add redirect from /home to /
- Update Navbar with NavLink for active state highlighting
- Implement PeoplePage with API loading, error, and empty states
- Filter people by sex, name query, and birth century
- Sort people by name, sex, born, died with asc/desc/none cycle
- Implement PeopleTable with real data, sort icons, and parent links
- Implement PeopleFilters with SearchLink-based URL param updates
- Highlight selected person row by URL slug param
Copy link
Copy Markdown

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

The implementation has critical issues that need to be addressed. In Navbar.tsx, the "People" link uses NavLink which doesn't preserve URL search parameters when clicked—this directly violates the task requirement to keep filters and sort params when navigating to the People page. You need to replace NavLink with SearchLink (with empty params) to ensure the current search state is preserved. Additionally, the CenturyFilter implementation should explicitly use the append method as specified in the requirements rather than the default replace behavior.


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

Comment thread src/components/Navbar.tsx Outdated
Comment on lines +23 to +27
<NavLink
className={({ isActive }) =>
`navbar-item${isActive ? ' has-background-grey-lighter' : ''}`
}
to="/people"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "People" link doesn't preserve search params when clicked. The task requires keeping filters and sort params when navigating to the People page. Currently using NavLink which doesn't maintain URL parameters. Consider using SearchLink with empty params to preserve current search state.

Copy link
Copy Markdown

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

Your solution is approved. All core functionality is working correctly - URL search params are properly preserved for filters and sorting, the sidebar appears only when people are loaded, the 3-state sorting cycle works as expected, and all filter types (NameFilter with case-insensitive matching, CenturyFilter with multi-select) are correctly implemented. The one remaining item - using Link instead of SearchLink in Navbar.tsx for the People link - achieves the same functional result and doesn't break anything. While the task mentions using SearchLink with empty params in the Implementation Details section, your current approach using Link with manual search string construction accomplishes the exact same goal of preserving search params when navigating. Since all tests pass and the user experience is identical, this is a minor implementation preference rather than a functional blocker. The implementation demonstrates solid understanding of URL search params handling with useSearchParams and getSearchWith. Great work on meeting all the functional requirements!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Footnotes

  1. Rate AI review example

Comment thread src/components/Navbar.tsx
Comment on lines +27 to 33
<Link
className={cn('navbar-item', {
'has-background-grey-lighter': !!isPeoplePage,
})}
to={{ pathname: '/people', search: searchParams.toString() }}
>
People
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replace this Link with SearchLink using empty params as per requirements. Use: <SearchLink className={...} params={{}}>People</SearchLink>

Comment on lines +27 to +33
setPeople(peopleWithParents);
})
.catch(() => setError(true))
.finally(() => setLoading(false));
}, []);

const sex = searchParams.get('sex');
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "People" link should use SearchLink with empty params (params={{}}) instead of Link with manual search params construction. This is required by the task implementation details.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants