diff --git a/src/commons/achievement/utils/DateHelper.ts b/src/commons/achievement/utils/DateHelper.ts index 2f00d529e0..1d695f1a02 100644 --- a/src/commons/achievement/utils/DateHelper.ts +++ b/src/commons/achievement/utils/DateHelper.ts @@ -1,3 +1,5 @@ +import moment from 'moment'; + const now = new Date(); export const isExpired = (deadline?: Date) => deadline !== undefined && deadline <= now; @@ -36,61 +38,27 @@ export const timeFromExpired = (deadline?: Date) => export const prettifyDate = (deadline?: Date) => { if (deadline === undefined) return ''; - const months = [ - 'January', - 'February', - 'March', - 'April', - 'May', - 'June', - 'July', - 'August', - 'September', - 'October', - 'November', - 'December' - ]; - const day = deadline.getDate(); - const month = months[deadline.getMonth()]; - const year = deadline.getFullYear(); - const hour = deadline.getHours(); - const minute = deadline.getMinutes(); - const time = (hour < 10 ? '0' : '') + hour + ':' + (minute < 10 ? '0' : '') + minute; - - return `${day} ${month} ${year} ${time}`; + return moment(deadline).format('D MMMM YYYY HH:mm'); }; export const prettifyTime = (time?: Date) => { if (time === undefined) return ''; - const hour = time.getHours(); - const minute = time.getMinutes(); - return (hour < 10 ? '0' : '') + hour + ':' + (minute < 10 ? '0' : '') + minute; + return moment(time).format('HH:mm'); }; // Converts Date to deadline countdown export const prettifyDeadline = (deadline?: Date) => { - /* ---------- Date constants ---------- */ - const daysPerWeek = 7; - const hoursPerDay = 24; - const millisecondsPerHour = 3600000; - - /* -------- Helper for Deadline -------- */ - const isExpired = (deadline: Date): boolean => deadline.getTime() <= now.getTime(); - const getHoursAway = (deadline: Date): number => - (deadline.getTime() - now.getTime()) / millisecondsPerHour; - const getDaysAway = (deadline: Date): number => getHoursAway(deadline) / hoursPerDay; - const getWeeksAway = (deadline: Date): number => getDaysAway(deadline) / daysPerWeek; - - /* -------- Prettifies Deadline -------- */ if (deadline === undefined) { return 'Unlimited'; } else if (isExpired(deadline)) { return 'Expired'; } - const weeksAway = Math.ceil(getWeeksAway(deadline)); - const daysAway = Math.ceil(getDaysAway(deadline)); - const hoursAway = Math.ceil(getHoursAway(deadline)); + const now = moment(); + + const weeksAway = Math.ceil(moment(deadline).diff(now, 'weeks', true)); + const daysAway = Math.ceil(moment(deadline).diff(now, 'days', true)); + const hoursAway = Math.ceil(moment(deadline).diff(now, 'hours', true)); let prettifiedDeadline = ''; if (weeksAway > 1) { diff --git a/src/commons/achievement/utils/EventHandler.ts b/src/commons/achievement/utils/EventHandler.ts index 176a3d6cd0..1afb233e2c 100644 --- a/src/commons/achievement/utils/EventHandler.ts +++ b/src/commons/achievement/utils/EventHandler.ts @@ -8,6 +8,7 @@ import { GoalType } from '../../../features/achievement/AchievementTypes'; import { store } from '../../../pages/createStore'; +import Constants from '../../utils/Constants'; import { showSuccessMessage } from '../../utils/NotificationsHelper'; import AchievementInferencer from './AchievementInferencer'; import { isExpired, isReleased, isWithinTimeRange } from './DateHelper'; @@ -74,13 +75,15 @@ function resetLoggedEvents() { } export function processEvent(eventNames: EventType[]) { - loggedEvents.push(eventNames); + if (store.getState().session.role && !Constants.playgroundOnly && Constants.enableAchievements) { + loggedEvents.push(eventNames); - if (!timeoutSet) { - timeoutSet = true; - setTimeout(() => { - store.dispatch(handleEvent(loggedEvents)); - resetLoggedEvents(); - }, updateInterval); + if (!timeoutSet) { + timeoutSet = true; + setTimeout(() => { + store.dispatch(handleEvent(loggedEvents)); + resetLoggedEvents(); + }, updateInterval); + } } }