org team management section in org Settings module

This commit is contained in:
Satyam-Rastogi
2026-05-13 18:55:09 +05:30
parent 72d541cab2
commit b6a7792bf7
3 changed files with 1070 additions and 17 deletions
+31 -3
View File
@@ -5,12 +5,14 @@ import {
Search, Check, X, Plus, Trash2, Edit3, Save, User, Crown,
ToggleLeft, ToggleRight, Info, ArrowRight, Mail, Phone, MapPin, Clock,
AlertTriangle, UserPlus, UserMinus, Eye, Pencil, Lock,
RotateCcw, Filter, CheckSquare, Square, BarChart3, History
RotateCcw, Filter, CheckSquare, Square, BarChart3, History, UsersRound
} from 'lucide-react';
import { useMockStore } from '../../data/mockStore';
import { useAuth } from '../../context/AuthContext';
import { usePermissions } from '../../hooks/usePermissions';
import { toast } from 'sonner';
import { computeRolePermissionStats } from '../../utils/permissions';
import OrgTeamManagement from '../../components/owner/OrgTeamManagement';
const COMMISSION_TYPES = [
{ value: 'flat', label: 'Flat Amount', hint: 'Fixed dollar amount' },
@@ -984,9 +986,11 @@ const UserOverridesSection = ({ members, roles, orgDefaults, roleOverrides, user
const OrgSettings = () => {
const { user } = useAuth();
const store = useMockStore();
const { orgRoleKey } = usePermissions();
const [openSections, setOpenSections] = useState({
org: true,
team: false,
roles: false,
access: false,
commission: false,
@@ -1009,6 +1013,29 @@ const OrgSettings = () => {
/>
),
},
{
id: 'team',
icon: UsersRound,
title: 'Organization Team Management',
subtitle: `${store.orgMembers.length} members — invite, manage roles, and administer your team`,
color: '#8b5cf6',
content: (
<OrgTeamManagement
members={store.orgMembers}
roles={store.orgRoles}
users={store.users}
permissions={store.orgPermissions}
permissionModules={store.PERMISSION_MODULES}
currentUserRoleKey={orgRoleKey}
onAddMember={store.addOrgMember}
onUpdateMember={store.updateOrgMember}
onRemoveMember={store.removeOrgMember}
onSuspendMember={store.suspendOrgMember}
onReactivateMember={store.reactivateOrgMember}
onResendInvite={store.resendOrgInvite}
/>
),
},
{
id: 'roles',
icon: Crown,
@@ -1093,11 +1120,12 @@ const OrgSettings = () => {
</div>
{/* Quick Stats */}
<div className="grid grid-cols-2 md:grid-cols-4 gap-3 mt-6">
<div className="grid grid-cols-2 md:grid-cols-5 gap-3 mt-6">
{[
{ label: 'Roles', value: store.orgRoles.length, color: '#fda913' },
{ label: 'Members', value: store.orgMembers.length, color: '#3b82f6' },
{ label: 'Modules', value: Object.keys(store.PERMISSION_MODULES).length, color: '#10b981' },
{ label: 'Active', value: store.orgMembers.filter(m => m.status === 'active').length, color: '#10b981' },
{ label: 'Modules', value: Object.keys(store.PERMISSION_MODULES).length, color: '#8b5cf6' },
{ label: 'Commission Overrides', value: store.roleCommissionOverrides.length + store.userCommissionOverrides.length, color: '#a855f7' },
].map(stat => (
<div key={stat.label} className="px-4 py-3 rounded-xl bg-white dark:bg-white/[0.03] border border-zinc-200 dark:border-white/5 shadow-sm dark:shadow-none">