@@ -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 /**
@@ -256,21 +260,43 @@ export default class Cmp {
256260 customPurposeList
257261 } = this . store ;
258262
259- const { purposes : customPurposes = [ ] } = customPurposeList ;
260- const { purposes = [ ] } = vendorList || { } ;
263+ let customPurposes = [ ] ;
264+ customPurposes = customPurposeList && customPurposeList . purposes ;
261265
266+ const { purposes = [ ] } = vendorList || { } ;
262267 const { selectedPurposeIds = new Set ( ) } = persistedVendorConsentData || { } ;
263268 const { selectedCustomPurposeIds = new Set ( ) } = persistedPublisherConsentData || { } ;
264269
265- const allowedPurposeIds = new Set ( purposes . map ( ( { id} ) => id ) ) ;
266- 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+ }
267293
268294 // Encode the persisted data
269295 return persistedPublisherConsentData && encodePublisherConsentData ( {
270296 ...persistedVendorConsentData ,
271297 ...persistedPublisherConsentData ,
272- selectedCustomPurposeIds : new Set ( Array . from ( selectedCustomPurposeIds ) . filter ( id => allowedCustomPurposeIds . has ( id ) ) ) ,
273- selectedPurposeIds : new Set ( Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) ) ,
298+ selectedPurposeIds : selectedAllowedPurposeIds ,
299+ selectedCustomPurposeIds : selectedAllowedCustomPurposeIds ,
274300 customPurposeList,
275301 vendorList,
276302 } ) ;
@@ -309,14 +335,31 @@ export default class Cmp {
309335 } = persistedVendorConsentData || { } ;
310336
311337 // Filter consents by values that exist in the current vendorList
312- const allowedVendorIds = new Set ( vendors . map ( ( { id} ) => id ) ) ;
313- 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+ } ) ;
314357
315358 // Encode the persisted data
316359 return persistedVendorConsentData && encodeVendorConsentData ( {
317360 ...persistedVendorConsentData ,
318- selectedVendorIds : new Set ( Array . from ( selectedVendorIds ) . filter ( id => allowedVendorIds . has ( id ) ) ) ,
319- selectedPurposeIds : new Set ( Array . from ( selectedPurposeIds ) . filter ( id => allowedPurposeIds . has ( id ) ) ) ,
361+ selectedVendorIds : selectedAllowedVendorIds ,
362+ selectedPurposeIds : selectedAllowedPurposeIds ,
320363 vendorList
321364 } ) ;
322365 } ;
0 commit comments