@@ -122,7 +122,7 @@ export default class Cmp {
122122 return this . store . getFullVendorConsentsObject ( vendorIds )
123123 . then ( consent => {
124124 consent . gdprApplies = this . gdprApplies ;
125- callback ( consent ) ;
125+ callback ( consent , true ) ;
126126 return consent ;
127127 } ) ;
128128 } ,
@@ -131,12 +131,16 @@ export default class Cmp {
131131 * Get the encoded vendor consent data value.
132132 */
133133 getConsentData : ( _ , callback = ( ) => { } ) => {
134- const consentData = {
135- gdprApplies : this . gdprApplies ,
136- hasGlobalScope : this . config . storeConsentGlobally ,
137- consentData : this . generateConsentString ( )
138- } ;
139- callback ( consentData , true ) ;
134+ return this . store . getFullVendorConsentsObject ( )
135+ . then ( consent => {
136+ const output = {
137+ gdprApplies : this . gdprApplies ,
138+ hasGlobalScope : this . config . storeConsentGlobally ,
139+ consentData : consent . consentString
140+ } ;
141+ callback ( output , true ) ;
142+ return output ;
143+ } ) ;
140144 } ,
141145
142146 /**
@@ -224,8 +228,9 @@ export default class Cmp {
224228 * Trigger the consent tool UI to be shown
225229 */
226230 showConsentTool : ( _ , callback = ( ) => { } ) => {
231+ const self = this ;
227232 let _command ;
228- switch ( this . config . layout ) {
233+ switch ( self . config . layout ) {
229234 case 'footer' :
230235 _command = 'toggleFooterConsentToolShowing' ;
231236 break ;
@@ -236,8 +241,9 @@ export default class Cmp {
236241 _command = 'toggleConsentToolShowing' ;
237242 }
238243
239- this . cmpShown = true ;
240- this . store [ _command ] ( true ) ;
244+ self . cmpShown = true ;
245+ self . store [ _command ] ( true ) ;
246+ self . notify ( "consentToolDisplayed" ) ;
241247 callback ( true ) ;
242248 } ,
243249
@@ -254,21 +260,43 @@ export default class Cmp {
254260 customPurposeList
255261 } = this . store ;
256262
257- const { purposes : customPurposes = [ ] } = customPurposeList ;
258- const { purposes = [ ] } = vendorList || { } ;
263+ let customPurposes = [ ] ;
264+ customPurposes = customPurposeList && customPurposeList . purposes ;
259265
266+ const { purposes = [ ] } = vendorList || { } ;
260267 const { selectedPurposeIds = new Set ( ) } = persistedVendorConsentData || { } ;
261268 const { selectedCustomPurposeIds = new Set ( ) } = persistedPublisherConsentData || { } ;
262269
263- const allowedPurposeIds = new Set ( purposes . map ( ( { id} ) => id ) ) ;
264- const allowedCustomPurposeIds = new Set ( customPurposes . map ( ( { id} ) => id ) ) ;
270+ const allowedPurposeIds = new Set ( ) ;
271+ for ( let i in purposes ) {
272+ allowedPurposeIds . add ( purposes [ i ] . id ) ;
273+ }
274+
275+ const allowedCustomPurposeIds = new Set ( ) ;
276+ if ( customPurposeList ) {
277+ for ( let j in customPurposes ) {
278+ allowedCustomPurposeIds . add ( customPurposes [ j ] . id ) ;
279+ }
280+ }
281+
282+ const selectedAllowedPurposeIds = new Set ( ) ;
283+ Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) . forEach ( ( id ) => {
284+ selectedAllowedPurposeIds . add ( id ) ;
285+ } ) ;
286+
287+ const selectedAllowedCustomPurposeIds = new Set ( ) ;
288+ if ( customPurposeList ) {
289+ Array . from ( selectedCustomPurposeIds ) . filter ( id => allowedCustomPurposeIds . has ( id ) ) . forEach ( ( id ) => {
290+ selectedAllowedCustomPurposeIds . add ( id ) ;
291+ } ) ;
292+ }
265293
266294 // Encode the persisted data
267295 return persistedPublisherConsentData && encodePublisherConsentData ( {
268296 ...persistedVendorConsentData ,
269297 ...persistedPublisherConsentData ,
270- selectedCustomPurposeIds : new Set ( Array . from ( selectedCustomPurposeIds ) . filter ( id => allowedCustomPurposeIds . has ( id ) ) ) ,
271- selectedPurposeIds : new Set ( Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) ) ,
298+ selectedPurposeIds : selectedAllowedPurposeIds ,
299+ selectedCustomPurposeIds : selectedAllowedCustomPurposeIds ,
272300 customPurposeList,
273301 vendorList,
274302 } ) ;
@@ -307,14 +335,31 @@ export default class Cmp {
307335 } = persistedVendorConsentData || { } ;
308336
309337 // Filter consents by values that exist in the current vendorList
310- const allowedVendorIds = new Set ( vendors . map ( ( { id} ) => id ) ) ;
311- const allowedPurposeIds = new Set ( purposes . map ( ( { id} ) => id ) ) ;
338+ const allowedVendorIds = new Set ( ) ;
339+ for ( let i in vendors ) {
340+ allowedVendorIds . add ( vendors [ i ] . id ) ;
341+ }
342+
343+ const allowedPurposeIds = new Set ( ) ;
344+ for ( let j in purposes ) {
345+ allowedPurposeIds . add ( purposes [ j ] . id ) ;
346+ }
347+
348+ const selectedAllowedVendorIds = new Set ( ) ;
349+ Array . from ( selectedVendorIds ) . filter ( id => allowedVendorIds . has ( id ) ) . forEach ( ( id ) => {
350+ selectedAllowedVendorIds . add ( id ) ;
351+ } ) ;
352+
353+ const selectedAllowedPurposeIds = new Set ( ) ;
354+ Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) . forEach ( ( id ) => {
355+ selectedAllowedPurposeIds . add ( id ) ;
356+ } ) ;
312357
313358 // Encode the persisted data
314359 return persistedVendorConsentData && encodeVendorConsentData ( {
315360 ...persistedVendorConsentData ,
316- selectedVendorIds : new Set ( Array . from ( selectedVendorIds ) . filter ( id => allowedVendorIds . has ( id ) ) ) ,
317- selectedPurposeIds : new Set ( Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) ) ,
361+ selectedVendorIds : selectedAllowedVendorIds ,
362+ selectedPurposeIds : selectedAllowedPurposeIds ,
318363 vendorList
319364 } ) ;
320365 } ;
0 commit comments