diff --git a/src/routes/Dashboard.tsx b/src/routes/Dashboard.tsx index c153ad9..92d72ba 100644 --- a/src/routes/Dashboard.tsx +++ b/src/routes/Dashboard.tsx @@ -187,430 +187,437 @@ const Dashboard: FC = () => { initial={{ opacity: 0 }} animate={{ opacity: 1 }} transition={{ duration: 0.5 }} + className="flex h-full flex-col overflow-hidden" > - {/* Header with title and date */} -
- -

Bug Bounty Dashboard

-

- {new Date().toLocaleDateString('en-US', { - weekday: 'long', - year: 'numeric', - month: 'long', - day: 'numeric', - })} -

-
- - - - -
+
+
+ {/* Header with title and date */} +
+ +

Bug Bounty Dashboard

+

+ {new Date().toLocaleDateString('en-US', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric', + })} +

+
- {/* Top stats */} -
- - -
- - - - Active Bugs - - Current unresolved bugs - - - + + +
- - -
- - - - Squashed Bugs - - Successfully resolved bugs - - - + + - {stats.squashed} - - -
-
+
+ + + + Active Bugs + + Current unresolved bugs + + + + {stats.active} + + + + - - -
- - - - Total Bounty - - Available + paid bounties - - - + - {stats.totalBounty} - - -
-
-
+
+ + + + Squashed Bugs + + Successfully resolved bugs + + + + {stats.squashed} + + + + - {/* Middle section - stats & charts */} -
- - - - - Resolution Progress - - - -
-
- {stats.resolutionRate.toFixed(1)}% Complete - - {squashedBugs.length}/{bugs.length} Bugs - -
- + - - -
-
-
- - - - - - Bug Priority Distribution - - - - -
- - - High - - - - Medium - - - - Low - -
-
-
- - - - - - Recent Activity - - - - - - -
- - - +
+ + + + Total Bounty + + Available + paid bounties + + + + {stats.totalBounty} + + + + +
- {/* Top row stats */} -
- - - - - - Highest Bounty - - - - {highestBountyBug ? ( + {/* Middle section - stats & charts */} +
+ + + + + Resolution Progress + + +
-
- - {highestBountyBug.title} - - - ${highestBountyBug.bounty} - -
-

- {highestBountyBug.description} -

-
- - {highestBountyBug.priority} priority - - +
+ {stats.resolutionRate.toFixed(1)}% Complete + + {squashedBugs.length}/{bugs.length} Bugs +
+ + +
- ) : ( -

No bugs available

- )} - - - + + - - - - - - Bug Insights - - - -
-
- - - {Math.round(activeBountyTotal / (activeBugs.length || 1))} + + + + + Bug Priority Distribution + + + + +
+ + + High - - Avg. Bounty + + + Medium -
-
- - - {activeBugs.filter(b => b.priority === 'high').length} - - - High Priority + + + Low
-
- - - -
+
+
- {/* Tabbed bug lists */} - -
- setSearchTerm(e.target.value)} - className="md:w-1/2" - /> -
- - - - Active Bugs - - - Squashed Bugs - - + + + + + Recent Activity + + + + + + +
- -
- {filteredActiveBugs.map((bug, index) => ( - - - - - {bug.title} - + + + {/* Top row stats */} +
+ + + + + + Highest Bounty + + + + {highestBountyBug ? ( +
+
+ - ${bug.bounty} - - - {bug.priority && ( + {highestBountyBug.title} + - {bug.priority} - - )} - - -

{bug.description}

- {bug.createdAt && ( -
- - Reported: {formatDate(new Date(bug.createdAt))} -
- )} -
- - {bug.assignee && ( - - {bug.assignee} + ${highestBountyBug.bounty} - )} - - - - ))} -
- - - -
- {filteredSquashedBugs.map((bug, index) => ( - - - - - {bug.title} +
+

+ {highestBountyBug.description} +

+
- ${bug.bounty} + {highestBountyBug.priority} priority - - - -

{bug.description}

- {bug.resolvedAt && ( -
- - Resolved: {formatDate(new Date(bug.resolvedAt))} -
- )} -
- - - Squashed - - - - - ))} + +
+
+ ) : ( +

No bugs available

+ )} +
+
+
+ + + + + + + Bug Insights + + + +
+
+ + + {Math.round( + activeBountyTotal / (activeBugs.length || 1) + )} + + + Avg. Bounty + +
+
+ + + {activeBugs.filter(b => b.priority === 'high').length} + + + High Priority + +
+
+
+
+
+
+ + {/* Tabbed bug lists */} + +
+ setSearchTerm(e.target.value)} + className="md:w-1/2" + />
- - -
+ + + + Active Bugs + + + Squashed Bugs + + + + +
+ {filteredActiveBugs.map((bug, index) => ( + + + + + {bug.title} + + ${bug.bounty} + + + {bug.priority && ( + + {bug.priority} + + )} + + +

{bug.description}

+ {bug.createdAt && ( +
+ + Reported: {formatDate(new Date(bug.createdAt))} +
+ )} +
+ + {bug.assignee && ( + + {bug.assignee} + + )} + +
+
+ ))} +
+
+ + +
+ {filteredSquashedBugs.map((bug, index) => ( + + + + + {bug.title} + + ${bug.bounty} + + + + +

{bug.description}

+ {bug.resolvedAt && ( +
+ + Resolved: {formatDate(new Date(bug.resolvedAt))} +
+ )} +
+ + + Squashed + + +
+
+ ))} +
+
+
+
+
+
) }