mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
317 lines
7.2 KiB
Markdown
317 lines
7.2 KiB
Markdown
# Admin Feature Components
|
|
|
|
Reusable feature components for the admin panel, built based on the ADMIN_PANEL_CONCEPT.md specification.
|
|
|
|
## Components Overview
|
|
|
|
### Layout Components
|
|
|
|
#### `AdminLayout`
|
|
Main layout component with sidebar navigation, header, and content area.
|
|
|
|
**Features:**
|
|
- Collapsible sidebar with navigation items
|
|
- Expandable menu items with children
|
|
- User menu with dropdown
|
|
- Notifications indicator
|
|
- Responsive design (mobile-friendly)
|
|
- Breadcrumbs support
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<AdminLayout title="Dashboard" breadcrumbs={[...]}>
|
|
{/* Page content */}
|
|
</AdminLayout>
|
|
```
|
|
|
|
### Data Management Components
|
|
|
|
#### `DataTable`
|
|
Enhanced data table with built-in pagination, sorting, filtering, selection, and actions.
|
|
|
|
**Features:**
|
|
- Column-based rendering
|
|
- Sortable columns
|
|
- Row selection (single/multiple)
|
|
- Bulk actions
|
|
- Search integration
|
|
- Pagination
|
|
- Loading states
|
|
- Mobile card view
|
|
- Action menus per row
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<DataTable
|
|
data={organizations}
|
|
columns={columns}
|
|
getRowId={(org) => org.id}
|
|
pagination={{ currentPage, totalPages, pageSize, totalItems, onPageChange }}
|
|
sorting={{ column, direction, onSort }}
|
|
search={{ value, onChange }}
|
|
selection={{ selectedRows, onSelectionChange }}
|
|
actions={[
|
|
{ label: 'Edit', icon: <Edit />, onClick: (org) => {} },
|
|
{ label: 'Delete', variant: 'destructive', onClick: (org) => {} },
|
|
]}
|
|
bulkActions={[
|
|
{ label: 'Delete Selected', icon: <Trash2 />, onClick: (ids) => {} },
|
|
]}
|
|
/>
|
|
```
|
|
|
|
#### `FilterBar`
|
|
Advanced filtering component with multiple filter types.
|
|
|
|
**Features:**
|
|
- Multiple filter types (select, multiselect, text, number, date, daterange)
|
|
- Active filter indicators
|
|
- Clear all filters
|
|
- Filter tags display
|
|
- Popover-based UI
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<FilterBar
|
|
filters={[
|
|
{ id: 'status', label: 'Status', type: 'select', options: [...] },
|
|
{ id: 'sector', label: 'Sector', type: 'multiselect', options: [...] },
|
|
]}
|
|
values={filterValues}
|
|
onChange={setFilterValues}
|
|
/>
|
|
```
|
|
|
|
#### `SearchAndFilter`
|
|
Combined search and filter component.
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<SearchAndFilter
|
|
search={{ value, onChange, placeholder: 'Search...' }}
|
|
filters={{ filters, values, onChange }}
|
|
/>
|
|
```
|
|
|
|
### Page Components
|
|
|
|
#### `PageHeader`
|
|
Enhanced page header with title, subtitle, breadcrumbs, and actions.
|
|
|
|
**Features:**
|
|
- Title and subtitle
|
|
- Breadcrumbs navigation
|
|
- Back button
|
|
- Action buttons (primary and secondary)
|
|
- Action menu dropdown
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<PageHeader
|
|
title="Organizations"
|
|
subtitle="Manage all organizations"
|
|
breadcrumbs={[{ label: 'Admin', href: '/admin' }, { label: 'Organizations' }]}
|
|
actions={[
|
|
{ label: 'New Organization', icon: <Plus />, onClick: () => {} },
|
|
{ label: 'Export', variant: 'outline', onClick: () => {} },
|
|
]}
|
|
onBack={() => navigate(-1)}
|
|
/>
|
|
```
|
|
|
|
#### `StatCard`
|
|
Enhanced stat card for dashboard metrics.
|
|
|
|
**Features:**
|
|
- Icon with color variants
|
|
- Value display
|
|
- Subtext
|
|
- Trend indicators (up/down with percentage)
|
|
- Clickable navigation
|
|
- Color variants (primary, success, warning, info)
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<StatCard
|
|
title="Total Organizations"
|
|
value={1234}
|
|
icon={<Building2 />}
|
|
subtext="All time"
|
|
trend={{ value: 12.5, label: 'vs last month', isPositive: true }}
|
|
onClick={() => navigate('/admin/organizations')}
|
|
color="primary"
|
|
/>
|
|
```
|
|
|
|
#### `FormSection`
|
|
Component for grouping related form fields.
|
|
|
|
**Features:**
|
|
- Title and description
|
|
- Collapsible option
|
|
- Actions in header
|
|
- Card-based layout
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<FormSection
|
|
title="Basic Information"
|
|
description="Enter the basic details"
|
|
collapsible
|
|
>
|
|
{/* Form fields */}
|
|
</FormSection>
|
|
```
|
|
|
|
#### `SettingsSection`
|
|
Component for settings pages.
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<SettingsSection
|
|
title="General Settings"
|
|
description="Configure general application settings"
|
|
actions={<Button>Save</Button>}
|
|
>
|
|
{/* Settings fields */}
|
|
</SettingsSection>
|
|
```
|
|
|
|
#### `ChartCard`
|
|
Wrapper component for charts with export and refresh.
|
|
|
|
**Features:**
|
|
- Title and description
|
|
- Export button
|
|
- Refresh button
|
|
- Loading state
|
|
- Custom actions
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<ChartCard
|
|
title="Economic Connections"
|
|
description="Visualization of sector connections"
|
|
onExport={() => {}}
|
|
onRefresh={() => {}}
|
|
isLoading={false}
|
|
>
|
|
{/* Chart component */}
|
|
</ChartCard>
|
|
```
|
|
|
|
#### `ActivityFeed`
|
|
Component for displaying system activity logs.
|
|
|
|
**Features:**
|
|
- Activity items with user avatars
|
|
- Activity types (create, update, delete, verify, login)
|
|
- Timestamp formatting
|
|
- Loading states
|
|
- Load more functionality
|
|
- Empty states
|
|
|
|
**Usage:**
|
|
```tsx
|
|
<ActivityFeed
|
|
activities={activities}
|
|
isLoading={false}
|
|
onLoadMore={() => {}}
|
|
hasMore={true}
|
|
/>
|
|
```
|
|
|
|
## Component Relationships
|
|
|
|
```
|
|
AdminLayout
|
|
├── Sidebar Navigation
|
|
├── Header (with user menu, notifications)
|
|
└── Main Content
|
|
├── PageHeader
|
|
│ ├── Breadcrumbs
|
|
│ └── Actions
|
|
├── SearchAndFilter
|
|
│ ├── SearchBar
|
|
│ └── FilterBar
|
|
├── DataTable
|
|
│ ├── ResponsiveTable (from ui primitives)
|
|
│ ├── Pagination
|
|
│ └── Bulk Actions
|
|
├── StatCard (for dashboard)
|
|
├── ChartCard (for analytics)
|
|
├── FormSection (for forms)
|
|
├── SettingsSection (for settings)
|
|
└── ActivityFeed (for activity logs)
|
|
```
|
|
|
|
## Design Principles
|
|
|
|
All components follow:
|
|
- **Consistency**: Unified design system
|
|
- **Accessibility**: ARIA labels, keyboard navigation
|
|
- **Responsiveness**: Mobile-first design
|
|
- **Type Safety**: Full TypeScript support
|
|
- **Composability**: Components work together seamlessly
|
|
- **Performance**: Optimized rendering and state management
|
|
|
|
## Usage Examples
|
|
|
|
### Complete Admin Page Example
|
|
|
|
```tsx
|
|
import { AdminLayout, PageHeader, DataTable, SearchAndFilter } from '@/components/admin';
|
|
|
|
const OrganizationsPage = () => {
|
|
const [search, setSearch] = useState('');
|
|
const [filters, setFilters] = useState({});
|
|
const [selectedRows, setSelectedRows] = useState(new Set());
|
|
|
|
return (
|
|
<AdminLayout title="Organizations">
|
|
<PageHeader
|
|
title="Organizations"
|
|
subtitle="Manage all organizations in the system"
|
|
actions={[
|
|
{ label: 'New Organization', onClick: () => {} },
|
|
{ label: 'Export', variant: 'outline', onClick: () => {} },
|
|
]}
|
|
/>
|
|
|
|
<SearchAndFilter
|
|
search={{ value: search, onChange: setSearch }}
|
|
filters={{
|
|
filters: filterOptions,
|
|
values: filters,
|
|
onChange: setFilters,
|
|
}}
|
|
/>
|
|
|
|
<DataTable
|
|
data={organizations}
|
|
columns={columns}
|
|
getRowId={(org) => org.id}
|
|
search={{ value: search, onChange: setSearch }}
|
|
selection={{ selectedRows, onSelectionChange: setSelectedRows }}
|
|
pagination={pagination}
|
|
sorting={sorting}
|
|
actions={tableActions}
|
|
bulkActions={bulkActions}
|
|
/>
|
|
</AdminLayout>
|
|
);
|
|
};
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
These components are ready to be used in admin pages. They provide:
|
|
- ✅ Complete layout structure
|
|
- ✅ Data management capabilities
|
|
- ✅ Form and settings organization
|
|
- ✅ Dashboard components
|
|
- ✅ Activity tracking
|
|
|
|
All components are production-ready and follow best practices for maintainability and scalability.
|
|
|