diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f12c4f4..131e8416 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. ## Unreleased +- [#140](https://github.com/os2display/display-client/pull/140) + - Fixed issue where campaign end resulted in blank screen. + ## [2.1.1] - 2024-10-23 - [#138](https://github.com/os2display/display-client/pull/138) diff --git a/src/components/region.jsx b/src/components/region.jsx index c49e51a9..623aee3f 100644 --- a/src/components/region.jsx +++ b/src/components/region.jsx @@ -111,12 +111,16 @@ function Region({ region }) { // Setup event listener for region content. useEffect(() => { + logger.info(`Mounting region ${regionId}`); + document.addEventListener( `regionContent-${regionId}`, regionContentListener ); return function cleanup() { + logger.info(`Unmounting region ${regionId}`); + // Emit event that region has been removed. const event = new CustomEvent("regionRemoved", { detail: { diff --git a/src/data-sync/pull-strategy.js b/src/data-sync/pull-strategy.js index bce13a2f..125f0792 100644 --- a/src/data-sync/pull-strategy.js +++ b/src/data-sync/pull-strategy.js @@ -202,8 +202,7 @@ class PullStrategy { const newScreen = cloneDeep(screen); - // Campaigns data - let hasActiveCampaign = false; + newScreen.hasActiveCampaign = false; const newScreenChecksums = newScreen?.relationsChecksum ?? []; const oldScreenChecksums = @@ -224,13 +223,13 @@ class PullStrategy { if (newScreen.campaignsData.length > 0) { newScreen.campaignsData.forEach(({ published }) => { if (isPublished(published)) { - hasActiveCampaign = true; + newScreen.hasActiveCampaign = true; } }); } // With active campaigns, we override region/layout values. - if (hasActiveCampaign) { + if (newScreen.hasActiveCampaign) { logger.info(`Has active campaign.`); // Create ulid to connect the campaign with the regions/playlists. @@ -259,8 +258,11 @@ class PullStrategy { newScreen.regionData ); } else { + logger.info(`Has no active campaign.`); + // Get layout: Defines layout and regions. if ( + this.lastestScreenData?.hasActiveCampaign || oldScreenChecksums === null || oldScreenChecksums?.layout !== newScreenChecksums?.layout ) { @@ -274,6 +276,7 @@ class PullStrategy { // Fetch regions playlists: Yields playlists of slides for the regions if ( + this.lastestScreenData?.hasActiveCampaign || oldScreenChecksums === null || oldScreenChecksums?.regions !== newScreenChecksums?.regions ) { @@ -394,8 +397,6 @@ class PullStrategy { } /* eslint-enable no-restricted-syntax,no-await-in-loop */ - logger.info(`Emitting screen data.`); - this.lastestScreenData = newScreen; // Deliver result to rendering diff --git a/src/service/schedule-service.js b/src/service/schedule-service.js index a237040f..3316dc8d 100644 --- a/src/service/schedule-service.js +++ b/src/service/schedule-service.js @@ -58,6 +58,9 @@ class ScheduleService { clearInterval(this.intervals[regionId]); delete this.intervals[regionId]; } + + // Remove cached version of region data. + delete this.regions[regionId]; } /**