From 20e5d1f5cd18e2053489a5eeb12e784b914c0d91 Mon Sep 17 00:00:00 2001 From: om-chauhan1 Date: Sat, 27 Jan 2024 22:23:36 +0530 Subject: [PATCH 1/3] Solved bug of next estimated update --- .../components/overview/statistics_update_info.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/components/overview/statistics_update_info.jsx b/app/assets/javascripts/components/overview/statistics_update_info.jsx index deec4b648e..c37fa5a2be 100644 --- a/app/assets/javascripts/components/overview/statistics_update_info.jsx +++ b/app/assets/javascripts/components/overview/statistics_update_info.jsx @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import StatisticsUpdateModal from './statistics_update_modal'; import { getUpdateMessage } from '../../utils/statistic_update_info_utils'; +import { isAfter, toDate } from 'date-fns'; const StatisticsUpdateInfo = ({ course }) => { const [showModal, setShowModal] = useState(false); @@ -26,8 +27,9 @@ const StatisticsUpdateInfo = ({ course }) => { /> ); } - - const updateTimesMessage = isNextUpdateAfter ? `${lastUpdateMessage} ${nextUpdateMessage} ` : `${lastUpdateMessage} `; + const updatesEndMoment = toDate(course.update_until); + const futureUpdatesRemaining = isAfter(updatesEndMoment, new Date()); + const updateTimesMessage = (isNextUpdateAfter && futureUpdatesRemaining) ? `${lastUpdateMessage} ${nextUpdateMessage} ` : `${lastUpdateMessage} `; // Render update time information and if some updates were made a 'See More' link to open modal return ( From 5a5536fc568a7348c5c4d4b1232c11133f110df5 Mon Sep 17 00:00:00 2001 From: om-chauhan1 Date: Sun, 28 Jan 2024 08:21:53 +0530 Subject: [PATCH 2/3] Applied Fix at utils of statistic_update_info --- .../components/overview/statistics_update_info.jsx | 5 +---- app/assets/javascripts/utils/statistic_update_info_utils.js | 6 ++++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/components/overview/statistics_update_info.jsx b/app/assets/javascripts/components/overview/statistics_update_info.jsx index c37fa5a2be..1bdf97d7d5 100644 --- a/app/assets/javascripts/components/overview/statistics_update_info.jsx +++ b/app/assets/javascripts/components/overview/statistics_update_info.jsx @@ -2,7 +2,6 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import StatisticsUpdateModal from './statistics_update_modal'; import { getUpdateMessage } from '../../utils/statistic_update_info_utils'; -import { isAfter, toDate } from 'date-fns'; const StatisticsUpdateInfo = ({ course }) => { const [showModal, setShowModal] = useState(false); @@ -27,9 +26,7 @@ const StatisticsUpdateInfo = ({ course }) => { /> ); } - const updatesEndMoment = toDate(course.update_until); - const futureUpdatesRemaining = isAfter(updatesEndMoment, new Date()); - const updateTimesMessage = (isNextUpdateAfter && futureUpdatesRemaining) ? `${lastUpdateMessage} ${nextUpdateMessage} ` : `${lastUpdateMessage} `; + const updateTimesMessage = isNextUpdateAfter ? `${lastUpdateMessage} ${nextUpdateMessage} ` : `${lastUpdateMessage} `; // Render update time information and if some updates were made a 'See More' link to open modal return ( diff --git a/app/assets/javascripts/utils/statistic_update_info_utils.js b/app/assets/javascripts/utils/statistic_update_info_utils.js index 68cbb81373..574aa95f16 100644 --- a/app/assets/javascripts/utils/statistic_update_info_utils.js +++ b/app/assets/javascripts/utils/statistic_update_info_utils.js @@ -19,11 +19,12 @@ const getLastUpdateMessage = (course) => { let nextUpdateMessage = ''; let isNextUpdateAfter = false; const lastUpdateMoment = lastSuccessfulUpdateMoment(course.flags.update_logs); + const updatesEndMoment = toDate(course.update_until); if (lastUpdateMoment) { const averageDelay = course.updates.average_delay ?? 0; lastUpdateMessage = `${I18n.t('metrics.last_update')}: ${formatDistanceToNow(lastUpdateMoment, { addSuffix: true })}.`; const nextUpdateExpectedTime = addSeconds(lastUpdateMoment, averageDelay); - isNextUpdateAfter = isAfter(nextUpdateExpectedTime, new Date()); + isNextUpdateAfter = (isAfter(nextUpdateExpectedTime, new Date()) && isAfter(updatesEndMoment, new Date())); nextUpdateMessage = `${I18n.t('metrics.next_update')}: ${formatDistanceToNow(nextUpdateExpectedTime, { addSuffix: true })}.`; } return [lastUpdateMessage, nextUpdateMessage, isNextUpdateAfter]; @@ -59,9 +60,10 @@ const getFirstUpdateMessage = (course) => { let lastUpdateMessage = ''; let nextUpdateMessage = ''; let isNextUpdateAfter = false; + const updatesEndMoment = toDate(course.update_until); if (course.flags.first_update) { const nextUpdateExpectedTime = firstUpdateTime(course.flags.first_update); - isNextUpdateAfter = isAfter(nextUpdateExpectedTime, new Date()); + isNextUpdateAfter = (isAfter(nextUpdateExpectedTime, new Date()) && isAfter(updatesEndMoment, new Date())); nextUpdateMessage = `${I18n.t('metrics.first_update')}: ${formatDistanceToNow(nextUpdateExpectedTime, { addSuffix: true })}.`; lastUpdateMessage = `${I18n.t('metrics.enqueued_update')}`; } else { From 0cc98f902c4705d0fe1c414815936eccadf68cfa Mon Sep 17 00:00:00 2001 From: om-chauhan1 Date: Thu, 15 Feb 2024 06:19:27 +0530 Subject: [PATCH 3/3] Improves code quality in statistic_update_info_utils.js --- .../javascripts/utils/statistic_update_info_utils.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/utils/statistic_update_info_utils.js b/app/assets/javascripts/utils/statistic_update_info_utils.js index 574aa95f16..3cc4e6ccbd 100644 --- a/app/assets/javascripts/utils/statistic_update_info_utils.js +++ b/app/assets/javascripts/utils/statistic_update_info_utils.js @@ -14,6 +14,10 @@ const lastSuccessfulUpdateMoment = (update_logs) => { return new Date(lastSuccessfulUpdateTime); }; +const isNextUpdateAfterUpdatesEnd = (nextUpdateExpectedTime, updatesEndMoment) => { + return isAfter(nextUpdateExpectedTime, new Date()) && isAfter(updatesEndMoment, new Date()); +}; + const getLastUpdateMessage = (course) => { let lastUpdateMessage = ''; let nextUpdateMessage = ''; @@ -24,7 +28,7 @@ const getLastUpdateMessage = (course) => { const averageDelay = course.updates.average_delay ?? 0; lastUpdateMessage = `${I18n.t('metrics.last_update')}: ${formatDistanceToNow(lastUpdateMoment, { addSuffix: true })}.`; const nextUpdateExpectedTime = addSeconds(lastUpdateMoment, averageDelay); - isNextUpdateAfter = (isAfter(nextUpdateExpectedTime, new Date()) && isAfter(updatesEndMoment, new Date())); + isNextUpdateAfter = isNextUpdateAfterUpdatesEnd(nextUpdateExpectedTime, updatesEndMoment); nextUpdateMessage = `${I18n.t('metrics.next_update')}: ${formatDistanceToNow(nextUpdateExpectedTime, { addSuffix: true })}.`; } return [lastUpdateMessage, nextUpdateMessage, isNextUpdateAfter]; @@ -63,7 +67,7 @@ const getFirstUpdateMessage = (course) => { const updatesEndMoment = toDate(course.update_until); if (course.flags.first_update) { const nextUpdateExpectedTime = firstUpdateTime(course.flags.first_update); - isNextUpdateAfter = (isAfter(nextUpdateExpectedTime, new Date()) && isAfter(updatesEndMoment, new Date())); + isNextUpdateAfter = isNextUpdateAfterUpdatesEnd(nextUpdateExpectedTime, updatesEndMoment); nextUpdateMessage = `${I18n.t('metrics.first_update')}: ${formatDistanceToNow(nextUpdateExpectedTime, { addSuffix: true })}.`; lastUpdateMessage = `${I18n.t('metrics.enqueued_update')}`; } else {