feat: Enhance validation viewing functionality with event emission

- Updated the `createMarkViewedHandler` to emit an event when a validation is marked as viewed, allowing the UI to update the unviewed count dynamically.
- Modified the `useUnviewedValidations` hook to handle the new event type for decrementing the unviewed validations count.
- Introduced a new event type `issue_validation_viewed` in the issue validation event type definition for better event handling.
This commit is contained in:
Kacper
2025-12-23 22:25:48 +01:00
parent d1418aa054
commit dd27c5c4fb
4 changed files with 23 additions and 2 deletions

View File

@@ -45,7 +45,7 @@ export function createGitHubRoutes(events: EventEmitter): Router {
router.post(
'/validation-mark-viewed',
validatePathParams('projectPath'),
createMarkViewedHandler()
createMarkViewedHandler(events)
);
return router;

View File

@@ -3,6 +3,8 @@
*/
import type { Request, Response } from 'express';
import type { EventEmitter } from '../../../lib/events.js';
import type { IssueValidationEvent } from '@automaker/types';
import {
isValidationRunning,
getValidationStatus,
@@ -193,7 +195,7 @@ export function createDeleteValidationHandler() {
/**
* POST /validation-mark-viewed - Mark a validation as viewed by the user
*/
export function createMarkViewedHandler() {
export function createMarkViewedHandler(events: EventEmitter) {
return async (req: Request, res: Response): Promise<void> => {
try {
const { projectPath, issueNumber } = req.body as {
@@ -215,6 +217,16 @@ export function createMarkViewedHandler() {
const success = await markValidationViewed(projectPath, issueNumber);
if (success) {
// Emit event so UI can update the unviewed count
const viewedEvent: IssueValidationEvent = {
type: 'issue_validation_viewed',
issueNumber,
projectPath,
};
events.emit('issue-validation:event', viewedEvent);
}
res.json({ success });
} catch (error) {
logError(error, 'Mark validation viewed failed');

View File

@@ -45,7 +45,11 @@ export function useUnviewedValidations(currentProject: Project | null) {
const unsubscribe = api.github.onValidationEvent((event) => {
if (event.projectPath === currentProject.path) {
if (event.type === 'issue_validation_complete') {
// New validation completed - increment count
setCount((prev) => prev + 1);
} else if (event.type === 'issue_validation_viewed') {
// Validation was viewed - decrement count
setCount((prev) => Math.max(0, prev - 1));
}
}
});

View File

@@ -109,6 +109,11 @@ export type IssueValidationEvent =
issueNumber: number;
error: string;
projectPath: string;
}
| {
type: 'issue_validation_viewed';
issueNumber: number;
projectPath: string;
};
/**