Stackedit/src/store/notification.js
Benoit Schweblin 1b2d48ff22 Removed monetizejs sponsorship support.
Reduced time counter increment interval.
Added badge service.
Refactored user service.
Replaced Google+ with People API.
2019-06-22 22:19:01 +01:00

91 lines
2.3 KiB
JavaScript

import providerRegistry from '../services/providers/common/providerRegistry';
import utils from '../services/utils';
const defaultTimeout = 5000; // 5 sec
export default {
namespaced: true,
state: {
items: [],
},
mutations: {
setItems: (state, value) => {
state.items = value;
},
},
actions: {
showItem({ state, commit }, item) {
const existingItem = utils.someResult(
state.items,
other => other.type === item.type && other.content === item.content && item,
);
if (existingItem) {
return existingItem.promise;
}
item.promise = new Promise((resolve, reject) => {
commit('setItems', [...state.items, item]);
const removeItem = () => commit(
'setItems',
state.items.filter(otherItem => otherItem !== item),
);
setTimeout(
() => removeItem(),
item.timeout || defaultTimeout,
);
item.resolve = (res) => {
removeItem();
resolve(res);
};
item.reject = (err) => {
removeItem();
reject(err);
};
});
return item.promise;
},
info({ dispatch }, content) {
return dispatch('showItem', {
type: 'info',
content,
});
},
badge({ dispatch }, content) {
return dispatch('showItem', {
type: 'badge',
content,
});
},
confirm({ dispatch }, content) {
return dispatch('showItem', {
type: 'confirm',
content,
timeout: 10000, // 10 sec
});
},
error({ dispatch, rootState }, error) {
const item = { type: 'error' };
if (error) {
if (error.message) {
item.content = error.message;
} else if (error.status) {
const location = rootState.queue.currentLocation;
if (location.providerId) {
const provider = providerRegistry.providersById[location.providerId];
item.content = `HTTP error ${error.status} on ${provider.name} location.`;
} else {
item.content = `HTTP error ${error.status}.`;
}
} else {
item.content = `${error}`;
}
}
if (!item.content || item.content === '[object Object]') {
item.content = 'Unknown error.';
}
return dispatch('showItem', item);
},
},
};