Skip to content

Enhance Tracker Page Appearance#696

Open
jeetvasoya21 wants to merge 2 commits into
GitMetricsLab:mainfrom
jeetvasoya21:Enhance-Tracker-Page-Appearance
Open

Enhance Tracker Page Appearance#696
jeetvasoya21 wants to merge 2 commits into
GitMetricsLab:mainfrom
jeetvasoya21:Enhance-Tracker-Page-Appearance

Conversation

@jeetvasoya21
Copy link
Copy Markdown
Contributor

@jeetvasoya21 jeetvasoya21 commented Jun 3, 2026

Related Issue


Description

Refreshed the Tracker page UI/UX to provide a more modern, professional, and user-friendly experience while preserving all existing functionality.

Changes made:

  • Added a visually improved header with better hierarchy and typography

  • Reorganized content into responsive card-based sections

  • Enhanced authentication and filter forms with improved layouts, labels, and placeholders

  • Improved table design with:

    • Color-coded status chips (Merged, Open, Closed)
    • Repository badges/chips
    • Row hover interactions
    • Better spacing and alignment
  • Added loading states with spinner and descriptive messaging

  • Added user-friendly empty state and error handling

  • Implemented responsive layouts for mobile, tablet, and desktop screens

  • Ensured full dark mode compatibility

  • Improved accessibility through clearer labels, helper text, and focus states

The update follows the project's TailwindCSS and Material UI design patterns and improves overall usability without changing existing behavior.


How Has This Been Tested?

  • Verified the application builds successfully without errors
  • Tested all existing Tracker page functionality to ensure no regressions
  • Tested responsive layouts across different screen sizes
  • Verified dark mode compatibility
  • Confirmed loading, error, and empty states display correctly

Screenshots (if applicable)

Add screenshots/GIFs demonstrating the updated Tracker page UI here.


Type of Change

  • Bug fix
  • New feature
  • Code style update
  • Breaking change
  • Documentation update

Summary by CodeRabbit

  • New Features

    • Enhanced filter form with improved visual organization and structured layout.
    • Added color-coded status indicators for tracked issues and pull requests.
    • Display repository information directly in table rows.
  • Style

    • Redesigned Tracker page with improved card-based layouts.
    • Updated state filter options with enhanced presentation for pull requests.

@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 3, 2026

Deploy Preview for github-spy ready!

Name Link
🔨 Latest commit b9db629
🔍 Latest deploy log https://app.netlify.com/projects/github-spy/deploys/6a2051179d71c000080ee95f
😎 Deploy Preview https://deploy-preview-696--github-spy.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 3, 2026

Review Change Stack

Warning

Review limit reached

@jeetvasoya21, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 45 minutes and 5 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 666d2daf-4913-4f64-85a2-194bd6fcb98f

📥 Commits

Reviewing files that changed from the base of the PR and between 5ea4f94 and b9db629.

📒 Files selected for processing (1)
  • src/pages/Tracker/Tracker.tsx
📝 Walkthrough

Walkthrough

This PR modernizes the Tracker page UI by introducing a Card-based layout structure, new MUI components for visual chips and grid organization, status color/label helpers, and icon-adorned filter inputs. The refactored results section now displays repository and state information via colored Chips while maintaining pagination and filter functionality.

Changes

Tracker Page UI/UX Redesign

Layer / File(s) Summary
Component imports and dependencies
src/pages/Tracker/Tracker.tsx
MUI imports expanded to include Chip, Card, CardContent, Typography, Grid, and Divider; Lucide imports updated to include Search and Filter alongside KeyIcon.
Status helpers and header/filters refactor
src/pages/Tracker/Tracker.tsx
getStatusColor and getStatusLabel helpers map issue/PR states to visual properties. Authentication and filters sections are refactored from Paper/Box into Card/CardContent blocks with Grid-based layout, icon-adorned title search input, and date range filters.
Results section and table row presentation
src/pages/Tracker/Tracker.tsx
Tabs and state filter bar restructured into a split layout using MUI Tabs and Select (with conditional "Merged" option for PRs). Table rows now display repository and state as Chip components. Loading, empty, and table states wrapped in card/table styling. Pagination repositioned within the updated layout.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

  • GitMetricsLab/github_tracker#606: Main changes to src/pages/Tracker/Tracker.tsx implement UI/UX, filtering, layout and state-chip improvements that directly address the Tracker page redesign and accessibility/filtering goals.

Possibly related PRs

  • GitMetricsLab/github_tracker#559: Both PRs modify src/pages/Tracker/Tracker.tsx's tracker results UI to change the loading experience and zero-results empty-state rendering for the table.
  • GitMetricsLab/github_tracker#255: Both PRs modify tab/state filtering UI and tracked item presentation with refactored filtering logic and Tracker table rows/state chips.
  • GitMetricsLab/github_tracker#539: Both PRs substantially redesign the Tracker page's rendering/layout for auth/error, filters/tabs, and loading/empty/table UI with Card-based styling.

Suggested labels

level:intermediate, quality:clean, type:feature, type:accessibility

Poem

🐰 A tracker page, once plain and bland,
Now blooms with Cards and Chips so grand!
With colored states and Grids so neat,
The UI refresh is now complete! 🎨✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Enhance Tracker Page Appearance' directly and clearly summarizes the main change—a UI/UX refresh of the Tracker page with improved visual design and aesthetics.
Description check ✅ Passed The description follows the template structure with all required sections (Related Issue, Description, How Has This Been Tested, Screenshots, Type of Change) and provides comprehensive details about the UI/UX improvements made.
Linked Issues check ✅ Passed The code changes comprehensively address issue #668's requirements: modernizing the visual design with card-based layouts, improved typography/hierarchy, color-coded status chips, responsive design, dark mode support, and enhanced accessibility—all while preserving existing functionality.
Out of Scope Changes check ✅ Passed All changes in the Tracker.tsx file are directly related to the PR objectives of enhancing the page appearance—updating UI components, layouts, styling, and visual elements align with issue #668's scope of UI/UX improvement.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/pages/Tracker/Tracker.tsx (1)

89-93: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Add missing dependencies to useEffect.

The effect references username and fetchData but only includes [tab, page] in the dependency array. This creates a stale closure where changes to username or fetchData won't trigger a refetch, potentially causing the UI to display outdated data or skip necessary fetches.

🔧 Proposed fix
  useEffect(() => {
    if (username) {
      fetchData(username, page + 1, ROWS_PER_PAGE);
    }
- }, [tab, page]);
+ }, [tab, page, username, fetchData]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/Tracker/Tracker.tsx` around lines 89 - 93, The useEffect that calls
fetchData references username and fetchData but only depends on [tab, page],
causing stale closures; update the dependency array to include username and
fetchData (e.g., useEffect(..., [tab, page, username, fetchData])) or
alternatively wrap fetchData in useCallback so it is stable and then include it
and username in the deps; ensure ROWS_PER_PAGE can remain a constant or is also
included if it can change.
🧹 Nitpick comments (2)
src/pages/Tracker/Tracker.tsx (2)

531-536: ⚡ Quick win

Consider displaying owner/repo for better clarity.

The repository Chip currently displays only the repo name by extracting the last URL segment. For better clarity and to avoid confusion between repos with the same name from different owners, consider displaying the full "owner/repo" format.

🎨 Proposed enhancement
                    <TableCell align="center" sx={{ py: 2 }}>
                      <Chip
-                       label={item.repository_url.split("/").slice(-1)[0]}
+                       label={item.repository_url.split("/").slice(-2).join("/")}
                        size="small"
                        variant="outlined"
                      />
                    </TableCell>

This would display "owner/repo" instead of just "repo", making it clearer which repository the item belongs to.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/Tracker/Tracker.tsx` around lines 531 - 536, The repository Chip
currently shows only the repo name by using item.repository_url.split(...);
update the label to show "owner/repo" instead: parse the owner and repo from
item.repository_url (e.g., take the last two path segments) or, if the item
already has owner/name fields, use those; replace the label expression in the
Chip inside Tracker component (the <Chip ... label=... /> usage) so it renders
`${owner}/${repo}` for clarity.

108-145: ⚡ Quick win

Consider memoizing filtered data for better performance.

The filterData function is called on every render (line 169), performing multiple array filter operations each time. For large datasets, this could impact performance. Consider using useMemo to cache the filtered results.

⚡ Proposed optimization
+ const currentFilteredData = useMemo(() => {
+   return filterData(
+     currentRawData,
+     tab === 0 ? issueFilter : prFilter
+   );
+ }, [currentRawData, tab, issueFilter, prFilter, searchTitle, selectedRepo, startDate, endDate]);
+
- const currentRawData = tab === 0 ? issues : prs;
- const currentFilteredData = filterData(currentRawData, tab === 0 ? issueFilter : prFilter);
- const totalCount = tab === 0 ? totalIssues : totalPrs;
+ const currentRawData = tab === 0 ? issues : prs;
+ const totalCount = tab === 0 ? totalIssues : totalPrs;

Also applies to: 169-169

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/Tracker/Tracker.tsx` around lines 108 - 145, filterData is being
recomputed on every render which hurts performance for large datasets; wrap the
filtered results in a useMemo so the expensive array filtering only runs when
inputs change. Replace the direct call pattern (where filterData(...) is
invoked) with a memoized value computed via useMemo that depends on the source
list plus searchTitle, selectedRepo, startDate, endDate and the current
filterType (or any other props/state used inside filterData); you can keep
filterData as a pure helper or inline its logic inside the useMemo, but ensure
the dependency array includes the unique symbols: filterData (or the source
array), searchTitle, selectedRepo, startDate, endDate and filterType. Ensure the
rest of the component reads from that memoized value instead of calling
filterData each render.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/Tracker/Tracker.tsx`:
- Around line 317-378: The filter inputs (searchTitle, selectedRepo, startDate,
endDate) only update local state but are not passed to fetchData, so server-side
filtering via the useGitHubData hook is never used; modify the component to
build a filters object from those state vars and pass it into fetchData (the
fetchData(filters) parameter used by useGitHubData) instead of relying solely on
client-side filterData, include those filter state vars in the useEffect
dependency array that calls fetchData so changes trigger a refetch, and
optionally wire an "Apply Filters" button or add debouncing to avoid excessive
API calls when typing.
- Line 239: Remove the HTML required attribute from the token input in the
Tracker component so the Personal Access Token is optional (remove "required" on
the token <input> inside Tracker.tsx). Also update any client-side form
validation or schema related to the token field (e.g., validation logic in
handleSubmit/validateToken or the form's validation rules in Tracker component)
to treat token as optional consistent with useGitHubAuth behavior.

---

Outside diff comments:
In `@src/pages/Tracker/Tracker.tsx`:
- Around line 89-93: The useEffect that calls fetchData references username and
fetchData but only depends on [tab, page], causing stale closures; update the
dependency array to include username and fetchData (e.g., useEffect(..., [tab,
page, username, fetchData])) or alternatively wrap fetchData in useCallback so
it is stable and then include it and username in the deps; ensure ROWS_PER_PAGE
can remain a constant or is also included if it can change.

---

Nitpick comments:
In `@src/pages/Tracker/Tracker.tsx`:
- Around line 531-536: The repository Chip currently shows only the repo name by
using item.repository_url.split(...); update the label to show "owner/repo"
instead: parse the owner and repo from item.repository_url (e.g., take the last
two path segments) or, if the item already has owner/name fields, use those;
replace the label expression in the Chip inside Tracker component (the <Chip ...
label=... /> usage) so it renders `${owner}/${repo}` for clarity.
- Around line 108-145: filterData is being recomputed on every render which
hurts performance for large datasets; wrap the filtered results in a useMemo so
the expensive array filtering only runs when inputs change. Replace the direct
call pattern (where filterData(...) is invoked) with a memoized value computed
via useMemo that depends on the source list plus searchTitle, selectedRepo,
startDate, endDate and the current filterType (or any other props/state used
inside filterData); you can keep filterData as a pure helper or inline its logic
inside the useMemo, but ensure the dependency array includes the unique symbols:
filterData (or the source array), searchTitle, selectedRepo, startDate, endDate
and filterType. Ensure the rest of the component reads from that memoized value
instead of calling filterData each render.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4703cc4e-d298-4e3b-a4f0-84eae7f8a736

📥 Commits

Reviewing files that changed from the base of the PR and between 53f820b and 5ea4f94.

📒 Files selected for processing (1)
  • src/pages/Tracker/Tracker.tsx

Comment thread src/pages/Tracker/Tracker.tsx Outdated
Comment thread src/pages/Tracker/Tracker.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UI/UX] Enhance Tracker Page Appearance

1 participant