Files
portail-gise/src/services/useVPC.js
T
maximus 9acb9c6801
Deploy Nexus Portal to HestiaCP (FTP) / build-and-deploy (push) Successful in 30s
add register and see panel
2026-06-17 17:39:30 +02:00

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 };
};