@washingtonpost/subs-de-inputs 1.0.0-react18.12e → 1.0.0-react18.12g

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.
@@ -0,0 +1 @@
1
+ export declare const checkCookie: () => boolean;
@@ -45,16 +45,14 @@ const checkConsentCookieForAllowTargeting = () => {
45
45
  };
46
46
 
47
47
  const COOKIE$1 = 'OptanonAlertBoxClosed';
48
- const checkAlertBoxCookie = () => {
48
+ const checkCookie = () => {
49
49
  const value = subsSdk.getCookie(COOKIE$1) || '';
50
50
  // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
51
51
  // "Invalid date" is 12 characters long
52
52
  return value.length > 12;
53
53
  };
54
54
 
55
- const hasRequiredPrivacyCookies = ({
56
- isPush
57
- } = {}) => {
55
+ const hasRequiredPrivacyCookies = () => {
58
56
  if (typeof window === 'undefined') {
59
57
  return false;
60
58
  }
@@ -66,11 +64,11 @@ const hasRequiredPrivacyCookies = ({
66
64
  return !!subsSdk.getCookie('wp_usp');
67
65
  }
68
66
  const gdprAllowTargarting = checkConsentCookieForAllowTargeting();
69
- if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {
67
+ if (typeof gdprAllowTargarting === 'boolean' && checkCookie()) {
70
68
  return gdprAllowTargarting;
71
69
  }
72
- // push has stricter requirements
73
- if (!isPush && intl_region === 'EEA') {
70
+ // Downstream systems
71
+ if (intl_region === 'EEA') {
74
72
  return true;
75
73
  }
76
74
  return false;
@@ -190,9 +188,7 @@ const push = async ({
190
188
  submitData,
191
189
  source
192
190
  }) => {
193
- if (!hasRequiredPrivacyCookies({
194
- isPush: true
195
- })) {
191
+ if (!hasRequiredPrivacyCookies()) {
196
192
  throw new Error('does not satisfy cookie check');
197
193
  }
198
194
  if (isAnonymousWebview()) {
@@ -525,7 +521,7 @@ const useOneTrustAlertBoxClosed = ({
525
521
  const [listenToTcfApi, setListenToTcfApi] = React.useState(false);
526
522
  React.useEffect(() => {
527
523
  var _window;
528
- if (checkAlertBoxCookie()) {
524
+ if (checkCookie()) {
529
525
  setAlertBoxClosed(true);
530
526
  return;
531
527
  }
@@ -544,7 +540,7 @@ const useOneTrustAlertBoxClosed = ({
544
540
  let cleanupFn = () => {};
545
541
  if (listenToCookieStore && window.cookieStore) {
546
542
  cleanupFn = subsSdk.listenToCookieStore(COOKIE, () => {
547
- if (checkAlertBoxCookie()) {
543
+ if (checkCookie()) {
548
544
  setAlertBoxClosed(true);
549
545
  } else {
550
546
  setAlertBoxClosed(false);
@@ -564,7 +560,7 @@ const useOneTrustAlertBoxClosed = ({
564
560
  // cmpuishown means the banner is shown
565
561
  // useractioncomplete means the user has interacted with the banner
566
562
  // but actually if the result for any of these is true, we just use the value of the cookie
567
- if (checkAlertBoxCookie()) {
563
+ if (checkCookie()) {
568
564
  setAlertBoxClosed(true);
569
565
  }
570
566
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxCookie.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/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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = ({\n isPush,\n}: { isPush?: boolean } = {}) => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n // push has stricter requirements\n if (!isPush && intl_region === 'EEA') {\n return true;\n }\n\n return false;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { CollectionBehaviors, IngestType } from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies({ isPush: true })) {\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","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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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 { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\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 (checkAlertBoxCookie()) {\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 (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\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 (checkAlertBoxCookie()) {\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","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxCookie","length","hasRequiredPrivacyCookies","isPush","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","warn","dataLayer","eventData","push","sendToGA","submitData","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","process","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","createElement","target","style","map","key","Icon","size","fill","gray80","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","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","Fragment","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
+ {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkCookie.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/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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkCookie } from '../components/DEDisclosure/utils/checkCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkCookie()) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n if (intl_region === 'EEA') {\n return true;\n }\n\n return false;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport {\n CollectionBehaviors,\n IngestType,\n} from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\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","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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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 { 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 } else {\n setAlertBoxClosed(false);\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","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","warn","dataLayer","eventData","push","sendToGA","submitData","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","process","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","createElement","target","style","map","key","Icon","size","fill","gray80","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","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","Fragment","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=require("@washingtonpost/subs-sdk"),t=require("react"),o=require("@washingtonpost/wpds-ui-kit"),n=require("@washingtonpost/subs-hooks"),i=require("@washingtonpost/wpds-assets");const a={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},s={EXPLICIT:"explicit",IMPLICIT:"implicit"},r=()=>(e.getCookie("OptanonAlertBoxClosed")||"").length>12,l=({isPush:t}={})=>{if("undefined"==typeof window)return!1;const{intl_region:o,country_code:n}=e.WPGeo();if("US"===n)return!!e.getCookie("wp_usp");const i=(()=>{const t=e.getCookie("OptanonConsent")||"";return!!t.includes("C0004%3A1")||!t.includes("C0004%3A0")&&null})();return"boolean"==typeof i&&r()?i:!t&&"EEA"===o},c=`${e.ENDPOINTS.base}/de/v1`,d={},u=async({fieldName:t})=>{if(d[t])return d[t];const o=[t];try{const n=new URL(`${c}/attributes`);n.searchParams.set("attributes",o.join(","));const i=await fetch(n.toString(),{credentials:"include",headers:e.JSON_HEADERS}),a=await i.json();if(i.ok&&a.status===e.ResponseStatus.SUCCESS){const e=a.attributes||[];return d[t]=e,e}return[]}catch(e){return console.debug(e),[]}},p=`${e.ENDPOINTS.base}/de/v1`,w=o.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:o.theme.colors.disabled,borderColor:o.theme.colors.disabled,color:o.theme.colors.onDisabled,cursor:"not-allowed"}}),f=o.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),E=o.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),g=({id:e,label:a,values:s,required:r=!1,defaultValue:l,onChange:c=(()=>{}),disabled:d=!1})=>{const[u,p]=t.useState(),{isMobileSize:g}=n.useWindowSize();t.useEffect((()=>{u&&c(u)}),[u]);const b=d?{disabled:!0}:{},h=u?{defaultValue:u}:l?{defaultValue:l}:{},m=e=>u?e===u?{selected:!0}:{}:e===l?{selected:!0}:{};return g?t.createElement(f,null,t.createElement(w,{id:"",required:r,onChange:e=>p(e.target.value),...b},t.createElement("label",null,a),t.createElement(E,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},a),s.map((e=>t.createElement(E,{value:e,key:e,...m(e)},e)))),t.createElement(o.Icon,{label:"",size:"100",fill:o.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},t.createElement(i.ChevronDown,{style:{position:"absolute",right:"10px"}}))):t.createElement(o.Select.Root,{onValueChange:e=>p(e),required:r,...h,...b},t.createElement(o.Select.Trigger,{"data-test-id":`${e}-select-trigger`},t.createElement(o.Select.Label,null,a),t.createElement(o.Select.Value,null)),t.createElement(o.Select.Content,{css:{zIndex:o.theme.zIndices.page},"data-test-id":`${e}-select-content`},s.map((e=>t.createElement(o.Select.Item,{value:e,key:e},e)))))},b=`${"https://subscribe.washingtonpost.com/static"===e.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":e.ENDPOINTS.staticAssets}/de-utils/twpdeu.min.js`,h=o.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),m=`${"https://subscribe.washingtonpost.com"===e.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":e.ENDPOINTS.base}/config/de/disclosure.json`;exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=a,exports.DEDisclosure=({onFinished:o=(()=>{}),allowCookieStore:n=!0})=>{const[i,a]=t.useState(null),[s,l]=t.useState(null),[c,d]=t.useState(),{alertBoxClosed:u}=(({allowCookieStore:o})=>{const[n,i]=t.useState(),[a,s]=t.useState(!1),[l,c]=t.useState(!1);return t.useEffect((()=>{var e;r()?i(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&o?s(!0):window.__tcfapi?c(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))}),[]),t.useEffect((()=>{let t=()=>{};return a&&window.cookieStore&&(t=e.listenToCookieStore("OptanonAlertBoxClosed",(()=>{r()?i(!0):i(!1)}))),t||(()=>{})}),[a]),t.useEffect((()=>{let e;return l&&window.__tcfapi&&window.__tcfapi("addEventListener",2,((t,o)=>{o&&(e=t.listenerId,r()&&i(!0))})),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,(e=>{console.debug(e)}),e)}}),[l]),{alertBoxClosed:n,listenToCookieStore:a,listenToTcfApi:l}})({allowCookieStore:n});return t.useEffect((()=>{(async()=>{const t=await(async()=>{let t;const o=await fetch(m),n=await o.json(),{country_code:i,intl_region:a}=e.WPGeo();return Object.keys(n).forEach((e=>{(i&&e.split("|").includes(i.toLowerCase())||"EEA"===a&&"eea"===e)&&(t=n[e])})),void 0===t&&n._&&(t=n._),t})();d(t),t||console.error("No config found")})()}),[]),t.useEffect((()=>{c&&("checkBannerStatus"in c&&c.checkBannerStatus?a(u?c.disclosure_afterbanner:c.disclosure_beforebanner):"disclosure"in c?a(c.disclosure):console.error("Invalid config"))}),[c,u]),t.useEffect((()=>{i&&Array.isArray(i)&&(l(i.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,o.split(/({{PRIVACY_POLICY}})/g).map((e=>"{{PRIVACY_POLICY}}"===e?t.createElement("a",{target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/"},"Privacy Policy"):e)).reduce(((e,o)=>t.createElement(t.Fragment,null,e,o)),t.createElement(t.Fragment,null))))),t.createElement(t.Fragment,null))),o({isFinished:!0,isError:!1}))}),[i]),null===i?t.createElement("div",{"data-test-id":"de-disclosure-loading"}):t.createElement("div",{"data-test-id":"de-disclosure"},s)},exports.DESelect=({source:i,fieldName:a,label:s,dataDictionaryConfig:r,defaultValue:l,disabled:c,submit:d,onChange:u=(()=>{}),onFinished:p=(()=>{}),valuesFilter:w=(()=>!0),children:f})=>{const[E,m]=t.useState(r),[S,C]=t.useState(""),I=n.useScript(b);t.useEffect((()=>{I!==n.ScriptStatus.READY||f||E||(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:a}));t?m(t[0]):console.error("unable to get config",a)}catch(e){console.warn("unable to get config",a,e)}})()}),[I]),t.useEffect((()=>{I===n.ScriptStatus.READY&&d&&S&&(async()=>{try{var t;const o=await(null===(t=window)||void 0===t||null===(t=t.__twpdeu)||void 0===t?void 0:t.push({submitData:{fieldName:a,value:S},source:i}));p({isFinished:!0,isError:!0!==o&&(!o||o.status!==e.ResponseStatus.SUCCESS)})}catch(e){p({isFinished:!1,isError:!0})}})()}),[I,d]);const _=l&&E?{defaultValue:l}:{},y=c||!f&&!E?{disabled:!0}:{},v=E?[...E.values].sort(((e,t)=>e.order-t.order)).filter((e=>!0!==e.archived)).filter(w):[];return t.createElement(h,null,f&&t.createElement(o.Select.Root,{onValueChange:e=>{C(e),u({value:e})},..._,...y},f),!f&&!E&&t.createElement(g,{id:"loading",label:"Loading...",values:[],disabled:!0}),!f&&E&&t.createElement(g,{id:E.name,label:s||E.name,onChange:e=>{C(e),u({value:e})},values:v.map((e=>e.name)),defaultValue:l,disabled:c}))},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=s,exports.getAttributes=u,exports.hasRequiredPrivacyCookies=l,exports.push=async({submitData:t,source:o})=>{if(!l({isPush:!0}))throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&e.getCookie("wp_wv")&&!e.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:n}=t,i=await u({fieldName:n});if(i[0]&&i[0].name===n&&i[0].collection_behavior===a.DO_NOT_COLLECT)throw new Error("do not collect");return(i[0]&&!0===i[0].explicit?s.EXPLICIT:s.IMPLICIT)===s.EXPLICIT?(async({submitData:{fieldName:t,value:o},source:n})=>{const i=`${p}/ingest`,a=e.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:e.getCookie("_ga"),type:s.EXPLICIT,wapo_login_id:a,data:{[t]:[o]},metadata:{source:n}};try{const t=await fetch(i,{method:"POST",credentials:"include",headers:e.JSON_HEADERS,body:JSON.stringify(r)});return await t.json()}catch(e){return console.debug(e),null}})({submitData:t,source:o}):(async({submitData:{fieldName:e,value:t},source:o})=>((e=>{if("undefined"==typeof window)return;window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:e,"de-label":e,[e]:t,section:"profile",subsection:o}),!0))({submitData:t,source:o})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@washingtonpost/subs-sdk"),t=require("react"),o=require("@washingtonpost/wpds-ui-kit"),n=require("@washingtonpost/subs-hooks"),a=require("@washingtonpost/wpds-assets");const i={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},s={EXPLICIT:"explicit",IMPLICIT:"implicit"},r=()=>(e.getCookie("OptanonAlertBoxClosed")||"").length>12,l=()=>{if("undefined"==typeof window)return!1;const{intl_region:t,country_code:o}=e.WPGeo();if("US"===o)return!!e.getCookie("wp_usp");const n=(()=>{const t=e.getCookie("OptanonConsent")||"";return!!t.includes("C0004%3A1")||!t.includes("C0004%3A0")&&null})();return"boolean"==typeof n&&r()?n:"EEA"===t},c=`${e.ENDPOINTS.base}/de/v1`,d={},u=async({fieldName:t})=>{if(d[t])return d[t];const o=[t];try{const n=new URL(`${c}/attributes`);n.searchParams.set("attributes",o.join(","));const a=await fetch(n.toString(),{credentials:"include",headers:e.JSON_HEADERS}),i=await a.json();if(a.ok&&i.status===e.ResponseStatus.SUCCESS){const e=i.attributes||[];return d[t]=e,e}return[]}catch(e){return console.debug(e),[]}},p=`${e.ENDPOINTS.base}/de/v1`,w=o.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:o.theme.colors.disabled,borderColor:o.theme.colors.disabled,color:o.theme.colors.onDisabled,cursor:"not-allowed"}}),f=o.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),E=o.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),g=({id:e,label:i,values:s,required:r=!1,defaultValue:l,onChange:c=(()=>{}),disabled:d=!1})=>{const[u,p]=t.useState(),{isMobileSize:g}=n.useWindowSize();t.useEffect((()=>{u&&c(u)}),[u]);const b=d?{disabled:!0}:{},m=u?{defaultValue:u}:l?{defaultValue:l}:{},h=e=>u?e===u?{selected:!0}:{}:e===l?{selected:!0}:{};return g?t.createElement(f,null,t.createElement(w,{id:"",required:r,onChange:e=>p(e.target.value),...b},t.createElement("label",null,i),t.createElement(E,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},i),s.map((e=>t.createElement(E,{value:e,key:e,...h(e)},e)))),t.createElement(o.Icon,{label:"",size:"100",fill:o.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},t.createElement(a.ChevronDown,{style:{position:"absolute",right:"10px"}}))):t.createElement(o.Select.Root,{onValueChange:e=>p(e),required:r,...m,...b},t.createElement(o.Select.Trigger,{"data-test-id":`${e}-select-trigger`},t.createElement(o.Select.Label,null,i),t.createElement(o.Select.Value,null)),t.createElement(o.Select.Content,{css:{zIndex:o.theme.zIndices.page},"data-test-id":`${e}-select-content`},s.map((e=>t.createElement(o.Select.Item,{value:e,key:e},e)))))},b=`${"https://subscribe.washingtonpost.com/static"===e.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":e.ENDPOINTS.staticAssets}/de-utils/twpdeu.min.js`,m=o.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),h=`${"https://subscribe.washingtonpost.com"===e.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":e.ENDPOINTS.base}/config/de/disclosure.json`;exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=i,exports.DEDisclosure=({onFinished:o=(()=>{}),allowCookieStore:n=!0})=>{const[a,i]=t.useState(null),[s,l]=t.useState(null),[c,d]=t.useState(),{alertBoxClosed:u}=(({allowCookieStore:o})=>{const[n,a]=t.useState(),[i,s]=t.useState(!1),[l,c]=t.useState(!1);return t.useEffect((()=>{var e;r()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&o?s(!0):window.__tcfapi?c(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))}),[]),t.useEffect((()=>{let t=()=>{};return i&&window.cookieStore&&(t=e.listenToCookieStore("OptanonAlertBoxClosed",(()=>{r()?a(!0):a(!1)}))),t||(()=>{})}),[i]),t.useEffect((()=>{let e;return l&&window.__tcfapi&&window.__tcfapi("addEventListener",2,((t,o)=>{o&&(e=t.listenerId,r()&&a(!0))})),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,(e=>{console.debug(e)}),e)}}),[l]),{alertBoxClosed:n,listenToCookieStore:i,listenToTcfApi:l}})({allowCookieStore:n});return t.useEffect((()=>{(async()=>{const t=await(async()=>{let t;const o=await fetch(h),n=await o.json(),{country_code:a,intl_region:i}=e.WPGeo();return Object.keys(n).forEach((e=>{(a&&e.split("|").includes(a.toLowerCase())||"EEA"===i&&"eea"===e)&&(t=n[e])})),void 0===t&&n._&&(t=n._),t})();d(t),t||console.error("No config found")})()}),[]),t.useEffect((()=>{c&&("checkBannerStatus"in c&&c.checkBannerStatus?i(u?c.disclosure_afterbanner:c.disclosure_beforebanner):"disclosure"in c?i(c.disclosure):console.error("Invalid config"))}),[c,u]),t.useEffect((()=>{a&&Array.isArray(a)&&(l(a.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,o.split(/({{PRIVACY_POLICY}})/g).map((e=>"{{PRIVACY_POLICY}}"===e?t.createElement("a",{target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/"},"Privacy Policy"):e)).reduce(((e,o)=>t.createElement(t.Fragment,null,e,o)),t.createElement(t.Fragment,null))))),t.createElement(t.Fragment,null))),o({isFinished:!0,isError:!1}))}),[a]),null===a?t.createElement("div",{"data-test-id":"de-disclosure-loading"}):t.createElement("div",{"data-test-id":"de-disclosure"},s)},exports.DESelect=({source:a,fieldName:i,label:s,dataDictionaryConfig:r,defaultValue:l,disabled:c,submit:d,onChange:u=(()=>{}),onFinished:p=(()=>{}),valuesFilter:w=(()=>!0),children:f})=>{const[E,h]=t.useState(r),[S,C]=t.useState(""),I=n.useScript(b);t.useEffect((()=>{I!==n.ScriptStatus.READY||f||E||(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:i}));t?h(t[0]):console.error("unable to get config",i)}catch(e){console.warn("unable to get config",i,e)}})()}),[I]),t.useEffect((()=>{I===n.ScriptStatus.READY&&d&&S&&(async()=>{try{var t;const o=await(null===(t=window)||void 0===t||null===(t=t.__twpdeu)||void 0===t?void 0:t.push({submitData:{fieldName:i,value:S},source:a}));p({isFinished:!0,isError:!0!==o&&(!o||o.status!==e.ResponseStatus.SUCCESS)})}catch(e){p({isFinished:!1,isError:!0})}})()}),[I,d]);const _=l&&E?{defaultValue:l}:{},y=c||!f&&!E?{disabled:!0}:{},v=E?[...E.values].sort(((e,t)=>e.order-t.order)).filter((e=>!0!==e.archived)).filter(w):[];return t.createElement(m,null,f&&t.createElement(o.Select.Root,{onValueChange:e=>{C(e),u({value:e})},..._,...y},f),!f&&!E&&t.createElement(g,{id:"loading",label:"Loading...",values:[],disabled:!0}),!f&&E&&t.createElement(g,{id:E.name,label:s||E.name,onChange:e=>{C(e),u({value:e})},values:v.map((e=>e.name)),defaultValue:l,disabled:c}))},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=s,exports.getAttributes=u,exports.hasRequiredPrivacyCookies=l,exports.push=async({submitData:t,source:o})=>{if(!l())throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&e.getCookie("wp_wv")&&!e.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:n}=t,a=await u({fieldName:n});if(a[0]&&a[0].name===n&&a[0].collection_behavior===i.DO_NOT_COLLECT)throw new Error("do not collect");return(a[0]&&!0===a[0].explicit?s.EXPLICIT:s.IMPLICIT)===s.EXPLICIT?(async({submitData:{fieldName:t,value:o},source:n})=>{const a=`${p}/ingest`,i=e.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:e.getCookie("_ga"),type:s.EXPLICIT,wapo_login_id:i,data:{[t]:[o]},metadata:{source:n}};try{const t=await fetch(a,{method:"POST",credentials:"include",headers:e.JSON_HEADERS,body:JSON.stringify(r)});return await t.json()}catch(e){return console.debug(e),null}})({submitData:t,source:o}):(async({submitData:{fieldName:e,value:t},source:o})=>((e=>{if("undefined"==typeof window)return;window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:e,"de-label":e,[e]:t,section:"profile",subsection:o}),!0))({submitData:t,source:o})};
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/components/DEDisclosure/utils/checkAlertBoxCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/utils/checkConsentCookieForAllowTargeting.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/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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = ({\n isPush,\n}: { isPush?: boolean } = {}) => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n // push has stricter requirements\n if (!isPush && intl_region === 'EEA') {\n return true;\n }\n\n return false;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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, { 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 { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\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 (checkAlertBoxCookie()) {\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 (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\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 (checkAlertBoxCookie()) {\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { CollectionBehaviors, IngestType } from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies({ isPush: true })) {\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","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","checkAlertBoxCookie","getCookie","length","hasRequiredPrivacyCookies","isPush","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","checkConsentCookieForAllowTargeting","value","includes","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","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","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","selected","React","createElement","target","style","map","key","Icon","size","fill","gray80","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","DEDisclosure","onFinished","allowCookieStore","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","myConfig","setMyConfig","alertBoxClosed","useOneTrustAlertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","_window","__tcfapi","warn","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","config","response","remoteConfig","Object","keys","forEach","configKey","split","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","reduce","prev","current","Fragment","str","className","href","isFinished","isError","DESelect","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","explicit","wapo_login_id","payload","jucid","localStorage","getItem","ga","type","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","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/components/DEDisclosure/utils/checkCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/utils/checkConsentCookieForAllowTargeting.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/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 { 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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkCookie } from '../components/DEDisclosure/utils/checkCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkCookie()) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n if (intl_region === 'EEA') {\n return true;\n }\n\n return false;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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, { 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 } else {\n setAlertBoxClosed(false);\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport {\n CollectionBehaviors,\n IngestType,\n} from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\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","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","checkCookie","getCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","checkConsentCookieForAllowTargeting","value","includes","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","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","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","selected","React","createElement","target","style","map","key","Icon","size","fill","gray80","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","DEDisclosure","onFinished","allowCookieStore","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","myConfig","setMyConfig","alertBoxClosed","useOneTrustAlertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","_window","__tcfapi","warn","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","config","response","remoteConfig","Object","keys","forEach","configKey","split","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","reduce","prev","current","Fragment","str","className","href","isFinished","isError","DESelect","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","explicit","wapo_login_id","payload","jucid","localStorage","getItem","ga","type","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","section","subsection","sendToGA"],"mappings":"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"}
@@ -41,16 +41,14 @@ const checkConsentCookieForAllowTargeting = () => {
41
41
  };
42
42
 
43
43
  const COOKIE$1 = 'OptanonAlertBoxClosed';
44
- const checkAlertBoxCookie = () => {
44
+ const checkCookie = () => {
45
45
  const value = getCookie(COOKIE$1) || '';
46
46
  // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
47
47
  // "Invalid date" is 12 characters long
48
48
  return value.length > 12;
49
49
  };
50
50
 
51
- const hasRequiredPrivacyCookies = ({
52
- isPush
53
- } = {}) => {
51
+ const hasRequiredPrivacyCookies = () => {
54
52
  if (typeof window === 'undefined') {
55
53
  return false;
56
54
  }
@@ -62,11 +60,11 @@ const hasRequiredPrivacyCookies = ({
62
60
  return !!getCookie('wp_usp');
63
61
  }
64
62
  const gdprAllowTargarting = checkConsentCookieForAllowTargeting();
65
- if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {
63
+ if (typeof gdprAllowTargarting === 'boolean' && checkCookie()) {
66
64
  return gdprAllowTargarting;
67
65
  }
68
- // push has stricter requirements
69
- if (!isPush && intl_region === 'EEA') {
66
+ // Downstream systems
67
+ if (intl_region === 'EEA') {
70
68
  return true;
71
69
  }
72
70
  return false;
@@ -186,9 +184,7 @@ const push = async ({
186
184
  submitData,
187
185
  source
188
186
  }) => {
189
- if (!hasRequiredPrivacyCookies({
190
- isPush: true
191
- })) {
187
+ if (!hasRequiredPrivacyCookies()) {
192
188
  throw new Error('does not satisfy cookie check');
193
189
  }
194
190
  if (isAnonymousWebview()) {
@@ -521,7 +517,7 @@ const useOneTrustAlertBoxClosed = ({
521
517
  const [listenToTcfApi, setListenToTcfApi] = useState(false);
522
518
  useEffect(() => {
523
519
  var _window;
524
- if (checkAlertBoxCookie()) {
520
+ if (checkCookie()) {
525
521
  setAlertBoxClosed(true);
526
522
  return;
527
523
  }
@@ -540,7 +536,7 @@ const useOneTrustAlertBoxClosed = ({
540
536
  let cleanupFn = () => {};
541
537
  if (listenToCookieStore$1 && window.cookieStore) {
542
538
  cleanupFn = listenToCookieStore(COOKIE, () => {
543
- if (checkAlertBoxCookie()) {
539
+ if (checkCookie()) {
544
540
  setAlertBoxClosed(true);
545
541
  } else {
546
542
  setAlertBoxClosed(false);
@@ -560,7 +556,7 @@ const useOneTrustAlertBoxClosed = ({
560
556
  // cmpuishown means the banner is shown
561
557
  // useractioncomplete means the user has interacted with the banner
562
558
  // but actually if the result for any of these is true, we just use the value of the cookie
563
- if (checkAlertBoxCookie()) {
559
+ if (checkCookie()) {
564
560
  setAlertBoxClosed(true);
565
561
  }
566
562
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxCookie.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/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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = ({\n isPush,\n}: { isPush?: boolean } = {}) => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n // push has stricter requirements\n if (!isPush && intl_region === 'EEA') {\n return true;\n }\n\n return false;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { CollectionBehaviors, IngestType } from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies({ isPush: true })) {\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","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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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 { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\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 (checkAlertBoxCookie()) {\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 (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\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 (checkAlertBoxCookie()) {\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","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxCookie","length","hasRequiredPrivacyCookies","isPush","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","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","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","createElement","target","style","map","key","Icon","size","fill","gray80","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","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","Fragment","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
+ {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkCookie.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/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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\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 { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkCookie } from '../components/DEDisclosure/utils/checkCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const { intl_region, country_code: countryCode } = WPGeo();\n\n if (countryCode === 'US') {\n return !!getCookie('wp_usp');\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkCookie()) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n if (intl_region === 'EEA') {\n return true;\n }\n\n return false;\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 JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } 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: ResponseStatusType;\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 type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport {\n CollectionBehaviors,\n IngestType,\n} from '../interfaces';\nimport type { IngestResponseState } from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\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: ResponseStatusType;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n\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","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 {...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 { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\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 { 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 } else {\n setAlertBoxClosed(false);\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","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","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","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","createElement","target","style","map","key","Icon","size","fill","gray80","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","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","Fragment","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,3 +1 @@
1
- export declare const hasRequiredPrivacyCookies: ({ isPush, }?: {
2
- isPush?: boolean;
3
- }) => boolean;
1
+ export declare const hasRequiredPrivacyCookies: () => boolean;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-react18.12e",
2
+ "version": "1.0.0-react18.12g",
3
3
  "license": "UNLICENSED",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- export declare const checkAlertBoxCookie: () => boolean;