aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx')
-rw-r--r--server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx63
1 files changed, 57 insertions, 6 deletions
diff --git a/server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx b/server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx
index 027db43c2f3..777e91f7691 100644
--- a/server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx
+++ b/server/sonar-web/src/main/js/apps/projectNewCode/components/NewCodeDefinitionSettingAnalysis.tsx
@@ -17,26 +17,77 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import { subDays } from 'date-fns';
+import { SelectionCard } from 'design-system';
import * as React from 'react';
-import RadioCard from '../../../components/controls/RadioCard';
+import { useEffect, useState } from 'react';
+import { getProjectActivity } from '../../../api/projectActivity';
+import DateTimeFormatter from '../../../components/intl/DateTimeFormatter';
+import NewCodeDefinitionAnalysisWarning from '../../../components/new-code-definition/NewCodeDefinitionAnalysisWarning';
+import { parseDate, toShortISO8601String } from '../../../helpers/dates';
import { translate } from '../../../helpers/l10n';
import { NewCodeDefinitionType } from '../../../types/new-code-definition';
+import { Analysis } from '../../../types/project-activity';
export interface Props {
onSelect: (selection: NewCodeDefinitionType) => void;
selected: boolean;
+ analysis: string;
+ branch: string;
+ component: string;
}
-export default function NewCodeDefinitionSettingAnalysis({ onSelect, selected }: Props) {
+export default function NewCodeDefinitionSettingAnalysis({
+ onSelect,
+ selected,
+ analysis,
+ branch,
+ component,
+}: Readonly<Props>) {
+ const [parsedAnalysis, setParsedAnalysis] = useState<Analysis>();
+
+ const BASE_DAY_SEARCH = 30;
+
+ useEffect(() => {
+ async function fetchAnalyses(range = BASE_DAY_SEARCH, initial = true) {
+ const result = await getProjectActivity({
+ branch,
+ project: component,
+ from: range ? toShortISO8601String(subDays(new Date(), range)) : undefined,
+ });
+ // If the selected analysis wasn't found in the default 30 days range, redo the search
+ if (initial && analysis && !result.analyses.find((a) => a.key === analysis)) {
+ fetchAnalyses(0, false);
+ return;
+ }
+
+ const filteredResult = result.analyses.find((a) => a.key === analysis);
+ setParsedAnalysis(filteredResult);
+ }
+
+ fetchAnalyses();
+ }, [analysis, branch, component]);
+
+ const parsedDate = parsedAnalysis?.date ? parseDate(parsedAnalysis?.date) : '';
+
return (
- <RadioCard
- noRadio
+ <SelectionCard
disabled
onClick={() => onSelect(NewCodeDefinitionType.SpecificAnalysis)}
selected={selected}
title={translate('baseline.specific_analysis')}
>
- <p className="big-spacer-bottom">{translate('baseline.specific_analysis.description')}</p>
- </RadioCard>
+ <p className="sw-mb-4">{translate('baseline.specific_analysis.description')}</p>
+ {parsedAnalysis && (
+ <p className="sw-mb-4">
+ <span>
+ {`${translate('baseline.specific_analysis')}: `}
+ {parsedDate ? <DateTimeFormatter date={parsedDate} /> : '?'}
+ </span>
+ </p>
+ )}
+
+ <NewCodeDefinitionAnalysisWarning />
+ </SelectionCard>
);
}