Initial commit
This commit is contained in:
173
hooks/usePhases.ts
Normal file
173
hooks/usePhases.ts
Normal file
@@ -0,0 +1,173 @@
|
||||
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
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user