@washingtonpost/subs-de-inputs 0.5.0-canary.0 → 0.5.1

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,51 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file. See
4
+ [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ **[0.5.1 - 2024-06-03]**:
7
+ * Fix for multi paragraph disclosures
8
+ * Support hydration for Privacy Policy link
9
+
10
+ **[0.5.0 - 2024-05-30]**:
11
+ * Added Disclosure component
12
+
13
+ **[0.4.2 - 2024-05-10]**:
14
+ * Fix exception from `<DESelect />` if `dataDictionaryConfig` prop is readonly (such as in redux toolkit)
15
+ * Don't submit data if wp_wv cookie and anonymous user (feedback from ERD)
16
+
17
+ **[0.4.1 - 2024-05-07]**:
18
+ * Set the correct `type` for ingest() API
19
+
20
+ **[0.4.0 - 2024-05-07]**:
21
+ * Support for `implicit` collection via GA
22
+
23
+ **[0.3.0 - 2024-05-06]**:
24
+ * Uses the native `<select />` element in smaller viewport sizes for better UX
25
+
26
+ **[0.2.2 - 2024-05-03]**:
27
+ * use `window.__twpdeu.push()` for submitting
28
+ * Better loading state when fetching config over the wire
29
+ * Prevent extra calls to `ingest` API if user changes value after clicking submit
30
+ * Fix `ingest()` function to send the right format (again)
31
+
32
+ **[0.2.1 - 2024-05-02]**:
33
+ * Revert "ESM build only"
34
+ * `ingest()` function throws error if `submitData.value` is not an array (required by BE)
35
+
36
+ **[0.2.0 - 2024-05-01]**:
37
+ * Adds `ingest()` function
38
+ * ESM build only
39
+ * Babel config to target recent browsers only
40
+
41
+ **[0.1.1 - 2024-04-30]**:
42
+ * Fix build by removing unused file
43
+
44
+ **[0.1.0 - 2024-04-25]**:
45
+ * Add initial `<DESelect />` component
46
+
47
+ **[0.0.2 - 2024-04-24]**:
48
+ * Fix build error
49
+
50
+ **[0.0.1 - 2024-04-09]**:
51
+ * Initial setup
@@ -1,9 +1,9 @@
1
1
  import { ICookieStore } from '@washingtonpost/subs-sdk';
2
- declare type TCData = {
2
+ interface TCData {
3
3
  eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';
4
4
  listenerId: number;
5
5
  [key: string]: any;
6
- };
6
+ }
7
7
  declare type TCFAPIAddListener = (command: 'addEventListener', version: number, callback: (tcData: TCData, success: boolean) => void) => void;
8
8
  declare type TCFAPIRmListener = (command: 'removeEventListener', version: number, callback: (success: boolean) => void, listenerId: number) => void;
9
9
  declare type TCFAPIPing = (command: 'ping', version: number, callback: (pingReturn: any, success: boolean) => void) => void;
@@ -0,0 +1,3 @@
1
+ declare type hydrateLinksType = (str: string) => string | JSX.Element;
2
+ export declare const hydrateLinks: hydrateLinksType;
3
+ export {};
@@ -1,8 +1,8 @@
1
1
  export declare type DisclosureConfigValue = {
2
- disclosure: JSX.Element;
2
+ disclosure: string[];
3
3
  } & {
4
4
  checkBannerStatus: boolean;
5
- disclosure_beforebanner: JSX.Element;
6
- disclosure_afterbanner: JSX.Element;
5
+ disclosure_beforebanner: string[];
6
+ disclosure_afterbanner: string[];
7
7
  };
8
8
  export declare type DisclosureConfig = Record<string, DisclosureConfigValue>;
@@ -444,28 +444,23 @@ const SelectWrapper = /*#__PURE__*/wpdsUiKit.styled('div', {
444
444
  }
445
445
  });
446
446
 
447
- // const configSrc = `${
448
- // ENDPOINTS.base === 'https://subscribe.washingtonpost.com'
449
- // ? 'https://www.washingtonpost.com/subscribe'
450
- // : ENDPOINTS.base
451
- // }/config/de/disclosure.json`;
452
- // revert-me-before-prod
453
- const configSrc = 'https://subscribe.digitalink.com/config/de/disclosure.json';
447
+ const configSrc = `${subsSdk.ENDPOINTS.base === 'https://subscribe.washingtonpost.com' ? 'https://www.washingtonpost.com/subscribe' : subsSdk.ENDPOINTS.base}/config/de/disclosure.json`;
454
448
  const getConfig = async () => {
449
+ let myConfig = undefined;
455
450
  // step 1: fetch config
456
451
  const response = await fetch(configSrc);
457
452
  const remoteConfig = await response.json();
458
453
  // step 2: figure out which part of the config to use
459
- // if country-specific config found, use that
460
- const countryCode = subsSdk.WPGeo().country_code;
461
- const eea = subsSdk.WPGeo().intl_region === 'EEA';
462
- const configs = Object.keys(remoteConfig);
463
- let myConfig = undefined;
464
- configs.forEach(config => {
465
- if (countryCode && config.split('|').includes(countryCode.toLowerCase())) {
466
- myConfig = remoteConfig[config];
467
- } else if (eea && config === 'eea') {
468
- myConfig = remoteConfig[config];
454
+ // if country- or region-specific config found, use that
455
+ const {
456
+ country_code,
457
+ intl_region
458
+ } = subsSdk.WPGeo();
459
+ Object.keys(remoteConfig).forEach(configKey => {
460
+ if (country_code && configKey.split('|').includes(country_code.toLowerCase())) {
461
+ myConfig = remoteConfig[configKey];
462
+ } else if (intl_region === 'EEA' && configKey === 'eea') {
463
+ myConfig = remoteConfig[configKey];
469
464
  }
470
465
  });
471
466
  // TODO: Check for billing country also
@@ -476,6 +471,25 @@ const getConfig = async () => {
476
471
  return myConfig;
477
472
  };
478
473
 
474
+ const hydrateLinks = str => {
475
+ const array = str.split(/({{PRIVACY_POLICY}})/g);
476
+ const chunks = array.map(str => {
477
+ if (str === '{{PRIVACY_POLICY}}') {
478
+ return React__default.createElement("a", {
479
+ target: "_blank",
480
+ style: {
481
+ color: 'inherit'
482
+ },
483
+ className: "underline",
484
+ href: "https://www.washingtonpost.com/privacy-policy/"
485
+ }, "Privacy Policy");
486
+ }
487
+ return str;
488
+ });
489
+ const toReturn = chunks.reduce((prev, current) => React__default.createElement(React__default.Fragment, null, prev, current), React__default.createElement(React__default.Fragment, null));
490
+ return toReturn;
491
+ };
492
+
479
493
  const COOKIE = 'OptanonAlertBoxClosed';
480
494
  const checkCookie = () => {
481
495
  const value = subsSdk.getCookie(COOKIE) || '';
@@ -493,6 +507,7 @@ const useOneTrustAlertBoxClosed = _ref => {
493
507
  const [listenToCookieStore, setListenToCookieStore] = React.useState(false);
494
508
  const [listenToTcfApi, setListenToTcfApi] = React.useState(false);
495
509
  React.useEffect(() => {
510
+ var _window;
496
511
  if (checkCookie()) {
497
512
  setAlertBoxClosed(true);
498
513
  return;
@@ -500,7 +515,7 @@ const useOneTrustAlertBoxClosed = _ref => {
500
515
  if (!window.__tcfapi) {
501
516
  console.warn('warning: __tcfapi not found');
502
517
  }
503
- if (window.cookieStore && allowCookieStore) {
518
+ if ((_window = window) !== null && _window !== void 0 && _window.cookieStore && allowCookieStore) {
504
519
  setListenToCookieStore(true);
505
520
  } else if (window.__tcfapi) {
506
521
  setListenToTcfApi(true);
@@ -509,23 +524,19 @@ const useOneTrustAlertBoxClosed = _ref => {
509
524
  }
510
525
  }, []);
511
526
  React.useEffect(() => {
527
+ let cleanupFn = () => {};
512
528
  if (listenToCookieStore && window.cookieStore) {
513
- const cleanupFn = subsSdk.listenToCookieStore(COOKIE$1, () => {
529
+ cleanupFn = subsSdk.listenToCookieStore(COOKIE$1, () => {
514
530
  if (checkCookie()) {
515
531
  setAlertBoxClosed(true);
516
532
  }
517
533
  });
518
- // cleanup fn
519
- return () => {
520
- if (cleanupFn) cleanupFn();
521
- };
522
- } else {
523
- return () => {};
524
534
  }
535
+ return cleanupFn || (() => {});
525
536
  }, [listenToCookieStore]);
526
537
  React.useEffect(() => {
538
+ let listenerId;
527
539
  if (listenToTcfApi && window.__tcfapi) {
528
- let listenerId;
529
540
  const callback = (_tcData, success) => {
530
541
  if (success) {
531
542
  listenerId = _tcData.listenerId;
@@ -540,15 +551,13 @@ const useOneTrustAlertBoxClosed = _ref => {
540
551
  }
541
552
  };
542
553
  window.__tcfapi('addEventListener', 2, callback);
543
- // cleanup fn
544
- return () => {
545
- if (window.__tcfapi && listenerId) window.__tcfapi('removeEventListener', 2, success => {
546
- console.debug(success);
547
- }, listenerId);
548
- };
549
- } else {
550
- return () => {};
551
554
  }
555
+ // cleanup fn
556
+ return () => {
557
+ if (window.__tcfapi && listenerId) window.__tcfapi('removeEventListener', 2, success => {
558
+ console.debug(success);
559
+ }, listenerId);
560
+ };
552
561
  }, [listenToTcfApi]);
553
562
  return {
554
563
  alertBoxClosed,
@@ -563,6 +572,7 @@ const DEDisclosure = _ref => {
563
572
  allowCookieStore = true
564
573
  } = _ref;
565
574
  const [disclosure, setDisclosure] = React.useState(null);
575
+ const [disclosureRendering, setDisclosureRendering] = React.useState(null);
566
576
  const [myConfig, setMyConfig] = React.useState();
567
577
  const {
568
578
  alertBoxClosed
@@ -599,7 +609,10 @@ const DEDisclosure = _ref => {
599
609
  }
600
610
  }, [myConfig, alertBoxClosed]);
601
611
  React.useEffect(() => {
602
- if (disclosure) {
612
+ if (disclosure && Array.isArray(disclosure)) {
613
+ setDisclosureRendering(disclosure.reduce((prev, current) => {
614
+ return React__default.createElement(React__default.Fragment, null, prev, React__default.createElement("p", null, hydrateLinks(current)));
615
+ }, React__default.createElement(React__default.Fragment, null)));
603
616
  // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?
604
617
  onFinished({
605
618
  isFinished: true,
@@ -611,7 +624,7 @@ const DEDisclosure = _ref => {
611
624
  "data-test-id": "de-disclosure-loading"
612
625
  }) : React__default.createElement("div", {
613
626
  "data-test-id": "de-disclosure"
614
- }, disclosure);
627
+ }, disclosureRendering);
615
628
  };
616
629
 
617
630
  exports.AttributesState = AttributesState;
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\n// const configSrc = `${\n// ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n// ? 'https://www.washingtonpost.com/subscribe'\n// : ENDPOINTS.base\n// }/config/de/disclosure.json`;\n// revert-me-before-prod\nconst configSrc = 'https://subscribe.digitalink.com/config/de/disclosure.json';\n\nexport const getConfig = async () => {\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country-specific config found, use that\n const countryCode = WPGeo().country_code;\n const eea = WPGeo().intl_region === 'EEA';\n const configs = Object.keys(remoteConfig);\n let myConfig: DisclosureConfigValue | undefined = undefined;\n configs.forEach((config) => {\n if (countryCode && config.split('|').includes(countryCode.toLowerCase())) {\n myConfig = remoteConfig[config];\n } else if (eea && config === 'eea') {\n myConfig = remoteConfig[config];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ntype TCData = {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n};\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n\n // cleanup fn\n return () => {\n if (cleanupFn) cleanupFn();\n };\n } else {\n return () => {};\n }\n }, [listenToCookieStore]);\n\n useEffect(() => {\n if (listenToTcfApi && window.__tcfapi) {\n let listenerId: number;\n\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n } else {\n return () => {};\n }\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure) {\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosure}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","remoteConfig","eea","intl_region","configs","Object","keys","myConfig","undefined","forEach","split","includes","toLowerCase","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner"],"mappings":"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"}
1
+ {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("@washingtonpost/subs-sdk"),o=require("react"),i=(e=o)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@washingtonpost/wpds-ui-kit"),a=require("@washingtonpost/subs-hooks"),s=require("@washingtonpost/wpds-assets");const r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},l={EXPLICIT:"explicit",IMPLICIT:"implicit"},c=()=>{var e;if("undefined"==typeof window)return!1;const o=t.getCookie("wp_usp"),i=null===(e=t.WPGeo())||void 0===e?void 0:e.country_code;return!(!o||"US"!==i)},d=t.ENDPOINTS.base+"/de/v1",u={},p=async e=>{let{fieldName:o}=e;if(u[o])return u[o];const i=[o];try{const e=new URL(d+"/attributes");e.searchParams.set("attributes",i.join(","));const n=await fetch(e.toString(),{credentials:"include",headers:t.JSON_HEADERS}),a=await n.json();if(n.ok&&a.status===t.ResponseStatus.SUCCESS){const e=a.attributes||[];return u[o]=e,e}return[]}catch(e){return console.debug(e),[]}},f=t.ENDPOINTS.base+"/de/v1",w=n.styled("select",{padding:"12px 16px 12px 6px",display:"flex",justifyContent:"space-between",width:"100%",backgroundColor:"$secondary",color:"$primary",fontFamily:"$meta",fontSize:"$100",fontWeight:"$light",lineHeight:"$125",paddingBlockRight:"$125",textOverflow:"ellipsis",position:"relative",borderColor:"transparent",borderRightWidth:"10px",borderRightColor:"transparent",appearance:"none","-webkit-appearance":"none","&:disabled":{backgroundColor:n.theme.colors.disabled,borderColor:n.theme.colors.disabled,color:n.theme.colors.onDisabled,cursor:"not-allowed"}}),E=n.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),b=n.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),g=e=>{let{id:t,label:r,values:l,required:c=!1,defaultValue:d,onChange:u=(()=>{}),disabled:p=!1}=e;const[f,g]=o.useState(),{isMobileSize:h}=a.useWindowSize();o.useEffect(()=>{f&&u(f)},[f]);const S=p?{disabled:!0}:{},m=f?{defaultValue:f}:d?{defaultValue:d}:{},C=e=>f?e===f?{selected:!0}:{}:e===d?{selected:!0}:{};return h?i.createElement(E,null,i.createElement(w,{id:"",required:c,onChange:e=>g(e.target.value),placeholder:r,...S},i.createElement("label",null,r),i.createElement(b,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),l.map(e=>i.createElement(b,{value:e,key:e,...C(e)},e))),i.createElement(n.Icon,{label:"",size:"100",fill:n.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},i.createElement(s.ChevronDown,{style:{position:"absolute",right:"10px"}}))):i.createElement(n.Select.Root,{onValueChange:e=>g(e),required:c,...m,...S},i.createElement(n.Select.Trigger,{"data-test-id":t+"-select-trigger"},i.createElement(n.Select.Label,null,r),i.createElement(n.Select.Value,null)),i.createElement(n.Select.Content,{css:{zIndex:n.theme.zIndices.page},"data-test-id":t+"-select-content"},l.map(e=>i.createElement(n.Select.Item,{value:e,key:e},e))))},h=("https://subscribe.washingtonpost.com/static"===t.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":t.ENDPOINTS.staticAssets)+"/de-utils/twpdeu.min.js",S=n.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),m=()=>(t.getCookie("OptanonAlertBoxClosed")||"").length>12;exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=e=>{let{onFinished:n=(()=>{}),allowCookieStore:a=!0}=e;const[s,r]=o.useState(null),[l,c]=o.useState(),{alertBoxClosed:d}=(e=>{let{allowCookieStore:i}=e;const[n,a]=o.useState(),[s,r]=o.useState(!1),[l,c]=o.useState(!1);return o.useEffect(()=>{m()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),window.cookieStore&&i?r(!0):window.__tcfapi?c(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))},[]),o.useEffect(()=>{if(s&&window.cookieStore){const e=t.listenToCookieStore("OptanonAlertBoxClosed",()=>{m()&&a(!0)});return()=>{e&&e()}}return()=>{}},[s]),o.useEffect(()=>{if(l&&window.__tcfapi){let e;return window.__tcfapi("addEventListener",2,(t,o)=>{o&&(e=t.listenerId,m()&&a(!0))}),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,e=>{console.debug(e)},e)}}return()=>{}},[l]),{alertBoxClosed:n,listenToCookieStore:s,listenToTcfApi:l}})({allowCookieStore:a});return o.useEffect(()=>{(async()=>{const e=await(async()=>{const e=await fetch("https://subscribe.digitalink.com/config/de/disclosure.json"),o=await e.json(),i=t.WPGeo().country_code,n="EEA"===t.WPGeo().intl_region,a=Object.keys(o);let s=void 0;return a.forEach(e=>{(i&&e.split("|").includes(i.toLowerCase())||n&&"eea"===e)&&(s=o[e])}),void 0===s&&o._&&(s=o._),s})();c(e),e||console.error("No config found")})()},[]),o.useEffect(()=>{l&&("checkBannerStatus"in l&&l.checkBannerStatus?r(d?l.disclosure_afterbanner:l.disclosure_beforebanner):"disclosure"in l?r(l.disclosure):console.error("Invalid config"))},[l,d]),o.useEffect(()=>{s&&n({isFinished:!0,isError:!1})},[s]),null===s?i.createElement("div",{"data-test-id":"de-disclosure-loading"}):i.createElement("div",{"data-test-id":"de-disclosure"},s)},exports.DESelect=e=>{let{source:s,fieldName:r,label:l,dataDictionaryConfig:c,defaultValue:d,disabled:u,submit:p,onChange:f=(()=>{}),onFinished:w=(()=>{}),valuesFilter:E=(()=>!0),children:b}=e;const[m,C]=o.useState(c),[_,I]=o.useState(""),v=a.useScript(h);o.useEffect(()=>{v!==a.ScriptStatus.READY||b||m||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?C(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()},[v]),o.useEffect(()=>{v===a.ScriptStatus.READY&&p&&_&&(async()=>{try{var e;const o=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.push({submitData:{fieldName:r,value:_},source:s}));w({isFinished:!0,isError:!0!==o&&(!o||o.status!==t.ResponseStatus.SUCCESS)})}catch(e){w({isFinished:!1,isError:!0})}})()},[v,p]);const y=d&&m?{defaultValue:d}:{},T=u||!b&&!m?{disabled:!0}:{},N=m?[...m.values].sort((e,t)=>e.order-t.order).filter(e=>!0!==e.archived).filter(E):[];return i.createElement(S,null,b&&i.createElement(n.Select.Root,{onValueChange:e=>{I(e),f({value:e})},...y,...T},b),!b&&!m&&i.createElement(g,{id:"loading",label:"Loading...",values:[],disabled:!0}),!b&&m&&i.createElement(g,{id:m.name,label:l||m.name,onChange:e=>{I(e),f({value:e})},values:N.map(e=>e.name),defaultValue:d,disabled:u}))},exports.IngestResponseState={SUCCESS:"100",SYSTEM_ERROR:"101",INVALID_TYPE:"102",INVALID_IDENTIFIER:"103",INVALID_DATA:"104",INVALID_ATTRIBUTE_DEFINITION:"105",INVALID_META_DEFINITION:"106",UNAUTHENTICATED:"107",MISMATCHED_IDENTIFIER:"108",DISABLED_ATTRIBUTE_DEFINITION:"109",DO_NOT_COLLECT:"110"},exports.IngestType=l,exports.getAttributes=p,exports.hasRequiredPrivacyCookies=c,exports.push=async e=>{let{submitData:o,source:i}=e;if(!c())throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&t.getCookie("wp_wv")&&!t.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:n}=o,a=await p({fieldName:n});if(a[0]&&a[0].name===n&&a[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");const s=a[0]&&!0===a[0].explicit?l.EXPLICIT:l.IMPLICIT;return a[0]||"production"===process.env.NODE_ENV||console.warn(`no attribute info found for ${n}, assuming implicit`),s===l.EXPLICIT?(async e=>{let{submitData:{fieldName:o,value:i},source:n}=e;const a=f+"/ingest",s=t.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:t.getCookie("_ga"),type:l.EXPLICIT,wapo_login_id:s,data:{[o]:[i]},metadata:{source:n}};try{const e=await fetch(a,{method:"POST",credentials:"include",headers:t.JSON_HEADERS,body:JSON.stringify(r)});return await e.json()}catch(e){return console.debug(e),null}})({submitData:o,source:i}):(async e=>{let{submitData:{fieldName:t,value:o},source:i}=e;return(e=>{if("undefined"==typeof window)return void("production"!==process.env.NODE_ENV&&console.warn("NO WINDOW"));window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:t,"de-label":t,[t]:o,section:"profile",subsection:i}),!0})({submitData:o,source:i})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("@washingtonpost/subs-sdk"),o=require("react"),n=(e=o)&&"object"==typeof e&&"default"in e?e.default:e,i=require("@washingtonpost/wpds-ui-kit"),a=require("@washingtonpost/subs-hooks"),s=require("@washingtonpost/wpds-assets");const r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},l={EXPLICIT:"explicit",IMPLICIT:"implicit"},c=()=>{var e;if("undefined"==typeof window)return!1;const o=t.getCookie("wp_usp"),n=null===(e=t.WPGeo())||void 0===e?void 0:e.country_code;return!(!o||"US"!==n)},d=t.ENDPOINTS.base+"/de/v1",u={},p=async e=>{let{fieldName:o}=e;if(u[o])return u[o];const n=[o];try{const e=new URL(d+"/attributes");e.searchParams.set("attributes",n.join(","));const i=await fetch(e.toString(),{credentials:"include",headers:t.JSON_HEADERS}),a=await i.json();if(i.ok&&a.status===t.ResponseStatus.SUCCESS){const e=a.attributes||[];return u[o]=e,e}return[]}catch(e){return console.debug(e),[]}},f=t.ENDPOINTS.base+"/de/v1",w=i.styled("select",{padding:"12px 16px 12px 6px",display:"flex",justifyContent:"space-between",width:"100%",backgroundColor:"$secondary",color:"$primary",fontFamily:"$meta",fontSize:"$100",fontWeight:"$light",lineHeight:"$125",paddingBlockRight:"$125",textOverflow:"ellipsis",position:"relative",borderColor:"transparent",borderRightWidth:"10px",borderRightColor:"transparent",appearance:"none","-webkit-appearance":"none","&:disabled":{backgroundColor:i.theme.colors.disabled,borderColor:i.theme.colors.disabled,color:i.theme.colors.onDisabled,cursor:"not-allowed"}}),E=i.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),g=i.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),b=e=>{let{id:t,label:r,values:l,required:c=!1,defaultValue:d,onChange:u=(()=>{}),disabled:p=!1}=e;const[f,b]=o.useState(),{isMobileSize:m}=a.useWindowSize();o.useEffect(()=>{f&&u(f)},[f]);const h=p?{disabled:!0}:{},S=f?{defaultValue:f}:d?{defaultValue:d}:{},C=e=>f?e===f?{selected:!0}:{}:e===d?{selected:!0}:{};return m?n.createElement(E,null,n.createElement(w,{id:"",required:c,onChange:e=>b(e.target.value),placeholder:r,...h},n.createElement("label",null,r),n.createElement(g,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),l.map(e=>n.createElement(g,{value:e,key:e,...C(e)},e))),n.createElement(i.Icon,{label:"",size:"100",fill:i.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},n.createElement(s.ChevronDown,{style:{position:"absolute",right:"10px"}}))):n.createElement(i.Select.Root,{onValueChange:e=>b(e),required:c,...S,...h},n.createElement(i.Select.Trigger,{"data-test-id":t+"-select-trigger"},n.createElement(i.Select.Label,null,r),n.createElement(i.Select.Value,null)),n.createElement(i.Select.Content,{css:{zIndex:i.theme.zIndices.page},"data-test-id":t+"-select-content"},l.map(e=>n.createElement(i.Select.Item,{value:e,key:e},e))))},m=("https://subscribe.washingtonpost.com/static"===t.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":t.ENDPOINTS.staticAssets)+"/de-utils/twpdeu.min.js",h=i.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),S=("https://subscribe.washingtonpost.com"===t.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":t.ENDPOINTS.base)+"/config/de/disclosure.json",C=()=>(t.getCookie("OptanonAlertBoxClosed")||"").length>12;exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=e=>{let{onFinished:i=(()=>{}),allowCookieStore:a=!0}=e;const[s,r]=o.useState(null),[l,c]=o.useState(null),[d,u]=o.useState(),{alertBoxClosed:p}=(e=>{let{allowCookieStore:n}=e;const[i,a]=o.useState(),[s,r]=o.useState(!1),[l,c]=o.useState(!1);return o.useEffect(()=>{var e;C()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&n?r(!0):window.__tcfapi?c(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))},[]),o.useEffect(()=>{let e=()=>{};return s&&window.cookieStore&&(e=t.listenToCookieStore("OptanonAlertBoxClosed",()=>{C()&&a(!0)})),e||(()=>{})},[s]),o.useEffect(()=>{let e;return l&&window.__tcfapi&&window.__tcfapi("addEventListener",2,(t,o)=>{o&&(e=t.listenerId,C()&&a(!0))}),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,e=>{console.debug(e)},e)}},[l]),{alertBoxClosed:i,listenToCookieStore:s,listenToTcfApi:l}})({allowCookieStore:a});return o.useEffect(()=>{(async()=>{const e=await(async()=>{let e=void 0;const o=await fetch(S),n=await o.json(),{country_code:i,intl_region:a}=t.WPGeo();return Object.keys(n).forEach(t=>{(i&&t.split("|").includes(i.toLowerCase())||"EEA"===a&&"eea"===t)&&(e=n[t])}),void 0===e&&n._&&(e=n._),e})();u(e),e||console.error("No config found")})()},[]),o.useEffect(()=>{d&&("checkBannerStatus"in d&&d.checkBannerStatus?r(p?d.disclosure_afterbanner:d.disclosure_beforebanner):"disclosure"in d?r(d.disclosure):console.error("Invalid config"))},[d,p]),o.useEffect(()=>{s&&Array.isArray(s)&&(c(s.reduce((e,t)=>n.createElement(n.Fragment,null,e,n.createElement("p",null,t.split(/({{PRIVACY_POLICY}})/g).map(e=>"{{PRIVACY_POLICY}}"===e?n.createElement("a",{target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/"},"Privacy Policy"):e).reduce((e,t)=>n.createElement(n.Fragment,null,e,t),n.createElement(n.Fragment,null)))),n.createElement(n.Fragment,null))),i({isFinished:!0,isError:!1}))},[s]),null===s?n.createElement("div",{"data-test-id":"de-disclosure-loading"}):n.createElement("div",{"data-test-id":"de-disclosure"},l)},exports.DESelect=e=>{let{source:s,fieldName:r,label:l,dataDictionaryConfig:c,defaultValue:d,disabled:u,submit:p,onChange:f=(()=>{}),onFinished:w=(()=>{}),valuesFilter:E=(()=>!0),children:g}=e;const[S,C]=o.useState(c),[I,_]=o.useState(""),y=a.useScript(m);o.useEffect(()=>{y!==a.ScriptStatus.READY||g||S||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?C(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()},[y]),o.useEffect(()=>{y===a.ScriptStatus.READY&&p&&I&&(async()=>{try{var e;const o=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.push({submitData:{fieldName:r,value:I},source:s}));w({isFinished:!0,isError:!0!==o&&(!o||o.status!==t.ResponseStatus.SUCCESS)})}catch(e){w({isFinished:!1,isError:!0})}})()},[y,p]);const v=d&&S?{defaultValue:d}:{},N=u||!g&&!S?{disabled:!0}:{},T=S?[...S.values].sort((e,t)=>e.order-t.order).filter(e=>!0!==e.archived).filter(E):[];return n.createElement(h,null,g&&n.createElement(i.Select.Root,{onValueChange:e=>{_(e),f({value:e})},...v,...N},g),!g&&!S&&n.createElement(b,{id:"loading",label:"Loading...",values:[],disabled:!0}),!g&&S&&n.createElement(b,{id:S.name,label:l||S.name,onChange:e=>{_(e),f({value:e})},values:T.map(e=>e.name),defaultValue:d,disabled:u}))},exports.IngestResponseState={SUCCESS:"100",SYSTEM_ERROR:"101",INVALID_TYPE:"102",INVALID_IDENTIFIER:"103",INVALID_DATA:"104",INVALID_ATTRIBUTE_DEFINITION:"105",INVALID_META_DEFINITION:"106",UNAUTHENTICATED:"107",MISMATCHED_IDENTIFIER:"108",DISABLED_ATTRIBUTE_DEFINITION:"109",DO_NOT_COLLECT:"110"},exports.IngestType=l,exports.getAttributes=p,exports.hasRequiredPrivacyCookies=c,exports.push=async e=>{let{submitData:o,source:n}=e;if(!c())throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&t.getCookie("wp_wv")&&!t.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:i}=o,a=await p({fieldName:i});if(a[0]&&a[0].name===i&&a[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");const s=a[0]&&!0===a[0].explicit?l.EXPLICIT:l.IMPLICIT;return a[0]||"production"===process.env.NODE_ENV||console.warn(`no attribute info found for ${i}, assuming implicit`),s===l.EXPLICIT?(async e=>{let{submitData:{fieldName:o,value:n},source:i}=e;const a=f+"/ingest",s=t.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:t.getCookie("_ga"),type:l.EXPLICIT,wapo_login_id:s,data:{[o]:[n]},metadata:{source:i}};try{const e=await fetch(a,{method:"POST",credentials:"include",headers:t.JSON_HEADERS,body:JSON.stringify(r)});return await e.json()}catch(e){return console.debug(e),null}})({submitData:o,source:n}):(async e=>{let{submitData:{fieldName:t,value:o},source:n}=e;return(e=>{if("undefined"==typeof window)return void("production"!==process.env.NODE_ENV&&console.warn("NO WINDOW"));window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:t,"de-label":t,[t]:o,section:"profile",subsection:n}),!0})({submitData:o,source:n})};
2
2
  //# sourceMappingURL=subs-de-inputs.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.cjs.production.min.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/ingest.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/index.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/utils/getConfig.ts","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure) {\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosure}</div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ntype TCData = {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n};\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n\n // cleanup fn\n return () => {\n if (cleanupFn) cleanupFn();\n };\n } else {\n return () => {};\n }\n }, [listenToCookieStore]);\n\n useEffect(() => {\n if (listenToTcfApi && window.__tcfapi) {\n let listenerId: number;\n\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n } else {\n return () => {};\n }\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import { WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\n// const configSrc = `${\n// ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n// ? 'https://www.washingtonpost.com/subscribe'\n// : ENDPOINTS.base\n// }/config/de/disclosure.json`;\n// revert-me-before-prod\nconst configSrc = 'https://subscribe.digitalink.com/config/de/disclosure.json';\n\nexport const getConfig = async () => {\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country-specific config found, use that\n const countryCode = WPGeo().country_code;\n const eea = WPGeo().intl_region === 'EEA';\n const configs = Object.keys(remoteConfig);\n let myConfig: DisclosureConfigValue | undefined = undefined;\n configs.forEach((config) => {\n if (countryCode && config.split('|').includes(countryCode.toLowerCase())) {\n myConfig = remoteConfig[config];\n } else if (eea && config === 'eea') {\n myConfig = remoteConfig[config];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","IngestType","EXPLICIT","IMPLICIT","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","_ref","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","SUCCESS","attributes","e","console","debug","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","-webkit-appearance","&:disabled","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","label","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","value","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","& button","& *","checkCookie","length","onFinished","allowCookieStore","disclosure","setDisclosure","myConfig","setMyConfig","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","warn","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","useOneTrustAlertBoxClosed","config","response","remoteConfig","eea","intl_region","configs","Object","keys","undefined","forEach","split","includes","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","isFinished","isError","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","_window","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","push","submitData","submitSelected","sort","a","b","order","filter","archived","name","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","Error","isLoggedIn","attributeInfo","collection_behavior","type","explicit","process","env","NODE_ENV","wapo_login_id","payload","jucid","localStorage","getItem","ga","[object Object]","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","de-label","section","subsection","sendToGA"],"mappings":"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"}
1
+ {"version":3,"file":"subs-de-inputs.cjs.production.min.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/ingest.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/index.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","IngestType","EXPLICIT","IMPLICIT","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","_ref","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","SUCCESS","attributes","e","console","debug","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","-webkit-appearance","&:disabled","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","label","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","value","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","& button","& *","configSrc","checkCookie","length","onFinished","allowCookieStore","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","myConfig","setMyConfig","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","warn","_window","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","useOneTrustAlertBoxClosed","config","undefined","response","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","reduce","prev","current","str","className","href","isFinished","isError","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","push","submitData","submitSelected","sort","a","b","order","filter","archived","name","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","Error","isLoggedIn","attributeInfo","collection_behavior","type","explicit","process","env","NODE_ENV","wapo_login_id","payload","jucid","localStorage","getItem","ga","[object Object]","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","de-label","section","subsection","sendToGA"],"mappings":"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"}
@@ -437,28 +437,23 @@ const SelectWrapper = /*#__PURE__*/styled('div', {
437
437
  }
438
438
  });
439
439
 
440
- // const configSrc = `${
441
- // ENDPOINTS.base === 'https://subscribe.washingtonpost.com'
442
- // ? 'https://www.washingtonpost.com/subscribe'
443
- // : ENDPOINTS.base
444
- // }/config/de/disclosure.json`;
445
- // revert-me-before-prod
446
- const configSrc = 'https://subscribe.digitalink.com/config/de/disclosure.json';
440
+ const configSrc = `${ENDPOINTS.base === 'https://subscribe.washingtonpost.com' ? 'https://www.washingtonpost.com/subscribe' : ENDPOINTS.base}/config/de/disclosure.json`;
447
441
  const getConfig = async () => {
442
+ let myConfig = undefined;
448
443
  // step 1: fetch config
449
444
  const response = await fetch(configSrc);
450
445
  const remoteConfig = await response.json();
451
446
  // step 2: figure out which part of the config to use
452
- // if country-specific config found, use that
453
- const countryCode = WPGeo().country_code;
454
- const eea = WPGeo().intl_region === 'EEA';
455
- const configs = Object.keys(remoteConfig);
456
- let myConfig = undefined;
457
- configs.forEach(config => {
458
- if (countryCode && config.split('|').includes(countryCode.toLowerCase())) {
459
- myConfig = remoteConfig[config];
460
- } else if (eea && config === 'eea') {
461
- myConfig = remoteConfig[config];
447
+ // if country- or region-specific config found, use that
448
+ const {
449
+ country_code,
450
+ intl_region
451
+ } = WPGeo();
452
+ Object.keys(remoteConfig).forEach(configKey => {
453
+ if (country_code && configKey.split('|').includes(country_code.toLowerCase())) {
454
+ myConfig = remoteConfig[configKey];
455
+ } else if (intl_region === 'EEA' && configKey === 'eea') {
456
+ myConfig = remoteConfig[configKey];
462
457
  }
463
458
  });
464
459
  // TODO: Check for billing country also
@@ -469,6 +464,25 @@ const getConfig = async () => {
469
464
  return myConfig;
470
465
  };
471
466
 
467
+ const hydrateLinks = str => {
468
+ const array = str.split(/({{PRIVACY_POLICY}})/g);
469
+ const chunks = array.map(str => {
470
+ if (str === '{{PRIVACY_POLICY}}') {
471
+ return React.createElement("a", {
472
+ target: "_blank",
473
+ style: {
474
+ color: 'inherit'
475
+ },
476
+ className: "underline",
477
+ href: "https://www.washingtonpost.com/privacy-policy/"
478
+ }, "Privacy Policy");
479
+ }
480
+ return str;
481
+ });
482
+ const toReturn = chunks.reduce((prev, current) => React.createElement(React.Fragment, null, prev, current), React.createElement(React.Fragment, null));
483
+ return toReturn;
484
+ };
485
+
472
486
  const COOKIE = 'OptanonAlertBoxClosed';
473
487
  const checkCookie = () => {
474
488
  const value = getCookie(COOKIE) || '';
@@ -486,6 +500,7 @@ const useOneTrustAlertBoxClosed = _ref => {
486
500
  const [listenToCookieStore$1, setListenToCookieStore] = useState(false);
487
501
  const [listenToTcfApi, setListenToTcfApi] = useState(false);
488
502
  useEffect(() => {
503
+ var _window;
489
504
  if (checkCookie()) {
490
505
  setAlertBoxClosed(true);
491
506
  return;
@@ -493,7 +508,7 @@ const useOneTrustAlertBoxClosed = _ref => {
493
508
  if (!window.__tcfapi) {
494
509
  console.warn('warning: __tcfapi not found');
495
510
  }
496
- if (window.cookieStore && allowCookieStore) {
511
+ if ((_window = window) !== null && _window !== void 0 && _window.cookieStore && allowCookieStore) {
497
512
  setListenToCookieStore(true);
498
513
  } else if (window.__tcfapi) {
499
514
  setListenToTcfApi(true);
@@ -502,23 +517,19 @@ const useOneTrustAlertBoxClosed = _ref => {
502
517
  }
503
518
  }, []);
504
519
  useEffect(() => {
520
+ let cleanupFn = () => {};
505
521
  if (listenToCookieStore$1 && window.cookieStore) {
506
- const cleanupFn = listenToCookieStore(COOKIE$1, () => {
522
+ cleanupFn = listenToCookieStore(COOKIE$1, () => {
507
523
  if (checkCookie()) {
508
524
  setAlertBoxClosed(true);
509
525
  }
510
526
  });
511
- // cleanup fn
512
- return () => {
513
- if (cleanupFn) cleanupFn();
514
- };
515
- } else {
516
- return () => {};
517
527
  }
528
+ return cleanupFn || (() => {});
518
529
  }, [listenToCookieStore$1]);
519
530
  useEffect(() => {
531
+ let listenerId;
520
532
  if (listenToTcfApi && window.__tcfapi) {
521
- let listenerId;
522
533
  const callback = (_tcData, success) => {
523
534
  if (success) {
524
535
  listenerId = _tcData.listenerId;
@@ -533,15 +544,13 @@ const useOneTrustAlertBoxClosed = _ref => {
533
544
  }
534
545
  };
535
546
  window.__tcfapi('addEventListener', 2, callback);
536
- // cleanup fn
537
- return () => {
538
- if (window.__tcfapi && listenerId) window.__tcfapi('removeEventListener', 2, success => {
539
- console.debug(success);
540
- }, listenerId);
541
- };
542
- } else {
543
- return () => {};
544
547
  }
548
+ // cleanup fn
549
+ return () => {
550
+ if (window.__tcfapi && listenerId) window.__tcfapi('removeEventListener', 2, success => {
551
+ console.debug(success);
552
+ }, listenerId);
553
+ };
545
554
  }, [listenToTcfApi]);
546
555
  return {
547
556
  alertBoxClosed,
@@ -556,6 +565,7 @@ const DEDisclosure = _ref => {
556
565
  allowCookieStore = true
557
566
  } = _ref;
558
567
  const [disclosure, setDisclosure] = useState(null);
568
+ const [disclosureRendering, setDisclosureRendering] = useState(null);
559
569
  const [myConfig, setMyConfig] = useState();
560
570
  const {
561
571
  alertBoxClosed
@@ -592,7 +602,10 @@ const DEDisclosure = _ref => {
592
602
  }
593
603
  }, [myConfig, alertBoxClosed]);
594
604
  useEffect(() => {
595
- if (disclosure) {
605
+ if (disclosure && Array.isArray(disclosure)) {
606
+ setDisclosureRendering(disclosure.reduce((prev, current) => {
607
+ return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current)));
608
+ }, React.createElement(React.Fragment, null)));
596
609
  // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?
597
610
  onFinished({
598
611
  isFinished: true,
@@ -604,7 +617,7 @@ const DEDisclosure = _ref => {
604
617
  "data-test-id": "de-disclosure-loading"
605
618
  }) : React.createElement("div", {
606
619
  "data-test-id": "de-disclosure"
607
- }, disclosure);
620
+ }, disclosureRendering);
608
621
  };
609
622
 
610
623
  export { AttributesState, CollectionBehaviors, DEDisclosure, DESelect, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, push };
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\n// const configSrc = `${\n// ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n// ? 'https://www.washingtonpost.com/subscribe'\n// : ENDPOINTS.base\n// }/config/de/disclosure.json`;\n// revert-me-before-prod\nconst configSrc = 'https://subscribe.digitalink.com/config/de/disclosure.json';\n\nexport const getConfig = async () => {\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country-specific config found, use that\n const countryCode = WPGeo().country_code;\n const eea = WPGeo().intl_region === 'EEA';\n const configs = Object.keys(remoteConfig);\n let myConfig: DisclosureConfigValue | undefined = undefined;\n configs.forEach((config) => {\n if (countryCode && config.split('|').includes(countryCode.toLowerCase())) {\n myConfig = remoteConfig[config];\n } else if (eea && config === 'eea') {\n myConfig = remoteConfig[config];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ntype TCData = {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n};\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n\n // cleanup fn\n return () => {\n if (cleanupFn) cleanupFn();\n };\n } else {\n return () => {};\n }\n }, [listenToCookieStore]);\n\n useEffect(() => {\n if (listenToTcfApi && window.__tcfapi) {\n let listenerId: number;\n\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n } else {\n return () => {};\n }\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure) {\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosure}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","remoteConfig","eea","intl_region","configs","Object","keys","myConfig","undefined","forEach","split","includes","toLowerCase","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner"],"mappings":"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"}
1
+ {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.0-canary.0",
2
+ "version": "0.5.1",
3
3
  "license": "UNLICENSED",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -43,6 +43,12 @@
43
43
  "path": "dist/subs-de-inputs.esm.js",
44
44
  "import": "{ DESelect }",
45
45
  "limit": "2.5 KB"
46
+ },
47
+ {
48
+ "name": "de-inputs: DEDisclosure",
49
+ "path": "dist/subs-de-inputs.esm.js",
50
+ "import": "{ DEDisclosure }",
51
+ "limit": "1.5 KB"
46
52
  }
47
53
  ],
48
54
  "devDependencies": {