In progress - Implemented RhFolderProcess
This commit is contained in:
parent
5c2fb5160b
commit
18926260fc
@ -51,6 +51,7 @@ import {
|
|||||||
import FolderModal from "@/components/FolderModal"
|
import FolderModal from "@/components/FolderModal"
|
||||||
import type { FolderData as SDKFolderData, FolderCreated } from "@/lib/4nk/models/FolderData"
|
import type { FolderData as SDKFolderData, FolderCreated } from "@/lib/4nk/models/FolderData"
|
||||||
import { FolderPrivateFields, setDefaultFolderRoles } 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 AuthModal from "@/components/4nk/AuthModal"
|
||||||
import Iframe from "@/components/4nk/Iframe"
|
import Iframe from "@/components/4nk/Iframe"
|
||||||
import MessageBus from "@/lib/4nk/MessageBus"
|
import MessageBus from "@/lib/4nk/MessageBus"
|
||||||
@ -58,7 +59,6 @@ import EventBus from "@/lib/4nk/EventBus"
|
|||||||
import UserStore from "@/lib/4nk/UserStore"
|
import UserStore from "@/lib/4nk/UserStore"
|
||||||
import ProcessesViewer from "@/components/ProcessesViewer"
|
import ProcessesViewer from "@/components/ProcessesViewer"
|
||||||
import { iframeUrl } from "@/app/page"
|
import { iframeUrl } from "@/app/page"
|
||||||
|
|
||||||
interface FolderData {
|
interface FolderData {
|
||||||
id: number
|
id: number
|
||||||
name: string
|
name: string
|
||||||
@ -356,7 +356,6 @@ export default function FoldersPage() {
|
|||||||
messageBus.isReady().then(() => {
|
messageBus.isReady().then(() => {
|
||||||
messageBus.getProcesses().then((processes: any) => {
|
messageBus.getProcesses().then((processes: any) => {
|
||||||
setProcesses(processes);
|
setProcesses(processes);
|
||||||
console.log('getProcesses', processes);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -999,16 +998,16 @@ export default function FoldersPage() {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ajout du type dans les données du dossier
|
// Ajout du type dans les données du dossier
|
||||||
const folderToCreate = {
|
const folderToCreate = {
|
||||||
...folderData,
|
...folderData,
|
||||||
type: folderType
|
type: folderType
|
||||||
};
|
};
|
||||||
|
|
||||||
const roles = setDefaultFolderRoles(userPairingId, [], []);
|
const roles = setDefaultFolderRoles(userPairingId, [], []);
|
||||||
const folderPrivateFields = FolderPrivateFields;
|
const folderPrivateFields = FolderPrivateFields;
|
||||||
|
|
||||||
MessageBus.getInstance(iframeUrl)
|
MessageBus.getInstance(iframeUrl)
|
||||||
.createFolder(folderToCreate, folderPrivateFields, roles)
|
.createFolder(folderToCreate, folderPrivateFields, roles)
|
||||||
.then((_folderCreated: FolderCreated) => {
|
.then((_folderCreated: FolderCreated) => {
|
||||||
@ -1027,17 +1026,60 @@ export default function FoldersPage() {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
setShowCreateFolderModal(false);
|
setShowCreateFolderModal(false);
|
||||||
showNotification("success", `Dossier "${folderData.name}" créé avec succès sur 4NK`);
|
showNotification("success", `Dossier "${folderData.name}" créé avec succès sur 4NK`);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error('Erreur lors de la création du dossier 4NK:', 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", "Erreur lors de la création du dossier");
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[userPairingId, isConnected, iframeUrl, folderType]
|
[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 handleToggleFavorite = (folderId: number) => {
|
||||||
const folder = folders.find((f) => f.id === folderId)
|
const folder = folders.find((f) => f.id === folderId)
|
||||||
if (!folder) return
|
if (!folder) return
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { isProfileData, type ProfileCreated, type ProfileData } from './models/P
|
|||||||
import { isFolderData, type FolderCreated, type FolderData } from './models/FolderData';
|
import { isFolderData, type FolderCreated, type FolderData } from './models/FolderData';
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
import type { RoleDefinition } from './models/Roles';
|
import type { RoleDefinition } from './models/Roles';
|
||||||
|
import { isRhData, RhCreated, RhData } from './models/RhData';
|
||||||
|
|
||||||
export default class MessageBus {
|
export default class MessageBus {
|
||||||
private static instance: MessageBus;
|
private static instance: MessageBus;
|
||||||
@ -407,15 +408,65 @@ export default class MessageBus {
|
|||||||
unsubscribe();
|
unsubscribe();
|
||||||
this.destroyMessageListener();
|
this.destroyMessageListener();
|
||||||
// Return value must contain the data commited in the new process
|
// Return value must contain the data commited in the new process
|
||||||
const folderData = processCreated.processData;
|
const data = processCreated.processData;
|
||||||
if (!folderData || !isFolderData(folderData)) reject('Returned invalid process data');
|
if (!data || !isFolderData(data)) reject('Returned invalid process data');
|
||||||
if (!processCreated.processId || typeof processCreated.processId !== 'string') reject('Returned invalid process id');
|
if (!processCreated.processId || typeof processCreated.processId !== 'string') reject('Returned invalid process id');
|
||||||
// TODO check that process is of type Process
|
// TODO check that process is of type Process
|
||||||
|
|
||||||
const folderCreated: FolderCreated = {
|
const folderCreated: FolderCreated = {
|
||||||
processId: processCreated.processId,
|
processId: processCreated.processId,
|
||||||
process: processCreated.process,
|
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);
|
resolve(folderCreated);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user