Files
EmployeeManagementSystem/src/hooks/useActivities.ts

65 lines
1.9 KiB
TypeScript

import { useState, useEffect, useCallback } from 'react';
import { api } from '../services/api';
import { Activity } from '../types';
export const useActivities = (subDepartmentId?: string | number) => {
const [activities, setActivities] = useState<Activity[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const fetchActivities = useCallback(async () => {
setLoading(true);
setError(null);
try {
const params: { subDepartmentId?: number; departmentId?: number } = {};
if (subDepartmentId) {
params.subDepartmentId = Number(subDepartmentId);
}
const data = await api.getActivities(params);
setActivities(data);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch activities');
setActivities([]);
} finally {
setLoading(false);
}
}, [subDepartmentId]);
useEffect(() => {
fetchActivities();
}, [fetchActivities]);
return { activities, loading, error, refresh: fetchActivities };
};
export const useActivitiesByDepartment = (departmentId?: string | number) => {
const [activities, setActivities] = useState<Activity[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const fetchActivities = useCallback(async () => {
if (!departmentId) {
setActivities([]);
return;
}
setLoading(true);
setError(null);
try {
const data = await api.getActivities({ departmentId: Number(departmentId) });
setActivities(data);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch activities');
setActivities([]);
} finally {
setLoading(false);
}
}, [departmentId]);
useEffect(() => {
fetchActivities();
}, [fetchActivities]);
return { activities, loading, error, refresh: fetchActivities };
};