@times-components/ts-components 1.104.1-alpha.76 → 1.104.1-alpha.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/components/social-embed/BlockedEmbedMessage.d.ts +1 -0
  2. package/dist/components/social-embed/BlockedEmbedMessage.js +8 -28
  3. package/dist/components/social-embed/SocialMediaEmbed.d.ts +7 -1
  4. package/dist/components/social-embed/SocialMediaEmbed.js +27 -48
  5. package/dist/components/social-embed/__tests__/BlockedEmbedMessage.test.js +26 -85
  6. package/dist/components/social-embed/__tests__/SocialMediaEmbed.test.d.ts +1 -1
  7. package/dist/components/social-embed/__tests__/SocialMediaEmbed.test.js +71 -140
  8. package/dist/components/social-embed/helpers/__tests__/enableCookies.test.js +6 -5
  9. package/dist/components/social-embed/helpers/enableCookies.d.ts +2 -1
  10. package/dist/components/social-embed/helpers/enableCookies.js +5 -2
  11. package/dist/components/social-embed/helpers/vendorConsent.js +3 -1
  12. package/dist/hooks/__tests__/useConsent.test.d.ts +1 -0
  13. package/dist/hooks/__tests__/useConsent.test.js +53 -0
  14. package/dist/hooks/useConsent.d.ts +1 -0
  15. package/dist/hooks/useConsent.js +32 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +3 -1
  18. package/package.json +3 -3
  19. package/rnw.js +1 -1
  20. package/src/components/social-embed/BlockedEmbedMessage.tsx +11 -34
  21. package/src/components/social-embed/SocialMediaEmbed.tsx +25 -44
  22. package/src/components/social-embed/__tests__/BlockedEmbedMessage.test.tsx +29 -115
  23. package/src/components/social-embed/__tests__/SocialMediaEmbed.test.tsx +77 -217
  24. package/src/components/social-embed/helpers/__tests__/enableCookies.test.ts +5 -4
  25. package/src/components/social-embed/helpers/enableCookies.ts +8 -1
  26. package/src/components/social-embed/helpers/vendorConsent.ts +3 -0
  27. package/src/hooks/__tests__/useConsent.test.ts +80 -0
  28. package/src/hooks/useConsent.ts +38 -0
  29. package/src/index.ts +4 -0
@@ -3,5 +3,6 @@ import { VendorName } from './types';
3
3
  export declare type BlockedEmbedMessageProps = {
4
4
  vendorName: VendorName;
5
5
  setIsAllowedOnce: Dispatch<SetStateAction<boolean>>;
6
+ setIsSocialEmbedAllowed: Dispatch<SetStateAction<boolean>>;
6
7
  };
7
8
  export declare const BlockedEmbedMessage: FC<BlockedEmbedMessageProps>;
@@ -6,37 +6,17 @@ import { enableCookies } from './helpers/enableCookies';
6
6
  import { openPrivacyModal } from './helpers/privacyModal';
7
7
  import { socialMediaVendors } from './helpers/socialMediaVendors';
8
8
  import { modalType } from './constants';
9
- export const BlockedEmbedMessage = ({ vendorName, setIsAllowedOnce }) => {
10
- // Allow cookies once - custom hook
9
+ export const BlockedEmbedMessage = ({ vendorName, setIsAllowedOnce, setIsSocialEmbedAllowed }) => {
11
10
  const allowCookiesOnce = () => {
12
- const vendorId = socialMediaVendors[vendorName].id;
11
+ /* const vendorId = socialMediaVendors[vendorName].id; */
13
12
  // Check if consent has already been granted for this vendor
14
- const consentAlreadyGranted = sessionStorage.getItem(vendorName) === 'true';
13
+ const consentAlreadyGranted = sessionStorage.getItem('consentedVendors');
15
14
  if (consentAlreadyGranted) {
16
15
  setIsAllowedOnce(true);
17
16
  }
18
- if (!window.__tcfapi) {
19
- // tslint:disable-next-line:no-console
20
- console.error('TCF API is not available!');
21
- setIsAllowedOnce(false);
22
- return;
23
- }
24
- // Use __tcfapi to check and request consent if now previously granted
25
- window.__tcfapi('getCustomVendorConsents', 2, (data, success) => {
26
- if (success && data && data.grants && data.grants[vendorId]) {
27
- const vendorConsent = data.grants[vendorId].vendorGrant;
28
- if (vendorConsent) {
29
- // Store consent status to avoid future prompts during the session
30
- sessionStorage.setItem(vendorName, 'true');
31
- setIsAllowedOnce(true);
32
- }
33
- }
34
- else {
35
- // tslint:disable-next-line:no-console
36
- console.error(`Consent data for vendor ${vendorId} not available or request failed.`);
37
- setIsAllowedOnce(false);
38
- }
39
- });
17
+ // Store consent status to avoid future prompts during the session
18
+ sessionStorage.setItem('consentedVendors', `['${vendorName}']`);
19
+ setIsAllowedOnce(true);
40
20
  };
41
21
  const handlePrivacyManagerClick = (e) => {
42
22
  e.preventDefault();
@@ -53,7 +33,7 @@ export const BlockedEmbedMessage = ({ vendorName, setIsAllowedOnce }) => {
53
33
  "Please enable cookies and other technologies to view this content. You can update your cookies preferences any time using",
54
34
  ' ',
55
35
  React.createElement(LinkPrivacyManager, { href: "#", onClick: handlePrivacyManagerClick }, "privacy manager.")),
56
- React.createElement(EnableButton, { onClick: () => enableCookies(vendorName) }, "Enable cookies"),
36
+ React.createElement(EnableButton, { onClick: () => enableCookies(vendorName, setIsSocialEmbedAllowed) }, "Enable cookies"),
57
37
  React.createElement(AllowButton, { onClick: () => allowCookiesOnce() }, "Allow cookies once")));
58
38
  };
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tlZEVtYmVkTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NvY2lhbC1lbWJlZC9CbG9ja2VkRW1iZWRNZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQW1ELE1BQU0sT0FBTyxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osTUFBTSxFQUNOLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsS0FBSyxFQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPeEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlDLENBQUMsRUFDaEUsVUFBVSxFQUNWLGdCQUFnQixFQUNqQixFQUFFLEVBQUU7SUFDSCxtQ0FBbUM7SUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRW5ELDREQUE0RDtRQUM1RCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxDQUFDO1FBRTVFLElBQUkscUJBQXFCLEVBQUU7WUFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNwQixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzNDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLE9BQU87U0FDUjtRQUVELHNFQUFzRTtRQUN0RSxNQUFNLENBQUMsUUFBUSxDQUNiLHlCQUF5QixFQUN6QixDQUFDLEVBQ0QsQ0FBQyxJQUFTLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1lBQzlCLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUV4RCxJQUFJLGFBQWEsRUFBRTtvQkFDakIsa0VBQWtFO29CQUNsRSxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDM0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3hCO2FBQ0Y7aUJBQU07Z0JBQ0wsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsS0FBSyxDQUNYLDJCQUEyQixRQUFRLG1DQUFtQyxDQUN2RSxDQUFDO2dCQUNGLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBZ0MsRUFBRSxFQUFFO1FBQ3JFLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixnQkFBZ0IsQ0FDZCxTQUFTLENBQUMsSUFBSSxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUNsRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUNMLG9CQUFDLGFBQWE7UUFDWixvQkFBQyxNQUFNO1lBQ0wsb0JBQUMsbUJBQW1CO2dCQUNsQixvQkFBQyxRQUFRLE9BQUcsQ0FDUTtZQUN0QixvQkFBQyxLQUFLO2dCQUNILGNBQWMsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUM7bUNBQ3pDLENBQ0Q7UUFDVCxvQkFBQyxTQUFTOztZQUUyQyxHQUFHO1lBQ3RELG9CQUFDLGtCQUFrQixJQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLHlCQUF5Qix1QkFFMUMsQ0FDWDtRQUNaLG9CQUFDLFlBQVksSUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxxQkFFdkM7UUFDZixvQkFBQyxXQUFXLElBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLHlCQUVoQyxDQUNBLENBQ2pCLENBQUM7QUFDSixDQUFDLENBQUMifQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tlZEVtYmVkTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NvY2lhbC1lbWJlZC9CbG9ja2VkRW1iZWRNZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQW1ELE1BQU0sT0FBTyxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osTUFBTSxFQUNOLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsS0FBSyxFQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFReEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlDLENBQUMsRUFDaEUsVUFBVSxFQUNWLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDeEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIseURBQXlEO1FBRXpELDREQUE0RDtRQUM1RCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV6RSxJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsa0VBQWtFO1FBQ2xFLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ2hFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFnQyxFQUFFLEVBQUU7UUFDckUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLGdCQUFnQixDQUNkLFNBQVMsQ0FBQyxJQUFJLEVBQ2QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQ2xELENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsb0JBQUMsYUFBYTtRQUNaLG9CQUFDLE1BQU07WUFDTCxvQkFBQyxtQkFBbUI7Z0JBQ2xCLG9CQUFDLFFBQVEsT0FBRyxDQUNRO1lBQ3RCLG9CQUFDLEtBQUs7Z0JBQ0gsY0FBYyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQzttQ0FDekMsQ0FDRDtRQUNULG9CQUFDLFNBQVM7O1lBRTJDLEdBQUc7WUFDdEQsb0JBQUMsa0JBQWtCLElBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUseUJBQXlCLHVCQUUxQyxDQUNYO1FBQ1osb0JBQUMsWUFBWSxJQUNYLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLHFCQUdwRDtRQUNmLG9CQUFDLFdBQVcsSUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUseUJBRWhDLENBQ0EsQ0FDakIsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import { FC, Dispatch, SetStateAction } from 'react';
2
2
  import { TcData, VendorName } from './types';
3
3
  declare global {
4
4
  interface Window {
@@ -15,5 +15,11 @@ export declare type SocialMediaEmbedProps = {
15
15
  url: string;
16
16
  vendorName: VendorName;
17
17
  id: string;
18
+ socialEmbed: {
19
+ isSocialEmbedAllowed: boolean;
20
+ setIsSocialEmbedAllowed: Dispatch<SetStateAction<boolean>>;
21
+ isAllowedOnce: boolean;
22
+ setIsAllowedOnce: Dispatch<SetStateAction<boolean>>;
23
+ };
18
24
  };
19
25
  export declare const SocialMediaEmbed: FC<SocialMediaEmbedProps>;
@@ -1,62 +1,41 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect } from 'react';
2
2
  import { BlockedEmbedMessage } from './BlockedEmbedMessage';
3
3
  import { checkVendorConsent } from './helpers/vendorConsent';
4
4
  import { eventStatus } from './constants';
5
- export const SocialMediaEmbed = ({ id, url, vendorName }) => {
6
- const [isSocialEmbedAllowed, setIsSocialEmbedAllowed] = useState(false);
7
- const [data, setData] = useState(null);
8
- const [isAllowedOnce, setIsAllowedOnce] = useState(false);
5
+ export const SocialMediaEmbed = ({ id, url, vendorName, socialEmbed }) => {
6
+ const { isSocialEmbedAllowed, setIsSocialEmbedAllowed, isAllowedOnce, setIsAllowedOnce } = socialEmbed;
9
7
  useEffect(() => {
10
8
  if (window.__tcfapi) {
11
9
  window.__tcfapi('addEventListener', 2, (tcData, success) => {
12
- if (success && tcData.eventStatus === eventStatus.tcLoaded) {
13
- setData({
14
- cmpStatus: tcData.cmpStatus,
15
- eventStatus: tcData.eventStatus,
16
- listenerId: tcData.listenerId
17
- });
18
- setIsSocialEmbedAllowed(checkVendorConsent(vendorName));
19
- }
10
+ // tslint:disable-next-line:no-console
11
+ console.log('success, tcData', success, tcData);
20
12
  if (success &&
21
- tcData.eventStatus === eventStatus.userActionComplete) {
22
- setData({
23
- cmpStatus: tcData.cmpStatus,
24
- eventStatus: tcData.eventStatus,
25
- listenerId: tcData.listenerId
26
- });
13
+ (tcData.eventStatus === eventStatus.tcLoaded ||
14
+ tcData.eventStatus === eventStatus.userActionComplete)) {
15
+ // tslint:disable-next-line:no-console
16
+ console.log('PROSLO DO setIsSocialEmbedAllowed');
27
17
  setIsSocialEmbedAllowed(checkVendorConsent(vendorName));
28
18
  }
29
19
  });
30
20
  }
31
- // Trigger Twitter embed load when isSocialEmbedAllowed switches to true
32
- if (isSocialEmbedAllowed && window.twttr && window.twttr.widgets) {
33
- window.twttr.widgets.load();
34
- }
35
- return () => {
36
- if (window.__tcfapi && data && data.listenerId) {
37
- window.__tcfapi('removeEventListener', 2, success => {
38
- if (success) {
39
- // tslint:disable-next-line:no-console
40
- console.log(success);
41
- }
42
- }, data.listenerId);
43
- }
44
- };
21
+ /* return () => {
22
+ if (window.__tcfapi && data && data.listenerId) {
23
+ window.__tcfapi(
24
+ 'removeEventListener',
25
+ 2,
26
+ success => {
27
+ if (success) {
28
+ // tslint:disable-next-line:no-console
29
+ console.log(success);
30
+ }
31
+ },
32
+ data.listenerId
33
+ );
34
+ }
35
+ }; */
45
36
  }, [isSocialEmbedAllowed]);
46
- useEffect(() => {
47
- window.addEventListener('storage', e => {
48
- // tslint:disable-next-line:no-console
49
- console.log('event', e);
50
- if (e.key === vendorName && e.newValue === 'true') {
51
- setIsSocialEmbedAllowed(true);
52
- }
53
- else {
54
- setIsSocialEmbedAllowed(false);
55
- }
56
- });
57
- }, [isAllowedOnce]);
58
- return isSocialEmbedAllowed ? (React.createElement("div", { id: id },
37
+ return isSocialEmbedAllowed || isAllowedOnce ? (React.createElement("div", { id: id },
59
38
  React.createElement("blockquote", { className: "twitter-tweet" },
60
- React.createElement("a", { href: url })))) : (React.createElement(BlockedEmbedMessage, { vendorName: vendorName, setIsAllowedOnce: setIsAllowedOnce }));
39
+ React.createElement("a", { href: url })))) : (React.createElement(BlockedEmbedMessage, { vendorName: vendorName, setIsAllowedOnce: setIsAllowedOnce, setIsSocialEmbedAllowed: setIsSocialEmbedAllowed }));
61
40
  };
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29jaWFsTWVkaWFFbWJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NvY2lhbC1lbWJlZC9Tb2NpYWxNZWRpYUVtYmVkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFNLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQTBCMUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQThCLENBQUMsRUFDMUQsRUFBRSxFQUNGLEdBQUcsRUFDSCxVQUFVLEVBQ1gsRUFBRSxFQUFFO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixFQUFFLHVCQUF1QixDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFELFNBQVMsQ0FDUCxHQUFHLEVBQUU7UUFDSCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQ3pELElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFBRTtvQkFDMUQsT0FBTyxDQUFDO3dCQUNOLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUzt3QkFDM0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3dCQUMvQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCLENBQUMsQ0FBQztvQkFFSCx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDtnQkFDRCxJQUNFLE9BQU87b0JBQ1AsTUFBTSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsa0JBQWtCLEVBQ3JEO29CQUNBLE9BQU8sQ0FBQzt3QkFDTixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7d0JBQzNCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVzt3QkFDL0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO3FCQUM5QixDQUFDLENBQUM7b0JBRUgsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDekQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsd0VBQXdFO1FBQ3hFLElBQUksb0JBQW9CLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNoRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM3QjtRQUVELE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUM5QyxNQUFNLENBQUMsUUFBUSxDQUNiLHFCQUFxQixFQUNyQixDQUFDLEVBQ0QsT0FBTyxDQUFDLEVBQUU7b0JBQ1IsSUFBSSxPQUFPLEVBQUU7d0JBQ1gsc0NBQXNDO3dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUN0QjtnQkFDSCxDQUFDLEVBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUNELENBQUMsb0JBQW9CLENBQUMsQ0FDdkIsQ0FBQztJQUVGLFNBQVMsQ0FDUCxHQUFHLEVBQUU7UUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFO2dCQUNqRCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtpQkFBTTtnQkFDTCx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUNELENBQUMsYUFBYSxDQUFDLENBQ2hCLENBQUM7SUFFRixPQUFPLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUM1Qiw2QkFBSyxFQUFFLEVBQUUsRUFBRTtRQUNULG9DQUFZLFNBQVMsRUFBQyxlQUFlO1lBQ25DLDJCQUFHLElBQUksRUFBRSxHQUFHLEdBQUksQ0FDTCxDQUNULENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixvQkFBQyxtQkFBbUIsSUFDbEIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQ2xDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29jaWFsTWVkaWFFbWJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NvY2lhbC1lbWJlZC9Tb2NpYWxNZWRpYUVtYmVkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFNLFNBQVMsRUFBNEIsTUFBTSxPQUFPLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWdDMUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQThCLENBQUMsRUFDMUQsRUFBRSxFQUNGLEdBQUcsRUFDSCxVQUFVLEVBQ1YsV0FBVyxFQUNaLEVBQUUsRUFBRTtJQUNILE1BQU0sRUFDSixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixnQkFBZ0IsRUFDakIsR0FBRyxXQUFXLENBQUM7SUFFaEIsU0FBUyxDQUNQLEdBQUcsRUFBRTtRQUNILElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNuQixNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDekQsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDaEQsSUFDRSxPQUFPO29CQUNQLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsUUFBUTt3QkFDMUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsa0JBQWtCLENBQUMsRUFDeEQ7b0JBQ0Esc0NBQXNDO29CQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7b0JBQ2pELHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7Ozs7Ozs7OzthQWNLO0lBQ1AsQ0FBQyxFQUNELENBQUMsb0JBQW9CLENBQUMsQ0FDdkIsQ0FBQztJQUVGLE9BQU8sb0JBQW9CLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUM3Qyw2QkFBSyxFQUFFLEVBQUUsRUFBRTtRQUNULG9DQUFZLFNBQVMsRUFBQyxlQUFlO1lBQ25DLDJCQUFHLElBQUksRUFBRSxHQUFHLEdBQUksQ0FDTCxDQUNULENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixvQkFBQyxtQkFBbUIsSUFDbEIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLHVCQUF1QixFQUFFLHVCQUF1QixHQUNoRCxDQUNILENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -2,103 +2,44 @@ import React from 'react';
2
2
  import { render, screen, fireEvent } from '@testing-library/react';
3
3
  import { BlockedEmbedMessage } from '../BlockedEmbedMessage';
4
4
  import { enableCookies } from '../helpers/enableCookies';
5
- jest.mock('../helpers/enableCookies', () => ({
6
- enableCookies: jest.fn()
7
- }));
8
- jest.mock('../helpers/privacyModal', () => ({
9
- openPrivacyModal: jest.fn()
10
- }));
11
- jest.mock('../helpers/socialMediaVendors', () => ({
12
- socialMediaVendors: {
13
- twitter: { id: 'twitterId' }
14
- }
5
+ // Mock dependencies
6
+ jest.mock('../helpers/enableCookies');
7
+ jest.mock('../helpers/privacyModal');
8
+ jest.mock('../helpers/getVendorTitle', () => ({
9
+ getVendorTitle: jest.fn(() => 'Vendor Title')
15
10
  }));
16
11
  describe('BlockedEmbedMessage', () => {
17
- const mockSetIsAllowedOnce = jest.fn();
12
+ const vendorName = 'facebook';
13
+ const setIsAllowedOnce = jest.fn();
14
+ const setIsSocialEmbedAllowed = jest.fn();
18
15
  const defaultProps = {
19
- vendorName: 'twitter',
20
- setIsAllowedOnce: mockSetIsAllowedOnce
16
+ vendorName,
17
+ setIsAllowedOnce,
18
+ setIsSocialEmbedAllowed
21
19
  };
22
20
  beforeEach(() => {
23
21
  jest.clearAllMocks();
24
- window.__tcfapi = jest.fn();
25
22
  sessionStorage.clear();
26
23
  });
27
- it('should call enableCookies when "Enable cookies" button is clicked', () => {
28
- render(React.createElement(BlockedEmbedMessage, Object.assign({}, defaultProps)));
29
- fireEvent.click(screen.getByRole('button', { name: /Enable cookies/i }));
30
- expect(enableCookies).toHaveBeenCalledWith('twitter');
31
- });
32
- it('should call allowCookiesOnce when "Allow cookies once" button is clicked', () => {
33
- render(React.createElement(BlockedEmbedMessage, Object.assign({}, defaultProps)));
34
- fireEvent.click(screen.getByRole('button', { name: /Allow cookies once/i }));
35
- expect(window.__tcfapi).toHaveBeenCalledWith('getCustomVendorConsents', 2, expect.any(Function));
36
- });
37
- it('should set consentGranted in session storage and allow embed if consent is granted', () => {
38
- window.__tcfapi = jest.fn((command, version, callback) => {
39
- // tslint:disable-next-line:no-console
40
- console.log('version', version);
41
- if (command === 'getCustomVendorConsents') {
42
- callback({
43
- grants: {
44
- twitterId: { vendorGrant: true, purposeGrants: { 1: true } }
45
- }
46
- }, true);
47
- }
48
- });
24
+ it('calls enableCookies when Enable cookies button is clicked', () => {
49
25
  render(React.createElement(BlockedEmbedMessage, Object.assign({}, defaultProps)));
50
- fireEvent.click(screen.getByRole('button', { name: /Allow cookies once/i }));
51
- expect(sessionStorage.getItem('twitter')).toBe('true');
52
- expect(mockSetIsAllowedOnce).toHaveBeenCalledWith(true);
26
+ const enableButton = screen.getByText('Enable cookies');
27
+ fireEvent.click(enableButton);
28
+ expect(enableCookies).toHaveBeenCalledWith(vendorName, setIsSocialEmbedAllowed);
53
29
  });
54
- it('should handle missing consent data gracefully and not allow embed', () => {
55
- window.__tcfapi = jest.fn((command, version, callback) => {
56
- // tslint:disable-next-line:no-console
57
- console.log('command, version', command, version);
58
- callback(null, false); // Simulate unsuccessful consent request
59
- });
30
+ it('calls allowCookiesOnce when Allow cookies once button is clicked and updates session storage', () => {
60
31
  render(React.createElement(BlockedEmbedMessage, Object.assign({}, defaultProps)));
61
- fireEvent.click(screen.getByRole('button', { name: /Allow cookies once/i }));
62
- expect(sessionStorage.getItem('twitter')).toBeNull();
63
- expect(mockSetIsAllowedOnce).toHaveBeenCalledWith(false);
32
+ const allowButton = screen.getByText('Allow cookies once');
33
+ fireEvent.click(allowButton);
34
+ expect(setIsAllowedOnce).toHaveBeenCalledWith(true);
35
+ expect(sessionStorage.getItem('consentedVendors')).toBe(`['${vendorName}']`);
64
36
  });
65
- /* it('should handle postCustomConsent and allow embed if consent is successfully granted', () => {
66
- (window as any).__tcfapi = jest.fn((command, version, callback) => {
67
- // tslint:disable-next-line:no-console
68
- console.log('version', version);
69
- if (command === 'getCustomVendorConsents') {
70
- callback(
71
- {
72
- grants: {
73
- twitterId: { vendorGrant: false, purposeGrants: { 1: true } }
74
- }
75
- },
76
- true
77
- );
78
- }
79
- if (command === 'postCustomConsent') {
80
- callback({}, true);
81
- }
82
- });
83
-
84
- render(<BlockedEmbedMessage {...defaultProps} />);
85
-
86
- fireEvent.click(
87
- screen.getByRole('button', { name: /Allow cookies once/i })
88
- );
89
-
90
- expect(sessionStorage.getItem('twitter')).toBe('true');
91
- expect(mockSetIsAllowedOnce).toHaveBeenCalledWith(true);
92
- }); */
93
- it('should log an error if __tcfapi is not available and not allow embed', () => {
94
- // tslint:disable-next-line:no-console
95
- console.error = jest.fn();
96
- delete window.__tcfapi;
37
+ it('grants consent if vendor is already in session storage', () => {
38
+ sessionStorage.setItem('consentedVendors', `['${vendorName}']`);
97
39
  render(React.createElement(BlockedEmbedMessage, Object.assign({}, defaultProps)));
98
- fireEvent.click(screen.getByRole('button', { name: /Allow cookies once/i }));
99
- // tslint:disable-next-line:no-console
100
- expect(console.error).toHaveBeenCalledWith('TCF API is not available!');
101
- expect(mockSetIsAllowedOnce).toHaveBeenCalledWith(false);
40
+ const allowButton = screen.getByText('Allow cookies once');
41
+ fireEvent.click(allowButton);
42
+ expect(setIsAllowedOnce).toHaveBeenCalledWith(true);
102
43
  });
103
44
  });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tlZEVtYmVkTWVzc2FnZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc29jaWFsLWVtYmVkL19fdGVzdHNfXy9CbG9ja2VkRW1iZWRNZXNzYWdlLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUN6QixDQUFDLENBQUMsQ0FBQztBQUVKLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQzVCLENBQUMsQ0FBQyxDQUFDO0FBRUosSUFBSSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELGtCQUFrQixFQUFFO1FBQ2xCLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDN0I7Q0FDRixDQUFDLENBQUMsQ0FBQztBQUVKLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7SUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFdkMsTUFBTSxZQUFZLEdBQTZCO1FBQzdDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLGdCQUFnQixFQUFFLG9CQUFvQjtLQUN2QyxDQUFDO0lBRUYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQixNQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsR0FBRyxFQUFFO1FBQzNFLE1BQU0sQ0FBQyxvQkFBQyxtQkFBbUIsb0JBQUssWUFBWSxFQUFJLENBQUMsQ0FBQztRQUVsRCxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxHQUFHLEVBQUU7UUFDbEYsTUFBTSxDQUFDLG9CQUFDLG1CQUFtQixvQkFBSyxZQUFZLEVBQUksQ0FBQyxDQUFDO1FBRWxELFNBQVMsQ0FBQyxLQUFLLENBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUM1RCxDQUFDO1FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxvQkFBb0IsQ0FDMUMseUJBQXlCLEVBQ3pCLENBQUMsRUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUNyQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0ZBQW9GLEVBQUUsR0FBRyxFQUFFO1FBQzNGLE1BQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDaEUsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLElBQUksT0FBTyxLQUFLLHlCQUF5QixFQUFFO2dCQUN6QyxRQUFRLENBQ047b0JBQ0UsTUFBTSxFQUFFO3dCQUNOLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO3FCQUM3RDtpQkFDRixFQUNELElBQUksQ0FDTCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxvQkFBQyxtQkFBbUIsb0JBQUssWUFBWSxFQUFJLENBQUMsQ0FBQztRQUVsRCxTQUFTLENBQUMsS0FBSyxDQUNiLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FDNUQsQ0FBQztRQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtRQUMxRSxNQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2hFLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLG9CQUFDLG1CQUFtQixvQkFBSyxZQUFZLEVBQUksQ0FBQyxDQUFDO1FBRWxELFNBQVMsQ0FBQyxLQUFLLENBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUM1RCxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUEyQk07SUFFTixFQUFFLENBQUMsc0VBQXNFLEVBQUUsR0FBRyxFQUFFO1FBQzlFLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQixPQUFRLE1BQWMsQ0FBQyxRQUFRLENBQUM7UUFFaEMsTUFBTSxDQUFDLG9CQUFDLG1CQUFtQixvQkFBSyxZQUFZLEVBQUksQ0FBQyxDQUFDO1FBRWxELFNBQVMsQ0FBQyxLQUFLLENBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUM1RCxDQUFDO1FBRUYsc0NBQXNDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tlZEVtYmVkTWVzc2FnZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc29jaWFsLWVtYmVkL19fdGVzdHNfXy9CbG9ja2VkRW1iZWRNZXNzYWdlLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3pELG9CQUFvQjtBQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1QyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Q0FDOUMsQ0FBQyxDQUFDLENBQUM7QUFFSixRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLE1BQU0sVUFBVSxHQUFHLFVBQXdCLENBQUM7SUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbkMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFMUMsTUFBTSxZQUFZLEdBQTZCO1FBQzdDLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsdUJBQXVCO0tBQ3hCLENBQUM7SUFFRixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7UUFDbkUsTUFBTSxDQUFDLG9CQUFDLG1CQUFtQixvQkFBSyxZQUFZLEVBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RCxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxvQkFBb0IsQ0FDeEMsVUFBVSxFQUNWLHVCQUF1QixDQUN4QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOEZBQThGLEVBQUUsR0FBRyxFQUFFO1FBQ3RHLE1BQU0sQ0FBQyxvQkFBQyxtQkFBbUIsb0JBQUssWUFBWSxFQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRCxLQUFLLFVBQVUsSUFBSSxDQUNwQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1FBQ2hFLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxvQkFBQyxtQkFBbUIsb0JBQUssWUFBWSxFQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -1 +1 @@
1
- import '@testing-library/jest-dom';
1
+ import '@testing-library/jest-dom/extend-expect';
@@ -1,155 +1,86 @@
1
1
  import React from 'react';
2
- import { render, screen, fireEvent } from '@testing-library/react';
2
+ import { render, screen, cleanup } from '@testing-library/react';
3
3
  import { SocialMediaEmbed } from '../SocialMediaEmbed';
4
- import '@testing-library/jest-dom';
5
- import get from 'lodash.get';
6
- // Mocking external dependencies
7
- jest.mock('@times-components/interactive-wrapper', () => jest.fn(() => React.createElement("div", null, "InteractiveWrapper")));
8
- jest.mock('lodash.get');
9
- const mockTcfApi = jest.fn();
10
- describe('SocialMediaEmbed', () => {
4
+ import { BlockedEmbedMessage } from '../BlockedEmbedMessage';
5
+ import { eventStatus } from '../constants';
6
+ import { checkVendorConsent } from '../helpers/vendorConsent';
7
+ import '@testing-library/jest-dom/extend-expect';
8
+ jest.mock('../BlockedEmbedMessage', () => ({
9
+ BlockedEmbedMessage: jest.fn(() => React.createElement("div", null, "Blocked Embed Message"))
10
+ }));
11
+ jest.mock('../helpers/vendorConsent', () => ({
12
+ checkVendorConsent: jest.fn()
13
+ }));
14
+ describe('SocialMediaEmbed component', () => {
15
+ const defaultProps = {
16
+ id: 'test-embed',
17
+ url: 'https://twitter.com/test/status/123',
18
+ vendorName: 'twitter',
19
+ socialEmbed: {
20
+ isSocialEmbedAllowed: false,
21
+ setIsSocialEmbedAllowed: jest.fn(),
22
+ isAllowedOnce: false,
23
+ setIsAllowedOnce: jest.fn()
24
+ }
25
+ };
11
26
  beforeEach(() => {
12
- mockTcfApi.mockReset();
13
- window.__tcfapi = mockTcfApi;
14
- /* tslint:disable:no-empty */
15
- jest.spyOn(global.console, 'log').mockImplementation(() => { });
16
- /* tslint:disable:no-empty */
17
- jest.spyOn(global.console, 'warn').mockImplementation(() => { });
27
+ window.__tcfapi = jest.fn();
28
+ window.twttr = {
29
+ widgets: {
30
+ load: jest.fn()
31
+ }
32
+ };
18
33
  });
19
34
  afterEach(() => {
20
- jest.restoreAllMocks();
35
+ cleanup();
36
+ jest.clearAllMocks();
37
+ delete window.__tcfapi;
38
+ delete window.twttr;
21
39
  });
22
- it('renders Twitter content if consent is given for Twitter', () => {
23
- mockTcfApi.mockImplementation((_, __, callback) => {
24
- callback({ consentedVendors: [{ name: 'Twitter' }] }, true);
25
- });
26
- const mockElement = {
27
- attributes: {},
28
- value: 'Twitter content',
29
- key: 'twitter-embed'
30
- };
31
- const url = 'https://twitter.com';
32
- render(React.createElement(SocialMediaEmbed, { element: mockElement, url: url, vendorName: 'twitter', id: '222' }));
33
- // const twitterEmbedElement = document.querySelector('twitter-embed');
34
- // expect(twitterEmbedElement).toHaveAttribute('url', url);
40
+ it('renders BlockedEmbedMessage when social embed is not allowed', () => {
41
+ render(React.createElement(SocialMediaEmbed, Object.assign({}, defaultProps)));
42
+ expect(screen.getByText('Blocked Embed Message')).toBeInTheDocument();
43
+ expect(BlockedEmbedMessage).toHaveBeenCalledWith(expect.objectContaining({
44
+ vendorName: defaultProps.vendorName,
45
+ setIsAllowedOnce: defaultProps.socialEmbed.setIsAllowedOnce
46
+ }), {});
35
47
  });
36
- it('renders blocked content message if consent for Twitter is not given', () => {
37
- mockTcfApi.mockImplementation((_, __, callback) => {
38
- callback({ consentedVendors: [] }, true);
39
- });
40
- const mockElement = {
41
- attributes: {},
42
- value: 'Twitter content',
43
- key: 'twitter-embed'
48
+ it('renders the Twitter embed when social embed is allowed', () => {
49
+ const allowedProps = {
50
+ ...defaultProps,
51
+ socialEmbed: {
52
+ ...defaultProps.socialEmbed,
53
+ isSocialEmbedAllowed: true
54
+ }
44
55
  };
45
- const url = 'https://twitter.com';
46
- render(React.createElement(SocialMediaEmbed, { element: mockElement, url: url, vendorName: 'twitter', id: '222' }));
47
- expect(screen.getByText('X (Twitter) content blocked')).toBeInTheDocument();
48
- expect(screen.getByText('privacy manager.')).toBeInTheDocument();
49
- expect(screen.getByRole('button', { name: /Enable cookies/i })).toBeInTheDocument();
50
- expect(screen.getByRole('button', { name: /Allow cookies once/i })).toBeInTheDocument();
56
+ render(React.createElement(SocialMediaEmbed, Object.assign({}, allowedProps)));
57
+ expect(screen.getByRole('link')).toHaveAttribute('href', defaultProps.url);
51
58
  });
52
- it('enables cookies and unblocks Twitter content', () => {
53
- mockTcfApi.mockImplementation((_, __, callback) => {
54
- callback({
55
- grants: {
56
- '5fab0c31a22863611c5f8764': { purposeGrants: { '1': true } }
57
- }
58
- }, true);
59
- });
60
- const mockElement = {
61
- attributes: {},
62
- value: 'Twitter content',
63
- key: 'twitter-embed'
59
+ it('calls checkVendorConsent and sets consent on tcLoaded event', () => {
60
+ const tcData = {
61
+ cmpStatus: 'loaded',
62
+ eventStatus: eventStatus.tcLoaded,
63
+ listenerId: 1
64
64
  };
65
- const url = 'https://twitter.com';
66
- render(React.createElement(SocialMediaEmbed, { element: mockElement, url: url, vendorName: 'twitter', id: '222' }));
67
- fireEvent.click(screen.getByRole('button', { name: /Enable cookies/i }));
68
- expect(mockTcfApi).toHaveBeenCalledWith('getCustomVendorConsents', 2, expect.any(Function));
69
- expect(mockTcfApi).toHaveBeenCalledWith('postCustomConsent', 2, expect.any(Function), ['5fab0c31a22863611c5f8764'], expect.any(Array), []);
70
- // const twitterEmbedElement = document.querySelector('twitter-embed');
71
- // expect(twitterEmbedElement).toHaveAttribute('url', url);
72
- });
73
- /* it('allows cookies once and unblocks Twitter content temporarily', () => {
74
- // Mock implementation for __tcfapi
75
- mockTcfApi.mockImplementation((_, __, callback) => {
76
- callback(
77
- {
78
- grants: {
79
- '5fab0c31a22863611c5f8764': { purposeGrants: { '1': true } }
80
- }
81
- },
82
- true
83
- );
84
- });
85
-
86
- const mockElement = {
87
- attributes: {},
88
- value: 'Twitter content',
89
- key: 'twitter-embed'
90
- };
91
- const url = 'https://twitter.com';
92
-
93
- render(
94
- <SocialMediaEmbed
95
- element={mockElement}
96
- url={url}
97
- vendorName={'twitter'}
98
- id={'222'}
99
- />
100
- );
101
-
102
- fireEvent.click(
103
- screen.getByRole('button', { name: /Allow cookies once/i })
104
- );
105
-
106
- // const twitterEmbedElement = document.querySelector('twitter-embed');
107
- // expect(twitterEmbedElement).toHaveAttribute('url', url);
108
-
109
- mockTcfApi.mockReset(); // Reset the mock to simulate a new page load without consent
110
-
111
- render(
112
- <SocialMediaEmbed
113
- element={mockElement}
114
- url={url}
115
- vendorName={'twitter'}
116
- id={'222'}
117
- />
118
- );
119
-
120
- expect(screen.getByText('X (Twitter) content blocked')).toBeInTheDocument();
121
- }); */
122
- it('opens privacy modal when available', () => {
123
- const mockLoadPrivacyManagerModal = jest.fn();
124
- window.__TIMES_CONFIG__ = {
125
- sourcepoint: {
126
- gdprMessageId: 'messageIdForGDPR'
65
+ const setIsSocialEmbedAllowed = jest.fn();
66
+ const updatedProps = {
67
+ ...defaultProps,
68
+ socialEmbed: {
69
+ ...defaultProps.socialEmbed,
70
+ setIsSocialEmbedAllowed
127
71
  }
128
72
  };
129
- get.mockReturnValue(mockLoadPrivacyManagerModal);
130
- const mockElement = {
131
- attributes: {},
132
- value: 'Twitter content',
133
- key: 'twitter-embed'
134
- };
135
- const url = 'https://twitter.com';
136
- render(React.createElement(SocialMediaEmbed, { element: mockElement, url: url, vendorName: 'twitter', id: '222' }));
137
- const privacyManagerLink = screen.getByText('privacy manager.');
138
- fireEvent.click(privacyManagerLink);
139
- expect(mockLoadPrivacyManagerModal).toHaveBeenCalledWith('messageIdForGDPR');
73
+ checkVendorConsent.mockReturnValue(true);
74
+ render(React.createElement(SocialMediaEmbed, Object.assign({}, updatedProps)));
75
+ const [callback] = window.__tcfapi.mock.calls[0].slice(2);
76
+ callback(tcData, true);
77
+ expect(checkVendorConsent).toHaveBeenCalledWith(defaultProps.vendorName);
78
+ expect(setIsSocialEmbedAllowed).toHaveBeenCalledWith(true);
140
79
  });
141
- it('handles missing privacy modal gracefully', () => {
142
- get.mockReturnValue(undefined);
143
- const mockElement = {
144
- attributes: {},
145
- value: 'Twitter content',
146
- key: 'twitter-embed'
147
- };
148
- const url = 'https://twitter.com';
149
- render(React.createElement(SocialMediaEmbed, { element: mockElement, url: url, vendorName: 'twitter', id: '222' }));
150
- const privacyManagerLink = screen.getByText('privacy manager.');
151
- fireEvent.click(privacyManagerLink);
152
- expect(global.console.warn).toHaveBeenCalledWith('Sourcepoint LoadPrivacyManagerModal is not available');
80
+ it('does not trigger Twitter widget load if twttr is undefined', () => {
81
+ delete window.twttr;
82
+ render(React.createElement(SocialMediaEmbed, Object.assign({}, defaultProps)));
83
+ expect(window.twttr).toBeUndefined();
153
84
  });
154
85
  });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29jaWFsTWVkaWFFbWJlZC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc29jaWFsLWVtYmVkL19fdGVzdHNfXy9Tb2NpYWxNZWRpYUVtYmVkLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUU3QixnQ0FBZ0M7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUUsQ0FDdEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzREFBNkIsQ0FBQyxDQUM3QyxDQUFDO0FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFN0IsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBRTdCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0QsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxr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
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29jaWFsTWVkaWFFbWJlZC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc29jaWFsLWVtYmVkL19fdGVzdHNfXy9Tb2NpYWxNZWRpYUVtYmVkLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXlCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLHlDQUF5QyxDQUFDO0FBRWpELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlEQUFnQyxDQUFDO0NBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBRUosSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDOUIsQ0FBQyxDQUFDLENBQUM7QUFFSixRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO0lBQzFDLE1BQU0sWUFBWSxHQUEwQjtRQUMxQyxFQUFFLEVBQUUsWUFBWTtRQUNoQixHQUFHLEVBQUUscUNBQXFDO1FBQzFDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFdBQVcsRUFBRTtZQUNYLG9CQUFvQixFQUFFLEtBQUs7WUFDM0IsdUJB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