mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-12 06:24:14 +00:00
Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com>
87 lines
2.3 KiB
TypeScript
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 }
|
|
: {}),
|
|
};
|
|
}
|