1b2d48ff22
Reduced time counter increment interval. Added badge service. Refactored user service. Replaced Google+ with People API.
91 lines
2.3 KiB
JavaScript
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);
|
|
},
|
|
},
|
|
};
|