65 lines
1.9 KiB
TypeScript
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 };
|
|
};
|