declare global {
interface Window {
toggleUserList: typeof toggleUserList;
switchUser: typeof switchUser;
closeProcessDetails: typeof closeProcessDetails;
loadMemberChat: typeof loadMemberChat;
closeRoleDocuments: typeof closeRoleDocuments;
newRequest: typeof newRequest;
submitRequest: typeof submitRequest;
closeNewRequest: typeof closeNewRequest;
removeMember: typeof removeMember;
closeModal: typeof closeModal;
submitDocumentRequest: typeof submitDocumentRequest;
submitNewDocument: typeof submitNewDocument;
}
}
import { groupsMock } from '../../mocks/mock-signature/groupsMock';
import { messagesMock as initialMessagesMock } from '../../mocks/mock-signature/messagesMock';
import { membersMock } from '../../mocks/mock-signature/membersMocks';
import {
Group,
Message,
MemberMessages,
DocumentSignature,
RequestParams,
Notification as ImportedNotification
} from '../../models/signature.models';
import { messageStore } from '../../utils/messageMock';
import { showAlert } from '../account/account';
let currentUser = membersMock[0];
// Fonction pour gérer la liste des utilisateurs
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 => `
Description
${group.description || 'No description available'}
Roles and Documents
${group.roles.map(role => `
${role.name}
${(role.documents || []).length > 0 ?
(role.documents || []).map(document => {
const totalSignatures = document.signatures.length;
const signedCount = document.signatures.filter((sig: DocumentSignature) => sig.signed).length;
const percentage = totalSignatures > 0 ? (signedCount / totalSignatures) * 100 : 0;
// Détection d'un document vierge
const isVierge = !document.createdAt ||
!document.deadline ||
document.signatures.length === 0;
return `
${!isVierge ? `
Created on: ${document.createdAt ? new Date(document.createdAt).toLocaleDateString() : 'N/A'}
Deadline: ${document.deadline ? new Date(document.deadline).toLocaleDateString() : 'N/A'}
Duration: ${calculateDuration(document.createdAt || '', document.deadline || '')} days
` : '
Document vierge - En attente de création
'}
${!isVierge ? `
Signatures:
${document.signatures.map((sig: DocumentSignature) => `
${sig.member.name}
${sig.signed ?
`✓ Signed on ${sig.signedAt ? new Date(sig.signedAt).toLocaleDateString() : 'Unknown date'}` :
' Pending'}
`).join('')}
${signedCount} out of ${totalSignatures} signed (${percentage.toFixed(0)}%)
` : ''}
`;
}).join('')
: '
No documents available for this role
'}
`).join('')}
Members by Role
${group.roles.map(role => `
${role.name}
${role.members.map(member => `
- ${member.name}
`).join('')}
`).join('')}
`;
/**const newRequestBtn = document.createElement('button');
newRequestBtn.className = 'new-request-btn';
newRequestBtn.textContent = 'New request';
newRequestBtn.onclick = () => newRequest(group);**/
const newCloseProcessButton = document.createElement('button');
newCloseProcessButton.className = 'close-btn';
newCloseProcessButton.textContent = 'x';
newCloseProcessButton.addEventListener('click', () => closeProcessDetails(groupId));
const headerButtons = detailsArea.querySelector('.header-buttons');
if (headerButtons) {
/**headerButtons.appendChild(newRequestBtn);**/
headerButtons.appendChild(newCloseProcessButton);
}
}
}
// Fonction pour fermer les détails et revenir au chat
function closeProcessDetails(groupId: number) {
const detailsArea = document.getElementById(`process-details-${groupId}`);
const chatArea = document.getElementById('chat-area');
if (detailsArea) {
detailsArea.style.display = 'none';
}
if (chatArea) {
chatArea.style.display = 'block';
}
}
window.closeProcessDetails = closeProcessDetails;
window.loadMemberChat = loadMemberChat;
// Nouvelle fonction pour afficher les documents d'un rôle
function showRoleDocuments(role: {
name: string;
documents?: Array<{
name: string;
visibility: string;
createdAt: string | null | undefined;
deadline: string | null | undefined;
signatures: DocumentSignature[];
id: number;
description?: string;
status?: string;
}>;
id?: number;
}, group: Group) {
console.log('Showing documents for role:', role.name, 'in group:', group.name);
// Fermer d'abord toutes les vues de documents existantes
const allDetailsAreas = document.querySelectorAll('.process-details');
allDetailsAreas.forEach(area => {
area.remove();
});
const container = document.querySelector('.container');
if (!container) {
console.error('Container not found');
return;
}
// Créer une nouvelle zone de détails
const detailsArea = document.createElement('div');
detailsArea.id = `role-documents-${role.name}`;
detailsArea.className = 'process-details';
detailsArea.innerHTML = `