All files / sp-toast-container ViewModel.js

85.71% Statements 6/7
100% Branches 0/0
66.67% Functions 2/3
85.71% Lines 6/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46          1x                                                 2x 2x 2x                 1x 1x      
import DefineMap from 'can-define/map/map';
import DefineList from 'can-define/list/list';
import Toast from '../sp-toast/ViewModel';
 
 
export const ToastList = DefineList.extend('ToastList', {
    '#': Toast
});
 
/**
 * A `<sp-toast-container />` component's ViewModel
 * @class sp-toast-container.ViewModel ViewModel
 * @memberof sp-toast-container
 */
export default DefineMap.extend('ToastContainer', {
    /** @lends sp-toast-container.ViewModel.prototype */
    /**
     * An array of alert toasts
     * @type {Array<sp-toast.ViewModel>}
     * @memberof sp-toast-container.ViewModel.prototype
     */
    toasts: {
        Type: ToastList,
        Default: ToastList
    },
    /**
   * adds a new toast
   * @param {sp-toast.ViewModel} toastProps the toast options or toast object to add
   */
    addToast (toastProps) {
        this.toasts.push(toastProps);
        const newToast = this.toasts[this.toasts.length - 1];
        newToast.on('hide', (event, toastItem) => {
            this.removeToast(toastItem);
        });
    },
    /**
     * Removes a toast
     * @param  {sp-toast.ViewModel} toast the toast object to remove
     */
    removeToast: function (toast) {
        var index = this.toasts.indexOf(toast);
        this.toasts.splice(index, 1);
    }
});