(Feat-Fix): New Activity Creation system, fixed activities being hardcoded and not displaying properly in the dropdown, added dynamic subdepartment activity fetching.
This commit is contained in:
64
src/hooks/useActivities.ts
Normal file
64
src/hooks/useActivities.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
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 };
|
||||
};
|
||||
Reference in New Issue
Block a user