(Feat): Initial Commit

This commit is contained in:
2025-11-27 22:50:08 +00:00
commit 00f9ed128b
79 changed files with 17413 additions and 0 deletions

84
src/hooks/useEmployees.ts Normal file
View File

@@ -0,0 +1,84 @@
import { useState, useEffect } from 'react';
import { api } from '../services/api';
import type { User } from '../types';
export const useEmployees = (filters?: { role?: string; departmentId?: number }) => {
const [employees, setEmployees] = useState<User[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const fetchEmployees = async () => {
setLoading(true);
setError(null);
try {
const data = await api.getUsers(filters);
setEmployees(data);
} catch (err: any) {
setError(err.message || 'Failed to fetch employees');
console.error('Failed to fetch employees:', err);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchEmployees();
}, [JSON.stringify(filters)]);
const createEmployee = async (data: any) => {
setLoading(true);
setError(null);
try {
const newEmployee = await api.createUser(data);
await fetchEmployees(); // Refresh list
return newEmployee;
} catch (err: any) {
setError(err.message || 'Failed to create employee');
console.error('Failed to create employee:', err);
throw err;
} finally {
setLoading(false);
}
};
const updateEmployee = async (id: number, data: any) => {
setLoading(true);
setError(null);
try {
const updated = await api.updateUser(id, data);
await fetchEmployees(); // Refresh list
return updated;
} catch (err: any) {
setError(err.message || 'Failed to update employee');
console.error('Failed to update employee:', err);
throw err;
} finally {
setLoading(false);
}
};
const deleteEmployee = async (id: number) => {
setLoading(true);
setError(null);
try {
await api.deleteUser(id);
await fetchEmployees(); // Refresh list
} catch (err: any) {
setError(err.message || 'Failed to delete employee');
console.error('Failed to delete employee:', err);
throw err;
} finally {
setLoading(false);
}
};
return {
employees,
loading,
error,
refresh: fetchEmployees,
createEmployee,
updateEmployee,
deleteEmployee,
};
};