In progress - Implemented RhFolderProcess

This commit is contained in:
Titouan 2025-10-03 14:20:31 +02:00
parent 5c2fb5160b
commit 18926260fc
2 changed files with 105 additions and 12 deletions

View File

@ -51,6 +51,7 @@ import {
import FolderModal from "@/components/FolderModal"
import type { FolderData as SDKFolderData, FolderCreated } from "@/lib/4nk/models/FolderData"
import { FolderPrivateFields, setDefaultFolderRoles } from "@/lib/4nk/models/FolderData"
import { RhCreated, RhData, RhPrivateFields, setDefaultRhRoles } from "@/lib/4nk/models/RhData"
import AuthModal from "@/components/4nk/AuthModal"
import Iframe from "@/components/4nk/Iframe"
import MessageBus from "@/lib/4nk/MessageBus"
@ -58,7 +59,6 @@ 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
name: string
@ -356,7 +356,6 @@ export default function FoldersPage() {
messageBus.isReady().then(() => {
messageBus.getProcesses().then((processes: any) => {
setProcesses(processes);
console.log('getProcesses', processes);
});
});
}
@ -999,16 +998,16 @@ export default function FoldersPage() {
);
return;
}
// Ajout du type dans les données du dossier
const folderToCreate = {
...folderData,
type: folderType
};
const roles = setDefaultFolderRoles(userPairingId, [], []);
const folderPrivateFields = FolderPrivateFields;
MessageBus.getInstance(iframeUrl)
.createFolder(folderToCreate, folderPrivateFields, roles)
.then((_folderCreated: FolderCreated) => {
@ -1027,17 +1026,60 @@ export default function FoldersPage() {
)
);
setShowCreateFolderModal(false);
showNotification("success", `Dossier "${folderData.name}" créé avec succès sur 4NK`);
setShowCreateFolderModal(false);
showNotification("success", `Dossier "${folderData.name}" créé avec succès sur 4NK`);
})
.catch((error) => {
console.error('Erreur lors de la création du dossier 4NK:', error);
showNotification("error", "Erreur lors de la création du dossier");
console.error('Erreur lors de la création du dossier 4NK:', error);
showNotification("error", "Erreur lors de la création du dossier");
});
},
[userPairingId, isConnected, iframeUrl, folderType]
);
// const handleSaveNewRhFolder = useCallback(
// (folderData: RhData) => {
// 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 roles = setDefaultRhRoles(userPairingId, [], []);
// const folderPrivateFields = RhPrivateFields;
// MessageBus.getInstance(iframeUrl)
// .createRhFolder(folderData, folderPrivateFields, roles)
// .then((_folderCreated: RhCreated) => {
// 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)
// })
// )
// );
// setShowCreateFolderModal(false);
// showNotification("success", `Dossier (RH) "${folderData.name}" créé avec succès sur 4NK`);
// })
// .catch((error) => {
// console.error('Erreur lors de la création du dossier 4NK:', error);
// showNotification("error", "Erreur lors de la création du dossier");
// });
// },
// [userPairingId, isConnected, iframeUrl, folderType]
// );
const handleToggleFavorite = (folderId: number) => {
const folder = folders.find((f) => f.id === folderId)
if (!folder) return

View File

@ -5,6 +5,7 @@ import { isProfileData, type ProfileCreated, type ProfileData } from './models/P
import { isFolderData, type FolderCreated, type FolderData } from './models/FolderData';
import { v4 as uuidv4 } from 'uuid';
import type { RoleDefinition } from './models/Roles';
import { isRhData, RhCreated, RhData } from './models/RhData';
export default class MessageBus {
private static instance: MessageBus;
@ -407,15 +408,65 @@ export default class MessageBus {
unsubscribe();
this.destroyMessageListener();
// Return value must contain the data commited in the new process
const folderData = processCreated.processData;
if (!folderData || !isFolderData(folderData)) reject('Returned invalid process data');
const data = processCreated.processData;
if (!data || !isFolderData(data)) reject('Returned invalid process data');
if (!processCreated.processId || typeof processCreated.processId !== 'string') reject('Returned invalid process id');
// TODO check that process is of type Process
const folderCreated: FolderCreated = {
processId: processCreated.processId,
process: processCreated.process,
folderData
data
};
resolve(folderCreated);
});
const unsubscribeError = EventBus.getInstance().on('ERROR_PROCESS_CREATED', (responseId: string, error: string) => {
if (responseId !== correlationId) {
return;
}
unsubscribeError();
this.destroyMessageListener();
reject(error);
});
this.sendMessage({
type: 'CREATE_PROCESS',
processData: folderData,
privateFields: folderPrivateData,
roles,
accessToken
});
}).catch(console.error);
});
}
public createRhFolder(folderData: RhData, folderPrivateData: string[], roles: Record<string, RoleDefinition>): Promise<RhCreated> {
return new Promise<RhCreated>((resolve: (folderData: RhCreated) => void, reject: (error: string) => void) => {
this.checkToken().then(() => {
const userStore = UserStore.getInstance();
const accessToken = userStore.getAccessToken()!;
const correlationId = uuidv4();
this.initMessageListener(correlationId);
const unsubscribe = EventBus.getInstance().on('PROCESS_CREATED', (responseId: string, processCreated: any) => {
if (responseId !== correlationId) {
return;
}
unsubscribe();
this.destroyMessageListener();
// Return value must contain the data commited in the new process
const data = processCreated.processData;
if (!data || !isFolderData(data)) reject('Returned invalid process data');
if (!processCreated.processId || typeof processCreated.processId !== 'string') reject('Returned invalid process id');
// TODO check that process is of type Process
const folderCreated: RhCreated = {
processId: processCreated.processId,
process: processCreated.process,
data
};
resolve(folderCreated);