diff --git a/client/src/components/TeamMemberPanel.jsx b/client/src/components/TeamMemberPanel.jsx index f9a1d4d..c47878f 100644 --- a/client/src/components/TeamMemberPanel.jsx +++ b/client/src/components/TeamMemberPanel.jsx @@ -36,6 +36,8 @@ export default function TeamMemberPanel({ member, isEditingSelf, onClose, onSave const [saving, setSaving] = useState(false) const [showDeleteConfirm, setShowDeleteConfirm] = useState(false) const [showBrandsDropdown, setShowBrandsDropdown] = useState(false) + const [confirmPassword, setConfirmPassword] = useState('') + const [passwordError, setPasswordError] = useState('') const brandsDropdownRef = useRef(null) // Workload state (loaded internally) @@ -59,6 +61,8 @@ export default function TeamMemberPanel({ member, isEditingSelf, onClose, onSave team_ids: Array.isArray(member.teams) ? member.teams.map(t => t.id) : [], }) setDirty(isCreateMode) + setConfirmPassword('') + setPasswordError('') if (!isCreateMode) loadWorkload() } }, [member]) @@ -108,6 +112,11 @@ export default function TeamMemberPanel({ member, isEditingSelf, onClose, onSave } const handleSave = async () => { + setPasswordError('') + if (isCreateMode && form.password && form.password !== confirmPassword) { + setPasswordError('Passwords do not match') + return + } setSaving(true) try { await onSave(isCreateMode ? null : memberId, { @@ -204,6 +213,22 @@ export default function TeamMemberPanel({ member, isEditingSelf, onClose, onSave )} )} + + {isCreateMode && form.password && ( +
+ + { setConfirmPassword(e.target.value); setPasswordError('') }} + className="w-full px-3 py-2 text-sm border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-brand-primary/20 focus:border-brand-primary" + placeholder="••••••••" + /> + {passwordError && ( +

{passwordError}

+ )} +
+ )} )}