Files
btpxpress-frontend/hooks/usePhases.ts

173 lines
5.3 KiB
TypeScript
Executable File

import { useState, useEffect } from 'react';
import { apiClient } from '../services/api-client';
import { PhaseChantier, StatutPhaseChantier } from '../types/phases';
export const usePhases = () => {
const [phases, setPhases] = useState<PhaseChantier[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const fetchPhases = async () => {
try {
setLoading(true);
const response = await apiClient.get('/phases');
setPhases(response.data);
setError(null);
} catch (err) {
console.error('Erreur lors du chargement des phases:', err);
setError('Erreur lors du chargement des phases');
} finally {
setLoading(false);
}
};
const getPhasesByChantier = async (chantierId: string) => {
try {
const response = await apiClient.get(`/phases/chantier/${chantierId}`);
return response.data;
} catch (err) {
console.error('Erreur lors du chargement des phases du chantier:', err);
throw err;
}
};
const getPhasesByStatut = async (statut: StatutPhaseChantier) => {
try {
const response = await apiClient.get(`/phases/statut/${statut}`);
return response.data;
} catch (err) {
console.error('Erreur lors du chargement des phases par statut:', err);
throw err;
}
};
const getPhasesEnRetard = async () => {
try {
const response = await apiClient.get('/phases/en-retard');
return response.data;
} catch (err) {
console.error('Erreur lors du chargement des phases en retard:', err);
throw err;
}
};
const getPhasesCritiques = async () => {
try {
const response = await apiClient.get('/phases/critiques');
return response.data;
} catch (err) {
console.error('Erreur lors du chargement des phases critiques:', err);
throw err;
}
};
const createPhase = async (phase: Partial<PhaseChantier>) => {
try {
const response = await apiClient.post('/phases', phase);
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la création de la phase:', err);
throw err;
}
};
const updatePhase = async (id: string, phase: Partial<PhaseChantier>) => {
try {
const response = await apiClient.put(`/phases/${id}`, phase);
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la mise à jour de la phase:', err);
throw err;
}
};
const demarrerPhase = async (id: string) => {
try {
const response = await apiClient.post(`/phases/${id}/demarrer`);
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors du démarrage de la phase:', err);
throw err;
}
};
const terminerPhase = async (id: string) => {
try {
const response = await apiClient.post(`/phases/${id}/terminer`);
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la terminaison de la phase:', err);
throw err;
}
};
const suspendrePhase = async (id: string, motif: string) => {
try {
const response = await apiClient.post(`/phases/${id}/suspendre`, { motif });
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la suspension de la phase:', err);
throw err;
}
};
const reprendrePhase = async (id: string) => {
try {
const response = await apiClient.post(`/phases/${id}/reprendre`);
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la reprise de la phase:', err);
throw err;
}
};
const updateAvancement = async (id: string, pourcentage: number) => {
try {
const response = await apiClient.post(`/phases/${id}/avancement`, { pourcentage });
await fetchPhases();
return response.data;
} catch (err) {
console.error('Erreur lors de la mise à jour de l\'avancement:', err);
throw err;
}
};
const deletePhase = async (id: string) => {
try {
await apiClient.delete(`/phases/${id}`);
await fetchPhases();
} catch (err) {
console.error('Erreur lors de la suppression de la phase:', err);
throw err;
}
};
useEffect(() => {
fetchPhases();
}, []);
return {
phases,
loading,
error,
refresh: fetchPhases,
getPhasesByChantier,
getPhasesByStatut,
getPhasesEnRetard,
getPhasesCritiques,
createPhase,
updatePhase,
demarrerPhase,
terminerPhase,
suspendrePhase,
reprendrePhase,
updateAvancement,
deletePhase
};
};