@gitlab/ui
Version:
GitLab UI Components
110 lines (94 loc) • 3.12 kB
JavaScript
import Toasted from '@gitlab/vue-toasted';
import iconsPath from '@gitlab/svgs/dist/icons.svg';
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
var DEFAULT_OPTIONS = {
action: {
text: null,
icon: function icon() {
var icon = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
var path = document.createElementNS('http://www.w3.org/2000/svg', 'use');
icon.appendChild(path);
icon.setAttribute('class', 'gl-icon s14');
path.setAttribute('href', "".concat(iconsPath, "#close"));
return icon;
},
class: 'toast-close',
onClick: function onClick(e, toastObject) {
return toastObject.goAway(0);
}
},
iconPack: 'callback',
position: 'bottom-left',
duration: 5000,
singleton: true,
className: 'gl-toast',
keepOnHover: true
};
/**
* Note: This is not a typical Vue component and needs to be registered before instantiating a Vue app.
* Once registered, the toast will be globally available throughout your app.
*
* See https://gitlab-org.gitlab.io/gitlab-ui/ for detailed documentation.
*/
var toast = {
install: function install(Vue) {
var _this = this;
/* eslint-disable no-param-reassign */
Vue.use(Toasted, DEFAULT_OPTIONS);
Vue.prototype.$toast = {
show: function show(message) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Vue.toasted.show("<span>".concat(message, "</span>"), _this.generateOptions(options));
}
};
},
generateOptions: function generateOptions(options) {
var updatedOptions = _objectSpread2(_objectSpread2({}, DEFAULT_OPTIONS), options); // ensures only one extra action can be added
// ensures toasts always have a close/dismiss button
if (options.action) {
updatedOptions.action = [options.action, DEFAULT_OPTIONS.action];
}
return updatedOptions;
}
};
export default toast;