@@ -182,74 +182,93 @@ const prplUpdateRaviGauge = ( pointsDiff ) => {
182182 badge . setAttribute ( 'complete' , 'true' ) ;
183183 } ) ;
184184
185- // If the previous month badge progress bar exists, update it.
186- const previousMonthBadgeProgressBar = document
187- . getElementById ( 'prpl-previous-month-badge-progress-bar' )
188- . querySelector ( 'prpl-badge-progress-bar' ) ;
189- if ( previousMonthBadgeProgressBar ) {
190- const previousMonthBadgeId =
191- previousMonthBadgeProgressBar . getAttribute ( 'data-badge-id' ) ;
192- const previousMonthBadgePoints =
193- previousMonthBadgeProgressBar . getAttribute ( 'data-points' ) ;
194- const previousMonthBadgeMaxPoints =
195- previousMonthBadgeProgressBar . getAttribute ( 'data-max-points' ) ;
196- const PreviousBadgeProgress = customElements . get (
197- 'prpl-badge-progress-bar'
198- ) ;
199- const previousBadgeNewPoints =
200- parseInt ( previousMonthBadgePoints ) + pointsDiff ;
201- const newProgressBar = new PreviousBadgeProgress (
202- previousMonthBadgeId ,
203- previousBadgeNewPoints ,
204- previousMonthBadgeMaxPoints
205- ) ;
206- newProgressBar . setAttribute (
207- 'data-badge-id' ,
208- previousMonthBadgeId
209- ) ;
210- newProgressBar . setAttribute (
211- 'data-points' ,
212- previousBadgeNewPoints
213- ) ;
214- newProgressBar . setAttribute (
215- 'data-max-points' ,
216- previousMonthBadgeMaxPoints
217- ) ;
218- previousMonthBadgeProgressBar . replaceWith ( newProgressBar ) ;
219-
220- // Update the remaining points.
221- const remainingPoints = document . getElementById (
222- 'prpl-previous-month-badge-progress-bar-remaining'
223- ) ;
224- remainingPoints . textContent = remainingPoints . textContent . replace (
225- remainingPoints . getAttribute ( 'data-remaining' ) ,
226- previousMonthBadgeMaxPoints - previousBadgeNewPoints
227- ) ;
228- remainingPoints . setAttribute (
229- 'data-remaining' ,
230- previousMonthBadgeMaxPoints - previousBadgeNewPoints
231- ) ;
232-
233- // Update the previous month badge points number.
234- const previousMonthBadgePointsNumber = document . getElementById (
235- 'prpl-widget-previous-ravi-points-number'
236- ) ;
237- previousMonthBadgePointsNumber . textContent =
238- previousBadgeNewPoints + 'pt' ;
239-
240- // If the previous month badge is completed, update badge elements.
241- if (
242- previousBadgeNewPoints >=
243- parseInt ( previousMonthBadgeMaxPoints )
244- ) {
245- document
246- . querySelectorAll (
247- `.prpl-badge-row-wrapper-inner .prpl-badge prpl-badge[complete="false"][badge-id="${ previousMonthBadgeId } "]`
248- )
249- ?. forEach ( ( badge ) => {
250- badge . setAttribute ( 'complete' , 'true' ) ;
251- } ) ;
252- }
185+ if ( gaugeProps . value >= parseInt ( gaugeProps . max ) ) {
186+ prplUpdatePreviousMonthBadgeProgressBar ( pointsDiff ) ;
253187 }
254188 }
255189} ;
190+
191+ const prplUpdatePreviousMonthBadgeProgressBar = ( pointsDiff ) => {
192+ const progressBars = document . querySelectorAll (
193+ '.prpl-previous-month-badge-progress-bar-wrapper prpl-badge-progress-bar'
194+ ) ;
195+
196+ // Bail early if no badge progress bars are found.
197+ if ( ! progressBars . length ) {
198+ return ;
199+ }
200+
201+ // Get the 1st incomplete badge progress bar.
202+ const progressBar =
203+ parseInt ( progressBars [ 0 ] ?. getAttribute ( 'data-points' ) ) >=
204+ parseInt ( progressBars [ 0 ] ?. getAttribute ( 'data-max-points' ) )
205+ ? progressBars [ 1 ]
206+ : progressBars [ 0 ] ;
207+
208+ // Bail early if no badge progress bar is found.
209+ if ( ! progressBar ) {
210+ return ;
211+ }
212+
213+ // Get the badge progress bar properties.
214+ const badgeId = progressBar . getAttribute ( 'data-badge-id' ) ;
215+ const badgePoints = progressBar . getAttribute ( 'data-points' ) ;
216+ const badgeMaxPoints = progressBar . getAttribute ( 'data-max-points' ) ;
217+ const badgeProgress = customElements . get ( 'prpl-badge-progress-bar' ) ;
218+ const badgeNewPoints = parseInt ( badgePoints ) + pointsDiff ;
219+
220+ // Create a new badge progress bar.
221+ const newProgressBar = new badgeProgress (
222+ badgeId ,
223+ badgeNewPoints ,
224+ badgeMaxPoints
225+ ) ;
226+ newProgressBar . setAttribute ( 'data-badge-id' , badgeId ) ;
227+ newProgressBar . setAttribute ( 'data-points' , badgeNewPoints ) ;
228+ newProgressBar . setAttribute ( 'data-max-points' , badgeMaxPoints ) ;
229+
230+ // Replace the old badge progress bar with the new one.
231+ progressBar . replaceWith ( newProgressBar ) ;
232+
233+ // Update the remaining points.
234+ const remainingPointsEl = document . querySelector (
235+ `.prpl-previous-month-badge-progress-bar-wrapper[data-badge-id="${ badgeId } "] .prpl-previous-month-badge-progress-bar-remaining`
236+ ) ;
237+
238+ if ( remainingPointsEl ) {
239+ remainingPointsEl . textContent = remainingPointsEl . textContent . replace (
240+ remainingPointsEl . getAttribute ( 'data-remaining' ) ,
241+ badgeMaxPoints - badgeNewPoints
242+ ) ;
243+ remainingPointsEl . setAttribute (
244+ 'data-remaining' ,
245+ badgeMaxPoints - badgeNewPoints
246+ ) ;
247+ }
248+
249+ // Update the previous month badge points number.
250+ const badgePointsNumberEl = document . querySelector (
251+ `.prpl-previous-month-badge-progress-bar-wrapper[data-badge-id="${ badgeId } "] .prpl-widget-previous-ravi-points-number`
252+ ) ;
253+ if ( badgePointsNumberEl ) {
254+ badgePointsNumberEl . textContent = badgeNewPoints + 'pt' ;
255+ }
256+
257+ // If the previous month badge is completed, update badge elements.
258+ if ( badgeNewPoints >= parseInt ( badgeMaxPoints ) ) {
259+ document
260+ . querySelectorAll (
261+ `.prpl-badge-row-wrapper-inner .prpl-badge prpl-badge[complete="false"][badge-id="${ badgeId } "]`
262+ )
263+ ?. forEach ( ( badge ) => {
264+ badge . setAttribute ( 'complete' , 'true' ) ;
265+ } ) ;
266+
267+ // Remove the previous month badge progress bar.
268+ document
269+ . querySelector (
270+ `.prpl-previous-month-badge-progress-bar-wrapper[data-badge-id="${ badgeId } "]`
271+ )
272+ ?. remove ( ) ;
273+ }
274+ } ;
0 commit comments