diff --git a/frontend/src/pages/Employees/components/EmployeeForm.tsx b/frontend/src/pages/Employees/components/EmployeeForm.tsx index 7204204..88f34ad 100644 --- a/frontend/src/pages/Employees/components/EmployeeForm.tsx +++ b/frontend/src/pages/Employees/components/EmployeeForm.tsx @@ -23,12 +23,12 @@ interface EmployeeFormData { lastname: string; email: string; password: string; - + // Step 2: Mitarbeiterkategorie employeeType: EmployeeType; contractType: ContractType | undefined; isTrainee: boolean; - + // Step 3: Berechtigungen & Status roles: string[]; canWorkAlone: boolean; @@ -64,12 +64,12 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { canWorkAlone: false, isActive: true }); - + const [passwordForm, setPasswordForm] = useState({ newPassword: '', confirmPassword: '' }); - + const [showPasswordSection, setShowPasswordSection] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); @@ -116,7 +116,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { const cleanFirstname = convertUmlauts(firstname).replace(/[^a-z0-9]/g, ''); const cleanLastname = convertUmlauts(lastname).replace(/[^a-z0-9]/g, ''); - + return `${cleanFirstname}.${cleanLastname}@sp.de`; }; @@ -177,7 +177,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { const goToNextStep = (): void => { setError(''); clearErrors(); // Clear previous validation errors - + if (!validateCurrentStep(currentStep)) { return; } @@ -198,7 +198,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { const handleStepChange = (stepIndex: number): void => { setError(''); clearErrors(); // Clear validation errors when changing steps - + // Nur erlauben, zu bereits validierten Schritten zu springen if (stepIndex <= currentStep + 1) { // Vor dem Wechsel validieren @@ -212,7 +212,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { // ===== FORM HANDLER ===== const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target; - + setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : value @@ -264,9 +264,9 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { } // Determine if can work alone based on employee type - const canWorkAlone = employeeType === 'manager' || - (employeeType === 'personell' && !formData.isTrainee); - + const canWorkAlone = employeeType === 'manager' || + (employeeType === 'personell' && !formData.isTrainee); + // Reset isTrainee if not personell const isTrainee = employeeType === 'personell' ? formData.isTrainee : false; @@ -311,9 +311,9 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { canWorkAlone: formData.canWorkAlone, isTrainee: formData.isTrainee }; - + // Use executeWithValidation ONLY for the API call - await executeWithValidation(() => + await executeWithValidation(() => employeeService.createEmployee(createData) ); } else if (employee) { @@ -327,9 +327,9 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { isActive: formData.isActive, isTrainee: formData.isTrainee }; - + // Use executeWithValidation for the update call - await executeWithValidation(() => + await executeWithValidation(() => employeeService.updateEmployee(employee.id, updateData) ); @@ -343,12 +343,13 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { await executeWithValidation(() => employeeService.changePassword(employee.id, { currentPassword: '', - newPassword: passwordForm.newPassword + newPassword: passwordForm.newPassword, + confirmPassword: passwordForm.confirmPassword }) ); } } - + return Promise.resolve(); } catch (err: any) { // Only set error if it's not a validation error (validation errors are handled by the hook) @@ -364,9 +365,9 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { const isStepCompleted = (stepIndex: number): boolean => { switch (stepIndex) { case 0: - return !!formData.firstname.trim() && - !!formData.lastname.trim(); - // REMOVE: (mode === 'edit' || formData.password.length >= 6) + return !!formData.firstname.trim() && + !!formData.lastname.trim(); + // REMOVE: (mode === 'edit' || formData.password.length >= 6) case 1: return !!formData.employeeType; case 2: @@ -391,7 +392,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { validationErrors, getFieldError, hasErrors, - + // Actions goToNextStep, goToPrevStep, @@ -405,7 +406,7 @@ const useEmployeeForm = (mode: 'create' | 'edit', employee?: Employee) => { handleSubmit, setShowPasswordSection, clearErrors, - + // Helpers isStepCompleted }; @@ -430,8 +431,8 @@ interface StepContentProps { hasErrors: (fieldName?: string) => boolean; } -const Step1Content: React.FC = ({ - formData, +const Step1Content: React.FC = ({ + formData, onInputChange, emailPreview, mode @@ -439,9 +440,9 @@ const Step1Content: React.FC = ({
-
-