Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 3x 22x | import React from "react";
import { SECURITY_SUMMARY_WIDGET_IDS } from "../../../constants/testIds";
import { formatCurrency } from "../../../utils/formatUtils";
/**
* Props for SecurityBusinessTab component
*/
export interface SecurityBusinessTabProps {
businessMaturityLevel: string;
businessMaturityDescription: string;
securityScore: number;
costDetails: {
totalCapex: number;
totalOpex: number;
totalCost: number;
};
testId: string;
roiEstimate: string;
}
/**
* Business Value tab component for SecuritySummaryWidget
* Displays business impact, ROI, costs, and business enablement
*/
export const SecurityBusinessTab: React.FC<SecurityBusinessTabProps> = ({
businessMaturityLevel,
businessMaturityDescription,
securityScore,
costDetails,
testId,
roiEstimate,
}) => {
return (
<div data-testid={testId || SECURITY_SUMMARY_WIDGET_IDS.section('content-business')} className="space-y-sm">
{/* Business Value content */}
<div className="p-sm bg-blue-50 dark:bg-blue-900/20 rounded mb-sm">
<p className="text-caption">
Business value and financial impact of your security levels.
</p>
</div>
{/* Business Impact Summary */}
<div className="rounded-lg border border-gray-100 dark:border-gray-700 p-sm bg-white dark:bg-gray-800">
<h3 className="text-body-lg font-medium mb-sm text-gray-800 dark:text-gray-100">
Business Value Summary
</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-sm">
{/* Business Maturity */}
<div className="p-sm bg-blue-50 dark:bg-blue-900/20 rounded">
<h4 className="text-caption font-medium text-blue-700 dark:text-blue-300">
Business Maturity
</h4>
<div className="text-body-lg font-bold text-blue-600 dark:text-blue-400 mt-sm">
{businessMaturityLevel}
</div>
</div>
{/* ROI Estimation */}
<div className="p-sm bg-green-50 dark:bg-green-900/20 rounded">
<h4 className="text-caption font-medium text-green-700 dark:text-green-300">
Estimated ROI
</h4>
<div className="text-body-lg font-bold text-green-600 dark:text-green-400 mt-sm">
{roiEstimate}
</div>
</div>
</div>
</div>
{/* Cost Summary */}
<div className="rounded-lg border border-gray-100 dark:border-gray-700 p-sm bg-white dark:bg-gray-800">
<h3 className="text-body-lg font-medium mb-sm text-gray-800 dark:text-gray-100">
Cost Summary
</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-sm">
{/* Implementation Cost */}
<div className="p-sm bg-gray-50 dark:bg-gray-700 rounded">
<div className="text-xs font-medium mb-sm text-gray-700 dark:text-gray-200">CAPEX</div>
<div className="text-body-lg font-bold text-blue-600 dark:text-blue-400">
{formatCurrency(costDetails.totalCapex)}
</div>
</div>
{/* Operational Cost */}
<div className="p-sm bg-gray-50 dark:bg-gray-700 rounded">
<div className="text-xs font-medium mb-sm text-gray-700 dark:text-gray-200">OPEX</div>
<div className="text-body-lg font-bold text-green-600 dark:text-green-400">
{formatCurrency(costDetails.totalOpex)}
</div>
</div>
{/* Total Cost */}
<div className="p-sm bg-gray-50 dark:bg-gray-700 rounded">
<div className="text-xs font-medium mb-sm text-gray-700 dark:text-gray-200">
Total
</div>
<div className="text-body-lg font-bold text-purple-600 dark:text-purple-400">
{formatCurrency(costDetails.totalCost)}
</div>
</div>
</div>
</div>
</div>
);
};
|