1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * SonarQube
- * Copyright (C) 2009-2020 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 { Button } from 'sonar-ui-common/components/controls/buttons';
- import ConfirmButton from 'sonar-ui-common/components/controls/ConfirmButton';
- import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n';
- import { deleteApplication } from '../../api/application';
- import { deletePortfolio, deleteProject } from '../../api/components';
- import addGlobalSuccessMessage from '../../app/utils/addGlobalSuccessMessage';
- import { Router, withRouter } from '../../components/hoc/withRouter';
- import { isApplication, isPortfolioLike } from '../../types/component';
-
- interface Props {
- component: Pick<T.Component, 'key' | 'name' | 'qualifier'>;
- router: Pick<Router, 'replace'>;
- }
-
- export class Form extends React.PureComponent<Props> {
- handleDelete = async () => {
- const { component } = this.props;
- let deleteMethod = deleteProject;
- let redirectTo = '/';
- if (isPortfolioLike(component.qualifier)) {
- deleteMethod = deletePortfolio;
- redirectTo = '/portfolios';
- } else if (isApplication(component.qualifier)) {
- deleteMethod = deleteApplication;
- }
-
- await deleteMethod(component.key);
-
- addGlobalSuccessMessage(
- translateWithParameters('project_deletion.resource_deleted', component.name)
- );
- this.props.router.replace(redirectTo);
- };
-
- render() {
- const { component } = this.props;
- return (
- <ConfirmButton
- confirmButtonText={translate('delete')}
- isDestructive={true}
- modalBody={translateWithParameters(
- 'project_deletion.delete_resource_confirmation',
- component.name
- )}
- modalHeader={translate('qualifier.delete', component.qualifier)}
- onConfirm={this.handleDelete}>
- {({ onClick }) => (
- <Button className="button-red" id="delete-project" onClick={onClick}>
- {translate('delete')}
- </Button>
- )}
- </ConfirmButton>
- );
- }
- }
-
- export default withRouter(Form);
|