@@ -17,13 +17,13 @@ class DisplayNetwork {
1717 return fetch ( this . root , { method : 'GET' } )
1818 }
1919
20- getAvailableAd ( lastShownDate ) {
20+ getAvailableAd ( lastShownDate , lastShownImpression ) {
2121 return new Promise ( ( resolve , reject ) => {
2222 this . getAds ( ) . then ( response => {
2323 response . json ( ) . then ( ads => {
2424
2525 let availableAds = ads . reduce ( ( prev , current ) => {
26- if ( this . checkImpressionAvailability ( parseInt ( lastShownDate ) , current ) ) {
26+ if ( this . checkImpressionAvailability ( parseInt ( lastShownDate ) , parseInt ( lastShownImpression ) , current ) ) {
2727 prev . push ( current )
2828 }
2929 return prev
@@ -42,28 +42,36 @@ class DisplayNetwork {
4242 }
4343
4444 getAdInterval ( ad ) {
45- if ( WP_ENV == 'development' ) return 1000
45+ if ( WP_ENV == 'development' ) return 10000
4646
47- let interval = 0
48- switch ( ad . impression_interval ) {
49- case 'daily' : interval = DAILY_INTERVAL
50- break ;
51- case 'weekly' : interval = WEEKLY_INTERVAL
52- break ;
53- case 'monthly' : interval = MONTHLY_INTERVAL
54- break ;
55- }
56-
57- return interval
47+ return parseInt ( ad . impression_net_interval )
5848 }
5949
60- checkImpressionAvailability ( lastShownDate , ad ) {
50+ checkImpressionAvailability ( lastShownDate , lastShownImpression , ad ) {
51+
6152 let adInterval = this . getAdInterval ( ad )
6253 let availableTimeWindow = ( ! lastShownDate || lastShownDate + adInterval < this . timeStampNow )
6354
64- return availableTimeWindow
65- }
55+ // Check if the ad is optimised for impression rather than time
56+ if ( ad . impression_count ) {
57+ let availableImpression = ( lastShownImpression < parseInt ( ad . impression_count ) )
58+
59+ if ( availableTimeWindow && availableImpression || ! availableTimeWindow && availableImpression ) {
60+ // meanwhile there is impressions left, spend the impression
61+ return true
62+ } else
63+ if ( availableTimeWindow && ! availableImpression ) {
64+ // when impressions limit is reached and time window is valid, reset the impression
65+ parent . postMessage ( { pluginMessage : { type : 'resetImpression' } } , '*' )
66+ return false
67+ } else {
68+ return false
69+ }
70+ } else {
71+ return availableTimeWindow
72+ }
6673
74+ }
6775}
6876
6977export default new DisplayNetwork ( )
0 commit comments