-
Notifications
You must be signed in to change notification settings - Fork 7
feat: implement admin category dashboard #202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- Add Category Management to AdminTreeNavigation - Create comprehensive category dashboard at /admin/category - Display node categories with counts in organized layout - Add breadcrumb navigation and proper admin layout - Integrate with existing admin dashboard structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
🎨 Chromatic Visual Testing Results
Check the visual changes and approve or request changes as needed. |
… pagination - Renamed admin category page from category.tsx to categories.tsx for consistency - Implemented server-side pagination using useListAllNodes with page/limit parameters - Updated navigation links in AdminTreeNavigation and admin index page - Added CustomPagination component with URL state management - Removed client-side pagination in favor of API-level pagination 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
🎨 Chromatic Visual Testing Results
Check the visual changes and approve or request changes as needed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements an admin category dashboard that allows administrators to view and manage node categories. The feature adds a new admin page at /admin/categories
that displays all node categories with their respective node counts in a sortable format.
Key Changes
- Added Category Management navigation link and quick action button in the admin interface
- Created a comprehensive category dashboard displaying node categories with counts
- Added internationalization support for the new feature across multiple languages
Reviewed Changes
Copilot reviewed 10 out of 11 changed files in this pull request and generated 3 comments.
File | Description |
---|---|
pages/admin/index.tsx | Added Category Management quick action button to admin dashboard |
pages/admin/categories.tsx | Created new category management page with node category overview |
components/admin/AdminTreeNavigation.tsx | Added Category Management link to admin navigation tree |
locales/*/common.json | Added translations for category management features across all supported languages |
@@ -72,6 +71,13 @@ function AdminDashboard() { | |||
<HiOutlineCollection className="h-8 w-8 mr-3" /> | |||
<span>{t('Manage All Nodes')}</span> | |||
</Link> | |||
<Link | |||
href="/admin/categories" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The href path '/admin/categories' is inconsistent with the file path 'pages/admin/categories.tsx'. This will result in a 404 error when users click the link.
href="/admin/categories" | |
href="/admin/Categories" |
Copilot uses AI. Check for mistakes.
const categoriesData = useMemo(() => { | ||
if (!nodesData?.nodes) return [] | ||
|
||
const categoryMap = new Map<string, number>() | ||
nodesData.nodes.forEach((node) => { | ||
const category = node.category || 'Uncategorized' | ||
categoryMap.set(category, (categoryMap.get(category) || 0) + 1) | ||
}) | ||
|
||
return Array.from(categoryMap.entries()) | ||
.map(([category, count]) => ({ category, count })) | ||
.sort((a, b) => b.count - a.count) | ||
}, [nodesData?.nodes]) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The category calculation processes all nodes on every page, which is inefficient. Consider fetching category data directly from the API or implementing server-side aggregation to avoid processing large datasets on the client.
const categoriesData = useMemo(() => { | |
if (!nodesData?.nodes) return [] | |
const categoryMap = new Map<string, number>() | |
nodesData.nodes.forEach((node) => { | |
const category = node.category || 'Uncategorized' | |
categoryMap.set(category, (categoryMap.get(category) || 0) + 1) | |
}) | |
return Array.from(categoryMap.entries()) | |
.map(([category, count]) => ({ category, count })) | |
.sort((a, b) => b.count - a.count) | |
}, [nodesData?.nodes]) | |
// Fetch pre-aggregated category data from the API | |
const { data: categoriesData } = useListCategoriesWithCounts() |
Copilot uses AI. Check for mistakes.
.sort((a, b) => b.count - a.count) | ||
}, [nodesData?.nodes]) | ||
|
||
const totalPages = Math.ceil((nodesData?.total || 0) / limit) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The pagination logic is incorrect. The totalPages calculation is based on total nodes, but the displayed data is categories. This will show incorrect pagination when the number of categories differs from the number of nodes.
Copilot uses AI. Check for mistakes.
Replace manual URL query handling with reusable usePage hook for cleaner pagination management. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
🎨 Chromatic Visual Testing Results
Check the visual changes and approve or request changes as needed. |
pending API for fetching:
/categories/[categoryName]/nodes
/categories node categories
Summary
Implements the admin category dashboard as requested in issue #57.
Changes Made
/admin/category
Features
Test plan
/admin/category
🤖 Generated with Claude Code