From 95d018620278d88b2ffd100204c3490709812160 Mon Sep 17 00:00:00 2001 From: Pascal Date: Wed, 27 Nov 2024 12:07:36 +0100 Subject: [PATCH] clean_sign_translation --- src/interface/groupInterface.ts | 0 src/interface/memberInterface.ts | 7 + src/interface/signatureResponseInterface.ts | 0 src/mocks/mock-signature/groupsMock.js | 40 ++ src/pages/signature/signature.ts | 391 +++++++++----------- 5 files changed, 221 insertions(+), 217 deletions(-) create mode 100644 src/interface/groupInterface.ts create mode 100644 src/interface/memberInterface.ts create mode 100644 src/interface/signatureResponseInterface.ts diff --git a/src/interface/groupInterface.ts b/src/interface/groupInterface.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/interface/memberInterface.ts b/src/interface/memberInterface.ts new file mode 100644 index 0000000..20b80d2 --- /dev/null +++ b/src/interface/memberInterface.ts @@ -0,0 +1,7 @@ +export interface Member { + id: string | number; + name: string; + email?: string; + avatar?: string; + processRoles?: Array<{ processId: number | string; role: string }>; +} diff --git a/src/interface/signatureResponseInterface.ts b/src/interface/signatureResponseInterface.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/mocks/mock-signature/groupsMock.js b/src/mocks/mock-signature/groupsMock.js index f5e8142..e98588c 100755 --- a/src/mocks/mock-signature/groupsMock.js +++ b/src/mocks/mock-signature/groupsMock.js @@ -204,6 +204,46 @@ export const groupsMock = [ createdAt: null, deadline: null, signatures: [] + }, + { + id: 11, + name: "Document Process D", + description: "Document vierge pour validation processus", + visibility: VISIBILITY_LEVELS.PUBLIC, + status: DOCUMENT_STATUS.PENDING, + createdAt: "2024-01-15", + deadline: "2024-02-01", + signatures: [ + { + member: { id: 3, name: "Charlie" }, + signed: true, + signedAt: "2024-01-15" + }, + { + member: { id: 4, name: "David" }, + signed: false + } + ] + }, + { + id: 12, + name: "Document Process E", + description: "Document vierge pour validation processus", + visibility: VISIBILITY_LEVELS.PUBLIC, + status: DOCUMENT_STATUS.PENDING, + createdAt: "2024-01-15", + deadline: "2024-02-01", + signatures: [ + { + member: { id: 3, name: "Charlie" }, + signed: true, + signedAt: "2024-01-15" + }, + { + member: { id: 4, name: "David" }, + signed: false + } + ] } ] }, diff --git a/src/pages/signature/signature.ts b/src/pages/signature/signature.ts index b489ef1..4a0a1f7 100755 --- a/src/pages/signature/signature.ts +++ b/src/pages/signature/signature.ts @@ -8,7 +8,6 @@ declare global { newRequest: typeof newRequest; submitRequest: typeof submitRequest; closeNewRequest: typeof closeNewRequest; - removeMember: typeof removeMember; closeModal: typeof closeModal; submitDocumentRequest: typeof submitDocumentRequest; submitNewDocument: typeof submitNewDocument; @@ -30,45 +29,19 @@ import { } from '../../models/signature.models'; import { messageStore } from '../../utils/messageMock'; import { showAlert } from '../account/account'; +import { Member } from '../../interface/memberInterface'; +import { Group } from '../../interface/groupInterface'; -interface Member { - id: string | number; - name: string; - email?: string; - avatar?: string; - processRoles?: Array<{ processId: number | string; role: string }>; -} let currentUser: Member = membersMock[0]; -interface Group { - id: number; - name: string; - description: string; - roles: Array<{ - name: string; - members: Array<{ id: string | number; name: string }>; - documents?: Array; - }>; - commonDocuments: Array<{ - id: number; - name: string; - visibility: string; - description: string; - createdAt?: string | null; - deadline?: string | null; - signatures?: DocumentSignature[]; - status?: string; - }>; -} -// Fonction pour gérer la liste des utilisateurs +// Function to manage the list of users function toggleUserList() { const userList = document.getElementById('userList'); if (!userList) return; if (!userList.classList.contains('show')) { - // Remplir la liste des utilisateurs userList.innerHTML = membersMock.map(member => `
${member.avatar} @@ -82,7 +55,7 @@ function toggleUserList() { userList?.classList.toggle('show'); } -// Fonction pour changer d'utilisateur +// Function to switch user function switchUser(userId: string | number) { const user = membersMock.find(member => member.id === userId); if (!user) return; @@ -92,7 +65,7 @@ function switchUser(userId: string | number) { userList?.classList.remove('show'); } -// Fonction pour mettre à jour l'affichage de l'utilisateur +// Function to update the display of the current user function updateCurrentUserDisplay() { const userDisplay = document.getElementById('current-user'); if (userDisplay) { @@ -105,15 +78,15 @@ function updateCurrentUserDisplay() { } } -// Ajouter les fonctions au scope global +// Add the functions to the global scope window.toggleUserList = toggleUserList; window.switchUser = switchUser; -// Initialiser l'affichage de l'utilisateur courant au chargement +// Initialize the display of the current user when the page loads document.addEventListener('DOMContentLoaded', () => { updateCurrentUserDisplay(); - // Fermer la liste si on clique ailleurs + // Close the list if clicked elsewhere document.addEventListener('click', (event) => { const userList = document.getElementById('userList'); const userSwitchBtn = document.getElementById('userSwitchBtn'); @@ -122,7 +95,7 @@ document.addEventListener('DOMContentLoaded', () => { } }); - // Initialiser les groupes en localStorage s'ils n'existent pas + // Initialize the groups in localStorage if they don't exist if (!localStorage.getItem('groups')) { localStorage.setItem('groups', JSON.stringify(groupsMock)); } @@ -146,11 +119,11 @@ function loadGroupList() { const li = document.createElement('li'); li.className = 'group-list-item'; - // Créer un conteneur flex pour le nom et l'icône + // Create a flex container for the name and the icon const container = document.createElement('div'); container.className = 'group-item-container'; - // Span pour le nom du processus + // Span for the process name const nameSpan = document.createElement('span'); nameSpan.textContent = group.name; nameSpan.className = 'process-name'; @@ -159,13 +132,12 @@ function loadGroupList() { toggleRoles(group, li); }; - // Ajouter l'icône ⚙️ avec un ID unique + // Add the ⚙️ icon with a unique ID const settingsIcon = document.createElement('span'); settingsIcon.textContent = '⚙️'; settingsIcon.className = 'settings-icon'; - settingsIcon.id = `settings-${group.id}`; // ID unique basé sur l'ID du groupe + settingsIcon.id = `settings-${group.id}`; // Unique ID based on the group ID - // Créer une div pour la vue détaillée avec un ID unique correspondant const detailsArea = document.createElement('div'); detailsArea.id = `process-details-${group.id}`; detailsArea.className = 'process-details'; @@ -176,7 +148,7 @@ function loadGroupList() { showProcessDetails(group, group.id); }; - // Assembler les éléments + // Assemble the elements container.appendChild(nameSpan); container.appendChild(settingsIcon); li.appendChild(container); @@ -198,18 +170,18 @@ function toggleRoles(group: Group, groupElement: HTMLElement) { group.roles.forEach(role => { const roleItem = document.createElement('li'); - // Créer un conteneur flex pour le nom et l'icône + // Create a flex container for the name and the icon const container = document.createElement('div'); container.className = 'role-item-container'; container.style.display = 'flex'; container.style.justifyContent = 'space-between'; container.style.alignItems = 'center'; - // Span pour le nom du rôle + // Span for the role name const nameSpan = document.createElement('span'); nameSpan.textContent = role.name; - // Bouton dossier + // Folder button const folderButton = document.createElement('span'); folderButton.textContent = '📁'; folderButton.className = 'folder-icon'; @@ -218,7 +190,7 @@ function toggleRoles(group: Group, groupElement: HTMLElement) { showRoleDocuments(role, group); }; - // Assembler les éléments + // Assemble the elements container.appendChild(nameSpan); container.appendChild(folderButton); roleItem.appendChild(container); @@ -234,7 +206,6 @@ function toggleRoles(group: Group, groupElement: HTMLElement) { groupElement.appendChild(roleList); } -// Toggle the list of membres function toggleMembers(role: { members: { id: string | number; name: string; }[] }, roleElement: HTMLElement) { let memberList = roleElement.querySelector('.member-list'); if (memberList) { @@ -261,12 +232,12 @@ function toggleMembers(role: { members: { id: string | number; name: string; }[] } -// Load the list of members + // Load the list of members function loadMemberChat(memberId: string | number) { selectedMemberId = String(memberId); const memberMessages = messagesMock.find(m => String(m.memberId) === String(memberId)); - // Trouver le processus et le rôle du membre + // Find the process and the role of the member let memberInfo = { processName: '', roleName: '', memberName: '' }; groupsMock.forEach(process => { process.roles.forEach(role => { @@ -349,15 +320,15 @@ function sendMessage() { type: 'text' as const }; - // Ajouter et afficher le message immédiatement + // Add and display the message immediately messageStore.addMessage(selectedMemberId, newMessage); messagesMock = messageStore.getMessages(); loadMemberChat(selectedMemberId); - // Réinitialiser l'input + // Reset the input messageInput.value = ''; - // Réponse automatique après 2 secondes + // Automatic response after 2 seconds setTimeout(() => { if (selectedMemberId) { const autoReply = generateAutoReply(`Member ${selectedMemberId}`); @@ -509,11 +480,11 @@ document.addEventListener('click', (event) => { }); // ------------------ PROCESS DETAILS ------------------ -// Fonction pour afficher les détails du processus +// Function to display the process details function showProcessDetails(group: Group, groupId: number) { console.log('Showing details for group:', groupId); - // Fermer toutes les vues de processus existantes + // Close all existing process views const allDetailsAreas = document.querySelectorAll('.process-details'); allDetailsAreas.forEach(area => { (area as HTMLElement).style.display = 'none'; @@ -525,11 +496,11 @@ function showProcessDetails(group: Group, groupId: number) { return; } - // Charger les données du localStorage + // Load the data from localStorage const storedGroups = JSON.parse(localStorage.getItem('groups') || '[]'); const storedGroup = storedGroups.find((g: Group) => g.id === groupId); - // Utiliser les données du localStorage si disponibles, sinon utiliser le groupe passé en paramètre + // Use the data from localStorage if available, otherwise use the group passed as a parameter const displayGroup = storedGroup || group; let detailsArea = document.getElementById(`process-details-${groupId}`); @@ -565,7 +536,6 @@ function showProcessDetails(group: Group, groupId: number) { sig.member && 'id' in sig.member && sig.member.id === currentUser.id && !sig.signed ); - // Ajouter le bouton de signature pour tous les documents non vierges en mode dev const signButton = !isVierge ? ` ${totalSignatures > 0 && signedCount < totalSignatures && canSign ? `
` : ` -

Document vierge - En attente de création

+

Blank document - Waiting for creation

${canUserAccessDocument(document, displayRole.name, currentUser.processRoles?.[0]?.role || '') ? `