mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-23 20:42:02 +00:00
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { getJiraSelectionBatches } from "@/lib/jira-dispatch-selection";
|
|
import {
|
|
JIRA_DISPATCH_MODE,
|
|
JIRA_DISPATCH_TARGET,
|
|
JIRA_TARGET_SELECTION_KIND,
|
|
type JiraDispatchMode,
|
|
} from "@/types/integrations";
|
|
import type { JiraDispatchModalPayload } from "@/types/jira-dispatch";
|
|
|
|
export interface JiraDispatchActionState {
|
|
defaultDispatchMode: JiraDispatchMode;
|
|
canChooseGroupedDispatch: boolean;
|
|
requiresUpgrade: boolean;
|
|
}
|
|
|
|
export interface JiraActionLabelCounts {
|
|
findingGroupCount?: number;
|
|
findingCount?: number;
|
|
}
|
|
|
|
export const getJiraDispatchActionState = (
|
|
payload: JiraDispatchModalPayload,
|
|
groupedDispatchEnabled: boolean,
|
|
): JiraDispatchActionState => {
|
|
const batches = getJiraSelectionBatches(payload.selection);
|
|
const targetCount = batches.reduce(
|
|
(count, batch) => count + batch.targetIds.length,
|
|
0,
|
|
);
|
|
const hasFindingGroupTargets = batches.some(
|
|
(batch) => batch.targetType === JIRA_DISPATCH_TARGET.CHECK_ID,
|
|
);
|
|
const requiresGroupedFeature =
|
|
hasFindingGroupTargets || batches.length > 1 || targetCount > 1;
|
|
const firstBatch = batches[0];
|
|
const canChooseGroupedDispatch =
|
|
groupedDispatchEnabled &&
|
|
payload.selection.kind !== JIRA_TARGET_SELECTION_KIND.BATCHES &&
|
|
(firstBatch.targetType === JIRA_DISPATCH_TARGET.FINDING_ID
|
|
? firstBatch.targetIds.length > 1
|
|
: firstBatch.targetIds.length === 1 &&
|
|
(payload.selectedResourceCount ?? 0) > 1);
|
|
|
|
return {
|
|
defaultDispatchMode: requiresGroupedFeature
|
|
? JIRA_DISPATCH_MODE.GROUPED
|
|
: JIRA_DISPATCH_MODE.INDIVIDUAL,
|
|
canChooseGroupedDispatch,
|
|
requiresUpgrade: requiresGroupedFeature && !groupedDispatchEnabled,
|
|
};
|
|
};
|
|
|
|
const buildEntityLabel = (
|
|
count: number,
|
|
singular: string,
|
|
plural: string,
|
|
): string | null => {
|
|
if (count === 0) return null;
|
|
return `${count} ${count === 1 ? singular : plural}`;
|
|
};
|
|
|
|
export const buildJiraActionLabel = ({
|
|
findingGroupCount = 0,
|
|
findingCount = 0,
|
|
}: JiraActionLabelCounts): string => {
|
|
const entities = [
|
|
buildEntityLabel(findingGroupCount, "Finding Group", "Finding Groups"),
|
|
buildEntityLabel(findingCount, "Finding", "Findings"),
|
|
].filter(Boolean);
|
|
|
|
return entities.length > 0
|
|
? `Send ${entities.join(" and ")} to Jira`
|
|
: "Send to Jira";
|
|
};
|