RBAC, Permissions, and Export/Import

This commit is contained in:
Koncept Kit
2025-12-16 20:04:00 +07:00
parent 02e38e1050
commit 9ed778db1c
30 changed files with 4579 additions and 487 deletions

View File

@@ -59,11 +59,14 @@ const Dashboard = () => {
const getStatusBadge = (status) => {
const statusConfig = {
pending_email: { icon: Clock, label: 'Pending Email', className: 'bg-orange-100 text-orange-700' },
pending_approval: { icon: Clock, label: 'Pending Approval', className: 'bg-gray-200 text-gray-700' },
pre_approved: { icon: CheckCircle, label: 'Pre-Approved', className: 'bg-[#81B29A] text-white' },
pending_validation: { icon: Clock, label: 'Pending Validation', className: 'bg-gray-200 text-gray-700' },
pre_validated: { icon: CheckCircle, label: 'Pre-Validated', className: 'bg-[#81B29A] text-white' },
payment_pending: { icon: AlertCircle, label: 'Payment Pending', className: 'bg-orange-500 text-white' },
active: { icon: CheckCircle, label: 'Active', className: 'bg-[#81B29A] text-white' },
inactive: { icon: AlertCircle, label: 'Inactive', className: 'bg-gray-400 text-white' }
inactive: { icon: AlertCircle, label: 'Inactive', className: 'bg-gray-400 text-white' },
canceled: { icon: AlertCircle, label: 'Canceled', className: 'bg-red-100 text-red-700' },
expired: { icon: Clock, label: 'Expired', className: 'bg-red-500 text-white' },
abandoned: { icon: AlertCircle, label: 'Abandoned', className: 'bg-gray-300 text-gray-600' }
};
const config = statusConfig[status] || statusConfig.inactive;
@@ -80,11 +83,14 @@ const Dashboard = () => {
const getStatusMessage = (status) => {
const messages = {
pending_email: 'Please check your email to verify your account.',
pending_approval: 'Your application is under review by our admin team.',
pre_approved: 'Your application is under review by our admin team.',
pending_validation: 'Your application is under review by our admin team.',
pre_validated: 'Your application is under review by our admin team.',
payment_pending: 'Please complete your payment to activate your membership.',
active: 'Your membership is active! Enjoy all member benefits.',
inactive: 'Your membership is currently inactive.'
inactive: 'Your membership is currently inactive.',
canceled: 'Your membership has been canceled. Contact us to rejoin.',
expired: 'Your membership has expired. Please renew to regain access.',
abandoned: 'Your application was not completed. Contact us to restart the process.'
};
return messages[status] || '';
@@ -254,14 +260,14 @@ const Dashboard = () => {
</div>
{/* CTA Section */}
{user?.status === 'pending_approval' && (
{user?.status === 'pending_validation' && (
<Card className="mt-8 p-8 bg-gradient-to-br from-[#DDD8EB]/20 to-[#f1eef9]/20 rounded-2xl border border-[#ddd8eb]">
<div className="text-center">
<h3 className="text-2xl font-semibold text-[#422268] mb-4" style={{ fontFamily: "'Inter', sans-serif" }}>
Application Under Review
</h3>
<p className="text-[#664fa3] mb-6" style={{ fontFamily: "'Nunito Sans', sans-serif" }}>
Your membership application is being reviewed by our admin team. You'll be notified once approved!
Your membership application is being reviewed by our admin team. You'll be notified once validated!
</p>
</div>
</Card>
@@ -278,7 +284,7 @@ const Dashboard = () => {
Complete Your Payment
</h3>
<p className="text-[#664fa3] mb-6" style={{ fontFamily: "'Nunito Sans', sans-serif" }}>
Great news! Your membership application has been approved. Complete your payment to activate your membership and gain full access to all member benefits.
Great news! Your membership application has been validated. Complete your payment to activate your membership and gain full access to all member benefits.
</p>
<Link to="/plans">
<Button