Added type in CreateFolder function

This commit is contained in:
Sadrinho27 2025-10-02 23:25:14 +02:00
parent 741ad90b00
commit d88697f282

View File

@ -56,6 +56,8 @@ import Iframe from "@/components/4nk/Iframe"
import MessageBus from "@/lib/4nk/MessageBus"
import EventBus from "@/lib/4nk/EventBus"
import UserStore from "@/lib/4nk/UserStore"
import ProcessesViewer from "@/components/ProcessesViewer"
import { iframeUrl } from "@/app/page"
interface FolderData {
id: number
@ -151,6 +153,8 @@ interface Role {
level: "folder" | "space" | "global"
}
type FolderType = "contrat" | "projet" | "rapport" | "finance" | "rh" | "marketing";
export default function FoldersPage() {
const router = useRouter()
const [viewMode, setViewMode] = useState<'list'>('list')
@ -165,6 +169,9 @@ export default function FoldersPage() {
const [currentPath, setCurrentPath] = useState<string[]>(["Racine"])
const [actionModal, setActionModal] = useState<ActionModal>({ type: null, folder: null, folders: [] })
const [showCreateFolderModal, setShowCreateFolderModal] = useState(false)
const [folderType, setFolderType] = useState<FolderType | null>(null);
const [isModalOpen, setIsModalOpen] = useState(false);
const [menuOpen, setMenuOpen] = useState(false);
// 4NK Integration states
const [isConnected, setIsConnected] = useState(false)
@ -173,7 +180,6 @@ export default function FoldersPage() {
const [myProcesses, setMyProcesses] = useState<string[]>([])
const [userPairingId, setUserPairingId] = useState<string | null>(null)
const [pairingIdInitialized, setPairingIdInitialized] = useState(false)
const iframeUrl = 'https://dev3.4nkweb.com'
// Modal states
const [inviteMessage, setInviteMessage] = useState("")
@ -355,7 +361,7 @@ export default function FoldersPage() {
});
});
}
}, [isConnected]);
}, [isConnected, iframeUrl]);
useEffect(() => {
if (isConnected && processes !== null) {
@ -708,7 +714,7 @@ export default function FoldersPage() {
}
loadFolders()
}, [])
}, []);
// Notification system
const showNotification = (type: "success" | "error" | "info", message: string) => {
@ -735,6 +741,7 @@ export default function FoldersPage() {
}, []);
const handleAuthConnect = useCallback(() => {
setIsConnected(true);
setShowAuthModal(false);
console.log('Auth Connect - Connexion établie, le useEffect se chargera de récupérer le userPairingId');
showNotification("success", "Connexion 4NK réussie");
@ -960,52 +967,65 @@ export default function FoldersPage() {
setActionModal({ type: "delete", folder, folders: [] })
}
const handleCreateFolder = () => {
setShowCreateFolderModal(true)
const handleOpenModal = (type: FolderType) => {
setFolderType(type);
setIsModalOpen(true);
setMenuOpen(false);
};
const handleCloseModal = () => {
setIsModalOpen(false);
setFolderType(null);
};
const handleSaveNewFolder = useCallback(
(folderData: SDKFolderData) => {
if (!isConnected || !userPairingId) {
console.error('Conditions non remplies:', { isConnected, userPairingId });
showNotification(
"error",
`Vous devez être connecté à 4NK pour créer un dossier (Connected: ${isConnected}, PairingId: ${userPairingId ? 'OK' : 'NULL'})`
);
return;
}
const handleSaveNewFolder = useCallback((folderData: SDKFolderData) => {
console.log('Debug - handleSaveNewFolder:', {
isConnected,
userPairingId,
userPairingIdType: typeof userPairingId,
userStoreConnected: UserStore.getInstance().isConnected(),
userStorePairingId: UserStore.getInstance().getUserPairingId()
});
// Ajout du type dans les données du dossier
const folderToCreate = {
...folderData,
type: folderType
};
if (userPairingId !== null && isConnected) {
const roles = setDefaultFolderRoles(userPairingId, [], []);
const folderPrivateFields = FolderPrivateFields;
MessageBus.getInstance(iframeUrl).createFolder(folderData, folderPrivateFields, roles).then((_folderCreated: FolderCreated) => {
MessageBus.getInstance(iframeUrl).notifyProcessUpdate(_folderCreated.processId, _folderCreated.process.states[0].state_id).then(() => {
MessageBus.getInstance(iframeUrl).validateState(_folderCreated.processId, _folderCreated.process.states[0].state_id).then((_updatedProcess: any) => {
MessageBus.getInstance(iframeUrl).getProcesses().then((processes: any) => {
setProcesses(processes);
});
});
MessageBus.getInstance(iframeUrl)
.createFolder(folderToCreate, folderPrivateFields, roles)
.then((_folderCreated: FolderCreated) => {
const firstStateId = _folderCreated.process.states[0].state_id;
MessageBus.getInstance(iframeUrl)
.notifyProcessUpdate(_folderCreated.processId, firstStateId)
.then(() =>
MessageBus.getInstance(iframeUrl)
.validateState(_folderCreated.processId, firstStateId)
.then(() =>
MessageBus.getInstance(iframeUrl)
.getProcesses()
.then(async (processes: any) => {
setProcesses(processes)
})
}).catch((error) => {
console.error('Erreur lors de la création du dossier 4NK:', error);
showNotification("error", "Erreur lors de la création du dossier");
});
)
);
setShowCreateFolderModal(false);
showNotification("success", `Dossier "${folderData.name}" créé avec succès sur 4NK`);
} else {
console.error('Conditions non remplies:', {
userPairingIdCheck: userPairingId !== null,
isConnectedCheck: isConnected,
actualUserPairingId: userPairingId,
actualIsConnected: isConnected
})
.catch((error) => {
console.error('Erreur lors de la création du dossier 4NK:', error);
showNotification("error", "Erreur lors de la création du dossier");
});
showNotification("error", `Vous devez être connecté à 4NK pour créer un dossier (Connected: ${isConnected}, PairingId: ${userPairingId ? 'OK' : 'NULL'})`);
}
}, [userPairingId, isConnected, iframeUrl]);
const handleCancelCreateFolder = () => {
setShowCreateFolderModal(false)
}
},
[userPairingId, isConnected, iframeUrl, folderType]
);
const handleToggleFavorite = (folderId: number) => {
const folder = folders.find((f) => f.id === folderId)
@ -1451,8 +1471,7 @@ export default function FoldersPage() {
{/* Notification */}
{notification && (
<div
className={`fixed top-4 right-4 z-50 p-4 rounded-lg shadow-lg flex items-center space-x-2 ${
notification.type === "success"
className={`fixed top-4 right-4 z-50 p-4 rounded-lg shadow-lg flex items-center space-x-2 ${notification.type === "success"
? "bg-green-100 text-green-800 border border-green-200"
: notification.type === "error"
? "bg-red-100 text-red-800 border border-red-200"
@ -1495,23 +1514,45 @@ export default function FoldersPage() {
<Upload className="h-4 w-4 mr-2" />
Importer
</Button>
{isConnected ? (
<>
<Button size="sm" onClick={handleCreateFolder}>
<div className="flex gap-2">
{/* Nouveau dossier avec menu */}
<div className="relative">
<Button size="sm" onClick={() => setMenuOpen(!menuOpen)}>
<FolderPlus className="h-4 w-4 mr-2" />
Nouveau dossier
</Button>
{menuOpen && (
<div className="absolute mt-1 right-0 w-48 bg-white border border-gray-200 rounded shadow-lg z-50">
{['contrat', 'projet', 'rapport', 'finance', 'rh', 'marketing'].map((type) => (
<button
key={type}
className="w-full text-left px-4 py-2 text-gray-700 hover:bg-gray-100"
onClick={() => handleOpenModal(type as FolderType)}
>
{type.charAt(0).toUpperCase() + type.slice(1)}
</button>
))}
</div>
)}
</div>
{/* Déconnexion */}
<Button variant="outline" size="sm" onClick={handleLogout}>
<X className="h-4 w-4 mr-2" />
Déconnexion 4NK
</Button>
{/* Debug PairingId */}
{!userPairingId && (
<Button variant="outline" size="sm" onClick={handleForceGetPairingId}>
<Brain className="h-4 w-4 mr-2" />
Debug PairingId
</Button>
)}
</>
</div>
) : (
<Button variant="outline" size="sm" onClick={handleLogin}>
<Shield className="h-4 w-4 mr-2" />
@ -1581,7 +1622,6 @@ export default function FoldersPage() {
{sortOrder === "asc" ? <SortAsc className="h-4 w-4" /> : <SortDesc className="h-4 w-4" />}
</Button>
</div>
{/* Vue grille supprimée: forcer la vue liste uniquement */}
</div>
</div>
@ -1771,7 +1811,7 @@ export default function FoldersPage() {
)}
{/* Folders List/Grid */}
<Card>
{/* <Card>
<CardContent className="p-0">
{viewMode === "list" ? (
<div className="overflow-x-auto">
@ -1847,8 +1887,7 @@ export default function FoldersPage() {
{filteredFolders.map((folder) => (
<div
key={folder.id}
className={`relative group border rounded-lg p-6 hover:shadow-md transition-shadow cursor-pointer ${
selectedFolders.includes(folder.id) ? "bg-blue-50 border-blue-200" : "bg-white"
className={`relative group border rounded-lg p-6 hover:shadow-md transition-shadow cursor-pointer ${selectedFolders.includes(folder.id) ? "bg-blue-50 border-blue-200" : "bg-white"
}`}
onClick={() => handleOpenFolder(folder)}
>
@ -1948,7 +1987,7 @@ export default function FoldersPage() {
</div>
</div>
{/* Recent Activity */}
Recent Activity
<div className="mt-4 pt-4 border-t">
<h4 className="text-xs font-medium text-gray-700 mb-2">Activité récente</h4>
<div className="space-y-1">
@ -1976,13 +2015,25 @@ export default function FoldersPage() {
? "Essayez de modifier vos critères de recherche"
: "Commencez par créer votre premier dossier"}
</p>
<Button onClick={handleCreateFolder}>
<FolderPlus className="h-4 w-4 mr-2" />
Nouveau dossier
</Button>
</div>
)}
</CardContent>
</Card> */}
{/* ProcessesViewer Card */}
<Card className="mt-6">
<CardContent className="p-4">
<h3 className="text-lg font-semibold text-gray-900 mb-4">Processus Blockchain</h3>
{/* Intégration du ProcessesViewer */}
<div className="w-full h-[500px]">
<ProcessesViewer
processes={processes}
myProcesses={myProcesses}
onProcessesUpdate={setProcesses}
/>
</div>
</CardContent>
</Card>
{/* Modals */}
@ -2548,13 +2599,16 @@ export default function FoldersPage() {
</div>
)}
{/* Folder Creation Modal */}
{/* Modal */}
{folderType && (
<FolderModal
isOpen={showCreateFolderModal}
onClose={handleCancelCreateFolder}
isOpen={isModalOpen}
onClose={handleCloseModal}
onSave={handleSaveNewFolder}
onCancel={handleCancelCreateFolder}
onCancel={handleCloseModal}
folderType={folderType}
/>
)}
{/* 4NK Authentication Modal */}
<AuthModal