56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
import { useState, useEffect } from 'react';
|
|
|
|
// Le moteur logique pour la gestion des groupes d'infrastructures
|
|
export const useVPC = () => {
|
|
// 1. Initialisation : On cherche s'il y a déjà des VPC sauvegardés
|
|
const [vpcs, setVpcs] = useState(() => {
|
|
const saved = localStorage.getItem('nexus_vpcs');
|
|
return saved ? JSON.parse(saved) : [];
|
|
});
|
|
|
|
// 2. Sauvegarde automatique à chaque modification
|
|
useEffect(() => {
|
|
localStorage.setItem('nexus_vpcs', JSON.stringify(vpcs));
|
|
}, [vpcs]);
|
|
|
|
// 3. Créer un nouveau VPC
|
|
const createVPC = (name) => {
|
|
if (!name.trim()) return;
|
|
const newVpc = {
|
|
id: `vpc_${Date.now()}`,
|
|
name: name,
|
|
services: [] // Tableau qui contiendra les IDs des commandes (ex: [13, 14])
|
|
};
|
|
setVpcs([...vpcs, newVpc]);
|
|
};
|
|
|
|
// 4. Supprimer un VPC (Les services à l'intérieur ne sont pas supprimés, ils redeviennent "Libres")
|
|
const deleteVPC = (vpcId) => {
|
|
setVpcs(vpcs.filter(vpc => vpc.id !== vpcId));
|
|
};
|
|
|
|
// 5. Assigner un service à un VPC
|
|
const assignToVPC = (serviceId, targetVpcId) => {
|
|
setVpcs(vpcs.map(vpc => {
|
|
// On retire d'abord le service de tous les VPC pour éviter les doublons (1 service = 1 VPC max)
|
|
const cleanedServices = vpc.services.filter(id => id !== serviceId);
|
|
|
|
// Si c'est le VPC cible, on ajoute le service
|
|
if (vpc.id === targetVpcId) {
|
|
return { ...vpc, services: [...cleanedServices, serviceId] };
|
|
}
|
|
// Sinon on retourne le VPC nettoyé
|
|
return { ...vpc, services: cleanedServices };
|
|
}));
|
|
};
|
|
|
|
// 6. Retirer un service d'un VPC (Le rendre "Libre")
|
|
const removeFromVPC = (serviceId) => {
|
|
setVpcs(vpcs.map(vpc => ({
|
|
...vpc,
|
|
services: vpc.services.filter(id => id !== serviceId)
|
|
})));
|
|
};
|
|
|
|
return { vpcs, createVPC, deleteVPC, assignToVPC, removeFromVPC };
|
|
}; |