@mekari/mekari-ui-vue
Version:
--- General web components in Mekari. The components are made using vue.js as its framework. Styling of components on Mekari UI Vue uses [Mekari UI Toolkit](https://bitbucket.org/mid-kelola-indonesia/mekari-ui-toolkit/src/master/). Don't forget to import
84 lines (77 loc) • 1.94 kB
JavaScript
import ToastContainer from './index';
import eventBus from './bus';
const allTimeout = [];
const Api = (Vue, globalOptions = {}) => {
return {
openSingleToast(propsData) {
allTimeout.forEach(timeout => {
clearTimeout(timeout);
});
this.clear();
allTimeout.push(setTimeout(() => {
return new (Vue.extend(ToastContainer))({
el: document.createElement('div'),
propsData,
});
}, 250));
},
openMultipleToast(propsData) {
return new (Vue.extend(ToastContainer))({
el: document.createElement('div'),
propsData,
});
},
open(options) {
let description;
if (typeof options === 'string') description = options;
const defaultOptions = {
description,
};
let propsData = { ...defaultOptions, ...globalOptions };
if (typeof options !== 'string') propsData = { ...propsData, ...options };
if (options.singleToast) {
return this.openSingleToast(propsData);
}
return this.openMultipleToast(propsData);
},
clear() {
eventBus.emit('toast-clear');
},
success(message, options = {}) {
return this.open({
description: message,
type: 'success',
...options,
});
},
error(message, options = {}) {
return this.open({
description: message,
type: 'error',
...options,
});
},
info(message, options = {}) {
return this.open({
description: message,
type: 'info',
...options,
});
},
warning(message, options = {}) {
return this.open({
description: message,
type: 'warning',
...options,
});
},
default(message, options = {}) {
return this.open({
description: message,
type: 'default',
...options,
});
},
};
};
export default Api;