bv-ui-core 2.5.2 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ The cookie module provides methods for interacting with browser cookies.
5
5
  ```js
6
6
  var cookie = require('bv-ui-core/lib/cookie');
7
7
 
8
- cookie.write('RememberMe', '1', 365);
8
+ cookie.create('RememberMe', '1', 365);
9
9
  console.log(cookie.read('RememberMe')); // '1'
10
10
  cookie.remove('RememberMe');
11
11
  ```
@@ -79,6 +79,14 @@ module.exports = {
79
79
  if (consentPresent) {
80
80
  createCookie(name, value, days, domain, secure);
81
81
  }
82
+ cookieConsent.subscribe(name,'add',function (consent) {
83
+ if (consent) {
84
+ createCookie(name,value,days,domain,secure);
85
+ }
86
+ else {
87
+ removeCookie(name,domain)
88
+ }
89
+ })
82
90
 
83
91
  cookieConsent.subscribe(name, 'enable', function () {
84
92
  createCookie(name, value, days, domain, secure);
@@ -30,6 +30,9 @@ cookieConsent.subscribe('cookie3', 'enable', function (data) {});
30
30
  // Subscribe to consent 'disable' event. Triggers when a cookie consent is set to false
31
31
  var event = cookieConsent.subscribe('cookie3', 'disable', function (data) {});
32
32
 
33
+ // Subscribe to the store change event. The latest consent store object is passed as parameter to the callback function
34
+ var event = subscribeToConsentStore(function (store){});
35
+
33
36
  // Unsubscribe events
34
37
  event.unsubscribe();
35
38
 
@@ -4,6 +4,9 @@ var cookieConsent = (function () {
4
4
  var store = {};
5
5
  var subscribers = {};
6
6
  var events = ['add', 'enable', 'disable', 'change'];
7
+ var storeCallbacks = {};
8
+
9
+
7
10
  /**
8
11
  * _publish: Calls subscriber callbacks
9
12
  * @param {String} consentKey Consent key
@@ -17,6 +20,18 @@ var cookieConsent = (function () {
17
20
  })
18
21
  }
19
22
  }
23
+
24
+ /**
25
+ * _publishStore: calls Callbacks with the store object passed
26
+ */
27
+
28
+ function _publishStore () {
29
+ if (Object.values(storeCallbacks).length > 0) {
30
+ Object.values(storeCallbacks).forEach(function (callback) {
31
+ callback(Object.assign({}, store));
32
+ })
33
+ }
34
+ }
20
35
  /**
21
36
  * _set: Set store data
22
37
  * @param {String} consentKey Consent key
@@ -56,6 +71,15 @@ var cookieConsent = (function () {
56
71
  delete subscribers[this.consentKey][this.eventName][this.key];
57
72
  }
58
73
  }
74
+
75
+ /**
76
+ * _unsubscribeStore: Unsubscribes subscribers from the consent store
77
+ */
78
+ function _unsubscribeStore () {
79
+ if (storeCallbacks[this.key]) {
80
+ delete storeCallbacks[this.key];
81
+ }
82
+ }
59
83
  /**
60
84
  * Get consent disabled
61
85
  * @returns Boolean
@@ -119,10 +143,15 @@ var cookieConsent = (function () {
119
143
  if (!(consent && !Array.isArray(consent) && typeof consent === 'object')) {
120
144
  throw new TypeError('cookieConsent (setConsent): consent should be an object.')
121
145
  }
146
+ var store
122
147
  var keys = Object.keys(consent);
123
148
  for (var i = 0; i < keys.length; i++) {
124
149
  _set(keys[i], consent[keys[i]]);
125
150
  }
151
+ var storeCopy=Object.assign({},store)
152
+ if (JSON.stringify(storeCopy)!==JSON.stringify(store)) {
153
+ _publishStore()
154
+ }
126
155
  return true;
127
156
  }
128
157
 
@@ -172,12 +201,26 @@ var cookieConsent = (function () {
172
201
  };
173
202
  }
174
203
 
204
+ function subscribeToConsentStore (callback) {
205
+ if (typeof callback !== 'function') {
206
+ throw new TypeError('cookieConsent (subscribeToConsentStore): callback should be a function.');
207
+ }
208
+
209
+ var key = Math.random().toString(36).substr(2, 5);
210
+ storeCallbacks[key] = callback;
211
+
212
+ return {
213
+ unsubscribe: _unsubscribeStore.bind({ key: key })
214
+ }
215
+ }
216
+
175
217
  return {
176
218
  initConsent: initConsent,
177
219
  getConsent: getConsent,
178
220
  getConsentDisabled: getConsentDisabled,
179
221
  setConsent: setConsent,
180
- subscribe: subscribe
222
+ subscribe: subscribe,
223
+ subscribeToConsentStore: subscribeToConsentStore
181
224
  };
182
225
  })();
183
226
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bv-ui-core",
3
- "version": "2.5.2",
3
+ "version": "2.6.0",
4
4
  "license": "Apache 2.0",
5
5
  "description": "Bazaarvoice UI-related JavaScript",
6
6
  "repository": {
@@ -84,7 +84,36 @@ describe('lib/cookieConsent', function () {
84
84
  function test5 () {
85
85
  return cookieConsent.subscribe('key1', 'enable', function () {});
86
86
  }
87
-
88
87
  expect(test5()).to.be.an('object');
89
88
  });
89
+ it('cookieConsent.subscribeToConsentStore', function () {
90
+ // Error checks - Correct errors are thrown
91
+ function test6 () {
92
+ cookieConsent.subscribeToConsentStore('Callback')
93
+ }
94
+ expect(test6).to.throw(TypeError,'cookieConsent (subscribeToConsentStore): callback should be a function.');
95
+ // Subscriber creation test - The subscription gets created correctly
96
+ function test7 () {
97
+ return cookieConsent.subscribeToConsentStore(function () {});
98
+ }
99
+ expect(test7()).to.be.an('object');
100
+
101
+ // Event listener test - The subscriber callback fires on store change
102
+ var fn = sinon.spy()
103
+ function test8 () {
104
+ cookieConsent.subscribeToConsentStore(fn)
105
+ cookieConsent.setConsent({ cookie4: true })
106
+ }
107
+ test8 ()
108
+ sinon.assert.calledOnce(fn)
109
+ // Unsubscribe test - Should be able to unsubscribe successfully (Should not fire the callback after unsubscription)
110
+ var fn2 = sinon.spy()
111
+ function test9 () {
112
+ var event = cookieConsent.subscribeToConsentStore(fn2)
113
+ event.unsubscribe()
114
+ cookieConsent.setConsent({ cookie5: true })
115
+ }
116
+ test9()
117
+ sinon.assert.notCalled(fn2)
118
+ });
90
119
  });