From 3f81e2d3b4f9b8721a6369e5ccb63615aaa1d088 Mon Sep 17 00:00:00 2001 From: Merul Dhiman Date: Wed, 28 Jan 2026 13:20:08 +0530 Subject: [PATCH 1/3] fix: ereference & esigner cosmetic changes --- .../src/controllers/DashboardController.ts | 21 +++++++++++-- .../esigner-api/src/services/FileService.ts | 3 ++ .../(protected)/files/[id]/+page.svelte | 16 +++++----- .../routes/(protected)/files/new/+page.svelte | 30 +++++++++---------- 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/platforms/eReputation-api/src/controllers/DashboardController.ts b/platforms/eReputation-api/src/controllers/DashboardController.ts index f18072f40..fb76f73c8 100644 --- a/platforms/eReputation-api/src/controllers/DashboardController.ts +++ b/platforms/eReputation-api/src/controllers/DashboardController.ts @@ -12,6 +12,23 @@ export class DashboardController { this.calculationService = new CalculationService(); } + /** + * Maps reference status from DB format to display format. + */ + private mapReferenceStatus(status: string): string { + switch (status?.toLowerCase()) { + case "revoked": + return "Revoked"; + case "signed": + case "active": + return "Signed"; + case "pending": + return "Pending"; + default: + return "Unknown"; + } + } + getStats = async (req: Request, res: Response) => { try { const userId = req.user!.id; @@ -58,7 +75,7 @@ export class DashboardController { target: ref.targetName, targetType: ref.targetType, date: ref.createdAt, - status: ref.status === 'revoked' ? 'Revoked' : 'Signed', + status: this.mapReferenceStatus(ref.status), data: ref }); }); @@ -76,7 +93,7 @@ export class DashboardController { target: authorName, targetType: 'user', date: ref.createdAt, - status: ref.status === 'revoked' ? 'Revoked' : 'Signed', + status: this.mapReferenceStatus(ref.status), data: ref }); }); diff --git a/platforms/esigner-api/src/services/FileService.ts b/platforms/esigner-api/src/services/FileService.ts index 39b60b137..f6b8ab5c4 100644 --- a/platforms/esigner-api/src/services/FileService.ts +++ b/platforms/esigner-api/src/services/FileService.ts @@ -118,6 +118,9 @@ export class FileService { } } + // Sort by creation time, newest first (so new files from others appear at top) + allFiles.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()); + // Hide soft-deleted (File Manager delete workaround: name [[deleted]]) return allFiles.filter((f) => f.name !== SOFT_DELETED_FILE_NAME); } diff --git a/platforms/esigner/src/routes/(protected)/files/[id]/+page.svelte b/platforms/esigner/src/routes/(protected)/files/[id]/+page.svelte index 7536b9ce6..d8379ec38 100644 --- a/platforms/esigner/src/routes/(protected)/files/[id]/+page.svelte +++ b/platforms/esigner/src/routes/(protected)/files/[id]/+page.svelte @@ -336,14 +336,14 @@
-
+
Back to Signature Containers -

{file?.displayName || file?.name || 'Signature Container'}

+

{file?.displayName || file?.name || 'Signature Container'}

{#if file?.description}

{file.description}

{/if} @@ -401,8 +401,8 @@
-
-
+
+
{#if previewUrl && (file.mimeType?.startsWith('image/') || file.mimeType === 'application/pdf')} @@ -420,10 +420,10 @@
-
+

Signature Container

-
+

Name

{file.displayName || file.name}

@@ -440,9 +440,9 @@

File Information

-
+
File Name: - {file.name} + {file.name}
Size: diff --git a/platforms/esigner/src/routes/(protected)/files/new/+page.svelte b/platforms/esigner/src/routes/(protected)/files/new/+page.svelte index f5e4ec402..b94eb36a9 100644 --- a/platforms/esigner/src/routes/(protected)/files/new/+page.svelte +++ b/platforms/esigner/src/routes/(protected)/files/new/+page.svelte @@ -298,16 +298,16 @@ displayName = file.displayName || file.name; description = file.description || ''; }} - class={`p-4 border-2 rounded-lg text-left transition-colors ${ - selectedFile?.id === file.id - ? 'border-blue-600 bg-blue-50' - : 'border-gray-200 hover:border-gray-300' - }`} - > -
- {getFileIcon(file.mimeType)} -
-

{file.displayName || file.name}

+ class={`p-4 border-2 rounded-lg text-left transition-colors min-w-0 overflow-hidden ${ + selectedFile?.id === file.id + ? 'border-blue-600 bg-blue-50' + : 'border-gray-200 hover:border-gray-300' + }`} + > +
+ {getFileIcon(file.mimeType)} +
+

{file.displayName || file.name}

{formatFileSize(file.size)}

@@ -395,11 +395,11 @@

Invite Signees

-
-
- {getFileIcon(selectedFile?.mimeType || '')} -
-

{selectedFile?.name}

+
+
+ {getFileIcon(selectedFile?.mimeType || '')} +
+

{selectedFile?.displayName || selectedFile?.name}

{formatFileSize(selectedFile?.size || 0)}

From be7fdd1ec6d6c5ac0617c4c3ac3d7045f455e319 Mon Sep 17 00:00:00 2001 From: Merul Dhiman Date: Wed, 28 Jan 2026 13:22:01 +0530 Subject: [PATCH 2/3] fix: UTC time instead of local --- platforms/evoting-api/src/services/MessageService.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/evoting-api/src/services/MessageService.ts b/platforms/evoting-api/src/services/MessageService.ts index 7ddae1c57..b94bb7fa0 100644 --- a/platforms/evoting-api/src/services/MessageService.ts +++ b/platforms/evoting-api/src/services/MessageService.ts @@ -66,7 +66,7 @@ export class MessageService { */ async createVoteCreatedMessage(groupId: string, voteTitle: string, voteId: string, creatorName: string, deadline?: Date | null): Promise { const deadlineText = deadline - ? `\nDeadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()}` + ? `\nDeadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()} UTC` : '\nNo deadline set'; const voteUrl = `${process.env.PUBLIC_EVOTING_URL || 'http://localhost:3000'}/${voteId}`; @@ -81,7 +81,7 @@ export class MessageService { * Create a system message for vote deadline crossing */ async createVoteDeadlineMessage(groupId: string, voteTitle: string, voteId: string, creatorName: string, deadline: Date): Promise { - const deadlineText = `\nOriginal Deadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()}`; + const deadlineText = `\nOriginal Deadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()} UTC`; return await this.createSystemMessage({ text: `eVoting Platform: Vote deadline passed!\n\n"${voteTitle}"\n\nVote ID: ${voteId}\n\nCreated by: ${creatorName}${deadlineText}\n\nThis vote has ended. Check the results!`, From e55a50954d4d8101fe8929658c468fbe79c99563 Mon Sep 17 00:00:00 2001 From: Merul Dhiman Date: Wed, 28 Jan 2026 13:33:10 +0530 Subject: [PATCH 3/3] fix: UTC time explicitly set at backend --- platforms/evoting-api/src/services/MessageService.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platforms/evoting-api/src/services/MessageService.ts b/platforms/evoting-api/src/services/MessageService.ts index b94bb7fa0..dec5b0052 100644 --- a/platforms/evoting-api/src/services/MessageService.ts +++ b/platforms/evoting-api/src/services/MessageService.ts @@ -3,6 +3,8 @@ import { Message } from "../database/entities/Message"; import { User } from "../database/entities/User"; import { Group } from "../database/entities/Group"; +const UTC_OPTIONS: { timeZone: 'UTC' } = { timeZone: 'UTC' }; + export class MessageService { public messageRepository = AppDataSource.getRepository(Message); private userRepository = AppDataSource.getRepository(User); @@ -66,7 +68,7 @@ export class MessageService { */ async createVoteCreatedMessage(groupId: string, voteTitle: string, voteId: string, creatorName: string, deadline?: Date | null): Promise { const deadlineText = deadline - ? `\nDeadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()} UTC` + ? `\nDeadline: ${deadline.toLocaleDateString(undefined, UTC_OPTIONS)} at ${deadline.toLocaleTimeString(undefined, UTC_OPTIONS)} UTC` : '\nNo deadline set'; const voteUrl = `${process.env.PUBLIC_EVOTING_URL || 'http://localhost:3000'}/${voteId}`; @@ -81,7 +83,7 @@ export class MessageService { * Create a system message for vote deadline crossing */ async createVoteDeadlineMessage(groupId: string, voteTitle: string, voteId: string, creatorName: string, deadline: Date): Promise { - const deadlineText = `\nOriginal Deadline: ${deadline.toLocaleDateString()} at ${deadline.toLocaleTimeString()} UTC`; + const deadlineText = `\nOriginal Deadline: ${deadline.toLocaleDateString(undefined, UTC_OPTIONS)} at ${deadline.toLocaleTimeString(undefined, UTC_OPTIONS)} UTC`; return await this.createSystemMessage({ text: `eVoting Platform: Vote deadline passed!\n\n"${voteTitle}"\n\nVote ID: ${voteId}\n\nCreated by: ${creatorName}${deadlineText}\n\nThis vote has ended. Check the results!`,