Files
prowler/ui/components/findings/table/finding-triage-submit.ts

87 lines
2.3 KiB
TypeScript

import { FINDING_STATUS } from "@/types/components";
import {
FINDING_TRIAGE_STATUS,
type FindingTriageDetail,
type FindingTriageManualStatus,
type FindingTriageModalStatus,
isManualStatus,
type UpdateFindingTriageInput,
} from "@/types/findings-triage";
export interface BuildFindingTriageUpdateInputParams {
triage: FindingTriageDetail;
selectedStatus: FindingTriageModalStatus;
noteBody: string;
manualPassEvidence?: string;
}
export function buildFindingTriageUpdateInput({
triage,
selectedStatus,
noteBody,
manualPassEvidence = "",
}: BuildFindingTriageUpdateInputParams): UpdateFindingTriageInput | null {
const trimmedNote = noteBody.trim();
const trimmedManualPassEvidence = manualPassEvidence.trim();
const statusChanged = selectedStatus !== triage.status;
if (
selectedStatus === FINDING_TRIAGE_STATUS.RESOLVED &&
selectedStatus !== triage.status
) {
if (
triage.rawFindingStatus !== FINDING_STATUS.MANUAL ||
!isManualStatus(triage.status) ||
trimmedManualPassEvidence.length === 0
) {
return null;
}
return {
findingId: triage.findingId,
findingUid: triage.findingUid,
triageId: triage.triageId,
notesCount: triage.notesCount,
noteId: triage.noteId,
isMuted: triage.isMuted,
status: FINDING_TRIAGE_STATUS.RESOLVED,
previousStatus: triage.status,
manualPassEvidence: trimmedManualPassEvidence,
};
}
const shouldCreateFirstNote =
triage.notesCount === 0 && trimmedNote.length > 0;
const shouldUpdateExistingNote =
triage.notesCount > 0 &&
triage.noteId !== null &&
trimmedNote !== triage.noteBody;
const shouldIncludeStatus =
isManualStatus(selectedStatus) && (statusChanged || shouldCreateFirstNote);
if (
!shouldIncludeStatus &&
!shouldCreateFirstNote &&
!shouldUpdateExistingNote
) {
return null;
}
return {
findingId: triage.findingId,
findingUid: triage.findingUid,
triageId: triage.triageId,
notesCount: triage.notesCount,
noteId: triage.noteId,
isMuted: triage.isMuted,
...(shouldIncludeStatus
? {
status: selectedStatus as FindingTriageManualStatus,
previousStatus: triage.status,
}
: {}),
...(shouldCreateFirstNote || shouldUpdateExistingNote
? { note: trimmedNote }
: {}),
};
}