/** * @license * SPDX-License-Identifier: Apache-2.0 */ import React, { useState } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { Users, UserCheck, Lock, Shield, Trash2, UserPlus, Fingerprint, CheckCircle2, XCircle, ToggleLeft, KeyRound, Sliders, Settings } from 'lucide-react'; import { StaffUser, StaffRole } from '../types'; interface StaffManagerProps { staffList: StaffUser[]; currentStaff: StaffUser; onSetCurrentStaff: (staff: StaffUser) => void; onAddStaffMember: (user: StaffUser) => void; onToggleStaffStatus: (staffId: string) => void; onUpdateStaffRole: (staffId: string, role: StaffRole) => void; } export default function StaffManager({ staffList, currentStaff, onSetCurrentStaff, onAddStaffMember, onToggleStaffStatus, onUpdateStaffRole }: StaffManagerProps) { const [showAddStaff, setShowAddStaff] = useState(false); // Create staff states const [newName, setNewName] = useState(''); const [newEmail, setNewEmail] = useState(''); const [newRole, setNewRole] = useState('cashier'); const isOwner = currentStaff.role === 'owner'; const isManagerOrOwner = currentStaff.role === 'owner' || currentStaff.role === 'manager'; const handleCreateStaff = (e: React.FormEvent) => { e.preventDefault(); if (!newName.trim() || !newEmail.trim()) { alert("Name and email references are mandatory."); return; } if (staffList.some(s => s.email.toLowerCase() === newEmail.toLowerCase())) { alert("An account is already configured under this email register."); return; } const newUser: StaffUser = { id: 'staff_' + Math.random().toString(36).substr(2, 9), name: newName, email: newEmail, role: newRole, active: true }; onAddStaffMember(newUser); setNewName(''); setNewEmail(''); setNewRole('cashier'); setShowAddStaff(false); }; const handleSwitchOperator = (user: StaffUser) => { if (!user.active) { alert("Cannot switch to inactive staff profile. Owner must restore authorization status first."); return; } onSetCurrentStaff(user); }; // Role details mapping for easy visual display const getRoleBadgeColor = (role: StaffRole) => { switch(role) { case 'owner': return 'bg-slate-900 text-white border-transparent'; case 'manager': return 'bg-slate-100 text-slate-800 border-slate-200'; case 'cashier': return 'bg-slate-50 text-slate-650 border-slate-200/60'; } }; return (
{/* Visual Identity Widget - Active privileges indicator */}
Authorized Terminal Cashier

{currentStaff.name}

{currentStaff.role} MODE

Security ledger email: {currentStaff.email}

Enforced Role Clearances

{currentStaff.role === 'owner' ? "Owner clearance active. Unlimited access of warehouse multipliers, revenue parameters, and full backups." : currentStaff.role === 'manager' ? "Manager clearance active. Full access to manual stock adjusters, inventory updates, and cashier rosters." : "Cashier clearance active. Invoice generation, payments checkout, and outreach promotions. Stock manual modifications locked."}

{/* LEFT COLUMN: Switch Active Terminal Operator Block */}

Switch Terminal Operator

Review security flows by logging into alternative staff portfolios

{staffList.map((user) => { const isActiveLocal = user.id === currentStaff.id; return (
handleSwitchOperator(user)} className={`border p-3 rounded-lg flex items-center justify-between transition cursor-pointer ${ !user.active ? 'bg-slate-50 border-slate-100 opacity-55 cursor-not-allowed' : isActiveLocal ? 'bg-slate-900 text-white border-transparent shadow-sm font-semibold' : 'bg-white hover:border-slate-350 hover:bg-slate-50 border-slate-200' }`} >

{user.name}

{user.role} • {user.active ? 'Authorized' : 'Suspended'}
{isActiveLocal ? (
) : ( Log in )}
); })}
{/* RIGHT COLUMN: Full Staff registers with Bounded Controls */}

Staff Directory & RBAC Registers

Edit employee details, adjust authorization levels, and configure status settings

{isManagerOrOwner && ( )}
{staffList.map((user) => ( ))}
Employee Card System Access Tier Duty Status Administrative overrides

{user.name}

{user.email}

{isOwner && user.id !== currentStaff.id ? ( ) : ( {user.role} )}
{user.active ? ( Active ) : ( Suspended )}
{user.id === currentStaff.id ? ( Operating account ) : isManagerOrOwner ? ( ) : ( Locked )}
{/* CORE MODAL: REGISTER STAFF MEMBER */} {showAddStaff && (

Register New Terminal Account

Provide credentials and role permission clearings

setNewName(e.target.value)} className="w-full border border-slate-200 bg-white px-3 py-2 rounded-lg outline-none focus:border-slate-800 transition" />
setNewEmail(e.target.value)} className="w-full border border-slate-200 bg-white px-3 py-2 rounded-lg outline-none focus:border-slate-800 transition" />
)}
); }