feat: Introduce StatusBadge component for consistent status representation
- Added StatusBadge component to standardize the display of user and membership statuses across various admin pages. - Refactored AdminMembers, AdminPlans, AdminStaff, AdminSubscriptions, AdminUserView, AdminValidations, and MembersDirectory to utilize the new StatusBadge component. - Removed redundant status badge logic from AdminMembers, AdminStaff, and AdminValidations. - Updated AdminLayout to include a mobile-friendly sidebar toggle button with Menu icon. - Created MemberCard component to encapsulate member display logic, improving code reusability. - Adjusted various components to enhance user experience and maintain consistent styling.
This commit is contained in:
42
src/components/StatusBadge.js
Normal file
42
src/components/StatusBadge.js
Normal file
@@ -0,0 +1,42 @@
|
||||
import React from 'react';
|
||||
import { Badge } from './ui/badge';
|
||||
|
||||
const STATUS_BADGE_CONFIG = {
|
||||
|
||||
//status-based badges
|
||||
pending_email: { label: 'Pending Email', variant: 'orange2' },
|
||||
pending_validation: { label: 'Pending Validation', variant: 'gray' },
|
||||
pre_validated: { label: 'Pre-Validated', variant: 'green' },
|
||||
payment_pending: { label: 'Payment Pending', variant: 'orange' },
|
||||
active: { label: 'Active', variant: 'green' },
|
||||
inactive: { label: 'Inactive', variant: 'gray2' },
|
||||
canceled: { label: 'Canceled', variant: 'red' },
|
||||
expired: { label: 'Expired', variant: 'red2' },
|
||||
abandoned: { label: 'Abandoned', variant: 'gray3' },
|
||||
rejected: { label: 'Rejected', className: 'bg-red-100 text-red-700' },
|
||||
|
||||
//role-based badges
|
||||
finance: { label: 'Finance Manager', variant: 'purple' },
|
||||
guest: { label: 'Guest', variant: 'gray' },
|
||||
member: { label: 'Member', variant: 'purple' },
|
||||
superadmin: { label: 'Superadmin', variant: 'purple' },
|
||||
admin: { label: 'Admin', variant: 'purple' },
|
||||
moderator: { label: 'Moderator', variant: 'bg-[var(--neutral-800)] text-[var(--purple-ink)]' },
|
||||
staff: { label: 'Staff', variant: 'gray' },
|
||||
media: { label: 'Media', variant: 'gray2' }
|
||||
};
|
||||
|
||||
//todo: make shield icon dynamic based on status
|
||||
const StatusBadge = ({ status }) => {
|
||||
const statusConfig = STATUS_BADGE_CONFIG[status] || STATUS_BADGE_CONFIG.inactive;
|
||||
|
||||
return (
|
||||
<Badge variant={statusConfig.variant} className=" px-3 py-1 rounded-md text-sm">
|
||||
{/* <Shield className="h-3 w-3 mr-1 inline" /> */}
|
||||
{statusConfig.label}
|
||||
</Badge>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
export default StatusBadge;
|
||||
Reference in New Issue
Block a user