/* * SonarQube * Copyright (C) 2009-2023 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import withCurrentUserContext from '../../../app/components/current-user/withCurrentUserContext'; import Link from '../../../components/common/Link'; import DismissableAlert from '../../../components/ui/DismissableAlert'; import { translate } from '../../../helpers/l10n'; import { queryToSearch } from '../../../helpers/urls'; import { useProjectBindingQuery } from '../../../queries/devops-integration'; import { ComponentQualifier } from '../../../types/component'; import { Component } from '../../../types/types'; import { CurrentUser, isLoggedIn } from '../../../types/users'; import { PULL_REQUEST_DECORATION_BINDING_CATEGORY } from '../../settings/constants'; export interface FirstAnalysisNextStepsNotifProps { branchesEnabled?: boolean; component: Component; currentUser: CurrentUser; detectedCIOnLastAnalysis?: boolean; } export function FirstAnalysisNextStepsNotif(props: FirstAnalysisNextStepsNotifProps) { const { component, currentUser, branchesEnabled, detectedCIOnLastAnalysis } = props; const { data: projectBinding, isLoading } = useProjectBindingQuery(component.key); if (!isLoggedIn(currentUser) || component.qualifier !== ComponentQualifier.Project || isLoading) { return null; } const showConfigurePullRequestDecoNotif = branchesEnabled && projectBinding == null; const showConfigureCINotif = detectedCIOnLastAnalysis !== undefined ? !detectedCIOnLastAnalysis : false; if (!showConfigureCINotif && !showConfigurePullRequestDecoNotif) { return null; } const showOnlyConfigureCI = showConfigureCINotif && !showConfigurePullRequestDecoNotif; const showOnlyConfigurePR = showConfigurePullRequestDecoNotif && !showConfigureCINotif; const showBoth = showConfigureCINotif && showConfigurePullRequestDecoNotif; const isProjectAdmin = component.configuration?.showSettings; const tutorialsLink = ( {translate('overview.project.next_steps.links.set_up_ci')} ); const projectSettingsLink = ( {translate('overview.project.next_steps.links.project_settings')} ); return ( {showOnlyConfigureCI && ( )} {showOnlyConfigurePR && (isProjectAdmin ? ( ) : ( translate('overview.project.next_steps.set_up_pr_deco') ))} {showBoth && (isProjectAdmin ? ( ) : ( ))} ); } export default withCurrentUserContext(FirstAnalysisNextStepsNotif);