Stackedit/src/services/badgeSvc.js
2022-05-27 07:55:37 +08:00

38 lines
1.1 KiB
JavaScript

import store from '../store';
let lastEarnedFeatureIds = null;
let debounceTimeoutId;
const showInfo = () => {
const earnedBadges = store.getters['data/allBadges']
.filter(badge => badge.isEarned && !lastEarnedFeatureIds.has(badge.featureId));
if (earnedBadges.length) {
store.dispatch('notification/badge', earnedBadges.length > 1
? `您已获得 ${earnedBadges.length} 个徽章: ${earnedBadges.map(badge => `"${badge.name}"`).join(', ')}.`
: `您已获得 1 个徽章: "${earnedBadges[0].name}".`);
}
lastEarnedFeatureIds = null;
};
export default {
addBadge(featureId) {
if (!store.getters['data/badgeCreations'][featureId]) {
if (!lastEarnedFeatureIds) {
const earnedFeatureIds = store.getters['data/allBadges']
.filter(badge => badge.isEarned)
.map(badge => badge.featureId);
lastEarnedFeatureIds = new Set(earnedFeatureIds);
}
store.dispatch('data/patchBadgeCreations', {
[featureId]: {
created: Date.now(),
},
});
clearTimeout(debounceTimeoutId);
debounceTimeoutId = setTimeout(() => showInfo(), 5000);
}
},
};