github.com/outbrain/consul@v1.4.5/ui-v2/app/services/feedback.js (about)

     1  import Service, { inject as service } from '@ember/service';
     2  import { get, set } from '@ember/object';
     3  import callableType from 'consul-ui/utils/callable-type';
     4  
     5  const TYPE_SUCCESS = 'success';
     6  const TYPE_ERROR = 'error';
     7  const defaultStatus = function(type, obj) {
     8    return type;
     9  };
    10  const notificationDefaults = function() {
    11    return {
    12      timeout: 6000,
    13      extendedTimeout: 300,
    14    };
    15  };
    16  export default Service.extend({
    17    notify: service('flashMessages'),
    18    logger: service('logger'),
    19    execute: function(handle, action, status = defaultStatus, controller) {
    20      set(controller, 'isLoading', true);
    21      const getAction = callableType(action);
    22      const getStatus = callableType(status);
    23      const notify = get(this, 'notify');
    24      return (
    25        handle()
    26          //TODO: pass this through to getAction..
    27          .then(item => {
    28            // returning exactly `false` for a feedback action means even though
    29            // its successful, please skip this notification and don't display it
    30            if (item !== false) {
    31              notify.clearMessages();
    32              // TODO right now the majority of `item` is a Transition
    33              // but you can resolve an object
    34              notify.add({
    35                ...notificationDefaults(),
    36                type: getStatus(TYPE_SUCCESS),
    37                // here..
    38                action: getAction(),
    39                item: item,
    40              });
    41            }
    42          })
    43          .catch(e => {
    44            notify.clearMessages();
    45            get(this, 'logger').execute(e);
    46            if (e.name === 'TransitionAborted') {
    47              notify.add({
    48                ...notificationDefaults(),
    49                type: getStatus(TYPE_SUCCESS),
    50                // and here
    51                action: getAction(),
    52              });
    53            } else {
    54              notify.add({
    55                ...notificationDefaults(),
    56                type: getStatus(TYPE_ERROR, e),
    57                action: getAction(),
    58              });
    59            }
    60          })
    61          .finally(function() {
    62            set(controller, 'isLoading', false);
    63          })
    64      );
    65    },
    66  });