From a03cf5c8edeb179b8ac6871a54c9996807aa8813 Mon Sep 17 00:00:00 2001 From: omaroughriss Date: Thu, 23 Oct 2025 16:33:40 +0200 Subject: [PATCH] Adapt FolderData interface to simplified model --- app/dashboard/folders/page.tsx | 253 ++------------------------------- 1 file changed, 12 insertions(+), 241 deletions(-) diff --git a/app/dashboard/folders/page.tsx b/app/dashboard/folders/page.tsx index 890da13..4e1c484 100644 --- a/app/dashboard/folders/page.tsx +++ b/app/dashboard/folders/page.tsx @@ -47,8 +47,7 @@ import { Archive, FileCheck, } from "lucide-react" -import ProcessesViewer from "@/components/4nk/ProcessesViewer" -import { FolderData as SDKFolderData, FolderCreated, FolderPrivateFields, setDefaultFolderRoles } from "@/lib/4nk/models/FolderData" +import { FolderData, FolderCreated, FolderPrivateFields, setDefaultFolderRoles } from "@/lib/4nk/models/FolderData" import MessageBus from "@/lib/4nk/MessageBus" import { iframeUrl } from "@/app/page" import UserStore from "@/lib/4nk/UserStore" @@ -206,195 +205,9 @@ export default function FoldersPage() { const [folders, setFolders] = useState([]) const [stats, setStats] = useState({ - total: 0, - shared: 0, - private: 0, - thisWeek: 0, - permanent: 0, - temporary: 0, + total: 0 }) - const [users] = useState([ - { - id: "1", - name: "Marie Dubois", - email: "marie.dubois@company.com", - avatar: "MD", - folderRoles: { - "1": { role: "owner", assignedDate: new Date("2024-01-01") }, - "4": { role: "editor", assignedDate: new Date("2024-01-05") }, - }, - spaceRole: "manager", - spaceRoles: { - main: { role: "manager", spaceName: "Espace Principal" }, - legal: { role: "admin", spaceName: "Espace Juridique" }, - }, - }, - { - id: "2", - name: "Sophie Laurent", - email: "sophie.laurent@company.com", - avatar: "SL", - folderRoles: { - "2": { role: "owner", assignedDate: new Date("2024-01-02") }, - "3": { role: "contributor", assignedDate: new Date("2024-01-10") }, - }, - spaceRole: "user", - spaceRoles: { - main: { role: "user", spaceName: "Espace Principal" }, - analytics: { role: "manager", spaceName: "Espace Analytics" }, - }, - }, - { - id: "3", - name: "Jean Martin", - email: "jean.martin@company.com", - avatar: "JM", - folderRoles: { - "3": { role: "owner", assignedDate: new Date("2024-01-03") }, - "2": { role: "viewer", assignedDate: new Date("2024-01-15") }, - }, - spaceRole: "user", - spaceRoles: { - main: { role: "user", spaceName: "Espace Principal" }, - projects: { role: "admin", spaceName: "Espace Projets" }, - }, - }, - { - id: "4", - name: "Pierre Durand", - email: "pierre.durand@company.com", - avatar: "PD", - folderRoles: { - "6": { role: "owner", assignedDate: new Date("2024-01-04") }, - "5": { role: "validator", assignedDate: new Date("2024-01-08") }, - }, - spaceRole: "user", - spaceRoles: { - main: { role: "user", spaceName: "Espace Principal" }, - training: { role: "admin", spaceName: "Espace Formation" }, - }, - }, - { - id: "5", - name: "Admin Système", - email: "admin@company.com", - avatar: "AD", - folderRoles: { - "5": { role: "owner", assignedDate: new Date("2024-01-01") }, - "1": { role: "validator", assignedDate: new Date("2024-01-01") }, - "4": { role: "validator", assignedDate: new Date("2024-01-01") }, - }, - spaceRole: "admin", - spaceRoles: { - main: { role: "admin", spaceName: "Espace Principal" }, - legal: { role: "admin", spaceName: "Espace Juridique" }, - analytics: { role: "admin", spaceName: "Espace Analytics" }, - projects: { role: "admin", spaceName: "Espace Projets" }, - training: { role: "admin", spaceName: "Espace Formation" }, - }, - }, - ]) - - const [roles] = useState([ - { - id: "folder-owner", - name: "Propriétaire du dossier", - description: "Contrôle total sur le dossier", - level: "folder", - }, - { id: "folder-editor", name: "Éditeur du dossier", description: "Peut modifier les documents", level: "folder" }, - { - id: "folder-validator", - name: "Validateur du dossier", - description: "Peut valider les documents", - level: "folder", - }, - { - id: "folder-contributor", - name: "Contributeur du dossier", - description: "Peut ajouter des documents", - level: "folder", - }, - { id: "folder-viewer", name: "Lecteur du dossier", description: "Lecture seule", level: "folder" }, - { id: "space-admin", name: "Administrateur d'espace", description: "Contrôle total sur l'espace", level: "space" }, - { - id: "space-manager", - name: "Gestionnaire d'espace", - description: "Gestion des utilisateurs et dossiers", - level: "space", - }, - { id: "space-user", name: "Utilisateur d'espace", description: "Accès standard à l'espace", level: "space" }, - { id: "space-guest", name: "Invité d'espace", description: "Accès limité à l'espace", level: "space" }, - { id: "global-admin", name: "Administrateur global", description: "Accès à tous les espaces", level: "global" }, - { id: "global-manager", name: "Gestionnaire global", description: "Gestion multi-espaces", level: "global" }, - ]) - - const colors = [ - { id: "blue", name: "Bleu", class: "text-blue-600 bg-blue-100" }, - { id: "green", name: "Vert", class: "text-green-600 bg-green-100" }, - { id: "purple", name: "Violet", class: "text-purple-600 bg-purple-100" }, - { id: "orange", name: "Orange", class: "text-orange-600 bg-orange-100" }, - { id: "red", name: "Rouge", class: "text-red-600 bg-red-100" }, - { id: "pink", name: "Rose", class: "text-pink-600 bg-pink-100" }, - { id: "yellow", name: "Jaune", class: "text-yellow-600 bg-yellow-100" }, - { id: "gray", name: "Gris", class: "text-gray-600 bg-gray-100" }, - ] - - // 4NK Integration useEffects - useEffect(() => { - const userStore = UserStore.getInstance(); - const connected = userStore.isConnected(); - const pairingId = userStore.getUserPairingId(); - - console.log('Initialisation 4NK:', { connected, pairingId }); - - setIsConnected(connected); - setUserPairingId(pairingId); - }, []); - - useEffect(() => { - const handleConnectionFlow = async () => { - if (!isConnected) return; - - const userStore = UserStore.getInstance(); - const messageBus = MessageBus.getInstance(iframeUrl); - - try { - await messageBus.isReady(); - - let pairingId = userStore.getUserPairingId(); - - // 1️⃣ Créer le pairing si non existant - if (!pairingId) { - console.log("🚀 No pairing found — creating new pairing..."); - pairingId = await messageBus.createUserPairing(); - console.log("✅ Pairing created:", pairingId); - - userStore.pair(pairingId); - setUserPairingId(pairingId); - } else { - console.log("🔗 Already paired with ID:", pairingId); - } - - // 2️⃣ Charger les processes - const processes = await messageBus.getProcesses(); - setProcesses(processes); - setFolderProcesses(processes); // Use same processes for folders - - // 3️⃣ Charger les myProcesses - const myProcesses = await messageBus.getMyProcesses(); - setMyProcesses(myProcesses); - setMyFolderProcesses(myProcesses); // Use same myProcesses for folders - - } catch (err) { - console.error("❌ Error during pairing or process loading:", err); - } - }; - - handleConnectionFlow(); - }, [isConnected, iframeUrl]); - // Notification system const showNotification = (type: "success" | "error" | "info", message: string) => { setNotification({ type, message }) @@ -414,7 +227,7 @@ export default function FoldersPage() { } }; - // Function to load folders from 4NK processes + // Function to load folders from 4NK processes (adapted to new FolderData model) const loadFoldersFrom4NK = useCallback(() => { if (!folderProcesses) return; @@ -427,7 +240,7 @@ export default function FoldersPage() { if (!myFolderProcesses.includes(processId)) return; // Check if this process has a folderNumber in pcd_commitment - const latestState = process.states[0]; // -2 because last state is empty + const latestState = process.states[0]; if (!latestState) return; const folderNumber = latestState.pcd_commitment?.folderNumber; @@ -445,37 +258,14 @@ export default function FoldersPage() { return; // Skip creating folder until we have private data } - // Only create folder when we have private data + // Create folder with new simplified model const folder: FolderData = { - id: parseInt(folderNumber) || Math.floor(Math.random() * 10000), + folderNumber: folderNumber, name: privateData.name || `Dossier ${folderNumber}`, description: privateData.description || '', - documentsCount: privateData.documentsCount || 0, - subfoldersCount: privateData.subfoldersCount || 0, - size: privateData.size || '0 MB', - created: new Date(privateData.created || Date.now()), - modified: new Date(privateData.modified || Date.now()), - owner: privateData.owner || 'Propriétaire 4NK', - access: (privateData.access || 'private') as 'shared' | 'private', - members: privateData.members || [], - tags: privateData.tags || [], - color: privateData.color || 'blue', - favorite: privateData.favorite || false, - storageType: (privateData.storageType || 'temporary') as 'temporary' | 'permanent', - status: (privateData.status || 'active') as 'active' | 'archived' | 'pending' | 'completed' | 'validated', - type: privateData.type || 'general', - expectedDocuments: privateData.expectedDocuments || [], - activity: privateData.activity || [], - permissions: privateData.permissions || { - canView: true, - canEdit: true, // User owns this process - canDelete: true, // User owns this process - canInvite: true, // User owns this process - canArchive: true, // User owns this process - canAnalyze: true, - }, - temporaryStorageConfig: privateData.temporaryStorageConfig, - documents: privateData.documents || [], + created_at: privateData.created_at || new Date().toISOString(), + updated_at: privateData.updated_at || new Date().toISOString(), + notes: privateData.notes || [] }; folderData.push(folder); @@ -490,31 +280,12 @@ export default function FoldersPage() { // Update stats setStats({ - total: folderData.length, - shared: folderData.filter((folder) => folder.access === "shared").length, - private: folderData.filter((folder) => folder.access === "private").length, - thisWeek: folderData.filter((folder) => { - const weekAgo = new Date() - weekAgo.setDate(weekAgo.getDate() - 7) - return folder.modified > weekAgo - }).length, - permanent: folderData.filter((folder) => folder.storageType === "permanent").length, - temporary: folderData.filter((folder) => folder.storageType === "temporary").length, - }); - } else if (!hasFoldersToLoad) { - setLoadingFolders(false); - setFolders([]); - setStats({ - total: 0, - shared: 0, - private: 0, - thisWeek: 0, - permanent: 0, - temporary: 0, + total: folderData.length }); } - }, [folderProcesses, myFolderProcesses, folderPrivateData, iframeUrl]); + }, [folderProcesses, myFolderProcesses, folderPrivateData, fetchFolderPrivateData]); + // 4NK Integration useEffects useEffect(() => { // Load folders from 4NK when folder processes are available if (folderProcesses && myFolderProcesses.length >= 0) {