mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
built a component for delete button in tables, instead of using a modal to confirm it now does it in the row of the table, created a sass file for the component, the component uses css transitions for animation
This commit is contained in:
@@ -6,6 +6,7 @@ import { NavStore } from 'app/stores/NavStore/NavStore';
|
||||
import { TeamsStore, ITeam } from 'app/stores/TeamsStore/TeamsStore';
|
||||
import { BackendSrv } from 'app/core/services/backend_srv';
|
||||
import appEvents from 'app/core/app_events';
|
||||
import DeleteButton from 'app/core/components/DeleteButton/DeleteButton';
|
||||
|
||||
interface Props {
|
||||
nav: typeof NavStore.Type;
|
||||
@@ -28,18 +29,6 @@ export class TeamList extends React.Component<Props, any> {
|
||||
}
|
||||
|
||||
deleteTeam(team: ITeam) {
|
||||
appEvents.emit('confirm-modal', {
|
||||
title: 'Delete',
|
||||
text: 'Are you sure you want to delete Team ' + team.name + '?',
|
||||
yesText: 'Delete',
|
||||
icon: 'fa-warning',
|
||||
onConfirm: () => {
|
||||
this.deleteTeamConfirmed(team);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
deleteTeamConfirmed(team) {
|
||||
this.props.backendSrv.delete('/api/teams/' + team.id).then(this.fetchTeams.bind(this));
|
||||
}
|
||||
|
||||
@@ -67,9 +56,7 @@ export class TeamList extends React.Component<Props, any> {
|
||||
<a href={teamUrl}>{team.memberCount}</a>
|
||||
</td>
|
||||
<td className="text-right">
|
||||
<a onClick={() => this.deleteTeam(team)} className="btn btn-danger btn-small">
|
||||
<i className="fa fa-remove" />
|
||||
</a>
|
||||
<DeleteButton confirmDelete={() => this.deleteTeam(team)} />
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
@@ -102,7 +89,7 @@ export class TeamList extends React.Component<Props, any> {
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="admin-list-table">
|
||||
<div className="admin-list-table tr-overflow">
|
||||
<table className="filter-table filter-table--hover form-inline">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
78
public/app/core/components/DeleteButton/DeleteButton.tsx
Normal file
78
public/app/core/components/DeleteButton/DeleteButton.tsx
Normal file
@@ -0,0 +1,78 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
export default class DeleteButton extends Component<any, any> {
|
||||
state = {
|
||||
deleteButton: 'delete-button--show',
|
||||
confirmSpan: 'confirm-delete--removed',
|
||||
};
|
||||
|
||||
handleDelete = event => {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
this.setState({
|
||||
deleteButton: 'delete-button--hide',
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
deleteButton: 'delete-button--removed',
|
||||
});
|
||||
}, 100);
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
confirmSpan: 'confirm-delete--hide',
|
||||
});
|
||||
}, 100);
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
confirmSpan: 'confirm-delete--show',
|
||||
});
|
||||
}, 150);
|
||||
};
|
||||
|
||||
cancelDelete = event => {
|
||||
event.preventDefault();
|
||||
|
||||
this.setState({
|
||||
confirmSpan: 'confirm-delete--hide',
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
confirmSpan: 'confirm-delete--removed',
|
||||
deleteButton: 'delete-button--hide',
|
||||
});
|
||||
}, 140);
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
deleteButton: 'delete-button--show',
|
||||
});
|
||||
}, 190);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { confirmDelete } = this.props;
|
||||
return (
|
||||
<span className="delete-button-container">
|
||||
<a className={this.state.deleteButton + ' btn btn-danger btn-small'} onClick={this.handleDelete}>
|
||||
<i className="fa fa-remove" />
|
||||
</a>
|
||||
<span className="confirm-delete-container">
|
||||
<span className={this.state.confirmSpan}>
|
||||
<a className="btn btn-small" onClick={this.cancelDelete}>
|
||||
Cancel
|
||||
</a>
|
||||
<a className="btn btn-danger btn-small" onClick={confirmDelete}>
|
||||
Confirm Delete
|
||||
</a>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user