| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- // Card Tools
 
- // -----------------------------------
 
- import React, { Component } from 'react';
 
- import PropTypes from 'prop-types';
 
- const checkRequiredProps = (props, propName, componentName) => {
 
-   if (!props.dismiss && !props.refresh) {
 
-     return new Error(`One of 'dismiss' or 'refresh' is required by '${componentName}' component.`)
 
-   }
 
- }
 
- /**
 
-  * Add action icons to card components to allow
 
-  * refresh data or remove a card element
 
-  */
 
- class CardTool extends Component {
 
-     static propTypes = {
 
-         /** show the refreshe icon */
 
-         refresh: checkRequiredProps,
 
-         /** show the remove icon */
 
-         dismiss: checkRequiredProps,
 
-         /** triggers before card is removed */
 
-         onRemove: PropTypes.func,
 
-         /** triggers after card was removed */
 
-         onRemoved: PropTypes.func,
 
-         /** triggers when user click on refresh button */
 
-         onRefresh: PropTypes.func,
 
-         /** name if the icon class to use as spinner */
 
-         spinner: PropTypes.string
 
-     }
 
-     static defaultProps = {
 
-         refresh: false,
 
-         dismiss: false,
 
-         onRemove: () => {},
 
-         onRemoved: () => {},
 
-         onRefresh: () => {},
 
-         spinner: 'standard'
 
-     }
 
-     /**
 
-      * Helper function to find the closest
 
-      * ascending .card element
 
-      */
 
-     getCardParent(item) {
 
-         var el = item.parentElement;
 
-         while (el && !el.classList.contains('card'))
 
-             el = el.parentElement
 
-         return el
 
-     }
 
-     handleDismiss = e => {
 
-         // find the first parent card
 
-         const card = this.getCardParent(this.element);
 
-         const destroyCard = () => {
 
-             // remove card
 
-             card.parentNode.removeChild(card);
 
-             // An event to catch when the card has been removed from DOM
 
-             this.props.onRemoved();
 
-         }
 
-         const animate = function(item, cb) {
 
-             if ('onanimationend' in window) { // animation supported
 
-                 item.addEventListener('animationend', cb.bind(this))
 
-                 item.className += ' animated bounceOut'; // requires animate.css
 
-             } else cb.call(this) // no animation, just remove
 
-         }
 
-         const confirmRemove = function() {
 
-             animate(card, function() {
 
-                 destroyCard();
 
-             })
 
-         }
 
-         // Trigger the event and finally remove the element
 
-         this.props.onRemove(card, confirmRemove);
 
-     }
 
-     handleRefresh = e => {
 
-         const WHIRL_CLASS = 'whirl';
 
-         const card = this.getCardParent(this.element);
 
-         const showSpinner = function(card, spinner) {
 
-             card.classList.add(WHIRL_CLASS);
 
-             spinner.forEach(function(s) { card.classList.add(s) })
 
-         }
 
-         // method to clear the spinner when done
 
-         const done = () => { card.classList.remove(WHIRL_CLASS); }
 
-         // start showing the spinner
 
-         showSpinner(card, this.props.spinner.split(' '));
 
-         // event to remove spinner when refres is done
 
-         this.props.onRefresh(card, done);
 
-     }
 
-     setRef = node => this.element = node;
 
-     render() {
 
-         return (
 
-             <div ref={this.setRef} className="card-tool float-right">
 
-                 { this.props.refresh && <em onClick={this.handleRefresh} className="fas fa-sync"></em> }
 
-                 { this.props.dismiss && <em onClick={this.handleDismiss} className="fa fa-times"></em> }
 
-             </div>
 
-         )
 
-     }
 
- }
 
- export default CardTool;
 
 
  |