DeleteButton.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React, { PureComponent, SyntheticEvent } from 'react';
  2. interface Props {
  3. onConfirm(): void;
  4. disabled?: boolean;
  5. }
  6. interface State {
  7. showConfirm: boolean;
  8. }
  9. export class DeleteButton extends PureComponent<Props, State> {
  10. state: State = {
  11. showConfirm: false,
  12. };
  13. onClickDelete = (event: SyntheticEvent) => {
  14. if (event) {
  15. event.preventDefault();
  16. }
  17. this.setState({
  18. showConfirm: true,
  19. });
  20. };
  21. onClickCancel = (event: SyntheticEvent) => {
  22. if (event) {
  23. event.preventDefault();
  24. }
  25. this.setState({
  26. showConfirm: false,
  27. });
  28. };
  29. render() {
  30. const { onConfirm, disabled } = this.props;
  31. const showConfirmClass = this.state.showConfirm ? 'show' : 'hide';
  32. const showDeleteButtonClass = this.state.showConfirm ? 'hide' : 'show';
  33. const disabledClass = disabled ? 'disabled btn-inverse' : '';
  34. const onClick = disabled ? () => {} : this.onClickDelete;
  35. return (
  36. <span className="delete-button-container">
  37. <a
  38. className={`delete-button ${showDeleteButtonClass} btn btn-danger btn-small ${disabledClass}`}
  39. onClick={onClick}
  40. >
  41. <i className="fa fa-remove" />
  42. </a>
  43. <span className="confirm-delete-container">
  44. <span className={`confirm-delete ${showConfirmClass}`}>
  45. <a className="btn btn-small" onClick={this.onClickCancel}>
  46. Cancel
  47. </a>
  48. <a className="btn btn-danger btn-small" onClick={onConfirm}>
  49. Confirm Delete
  50. </a>
  51. </span>
  52. </span>
  53. </span>
  54. );
  55. }
  56. }