@washingtonpost/subs-de-inputs 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DEDisclosure/DisclosureWithBannerStatus.d.ts +3 -2
- package/dist/components/DEDisclosure/DisclosureWithoutBannerStatus.d.ts +3 -2
- package/dist/components/DEDisclosure/hooks/useOnetrust.d.ts +1 -1
- package/dist/components/DEDisclosure/index.d.ts +2 -1
- package/dist/components/DEDisclosure/utils/getConfig.d.ts +1 -1
- package/dist/components/DESelect/index.d.ts +1 -1
- package/dist/constants/IngestDataTypes.d.ts +3 -0
- package/dist/interfaces/twpdeu.d.ts +2 -2
- package/dist/subs-de-inputs.cjs.development.js +14 -16
- package/dist/subs-de-inputs.cjs.development.js.map +1 -1
- package/dist/subs-de-inputs.cjs.production.min.js +1 -1
- package/dist/subs-de-inputs.cjs.production.min.js.map +1 -1
- package/dist/subs-de-inputs.esm.js +14 -16
- package/dist/subs-de-inputs.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import type { ReactEventHandler } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { DisclosureConfigValue } from '../../interfaces/disclosure';
|
|
3
4
|
interface DEDisclosureWithBannerStatusProps {
|
|
4
5
|
config: DisclosureConfigValue;
|
|
5
6
|
allowCookieStore?: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import type { ReactEventHandler } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { DisclosureConfigValue } from '../../interfaces/disclosure';
|
|
3
4
|
interface DEDisclosureWithoutBannerStatusProps {
|
|
4
5
|
config: DisclosureConfigValue;
|
|
5
6
|
onFinished: ({ isFinished, isError, }: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { ReactEventHandler } from 'react';
|
|
2
|
+
import React from 'react';
|
|
2
3
|
interface DisclosureProps {
|
|
3
4
|
/** callback function to be called when the disclosure is finished loading */
|
|
4
5
|
onFinished?: ({ isFinished, isError, }: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DisclosureConfigValue } from '../../../interfaces/disclosure';
|
|
1
|
+
import type { DisclosureConfigValue } from '../../../interfaces/disclosure';
|
|
2
2
|
export declare const getConfig: () => Promise<DisclosureConfigValue | undefined>;
|
|
@@ -12,4 +12,7 @@ export declare const FirstPartyIngestDataTypes: {
|
|
|
12
12
|
readonly NY_PROFESSIONAL_GOALS: "new_year_professional_goals";
|
|
13
13
|
readonly NY_INDUSTRY: "new_year_industry";
|
|
14
14
|
readonly NY_NEWS_LOCATION: "new_year_news_location";
|
|
15
|
+
readonly ROLE: "profile_edu_role";
|
|
16
|
+
readonly MAJOR: "profile_edu_major";
|
|
17
|
+
readonly GRADUATION_YEAR: "profile_edu_graduation_year";
|
|
15
18
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getAttributes } from '../services/getAttributes';
|
|
2
|
-
import { push } from '../utils/push';
|
|
1
|
+
import type { getAttributes } from '../services/getAttributes';
|
|
2
|
+
import type { push } from '../utils/push';
|
|
3
3
|
export type TWPDEU = {
|
|
4
4
|
getFieldConfigs: typeof getAttributes;
|
|
5
5
|
push: typeof push;
|
|
@@ -229,12 +229,11 @@ const push = async ({
|
|
|
229
229
|
submitData,
|
|
230
230
|
source
|
|
231
231
|
});
|
|
232
|
-
} else {
|
|
233
|
-
return sendToGA({
|
|
234
|
-
submitData,
|
|
235
|
-
source
|
|
236
|
-
});
|
|
237
232
|
}
|
|
233
|
+
return sendToGA({
|
|
234
|
+
submitData,
|
|
235
|
+
source
|
|
236
|
+
});
|
|
238
237
|
};
|
|
239
238
|
|
|
240
239
|
const StyledMobileSelect = /*#__PURE__*/wpdsUiKit.styled('select', {
|
|
@@ -485,7 +484,7 @@ const SelectWrapper = /*#__PURE__*/wpdsUiKit.styled('div', {
|
|
|
485
484
|
|
|
486
485
|
const configSrc = `${subsSdk.ENDPOINTS.base === 'https://subscribe.washingtonpost.com' ? 'https://www.washingtonpost.com/subscribe' : subsSdk.ENDPOINTS.base}/config/de/disclosure.json`;
|
|
487
486
|
const getConfig = async () => {
|
|
488
|
-
let myConfig
|
|
487
|
+
let myConfig;
|
|
489
488
|
// step 1: fetch config
|
|
490
489
|
const response = await fetch(configSrc);
|
|
491
490
|
const remoteConfig = await response.json();
|
|
@@ -504,8 +503,8 @@ const getConfig = async () => {
|
|
|
504
503
|
});
|
|
505
504
|
// TODO: Check for billing country also
|
|
506
505
|
// else if no country-specific config, use the default config
|
|
507
|
-
if (typeof myConfig === 'undefined' && remoteConfig
|
|
508
|
-
myConfig = remoteConfig
|
|
506
|
+
if (typeof myConfig === 'undefined' && remoteConfig._) {
|
|
507
|
+
myConfig = remoteConfig._;
|
|
509
508
|
}
|
|
510
509
|
return myConfig;
|
|
511
510
|
};
|
|
@@ -568,7 +567,7 @@ const useOnetrust = ({
|
|
|
568
567
|
}
|
|
569
568
|
}, []);
|
|
570
569
|
React.useEffect(() => {
|
|
571
|
-
|
|
570
|
+
const cleanupFns = [];
|
|
572
571
|
if (listenToCookieStore && window.cookieStore) {
|
|
573
572
|
const cleanupFn = subsSdk.listenToCookieStore(CONSENT_COOKIE, () => {
|
|
574
573
|
if (checkOptanonConsentCookie()) {
|
|
@@ -651,9 +650,7 @@ const DEDisclosureWithBannerStatus = ({
|
|
|
651
650
|
}, [alertBoxClosed]);
|
|
652
651
|
React.useEffect(() => {
|
|
653
652
|
if (disclosure && Array.isArray(disclosure)) {
|
|
654
|
-
setDisclosureRendering(disclosure.reduce((prev, current) =>
|
|
655
|
-
return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick)));
|
|
656
|
-
}, React.createElement(React.Fragment, null)));
|
|
653
|
+
setDisclosureRendering(disclosure.reduce((prev, current) => React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick))), React.createElement(React.Fragment, null)));
|
|
657
654
|
}
|
|
658
655
|
}, [disclosure]);
|
|
659
656
|
React.useEffect(() => {
|
|
@@ -681,9 +678,7 @@ const DEDisclosureWithoutBannerStatus = ({
|
|
|
681
678
|
}, [config]);
|
|
682
679
|
React.useEffect(() => {
|
|
683
680
|
if (disclosure && Array.isArray(disclosure)) {
|
|
684
|
-
setDisclosureRendering(disclosure.reduce((prev, current) =>
|
|
685
|
-
return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick)));
|
|
686
|
-
}, React.createElement(React.Fragment, null)));
|
|
681
|
+
setDisclosureRendering(disclosure.reduce((prev, current) => React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick))), React.createElement(React.Fragment, null)));
|
|
687
682
|
}
|
|
688
683
|
}, [disclosure]);
|
|
689
684
|
React.useEffect(() => {
|
|
@@ -762,7 +757,10 @@ const FirstPartyIngestDataTypes = {
|
|
|
762
757
|
NY_HOBBIES: 'new_year_hobbies',
|
|
763
758
|
NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',
|
|
764
759
|
NY_INDUSTRY: 'new_year_industry',
|
|
765
|
-
NY_NEWS_LOCATION: 'new_year_news_location'
|
|
760
|
+
NY_NEWS_LOCATION: 'new_year_news_location',
|
|
761
|
+
ROLE: 'profile_edu_role',
|
|
762
|
+
MAJOR: 'profile_edu_major',
|
|
763
|
+
GRADUATION_YEAR: 'profile_edu_graduation_year'
|
|
766
764
|
};
|
|
767
765
|
|
|
768
766
|
exports.AttributesState = AttributesState;
|
|
@@ -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/checkAlertBoxClosedCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\n }\n\n return false;\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\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","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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 = `${ENDPOINTS.base}/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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","DeleteAttributeState","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxClosedCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","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","onLinkClick","array","chunks","i","rel","className","href","onClick","toReturn","reduce","prev","current","Fragment","checkOptanonConsentCookie","CONSENT_COOKIE","ALERT_BOX_COOKIE","useOnetrust","allowCookieStore","consentCookieExists","setConsentCookieExists","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","cleanupFn2","fn","listenerId","callback","_tcData","success","DEDisclosureWithBannerStatus","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","setMyConfig","checkBannerStatus","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION"],"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/checkAlertBoxClosedCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\n }\n\n return false;\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\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","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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()) {\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 }\n return sendToGA({ submitData, source });\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 type { 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 = `${ENDPOINTS.base}/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 type {\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;\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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport type { ICookieStore } from '@washingtonpost/subs-sdk';\nimport { listenToCookieStore as listenToCookieStoreUtil } from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 const cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n ROLE: 'profile_edu_role',\n MAJOR: 'profile_edu_major',\n GRADUATION_YEAR: 'profile_edu_graduation_year',\n} as const;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","DeleteAttributeState","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxClosedCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","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","remoteConfig","Object","keys","forEach","configKey","split","toLowerCase","_","hydrateLinks","str","onLinkClick","array","chunks","i","rel","className","href","onClick","toReturn","reduce","prev","current","Fragment","checkOptanonConsentCookie","CONSENT_COOKIE","ALERT_BOX_COOKIE","useOnetrust","allowCookieStore","consentCookieExists","setConsentCookieExists","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","cleanupFn2","fn","listenerId","callback","_tcData","success","DEDisclosureWithBannerStatus","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","setMyConfig","checkBannerStatus","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION","ROLE","MAJOR","GRADUATION_YEAR"],"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 r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},a={EXPLICIT:"explicit",IMPLICIT:"implicit"},s=()=>(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");if("onboarding"===window.pageType){const o=(()=>{const t=e.getCookie("OptanonConsent")||"";return!!t.includes("C0004%3A1")||!t.includes("C0004%3A0")&&null})();if("boolean"==typeof o&&s())return o;if("EEA"===t&&"onboarding"===window.pageType)return!0}return!1},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.DEFAULT_HEADERS}),r=await i.json();if(i.ok&&r.status===e.ResponseStatus.SUCCESS){const e=r.attributes||[];return d[t]=e,e}return[]}catch(e){return console.debug(e),[]}},p=`${e.ENDPOINTS.base}/de/v1`,E=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"}),g=o.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),_=({id:e,label:r,values:a,required:s=!1,defaultValue:l,onChange:c=()=>{},disabled:d=!1})=>{const[u,p]=t.useState(),{isMobileSize:_}=n.useWindowSize();t.useEffect((()=>{u&&c(u)}),[u]);const S=d?{disabled:!0}:{},w=u?{defaultValue:u}:l?{defaultValue:l}:{},b=e=>u?e===u?{selected:!0}:{}:e===l?{selected:!0}:{};return _?t.createElement(f,null,t.createElement(E,{id:"",required:s,onChange:e=>p(e.target.value),...S},t.createElement("label",null,r),t.createElement(g,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),a.map((e=>t.createElement(g,{value:e,key:e,...b(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:s,...w,...S},t.createElement(o.Select.Trigger,{"data-test-id":`${e}-select-trigger`},t.createElement(o.Select.Label,null,r),t.createElement(o.Select.Value,null)),t.createElement(o.Select.Content,{css:{zIndex:o.theme.zIndices.page},"data-test-id":`${e}-select-content`},a.map((e=>t.createElement(o.Select.Item,{value:e,key:e},e)))))},S=`${e.ENDPOINTS.base}/de-utils/twpdeu.min.js`,w=o.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),b=`${"https://subscribe.washingtonpost.com"===e.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":e.ENDPOINTS.base}/config/de/disclosure.json`,C=(e,o=()=>{})=>e.split(/({{PRIVACY_POLICY}})/g).map(((e,n)=>"{{PRIVACY_POLICY}}"===e?t.createElement("a",{key:`privacy-link-${n}`,rel:"noopener noreferrer",target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/",onClick:e=>o(e)},"Privacy Policy"):e)).reduce(((e,o)=>t.createElement(t.Fragment,null,e,o)),t.createElement(t.Fragment,null)),h=()=>(e.getCookie("OptanonConsent")||"").length>12,m=({config:o,onFinished:n,allowCookieStore:i=!0,onPrivacyPolicyClick:r=()=>{}})=>{const[a,l]=t.useState(null),[c,d]=t.useState(null),{alertBoxClosed:u,consentCookieExists:p}=(({allowCookieStore:o})=>{const[n,i]=t.useState(),[r,a]=t.useState(),[l,c]=t.useState(!1),[d,u]=t.useState(!1);return t.useEffect((()=>{var e;h()&&i(!0),s()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&o?c(!0):window.__tcfapi?u(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))}),[]),t.useEffect((()=>{let t=[];if(l&&window.cookieStore){const o=e.listenToCookieStore("OptanonConsent",(()=>{h()&&i(!0)}));t.push(o);const n=e.listenToCookieStore("OptanonAlertBoxClosed",(()=>{s()?a(!0):a(!1)}));t.push(n)}return()=>{t.forEach((e=>e&&e()))}}),[l]),t.useEffect((()=>{let e;return d&&window.__tcfapi&&window.__tcfapi("addEventListener",2,((t,o)=>{o&&(e=t.listenerId,h()&&i(!0),s()&&a(!0))})),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,(e=>{console.debug(e)}),e)}}),[d]),{consentCookieExists:n,alertBoxClosed:r,listenToCookieStore:l,listenToTcfApi:d}})({allowCookieStore:i});return t.useEffect((()=>{o&&l(u?o.disclosure_afterbanner:o.disclosure_beforebanner)}),[u]),t.useEffect((()=>{a&&Array.isArray(a)&&d(a.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,C(o,r)))),t.createElement(t.Fragment,null)))}),[a]),t.useEffect((()=>{c&&p&&n({isFinished:!0,isError:!1})}),[c,p]),c},y=({config:e,onFinished:o,onPrivacyPolicyClick:n=()=>{}})=>{const[i,r]=t.useState(null),[a,s]=t.useState(null);return t.useEffect((()=>{e&&r(e.disclosure)}),[e]),t.useEffect((()=>{i&&Array.isArray(i)&&s(i.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,C(o,n)))),t.createElement(t.Fragment,null)))}),[i]),t.useEffect((()=>{a&&o({isFinished:!0,isError:!1})}),[a]),a};exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=({onFinished:o=()=>{},allowCookieStore:n=!0,onPrivacyPolicyClick:i=e=>{}})=>{const[r,a]=t.useState(null),[s,l]=t.useState();return t.useEffect((()=>{(async()=>{const t=await(async()=>{let t;const o=await fetch(b),n=await o.json(),{country_code:i,intl_region:r}=e.WPGeo();return Object.keys(n).forEach((e=>{(i&&e.split("|").includes(i.toLowerCase())||"EEA"===r&&"eea"===e)&&(t=n[e])})),void 0===t&&n._&&(t=n._),t})();l(t),t||console.error("No config found")})()}),[]),t.useEffect((()=>{s&&("checkBannerStatus"in s&&s.checkBannerStatus?a(t.createElement(m,{config:s,allowCookieStore:n,onFinished:o,onPrivacyPolicyClick:i})):"disclosure"in s?a(t.createElement(y,{config:s,onFinished:o,onPrivacyPolicyClick:i})):console.error("Invalid config"))}),[s]),r?t.createElement("div",{"data-test-id":"de-disclosure"},r):t.createElement("div",{"data-test-id":"de-disclosure-loading"})},exports.DESelect=({source:i,fieldName:r,label:a,dataDictionaryConfig:s,defaultValue:l,disabled:c,submit:d,onChange:u=()=>{},onFinished:p=()=>{},valuesFilter:E=()=>!0,children:f})=>{const[g,b]=t.useState(s),[C,h]=t.useState(""),m=n.useScript(S);t.useEffect((()=>{m!==n.ScriptStatus.READY||f||g||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?b(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()}),[m]),t.useEffect((()=>{m===n.ScriptStatus.READY&&d&&C&&(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:r,value:C},source:i}));p({isFinished:!0,isError:!0!==o&&(!o||o.status!==e.ResponseStatus.SUCCESS)})}catch(e){p({isFinished:!1,isError:!0})}})()}),[m,d]);const y=l&&g?{defaultValue:l}:{},I=c||!f&&!g?{disabled:!0}:{},T=g?[...g.values].sort(((e,t)=>e.order-t.order)).filter((e=>!0!==e.archived)).filter(E):[];return t.createElement(w,null,f&&t.createElement(o.Select.Root,{onValueChange:e=>{h(e),u({value:e})},...y,...I},f),!f&&!g&&t.createElement(_,{id:"loading",label:"Loading...",values:[],disabled:!0}),!f&&g&&t.createElement(_,{id:g.name,label:a||g.name,onChange:e=>{h(e),u({value:e})},values:T.map((e=>e.name)),defaultValue:l,disabled:c}))},exports.DeleteAttributeState={SUCCESS:"150",SYSTEM_ERROR:"151",INVALID_ATTRIBUTE_NAME:"152",INVALID_ATTRIBUTE_NOT_EXISTS:"153"},exports.FirstPartyIngestDataTypes={JOB_LEVEL:"profile_job_level",JOB_INDUSTRY:"profile_job_industry",JOB_TITLE:"profile_job_title",PERSONAL_GOALS:"personal_goals",HOBBIES:"hobbies",PROFESSIONAL_GOALS:"professional_goals",INDUSTRY:"industry",NEWS_LOCATION:"news_location",NY_PERSONAL_GOALS:"new_year_personal_goals",NY_HOBBIES:"new_year_hobbies",NY_PROFESSIONAL_GOALS:"new_year_professional_goals",NY_INDUSTRY:"new_year_industry",NY_NEWS_LOCATION:"new_year_news_location"},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=a,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,i=await u({fieldName:n});if(i[0]&&i[0].name===n&&i[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");return(i[0]&&!0===i[0].explicit?a.EXPLICIT:a.IMPLICIT)===a.EXPLICIT?(async({submitData:{fieldName:t,value:o},source:n})=>{const i=`${p}/ingest`,r=e.getCookie("wapo_login_id"),s={jucid:localStorage.getItem("uuid"),ga:e.getCookie("_ga"),type:a.EXPLICIT,wapo_login_id:r,data:{[t]:[o]},metadata:{source:n}};try{const t=await fetch(i,{method:"POST",credentials:"include",headers:e.DEFAULT_HEADERS,body:JSON.stringify(s)});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"),i=require("@washingtonpost/wpds-assets");const r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},a={EXPLICIT:"explicit",IMPLICIT:"implicit"},s=()=>(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");if("onboarding"===window.pageType){const o=(()=>{const t=e.getCookie("OptanonConsent")||"";return!!t.includes("C0004%3A1")||!t.includes("C0004%3A0")&&null})();if("boolean"==typeof o&&s())return o;if("EEA"===t&&"onboarding"===window.pageType)return!0}return!1},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.DEFAULT_HEADERS}),r=await i.json();if(i.ok&&r.status===e.ResponseStatus.SUCCESS){const e=r.attributes||[];return d[t]=e,e}return[]}catch(e){return console.debug(e),[]}},p=`${e.ENDPOINTS.base}/de/v1`,E=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"}),_=o.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),g=({id:e,label:r,values:a,required:s=!1,defaultValue:l,onChange:c=()=>{},disabled:d=!1})=>{const[u,p]=t.useState(),{isMobileSize:g}=n.useWindowSize();t.useEffect((()=>{u&&c(u)}),[u]);const S=d?{disabled:!0}:{},w=u?{defaultValue:u}:l?{defaultValue:l}:{},b=e=>u?e===u?{selected:!0}:{}:e===l?{selected:!0}:{};return g?t.createElement(f,null,t.createElement(E,{id:"",required:s,onChange:e=>p(e.target.value),...S},t.createElement("label",null,r),t.createElement(_,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),a.map((e=>t.createElement(_,{value:e,key:e,...b(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:s,...w,...S},t.createElement(o.Select.Trigger,{"data-test-id":`${e}-select-trigger`},t.createElement(o.Select.Label,null,r),t.createElement(o.Select.Value,null)),t.createElement(o.Select.Content,{css:{zIndex:o.theme.zIndices.page},"data-test-id":`${e}-select-content`},a.map((e=>t.createElement(o.Select.Item,{value:e,key:e},e)))))},S=`${e.ENDPOINTS.base}/de-utils/twpdeu.min.js`,w=o.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),b=`${"https://subscribe.washingtonpost.com"===e.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":e.ENDPOINTS.base}/config/de/disclosure.json`,C=(e,o=()=>{})=>e.split(/({{PRIVACY_POLICY}})/g).map(((e,n)=>"{{PRIVACY_POLICY}}"===e?t.createElement("a",{key:`privacy-link-${n}`,rel:"noopener noreferrer",target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/",onClick:e=>o(e)},"Privacy Policy"):e)).reduce(((e,o)=>t.createElement(t.Fragment,null,e,o)),t.createElement(t.Fragment,null)),h=()=>(e.getCookie("OptanonConsent")||"").length>12,m=({config:o,onFinished:n,allowCookieStore:i=!0,onPrivacyPolicyClick:r=()=>{}})=>{const[a,l]=t.useState(null),[c,d]=t.useState(null),{alertBoxClosed:u,consentCookieExists:p}=(({allowCookieStore:o})=>{const[n,i]=t.useState(),[r,a]=t.useState(),[l,c]=t.useState(!1),[d,u]=t.useState(!1);return t.useEffect((()=>{var e;h()&&i(!0),s()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&o?c(!0):window.__tcfapi?u(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))}),[]),t.useEffect((()=>{const t=[];if(l&&window.cookieStore){const o=e.listenToCookieStore("OptanonConsent",(()=>{h()&&i(!0)}));t.push(o);const n=e.listenToCookieStore("OptanonAlertBoxClosed",(()=>{s()?a(!0):a(!1)}));t.push(n)}return()=>{t.forEach((e=>e&&e()))}}),[l]),t.useEffect((()=>{let e;return d&&window.__tcfapi&&window.__tcfapi("addEventListener",2,((t,o)=>{o&&(e=t.listenerId,h()&&i(!0),s()&&a(!0))})),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,(e=>{console.debug(e)}),e)}}),[d]),{consentCookieExists:n,alertBoxClosed:r,listenToCookieStore:l,listenToTcfApi:d}})({allowCookieStore:i});return t.useEffect((()=>{o&&l(u?o.disclosure_afterbanner:o.disclosure_beforebanner)}),[u]),t.useEffect((()=>{a&&Array.isArray(a)&&d(a.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,C(o,r)))),t.createElement(t.Fragment,null)))}),[a]),t.useEffect((()=>{c&&p&&n({isFinished:!0,isError:!1})}),[c,p]),c},y=({config:e,onFinished:o,onPrivacyPolicyClick:n=()=>{}})=>{const[i,r]=t.useState(null),[a,s]=t.useState(null);return t.useEffect((()=>{e&&r(e.disclosure)}),[e]),t.useEffect((()=>{i&&Array.isArray(i)&&s(i.reduce(((e,o)=>t.createElement(t.Fragment,null,e,t.createElement("p",null,C(o,n)))),t.createElement(t.Fragment,null)))}),[i]),t.useEffect((()=>{a&&o({isFinished:!0,isError:!1})}),[a]),a};exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=({onFinished:o=()=>{},allowCookieStore:n=!0,onPrivacyPolicyClick:i=e=>{}})=>{const[r,a]=t.useState(null),[s,l]=t.useState();return t.useEffect((()=>{(async()=>{const t=await(async()=>{let t;const o=await fetch(b),n=await o.json(),{country_code:i,intl_region:r}=e.WPGeo();return Object.keys(n).forEach((e=>{(i&&e.split("|").includes(i.toLowerCase())||"EEA"===r&&"eea"===e)&&(t=n[e])})),void 0===t&&n._&&(t=n._),t})();l(t),t||console.error("No config found")})()}),[]),t.useEffect((()=>{s&&("checkBannerStatus"in s&&s.checkBannerStatus?a(t.createElement(m,{config:s,allowCookieStore:n,onFinished:o,onPrivacyPolicyClick:i})):"disclosure"in s?a(t.createElement(y,{config:s,onFinished:o,onPrivacyPolicyClick:i})):console.error("Invalid config"))}),[s]),r?t.createElement("div",{"data-test-id":"de-disclosure"},r):t.createElement("div",{"data-test-id":"de-disclosure-loading"})},exports.DESelect=({source:i,fieldName:r,label:a,dataDictionaryConfig:s,defaultValue:l,disabled:c,submit:d,onChange:u=()=>{},onFinished:p=()=>{},valuesFilter:E=()=>!0,children:f})=>{const[_,b]=t.useState(s),[C,h]=t.useState(""),m=n.useScript(S);t.useEffect((()=>{m!==n.ScriptStatus.READY||f||_||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?b(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()}),[m]),t.useEffect((()=>{m===n.ScriptStatus.READY&&d&&C&&(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:r,value:C},source:i}));p({isFinished:!0,isError:!0!==o&&(!o||o.status!==e.ResponseStatus.SUCCESS)})}catch(e){p({isFinished:!1,isError:!0})}})()}),[m,d]);const y=l&&_?{defaultValue:l}:{},I=c||!f&&!_?{disabled:!0}:{},T=_?[..._.values].sort(((e,t)=>e.order-t.order)).filter((e=>!0!==e.archived)).filter(E):[];return t.createElement(w,null,f&&t.createElement(o.Select.Root,{onValueChange:e=>{h(e),u({value:e})},...y,...I},f),!f&&!_&&t.createElement(g,{id:"loading",label:"Loading...",values:[],disabled:!0}),!f&&_&&t.createElement(g,{id:_.name,label:a||_.name,onChange:e=>{h(e),u({value:e})},values:T.map((e=>e.name)),defaultValue:l,disabled:c}))},exports.DeleteAttributeState={SUCCESS:"150",SYSTEM_ERROR:"151",INVALID_ATTRIBUTE_NAME:"152",INVALID_ATTRIBUTE_NOT_EXISTS:"153"},exports.FirstPartyIngestDataTypes={JOB_LEVEL:"profile_job_level",JOB_INDUSTRY:"profile_job_industry",JOB_TITLE:"profile_job_title",PERSONAL_GOALS:"personal_goals",HOBBIES:"hobbies",PROFESSIONAL_GOALS:"professional_goals",INDUSTRY:"industry",NEWS_LOCATION:"news_location",NY_PERSONAL_GOALS:"new_year_personal_goals",NY_HOBBIES:"new_year_hobbies",NY_PROFESSIONAL_GOALS:"new_year_professional_goals",NY_INDUSTRY:"new_year_industry",NY_NEWS_LOCATION:"new_year_news_location",ROLE:"profile_edu_role",MAJOR:"profile_edu_major",GRADUATION_YEAR:"profile_edu_graduation_year"},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=a,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,i=await u({fieldName:n});if(i[0]&&i[0].name===n&&i[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");return(i[0]&&!0===i[0].explicit?a.EXPLICIT:a.IMPLICIT)===a.EXPLICIT?(async({submitData:{fieldName:t,value:o},source:n})=>{const i=`${p}/ingest`,r=e.getCookie("wapo_login_id"),s={jucid:localStorage.getItem("uuid"),ga:e.getCookie("_ga"),type:a.EXPLICIT,wapo_login_id:r,data:{[t]:[o]},metadata:{source:n}};try{const t=await fetch(i,{method:"POST",credentials:"include",headers:e.DEFAULT_HEADERS,body:JSON.stringify(s)});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/checkAlertBoxClosedCookie.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/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\n}\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\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 DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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 = `${ENDPOINTS.base}/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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;\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","checkAlertBoxClosedCookie","getCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","checkConsentCookieForAllowTargeting","value","includes","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","hydrateLinks","str","onLinkClick","split","i","rel","className","href","onClick","reduce","prev","current","Fragment","checkOptanonConsentCookie","DEDisclosureWithBannerStatus","config","onFinished","allowCookieStore","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","alertBoxClosed","consentCookieExists","useOnetrust","setConsentCookieExists","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","_window","__tcfapi","warn","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","push","cleanupFn2","forEach","fn","listenerId","callback","_tcData","success","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","isFinished","isError","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","myConfig","setMyConfig","response","remoteConfig","Object","keys","configKey","toLowerCase","getConfig","error","checkBannerStatus","DESelect","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","submitData","submitSelected","sort","a","b","order","filter","archived","name","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION","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/checkAlertBoxClosedCookie.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/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\n}\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\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 DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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 type { 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 = `${ENDPOINTS.base}/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 type {\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;\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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import { useState, useEffect } from 'react';\nimport type { ICookieStore } from '@washingtonpost/subs-sdk';\nimport { listenToCookieStore as listenToCookieStoreUtil } from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 const cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n ROLE: 'profile_edu_role',\n MAJOR: 'profile_edu_major',\n GRADUATION_YEAR: 'profile_edu_graduation_year',\n} as const;\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()) {\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 }\n return sendToGA({ submitData, source });\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","checkAlertBoxClosedCookie","getCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","checkConsentCookieForAllowTargeting","value","includes","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","hydrateLinks","str","onLinkClick","split","i","rel","className","href","onClick","reduce","prev","current","Fragment","checkOptanonConsentCookie","DEDisclosureWithBannerStatus","config","onFinished","allowCookieStore","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","alertBoxClosed","consentCookieExists","useOnetrust","setConsentCookieExists","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","_window","__tcfapi","warn","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","push","cleanupFn2","forEach","fn","listenerId","callback","_tcData","success","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","isFinished","isError","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","myConfig","setMyConfig","response","remoteConfig","Object","keys","configKey","toLowerCase","_","getConfig","error","checkBannerStatus","DESelect","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","submitData","submitSelected","sort","a","b","order","filter","archived","name","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION","ROLE","MAJOR","GRADUATION_YEAR","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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"}
|
|
@@ -225,12 +225,11 @@ const push = async ({
|
|
|
225
225
|
submitData,
|
|
226
226
|
source
|
|
227
227
|
});
|
|
228
|
-
} else {
|
|
229
|
-
return sendToGA({
|
|
230
|
-
submitData,
|
|
231
|
-
source
|
|
232
|
-
});
|
|
233
228
|
}
|
|
229
|
+
return sendToGA({
|
|
230
|
+
submitData,
|
|
231
|
+
source
|
|
232
|
+
});
|
|
234
233
|
};
|
|
235
234
|
|
|
236
235
|
const StyledMobileSelect = /*#__PURE__*/styled('select', {
|
|
@@ -481,7 +480,7 @@ const SelectWrapper = /*#__PURE__*/styled('div', {
|
|
|
481
480
|
|
|
482
481
|
const configSrc = `${ENDPOINTS.base === 'https://subscribe.washingtonpost.com' ? 'https://www.washingtonpost.com/subscribe' : ENDPOINTS.base}/config/de/disclosure.json`;
|
|
483
482
|
const getConfig = async () => {
|
|
484
|
-
let myConfig
|
|
483
|
+
let myConfig;
|
|
485
484
|
// step 1: fetch config
|
|
486
485
|
const response = await fetch(configSrc);
|
|
487
486
|
const remoteConfig = await response.json();
|
|
@@ -500,8 +499,8 @@ const getConfig = async () => {
|
|
|
500
499
|
});
|
|
501
500
|
// TODO: Check for billing country also
|
|
502
501
|
// else if no country-specific config, use the default config
|
|
503
|
-
if (typeof myConfig === 'undefined' && remoteConfig
|
|
504
|
-
myConfig = remoteConfig
|
|
502
|
+
if (typeof myConfig === 'undefined' && remoteConfig._) {
|
|
503
|
+
myConfig = remoteConfig._;
|
|
505
504
|
}
|
|
506
505
|
return myConfig;
|
|
507
506
|
};
|
|
@@ -564,7 +563,7 @@ const useOnetrust = ({
|
|
|
564
563
|
}
|
|
565
564
|
}, []);
|
|
566
565
|
useEffect(() => {
|
|
567
|
-
|
|
566
|
+
const cleanupFns = [];
|
|
568
567
|
if (listenToCookieStore$1 && window.cookieStore) {
|
|
569
568
|
const cleanupFn = listenToCookieStore(CONSENT_COOKIE, () => {
|
|
570
569
|
if (checkOptanonConsentCookie()) {
|
|
@@ -647,9 +646,7 @@ const DEDisclosureWithBannerStatus = ({
|
|
|
647
646
|
}, [alertBoxClosed]);
|
|
648
647
|
useEffect(() => {
|
|
649
648
|
if (disclosure && Array.isArray(disclosure)) {
|
|
650
|
-
setDisclosureRendering(disclosure.reduce((prev, current) =>
|
|
651
|
-
return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick)));
|
|
652
|
-
}, React.createElement(React.Fragment, null)));
|
|
649
|
+
setDisclosureRendering(disclosure.reduce((prev, current) => React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick))), React.createElement(React.Fragment, null)));
|
|
653
650
|
}
|
|
654
651
|
}, [disclosure]);
|
|
655
652
|
useEffect(() => {
|
|
@@ -677,9 +674,7 @@ const DEDisclosureWithoutBannerStatus = ({
|
|
|
677
674
|
}, [config]);
|
|
678
675
|
useEffect(() => {
|
|
679
676
|
if (disclosure && Array.isArray(disclosure)) {
|
|
680
|
-
setDisclosureRendering(disclosure.reduce((prev, current) =>
|
|
681
|
-
return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick)));
|
|
682
|
-
}, React.createElement(React.Fragment, null)));
|
|
677
|
+
setDisclosureRendering(disclosure.reduce((prev, current) => React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current, onPrivacyPolicyClick))), React.createElement(React.Fragment, null)));
|
|
683
678
|
}
|
|
684
679
|
}, [disclosure]);
|
|
685
680
|
useEffect(() => {
|
|
@@ -758,7 +753,10 @@ const FirstPartyIngestDataTypes = {
|
|
|
758
753
|
NY_HOBBIES: 'new_year_hobbies',
|
|
759
754
|
NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',
|
|
760
755
|
NY_INDUSTRY: 'new_year_industry',
|
|
761
|
-
NY_NEWS_LOCATION: 'new_year_news_location'
|
|
756
|
+
NY_NEWS_LOCATION: 'new_year_news_location',
|
|
757
|
+
ROLE: 'profile_edu_role',
|
|
758
|
+
MAJOR: 'profile_edu_major',
|
|
759
|
+
GRADUATION_YEAR: 'profile_edu_graduation_year'
|
|
762
760
|
};
|
|
763
761
|
|
|
764
762
|
export { AttributesState, CollectionBehaviors, DEDisclosure, DESelect, DeleteAttributeState, FirstPartyIngestDataTypes, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, push };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxClosedCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\n }\n\n return false;\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\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","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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 = `${ENDPOINTS.base}/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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\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, onPrivacyPolicyClick)}</p>\n </>\n );\n }, <></>)\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import React, { useState, useEffect, ReactEventHandler } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","DeleteAttributeState","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxClosedCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","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","onLinkClick","array","chunks","i","rel","className","href","onClick","toReturn","reduce","prev","current","Fragment","checkOptanonConsentCookie","CONSENT_COOKIE","ALERT_BOX_COOKIE","useOnetrust","allowCookieStore","consentCookieExists","setConsentCookieExists","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","cleanupFn2","fn","listenerId","callback","_tcData","success","DEDisclosureWithBannerStatus","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","setMyConfig","checkBannerStatus","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION"],"mappings":";;;;;;AAUO,MAAMA,mBAAmB,GAAG;AACjCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,cAAc,EAAE,gBAAA;EACR;AAcH,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,OAAO,EAAE,KAAA;EACD;AAEV;AACO,MAAMC,oBAAoB,GAAG;AAClCD,EAAAA,OAAO,EAAE,KAAK;AACdE,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,sBAAsB,EAAE,KAAK;AAC7BC,EAAAA,4BAA4B,EAAE,KAAA;EACtB;AAEH,MAAMC,UAAU,GAAG;AACxBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,QAAQ,EAAE,UAAA;EACF;AAEH,MAAMC,mBAAmB,GAAG;AACjCR,EAAAA,OAAO,EAAE,KAAK;AACdE,EAAAA,YAAY,EAAE,KAAK;AACnBO,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,kBAAkB,EAAE,KAAK;AACzBC,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,4BAA4B,EAAE,KAAK;AACnCC,EAAAA,uBAAuB,EAAE,KAAK;AAC9BC,EAAAA,eAAe,EAAE,KAAK;AACtBC,EAAAA,qBAAqB,EAAE,KAAK;AAC5BC,EAAAA,6BAA6B,EAAE,KAAK;AACpClB,EAAAA,cAAc,EAAE,KAAA;;;ACrDlB,MAAMmB,QAAM,GAAG,gBAAgB,CAAA;AAE/B;;;;AAIG;AACI,MAAMC,mCAAmC,GAAGA,MAAK;AACtD,EAAA,MAAMC,KAAK,GAAGC,SAAS,CAACH,QAAM,CAAC,IAAI,EAAE,CAAA;AACrC,EAAA,OAAOE,KAAK,CAACE,QAAQ,CAAC,WAAW,CAAC,GAC9B,IAAI,GACJF,KAAK,CAACE,QAAQ,CAAC,WAAW,CAAC,GAC3B,KAAK,GACL,IAAI,CAAA;AACV,CAAC;;ACdD,MAAMJ,QAAM,GAAG,uBAAuB,CAAA;AAE/B,MAAMK,yBAAyB,GAAGA,MAAK;AAC5C,EAAA,MAAMH,KAAK,GAAGC,SAAS,CAACH,QAAM,CAAC,IAAI,EAAE,CAAA;AACrC;AACA;AACA,EAAA,OAAOE,KAAK,CAACI,MAAM,GAAG,EAAE,CAAA;AAC1B,CAAC;;ACLD;;;;;;;AAOG;AACUC,MAAAA,yBAAyB,GAAGA,MAAK;AAC5C,EAAA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEA,MAAM;IAAEC,WAAW;AAAEC,IAAAA,YAAY,EAAEC,WAAAA;GAAa,GAAGC,KAAK,EAAE,CAAA;EAE1D,IAAID,WAAW,KAAK,IAAI,EAAE;AACxB,IAAA,OAAO,CAAC,CAACR,SAAS,CAAC,QAAQ,CAAC,CAAA;AAC9B,GAAA;AAEA,EAAA,IAAIK,MAAM,CAACK,QAAQ,KAAK,YAAY,EAAE;AACpC,IAAA,MAAMC,mBAAmB,GAAGb,mCAAmC,EAAE,CAAA;IACjE,IACE,OAAOa,mBAAmB,KAAK,SAAS,IACxCT,yBAAyB,EAAE,EAC3B;AACA,MAAA,OAAOS,mBAAmB,CAAA;AAC5B,KAAA;AAEA;AACA;IACA,IAAIL,WAAW,KAAK,KAAK,IAAID,MAAM,CAACK,QAAQ,KAAK,YAAY,EAAE;AAC7D,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACF,GAAA;AAEA,EAAA,OAAO,KAAK,CAAA;AACd;;ACjCA,MAAME,MAAI,GAAG,CAAA,EAAGC,SAAS,CAACD,KAAY,MAAA,CAAA,CAAA;AAQtC,MAAME,eAAe,GAAwB,EAAE,CAAA;AAClCC,MAAAA,aAAa,GAAsB,OAAO;AACrDC,EAAAA,SAAAA;AAGD,CAAA,KAAI;AACH,EAAA,IAAIF,eAAe,CAACE,SAAS,CAAC,EAAE;IAC9B,OAAOF,eAAe,CAACE,SAAS,CAAC,CAAA;AACnC,GAAA;AAEA,EAAA,MAAMC,UAAU,GAAG,CAACD,SAAS,CAAC,CAAA;EAE9B,IAAI;IACF,MAAME,GAAG,GAAG,IAAIC,GAAG,CAAI,CAAAP,EAAAA,MAAiB,aAAA,CAAC,CAAA;AACzCM,IAAAA,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,YAAY,EAAEJ,UAAU,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAExD,MAAMC,IAAI,GAAG,MAAMC,KAAK,CAACN,GAAG,CAACO,QAAQ,EAAE,EAAE;AACvCC,MAAAA,WAAW,EAAE,SAAS;AACtBC,MAAAA,OAAO,EAAEC,eAAAA;AACV,KAAA,CAAC,CAAA;AACF,IAAA,MAAMC,IAAI,GAAG,MAAMN,IAAI,CAACM,IAAI,EAAE,CAAA;IAE9B,IAAIN,IAAI,CAACO,EAAE,IAAID,IAAI,CAACE,MAAM,KAAKC,cAAc,CAACpD,OAAO,EAAE;AACrD,MAAA,MAAMqD,UAAU,GAAGJ,IAAI,CAACI,UAAU,IAAI,EAAE,CAAA;AACxCnB,MAAAA,eAAe,CAACE,SAAS,CAAC,GAAGiB,UAAU,CAAA;AACvC,MAAA,OAAOA,UAAU,CAAA;AACnB,KAAA;AACA,IAAA,OAAO,EAAE,CAAA;GACV,CAAC,OAAOC,CAAC,EAAE;AACVC,IAAAA,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC,CAAA;AAChB,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AACF;;AC/CA,MAAMG,WAAW,GAAIC,KAOpB,IAAU;AACT,EAAA,IAAI,OAAOjC,MAAM,KAAK,WAAW,EAAE;IACjC,IAAAkC,OAAA,CAAAC,GAAA,CAAAC,QAAA,KAAaN,YAAAA,EAAAA,OAAO,CAACO,IAAI,CAAC,WAAW,CAAC,CAAA;AACtC,IAAA,OAAA;AACF,GAAA;AACA;AACArC,EAAAA,MAAM,CAACsC,SAAS,GAAGtC,MAAM,CAACsC,SAAS,IAAI,EAAE,CAAA;AAEzC,EAAA,MAAMC,SAAS,GAAwB;IACrC,GAAGN,KAAAA;GACJ,CAAA;AACDjC,EAAAA,MAAM,CAACsC,SAAS,CAACE,IAAI,CAACD,SAAS,CAAC,CAAA;AAClC,CAAC,CAAA;AAEM,MAAME,QAAQ,GAAiB,OAAO;AAC3CC,EAAAA,UAAU,EAAE;IAAE/B,SAAS;AAAEjB,IAAAA,KAAAA;GAAO;AAChCiD,EAAAA,MAAAA;AAAM,CACP,KAAI;AACHX,EAAAA,WAAW,CAAC;AACVY,IAAAA,KAAK,EAAE,mBAAmB;AAC1BC,IAAAA,MAAM,EAAE,mBAAmB;AAC3BC,IAAAA,QAAQ,EAAE,SAAS;AAEnBC,IAAAA,KAAK,EAAEpC,SAAS;AAChB,IAAA,UAAU,EAAEA,SAAS;IACrB,CAACA,SAAS,GAAGjB,KAAK;AAElBsD,IAAAA,OAAO,EAAE,SAAS;AAClBC,IAAAA,UAAU,EAAEN,MAAAA;AACb,GAAA,CAAC,CAAA;AAEF,EAAA,OAAO,IAAI,CAAA;AACb,CAAC;;AC/BD,MAAMpC,IAAI,GAAG,CAAA,EAAGC,SAAS,CAACD,KAAY,MAAA,CAAA,CAAA;AAE/B,MAAM2C,MAAM,GAAe,OAAO;AACvCR,EAAAA,UAAU,EAAE;IAAE/B,SAAS;AAAEjB,IAAAA,KAAAA;GAAO;AAChCiD,EAAAA,MAAAA;AAAM,CACP,KAAI;AACH,EAAA,MAAM9B,GAAG,GAAM,CAAAN,EAAAA,KAAa,OAAA,CAAA,CAAA;AAE5B,EAAA,MAAM4C,aAAa,GAAGxD,SAAS,CAAC,eAAe,CAAC,CAAA;AAEhD,EAAA,MAAMyD,KAAK,GAAGC,YAAY,CAACC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC1C,EAAA,MAAMC,EAAE,GAAG5D,SAAS,CAAC,KAAK,CAAC,CAAA;AAE3B,EAAA,MAAM6D,OAAO,GAAG;IACdJ,KAAK;IACLG,EAAE;IACFE,IAAI,EAAE7E,UAAU,CAACC,QAAQ;IACzBsE,aAAa;AAAE;AACfjC,IAAAA,IAAI,EAAE;MACJ,CAACP,SAAS,GAAG,CAACjB,KAAK,CAAA;KACpB;AACDgE,IAAAA,QAAQ,EAAE;AAAEf,MAAAA,MAAAA;AAAQ,KAAA;GACrB,CAAA;EAED,IAAI;AACF,IAAA,MAAMgB,QAAQ,GAAG,MAAMxC,KAAK,CAACN,GAAG,EAAE;AAChC+C,MAAAA,MAAM,EAAE,MAAM;AACdvC,MAAAA,WAAW,EAAE,SAAS;AACtBC,MAAAA,OAAO,EAAEC,eAAe;AACxBsC,MAAAA,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO,CAAA;AAC7B,KAAA,CAAC,CAAA;AAEF,IAAA,MAAMhC,IAAI,GAAG,MAAMmC,QAAQ,CAACnC,IAAI,EAAE,CAAA;AAElC,IAAA,OAAOA,IAAI,CAAA;GACZ,CAAC,OAAOK,CAAC,EAAE;AACVC,IAAAA,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC,CAAA;AAChB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACF,CAAC;;AC7CM,MAAMmC,kBAAkB,GAAGA,MAAK;AACrC,EAAA,IAAI,OAAOhE,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,MAAMiE,KAAK,GAAGtE,SAAS,CAAC,OAAO,CAAC,CAAA;EAEhC,OAAO,CAAC,EAAEsE,KAAK,IAAI,CAACC,UAAU,EAAE,CAAC,CAAA;AACnC,CAAC;;ACqBY1B,MAAAA,IAAI,GAAa,OAAO;EAAEE,UAAU;AAAEC,EAAAA,MAAAA;AAAQ,CAAA,KAAI;AAC7D,EAAA,IAAI,CAAC5C,yBAAyB,EAAE,EAAE;AAChC,IAAA,MAAM,IAAIoE,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAClD,GAAA;EAEA,IAAIH,kBAAkB,EAAE,EAAE;AACxB,IAAA,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAClD,GAAA;EAEA,MAAM;AAAExD,IAAAA,SAAAA;AAAW,GAAA,GAAG+B,UAAU,CAAA;AAEhC,EAAA,MAAM0B,aAAa,GAAG,MAAM1D,aAAa,CAAC;AACxCC,IAAAA,SAAAA;AACD,GAAA,CAAC,CAAA;EAEF,IACEyD,aAAa,CAAC,CAAC,CAAC,IAChBA,aAAa,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK1D,SAAS,IACnCyD,aAAa,CAAC,CAAC,CAAC,CAACE,mBAAmB,KAAKnG,mBAAmB,CAACE,cAAc,EAC3E;AACA,IAAA,MAAM,IAAI8F,KAAK,CAAC,gBAAgB,CAAC,CAAA;AACnC,GAAA;EAEA,MAAMV,IAAI,GACRW,aAAa,CAAC,CAAC,CAAC,IAAIA,aAAa,CAAC,CAAC,CAAC,CAACG,QAAQ,KAAK,IAAI,GAClD3F,UAAU,CAACC,QAAQ,GACnBD,UAAU,CAACE,QAAQ,CAAA;AAEzB,EAAA,IAAI,CAACsF,aAAa,CAAC,CAAC,CAAC,IAAAlC,OAAA,CAAAC,GAAA,CAAAC,QAAA,KAAA,YAAW,EAAE;AAChCN,IAAAA,OAAO,CAACO,IAAI,EAAgC1B,4BAAAA,EAAAA,SAAS,qBAAqB,CAAC,CAAA;AAC7E,GAAA;AAEA,EAAA,IAAI8C,IAAI,KAAK7E,UAAU,CAACC,QAAQ,EAAE;AAChC,IAAA,OAAOqE,MAAM,CAAC;MAAER,UAAU;AAAEC,MAAAA,MAAAA;AAAM,KAAE,CAAC,CAAA;AACvC,GAAC,MAAM;AACL,IAAA,OAAOF,QAAQ,CAAC;MAAEC,UAAU;AAAEC,MAAAA,MAAAA;AAAM,KAAE,CAAC,CAAA;AACzC,GAAA;AACF;;ACrDA,MAAM6B,kBAAkB,gBAAGC,MAAM,CAAC,QAAQ,EAAE;AAC1CC,EAAAA,OAAO,EAAE,oBAAoB;AAC7BC,EAAAA,OAAO,EAAE,MAAM;AACfC,EAAAA,cAAc,EAAE,eAAe;AAC/BC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,eAAe,EAAE,YAAY;AAC7BC,EAAAA,KAAK,EAAE,UAAU;AACjBC,EAAAA,UAAU,EAAE,OAAO;AACnBC,EAAAA,QAAQ,EAAE,MAAM;AAChBC,EAAAA,UAAU,EAAE,QAAQ;AACpBC,EAAAA,UAAU,EAAE,MAAM;AAClBC,EAAAA,iBAAiB,EAAE,MAAM;AACzBC,EAAAA,YAAY,EAAE,UAAU;AACxBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,WAAW,EAAE,aAAa;AAC1BC,EAAAA,gBAAgB,EAAE,MAAM;AACxBC,EAAAA,gBAAgB,EAAE,aAAa;AAC/BC,EAAAA,UAAU,EAAE,MAAM;AAClB,EAAA,oBAAoB,EAAE,MAAM;AAC5B,EAAA,YAAY,EAAE;AACZZ,IAAAA,eAAe,EAAEa,KAAK,CAACC,MAAM,CAACC,QAAQ;AACtCN,IAAAA,WAAW,EAAEI,KAAK,CAACC,MAAM,CAACC,QAAQ;AAClCd,IAAAA,KAAK,EAAEY,KAAK,CAACC,MAAM,CAACE,UAAU;AAC9BC,IAAAA,MAAM,EAAE,aAAA;AACT,GAAA;AACF,CAAA,CAAC,CAAA;AAEF,MAAMC,mBAAmB,gBAAGvB,MAAM,CAAC,KAAK,EAAE;AACxCI,EAAAA,KAAK,EAAE,MAAM;AACboB,EAAAA,QAAQ,EAAE,OAAO;AACjBC,EAAAA,YAAY,EAAE,MAAM;AACpBX,EAAAA,WAAW,EAAE,SAAS;AACtBY,EAAAA,WAAW,EAAE,OAAO;AACpBC,EAAAA,WAAW,EAAE,KAAK;AAClBtB,EAAAA,eAAe,EAAE,YAAY;AAC7BQ,EAAAA,QAAQ,EAAE,UAAA;AACX,CAAA,CAAC,CAAA;AAEF,MAAMe,kBAAkB,gBAAG5B,MAAM,CAAC,QAAQ,EAAE;AAC1CO,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,QAAQ,EAAE,SAAS;AACnBF,EAAAA,KAAK,EAAE,SAAA;AACR,CAAA,CAAC,CAAA;AAEF;;;;AAIG;AACI,MAAMuB,QAAQ,GAAGA,CAAC;EACvBC,EAAE;EACFxD,KAAK;EACLyD,MAAM;AACNC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,YAAY;AACZC,EAAAA,QAAQ,GAAGA,MAAK,EAAG;AACnBd,EAAAA,QAAQ,GAAG,KAAA;AAAK,CACD,KAAI;EACnB,MAAM,CAACe,MAAM,EAAEC,SAAS,CAAC,GAAGC,QAAQ,EAAU,CAAA;EAC9C,MAAM;AAAEC,IAAAA,YAAAA;GAAc,GAAGC,aAAa,EAAE,CAAA;AAExCC,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIL,MAAM,EAAED,QAAQ,CAACC,MAAM,CAAC,CAAA;AAC9B,GAAC,EAAE,CAACA,MAAM,CAAC,CAAC,CAAA;EAEZ,MAAMM,YAAY,GAAGrB,QAAQ,GAAG;AAAEA,IAAAA,QAAQ,EAAE,IAAA;GAAM,GAAG,EAAE,CAAA;AAEvD;EACA,MAAMsB,gBAAgB,GAAGP,MAAM,GAC3B;AAAEF,IAAAA,YAAY,EAAEE,MAAAA;GAAQ,GACxBF,YAAY,GACZ;AAAEA,IAAAA,YAAAA;GAAc,GAChB,EAAE,CAAA;EAEN,MAAMU,sBAAsB,GAAI1H,KAAa,IAAI;AAC/C,IAAA,IAAIkH,MAAM,EAAE;MACV,OAAOlH,KAAK,KAAKkH,MAAM,GAAG;AAAES,QAAAA,QAAQ,EAAE,IAAA;OAAM,GAAG,EAAE,CAAA;AACnD,KAAA;IACA,OAAO3H,KAAK,KAAKgH,YAAY,GAAG;AAAEW,MAAAA,QAAQ,EAAE,IAAA;KAAM,GAAG,EAAE,CAAA;GACxD,CAAA;AAED,EAAA,OAAON,YAAY,GACjBO,oBAACtB,mBAAmB,EAAA,IAAA,EAClBsB,KAAC,CAAAC,aAAA,CAAA/C,kBAAkB,EACjB;AAAA+B,IAAAA,EAAE,EAAC,EAAE;AACLE,IAAAA,QAAQ,EAAEA,QAAQ;IAClBE,QAAQ,EAAG9E,CAAC,IAAKgF,SAAS,CAAChF,CAAC,CAAC2F,MAAM,CAAC9H,KAAK,CAAC;IAAA,GACtCwH,YAAAA;AAAY,GAAA,EAEhBI,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQxE,KAAK,CAAS,EACtBuE,KAAA,CAAAC,aAAA,CAAClB,kBAAkB,EACjB;AAAA3G,IAAAA,KAAK,EAAC,EAAE;AACRmG,IAAAA,QAAQ,EACR,IAAA;AAAAwB,IAAAA,QAAQ;AACRI,IAAAA,KAAK,EAAE;AAAE1C,MAAAA,KAAK,EAAE,SAAA;AAAW,KAAA;AAAA,GAAA,EAE1BhC,KAAK,CACa,EACpByD,MAAM,CAACkB,GAAG,CAAEhI,KAAK,IAChB4H,KAAA,CAAAC,aAAA,CAAClB,kBAAkB,EAAA;AACjB3G,IAAAA,KAAK,EAAEA,KAAK;AACZiI,IAAAA,GAAG,EAAEjI,KAAK;IAAA,GACN0H,sBAAsB,CAAC1H,KAAK,CAAA;GAE/B,EAAAA,KAAK,CAET,CAAC,CACiB,EACrB4H,KAAA,CAAAC,aAAA,CAACK,IAAI,EACH;AAAA7E,IAAAA,KAAK,EAAC,EAAE;AACR8E,IAAAA,IAAI,EAAC,KAAK;AACVC,IAAAA,IAAI,EAAEnC,KAAK,CAACC,MAAM,CAACmC,MAAM;AACzBN,IAAAA,KAAK,EAAE;AACLO,MAAAA,aAAa,EAAE,MAAM;AACrB1C,MAAAA,QAAQ,EAAE,UAAU;AACpB2C,MAAAA,KAAK,EAAE,MAAM;AACbC,MAAAA,GAAG,EAAE,KAAK;AACVC,MAAAA,SAAS,EAAE,kBAAA;AACZ,KAAA;AAAA,GAAA,EAEDb,KAAC,CAAAC,aAAA,CAAAa,WAAW;AAACX,IAAAA,KAAK,EAAE;AAAEnC,MAAAA,QAAQ,EAAE,UAAU;AAAE2C,MAAAA,KAAK,EAAE,MAAA;AAAM,KAAA;IAAM,CAC1D,CACa,GAEtBX,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACC,IAAI;AACVC,IAAAA,aAAa,EAAG1G,CAAC,IAAKgF,SAAS,CAAChF,CAAC,CAAC;AAClC4E,IAAAA,QAAQ,EAAEA,QAAQ;AACd,IAAA,GAAAU,gBAAgB;OAChBD,YAAAA;GAAY,EAEhBI,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACG,OAAO,EAAe;IAAA,cAAA,EAAA,GAAGjC,EAAmB,CAAA,eAAA,CAAA;AAAA,GAAA,EAClDe,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACI,KAAK,EAAA,IAAA,EAAE1F,KAAK,CAAgB,EACpCuE,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACK,KAAK,EAAA,IAAA,CAAG,CACD,EACjBpB,KAAC,CAAAC,aAAA,CAAAc,MAAM,CAACM,OAAO,EAAA;AACbC,IAAAA,GAAG,EAAE;AAAEC,MAAAA,MAAM,EAAElD,KAAK,CAACmD,QAAQ,CAACC,IAAAA;KAAM;IAAA,cAAA,EACnB,GAAAxC;AAEhB,GAAA,EAAAC,MAAM,CAACkB,GAAG,CAAEhI,KAAK,IAChB4H,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACW,IAAI,EAAC;AAAAtJ,IAAAA,KAAK,EAAEA,KAAK;AAAEiI,IAAAA,GAAG,EAAEjI,KAAAA;AAAK,GAAA,EAClCA,KAAK,CAET,CAAC,CACa,CAEpB,CAAA;AACH,CAAC;;AC9HD,MAAMuJ,SAAS,GAAG,CAAA,EAAGzI,SAAS,CAACD,KAA6B,uBAAA,CAAA,CAAA;AAErD,MAAM2I,QAAQ,GAA4BA,CAAC;EAChDvG,MAAM;EACNhC,SAAS;EACToC,KAAK;EACLoG,oBAAoB;EACpBzC,YAAY;EACZb,QAAQ;EACRuD,MAAM;AACNzC,EAAAA,QAAQ,GAAGA,MAAK,EAAG;AACnB0C,EAAAA,UAAU,GAAGA,QAAQ;EACrBC,YAAY,GAAGA,MAAM,IAAI;AACzBC,EAAAA,QAAAA;AAAQ,CACT,KAAI;EACH,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG3C,QAAQ,CAACqC,oBAAoB,CAAC,CAAA;EAE1D,MAAM,CAAC9B,QAAQ,EAAEqC,WAAW,CAAC,GAAG5C,QAAQ,CAAC,EAAE,CAAC,CAAA;AAE5C,EAAA,MAAM6C,YAAY,GAAGC,SAAS,CAACX,SAAS,CAAC,CAAA;AAEzChC,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,MAAM4C,WAAW,GAAG,YAAW;MAC7B,IAAI;AAAA,QAAA,IAAAC,OAAA,CAAA;QACF,MAAMN,MAAM,GAAG,OAAAM,CAAAA,OAAA,GAAM9J,MAAM,MAAA,IAAA,IAAA8J,OAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,OAAA,GAANA,OAAA,CAAQC,QAAQ,MAAAD,IAAAA,IAAAA,OAAA,uBAAhBA,OAAA,CAAkBE,eAAe,CAAC;AAAErJ,UAAAA,SAAAA;AAAS,SAAE,CAAC,CAAA,CAAA;AACrE,QAAA,IAAI6I,MAAM,EAAE;AACVC,UAAAA,SAAS,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACtB,SAAC,MAAM;AACL1H,UAAAA,OAAO,CAACmI,KAAK,CAAC,sBAAsB,EAAEtJ,SAAS,CAAC,CAAA;AAClD,SAAA;OACD,CAAC,OAAOkB,CAAC,EAAE;QACVC,OAAO,CAACO,IAAI,CAAC,sBAAsB,EAAE1B,SAAS,EAAEkB,CAAC,CAAC,CAAA;AACpD,OAAA;KACD,CAAA;IAED,IAAI8H,YAAY,KAAKO,YAAY,CAACC,KAAK,IAAI,EAAEZ,QAAQ,IAAIC,MAAM,CAAC,EAAE;AAChEK,MAAAA,WAAW,EAAE,CAAA;AACf,KAAA;AACF,GAAC,EAAE,CAACF,YAAY,CAAC,CAAC,CAAA;AAElB1C,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,MAAMmD,cAAc,GAAG,YAAW;MAChC,IAAI;AAAA,QAAA,IAAAC,QAAA,CAAA;QACF,MAAMC,MAAM,GAAG,OAAAD,CAAAA,QAAA,GAAMrK,MAAM,MAAA,IAAA,IAAAqK,QAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,QAAA,GAANA,QAAA,CAAQN,QAAQ,MAAAM,IAAAA,IAAAA,QAAA,uBAAhBA,QAAA,CAAkB7H,IAAI,CAAC;AAC1CE,UAAAA,UAAU,EAAE;YAAE/B,SAAS;AAAEjB,YAAAA,KAAK,EAAE2H,QAAAA;WAAU;AAC1C1E,UAAAA,MAAAA;AACD,SAAA,CAAC,CAAA,CAAA;AAEF,QAAA,MAAM4H,OAAO,GACXD,MAAM,KAAK,IAAI,GACX,KAAK,GACLA,MAAM,GACNA,MAAM,CAAC5I,MAAM,KAAKC,cAAc,CAACpD,OAAO,GACxC,IAAI,CAAA;AAEV8K,QAAAA,UAAU,CAAC;AACTmB,UAAAA,UAAU,EAAE,IAAI;AAChBD,UAAAA,OAAAA;AACD,SAAA,CAAC,CAAA;OACH,CAAC,OAAO1I,CAAC,EAAE;AACVwH,QAAAA,UAAU,CAAC;AACTmB,UAAAA,UAAU,EAAE,KAAK;AACjBD,UAAAA,OAAO,EAAE,IAAA;AACV,SAAA,CAAC,CAAA;AACJ,OAAA;KACD,CAAA;IAED,IAAIZ,YAAY,KAAKO,YAAY,CAACC,KAAK,IAAIf,MAAM,IAAI/B,QAAQ,EAAE;AAC7D+C,MAAAA,cAAc,EAAE,CAAA;AAClB,KAAA;AACF,GAAC,EAAE,CAACT,YAAY,EAAEP,MAAM,CAAC,CAAC,CAAA;AAE1B,EAAA,MAAMjC,gBAAgB,GAAGT,YAAY,IAAI8C,MAAM,GAAG;AAAE9C,IAAAA,YAAAA;GAAc,GAAG,EAAE,CAAA;AAEvE,EAAA,MAAM+D,SAAS,GAAG,EAAElB,QAAQ,IAAIC,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAMtC,YAAY,GAAGrB,QAAQ,IAAI4E,SAAS,GAAG;AAAE5E,IAAAA,QAAQ,EAAE,IAAA;GAAM,GAAG,EAAE,CAAA;AAEpE;AACA;AACA,EAAA,MAAMW,MAAM,GAAGgD,MAAM,GACjB,CAAC,GAAGA,MAAM,CAAChD,MAAM,CAAC,CACfkE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CAAC,CACjCC,MAAM,CAAEpL,KAAK,IAAKA,KAAK,CAACqL,QAAQ,KAAK,IAAI,CAAC,CAC1CD,MAAM,CAACxB,YAAY,CAAC,GACvB,EAAE,CAAA;AAEN,EAAA,OACEhC,oBAAC0D,aAAa,EAAA,IAAA,EACXzB,QAAQ,IACPjC,KAAC,CAAAC,aAAA,CAAAc,MAAM,CAACC,IAAI,EACV;IAAAC,aAAa,EAAG1G,CAAC,IAAI;MACnB6H,WAAW,CAAC7H,CAAC,CAAC,CAAA;AACd8E,MAAAA,QAAQ,CAAC;AAAEjH,QAAAA,KAAK,EAAEmC,CAAAA;AAAC,OAAE,CAAC,CAAA;KACvB;OACGsF,gBAAgB;IAAA,GAChBD,YAAAA;AAEH,GAAA,EAAAqC,QAAQ,CAEZ,EACA,CAACA,QAAQ,IAAI,CAACC,MAAM,IACnBlC,KAAC,CAAAC,aAAA,CAAAjB,QAAQ,EACP;AAAAC,IAAAA,EAAE,EAAE,SAAS;AACbxD,IAAAA,KAAK,EAAE,YAAY;AACnByD,IAAAA,MAAM,EAAE,EAAE;AACVX,IAAAA,QAAQ,EAAE,IAAA;AAAI,GAAA,CAEjB,EACA,CAAC0D,QAAQ,IAAIC,MAAM,IAClBlC,KAAC,CAAAC,aAAA,CAAAjB,QAAQ,EACP;IAAAC,EAAE,EAAEiD,MAAM,CAACnF,IAAI;AACftB,IAAAA,KAAK,EAAEA,KAAK,IAAIyG,MAAM,CAACnF,IAAI;IAC3BsC,QAAQ,EAAG9E,CAAC,IAAI;MACd6H,WAAW,CAAC7H,CAAC,CAAC,CAAA;AACd8E,MAAAA,QAAQ,CAAC;AAAEjH,QAAAA,KAAK,EAAEmC,CAAAA;AAAC,OAAE,CAAC,CAAA;KACvB;IACD2E,MAAM,EAAEA,MAAM,CAACkB,GAAG,CAAEhI,KAAK,IAAKA,KAAK,CAAC2E,IAAI,CAAC;AACzCqC,IAAAA,YAAY,EAAEA,YAAY;AAC1Bb,IAAAA,QAAQ,EAAEA,QAAAA;AACV,GAAA,CACH,CACa,CAAA;AAEpB,EAAC;AAED,MAAMmF,aAAa,gBAAGvG,MAAM,CAAC,KAAK,EAAE;AAClCwG,EAAAA,SAAS,EAAE,YAAY;AACvBtG,EAAAA,OAAO,EAAE,MAAM;AACfuG,EAAAA,YAAY,EAAE,MAAM;AACpBC,EAAAA,aAAa,EAAE,QAAQ;AACvB,EAAA,UAAU,EAAE;AACVzG,IAAAA,OAAO,EAAE,SAAA;GACV;AACD,EAAA,KAAK,EAAE;AAAEuG,IAAAA,SAAS,EAAE,YAAA;AAAc,GAAA;AACnC,CAAA,CAAC;;ACpKF,MAAMG,SAAS,GAAG,CAChB5K,EAAAA,SAAS,CAACD,IAAI,KAAK,sCAAsC,GACrD,0CAA0C,GAC1CC,SAAS,CAACD,KACY,0BAAA,CAAA,CAAA;AAErB,MAAM8K,SAAS,GAAG,YAAW;EAClC,IAAIC,QAAQ,GAAsCC,SAAS,CAAA;AAE3D;AACA,EAAA,MAAM5H,QAAQ,GAAG,MAAMxC,KAAK,CAACiK,SAAS,CAAC,CAAA;AACvC,EAAA,MAAMI,YAAY,GAAqB,MAAM7H,QAAQ,CAACnC,IAAI,EAAE,CAAA;AAE5D;AAEA;EACA,MAAM;IAAEtB,YAAY;AAAED,IAAAA,WAAAA;GAAa,GAAGG,KAAK,EAAE,CAAA;EAC7CqL,MAAM,CAACC,IAAI,CAACF,YAAY,CAAC,CAACG,OAAO,CAAEC,SAAS,IAAI;AAC9C,IAAA,IACE1L,YAAY,IACZ0L,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAACjM,QAAQ,CAACM,YAAY,CAAC4L,WAAW,EAAE,CAAC,EACzD;AACAR,MAAAA,QAAQ,GAAGE,YAAY,CAACI,SAAS,CAAC,CAAA;KACnC,MAAM,IAAI3L,WAAW,KAAK,KAAK,IAAI2L,SAAS,KAAK,KAAK,EAAE;AACvDN,MAAAA,QAAQ,GAAGE,YAAY,CAACI,SAAS,CAAC,CAAA;AACpC,KAAA;AACF,GAAC,CAAC,CAAA;AAEF;AAEA;EACA,IAAI,OAAON,QAAQ,KAAK,WAAW,IAAIE,YAAY,CAAC,GAAG,CAAC,EAAE;AACxDF,IAAAA,QAAQ,GAAGE,YAAY,CAAC,GAAG,CAAC,CAAA;AAC9B,GAAA;AAEA,EAAA,OAAOF,QAAQ,CAAA;AACjB,CAAC;;ACnCM,MAAMS,YAAY,GAAqBA,CAACC,GAAG,EAAEC,WAAW,GAAGA,MAAO,EAAC,KAAI;AAC5E,EAAA,MAAMC,KAAK,GAAGF,GAAG,CAACH,KAAK,CAAC,uBAAuB,CAAC,CAAA;EAChD,MAAMM,MAAM,GAAGD,KAAK,CAACxE,GAAG,CAAC,CAACsE,GAAG,EAAEI,CAAC,KAAI;IAClC,IAAIJ,GAAG,KAAK,oBAAoB,EAAE;AAChC,MAAA,OACE1E;QACEK,GAAG,GAAkByE,aAAAA,EAAAA,CAAC,CAAE,CAAA;AACxBC,QAAAA,GAAG,EAAC,qBAAqB;AACzB7E,QAAAA,MAAM,EAAC,QAAQ;AACfC,QAAAA,KAAK,EAAE;AAAE1C,UAAAA,KAAK,EAAE,SAAA;SAAW;AAC3BuH,QAAAA,SAAS,EAAC,WAAW;AACrBC,QAAAA,IAAI,EAAC,gDAAgD;AACrDC,QAAAA,OAAO,EAAG3K,CAAC,IAAKoK,WAAW,CAACpK,CAAC,CAAA;OAG3B,EAAA,gBAAA,CAAA,CAAA;AAER,KAAA;AACA,IAAA,OAAOmK,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;AAEF,EAAA,MAAMS,QAAQ,GAAGN,MAAM,CAACO,MAAM,CAC5B,CAACC,IAAI,EAAEC,OAAO,KACZtF,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,EACGF,IAAI,EACJC,OAAO,CAEX,EACDtF,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,CAAK,CACN,CAAA;AAED,EAAA,OAAOJ,QAAQ,CAAA;AACjB,CAAC;;ACrCD,MAAMjN,MAAM,GAAG,gBAAgB,CAAA;AAExB,MAAMsN,yBAAyB,GAAGA,MAAK;AAC5C,EAAA,MAAMpN,KAAK,GAAGC,SAAS,CAACH,MAAM,CAAC,IAAI,EAAE,CAAA;AACrC,EAAA,OAAOE,KAAK,CAACI,MAAM,GAAG,EAAE,CAAA;AAC1B,CAAC;;ACCD,MAAMiN,cAAc,GAAG,gBAAgB,CAAA;AAEvC,MAAMC,gBAAgB,GAAG,uBAAuB,CAAA;AAkCzC,MAAMC,WAAW,GAAGA,CAAC;AAC1BC,EAAAA,gBAAAA;AAGD,CAAA,KAAI;EACH,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGtG,QAAQ,EAE3D,CAAA;EACH,MAAM,CAACuG,cAAc,EAAEC,iBAAiB,CAAC,GAAGxG,QAAQ,EAAuB,CAAA;EAE3E,MAAM,CAACyG,qBAAmB,EAAEC,sBAAsB,CAAC,GAAG1G,QAAQ,CAAC,KAAK,CAAC,CAAA;EACrE,MAAM,CAAC2G,cAAc,EAAEC,iBAAiB,CAAC,GAAG5G,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE3DG,EAAAA,SAAS,CAAC,MAAK;AAAA,IAAA,IAAA6C,OAAA,CAAA;IACb,IAAIgD,yBAAyB,EAAE,EAAE;MAC/BM,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAC9B,KAAA;IAEA,IAAIvN,yBAAyB,EAAE,EAAE;MAC/ByN,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACvB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACtN,MAAM,CAAC2N,QAAQ,EAAE;AACpB7L,MAAAA,OAAO,CAACO,IAAI,CAAC,6BAA6B,CAAC,CAAA;AAC7C,KAAA;AAEA,IAAA,IAAI,CAAAyH,OAAA,GAAA9J,MAAM,MAAA8J,IAAAA,IAAAA,OAAA,KAANA,KAAAA,CAAAA,IAAAA,OAAA,CAAQ8D,WAAW,IAAIV,gBAAgB,EAAE;MAC3CM,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAC9B,KAAC,MAAM,IAAIxN,MAAM,CAAC2N,QAAQ,EAAE;MAC1BD,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzB,KAAC,MAAM;AACL5L,MAAAA,OAAO,CAACO,IAAI,CAAC,iDAAiD,CAAC,CAAA;AACjE,KAAA;GACD,EAAE,EAAE,CAAC,CAAA;AAEN4E,EAAAA,SAAS,CAAC,MAAK;IACb,IAAI4G,UAAU,GAA4B,EAAE,CAAA;AAC5C,IAAA,IAAIN,qBAAmB,IAAIvN,MAAM,CAAC4N,WAAW,EAAE;AAC7C,MAAA,MAAME,SAAS,GAAGC,mBAAuB,CAAChB,cAAc,EAAE,MAAK;QAC7D,IAAID,yBAAyB,EAAE,EAAE;UAC/BM,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAC9B,SAAA;AACF,OAAC,CAAC,CAAA;AACFS,MAAAA,UAAU,CAACrL,IAAI,CAACsL,SAAS,CAAC,CAAA;AAE1B,MAAA,MAAME,UAAU,GAAGD,mBAAuB,CAACf,gBAAgB,EAAE,MAAK;QAChE,IAAInN,yBAAyB,EAAE,EAAE;UAC/ByN,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzB,SAAC,MAAM;UACLA,iBAAiB,CAAC,KAAK,CAAC,CAAA;AAC1B,SAAA;AACF,OAAC,CAAC,CAAA;AACFO,MAAAA,UAAU,CAACrL,IAAI,CAACwL,UAAU,CAAC,CAAA;AAC7B,KAAA;AACA,IAAA,OAAO,MAAK;MACVH,UAAU,CAAClC,OAAO,CAAEsC,EAAE,IAAKA,EAAE,IAAIA,EAAE,EAAE,CAAC,CAAA;KACvC,CAAA;AACH,GAAC,EAAE,CAACV,qBAAmB,CAAC,CAAC,CAAA;AAEzBtG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIiH,UAAkB,CAAA;AACtB,IAAA,IAAIT,cAAc,IAAIzN,MAAM,CAAC2N,QAAQ,EAAE;AACrC,MAAA,MAAMQ,QAAQ,GAAGA,CAACC,OAAe,EAAEC,OAAgB,KAAI;AACrD,QAAA,IAAIA,OAAO,EAAE;UACXH,UAAU,GAAGE,OAAO,CAACF,UAAU,CAAA;UAE/B,IAAIpB,yBAAyB,EAAE,EAAE;YAC/BM,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAC9B,WAAA;AAEA;AACA;AACA;AACA;AAEA;UACA,IAAIvN,yBAAyB,EAAE,EAAE;YAC/ByN,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzB,WAAA;AACF,SAAA;OACD,CAAA;MAEDtN,MAAM,CAAC2N,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAEQ,QAAQ,CAAC,CAAA;AAClD,KAAA;AAEA;AACA,IAAA,OAAO,MAAK;AACV,MAAA,IAAInO,MAAM,CAAC2N,QAAQ,IAAIO,UAAU,EAC/BlO,MAAM,CAAC2N,QAAQ,CACb,qBAAqB,EACrB,CAAC,EACAU,OAAO,IAAI;AACVvM,QAAAA,OAAO,CAACC,KAAK,CAACsM,OAAO,CAAC,CAAA;OACvB,EACDH,UAAU,CACX,CAAA;KACJ,CAAA;AACH,GAAC,EAAE,CAACT,cAAc,CAAC,CAAC,CAAA;EAEpB,OAAO;IACLN,mBAAmB;IACnBE,cAAc;yBACdE,qBAAmB;AACnBE,IAAAA,cAAAA;GACD,CAAA;AACH,CAAC;;ACpIM,MAAMa,4BAA4B,GAErCA,CAAC;EACH9E,MAAM;EACNH,UAAU;AACV6D,EAAAA,gBAAgB,GAAG,IAAI;EACvBqB,oBAAoB,GAAGA,MAAO,EAAA;AAC/B,CAAA,KAAI;EACH,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG3H,QAAQ,CAAkB,IAAI,CAAC,CAAA;EACnE,MAAM,CAAC4H,mBAAmB,EAAEC,sBAAsB,CAAC,GACjD7H,QAAQ,CAAqB,IAAI,CAAC,CAAA;EAEpC,MAAM;IAAEuG,cAAc;AAAEF,IAAAA,mBAAAA;GAAqB,GAAGF,WAAW,CAAC;AAC1DC,IAAAA,gBAAAA;AACD,GAAA,CAAC,CAAA;AAEFjG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIuC,MAAM,EAAE;AACV;AAEA,MAAA,IAAI6D,cAAc,EAAE;AAClBoB,QAAAA,aAAa,CAACjF,MAAM,CAACoF,sBAAsB,CAAC,CAAA;AAC9C,OAAC,MAAM;AACLH,QAAAA,aAAa,CAACjF,MAAM,CAACqF,uBAAuB,CAAC,CAAA;AAC/C,OAAA;AACF,KAAA;AACF,GAAC,EAAE,CAACxB,cAAc,CAAC,CAAC,CAAA;AAEpBpG,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIuH,UAAU,IAAIM,KAAK,CAACC,OAAO,CAACP,UAAU,CAAC,EAAE;MAC3CG,sBAAsB,CACpBH,UAAU,CAAC9B,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAI;QAClC,OACEtF,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,EACGF,IAAI,EACLrF,KAAI,CAAAC,aAAA,CAAA,GAAA,EAAA,IAAA,EAAAwE,YAAY,CAACa,OAAO,EAAE2B,oBAAoB,CAAC,CAAK,CACnD,CAAA;AAEP,OAAC,EAAEjH,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,CAAK,CAAC,CACV,CAAA;AACH,KAAA;AACF,GAAC,EAAE,CAAC2B,UAAU,CAAC,CAAC,CAAA;AAEhBvH,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIyH,mBAAmB,IAAIvB,mBAAmB,EAAE;AAC9C9D,MAAAA,UAAU,CAAC;AAAEmB,QAAAA,UAAU,EAAE,IAAI;AAAED,QAAAA,OAAO,EAAE,KAAA;AAAO,OAAA,CAAC,CAAA;AAClD,KAAA;AACF,GAAC,EAAE,CAACmE,mBAAmB,EAAEvB,mBAAmB,CAAC,CAAC,CAAA;AAE9C,EAAA,OAAOuB,mBAAmB,CAAA;AAC5B,CAAC;;ACpDM,MAAMM,+BAA+B,GAExCA,CAAC;EAAExF,MAAM;EAAEH,UAAU;EAAEkF,oBAAoB,GAAGA,QAAO;AAAC,CAAE,KAAI;EAC9D,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG3H,QAAQ,CAAkB,IAAI,CAAC,CAAA;EACnE,MAAM,CAAC4H,mBAAmB,EAAEC,sBAAsB,CAAC,GACjD7H,QAAQ,CAAqB,IAAI,CAAC,CAAA;AAEpCG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIuC,MAAM,EAAE;AACViF,MAAAA,aAAa,CAACjF,MAAM,CAACgF,UAAU,CAAC,CAAA;AAClC,KAAA;AACF,GAAC,EAAE,CAAChF,MAAM,CAAC,CAAC,CAAA;AAEZvC,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIuH,UAAU,IAAIM,KAAK,CAACC,OAAO,CAACP,UAAU,CAAC,EAAE;MAC3CG,sBAAsB,CACpBH,UAAU,CAAC9B,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAI;QAClC,OACEtF,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,EACGF,IAAI,EACLrF,KAAI,CAAAC,aAAA,CAAA,GAAA,EAAA,IAAA,EAAAwE,YAAY,CAACa,OAAO,EAAE2B,oBAAoB,CAAC,CAAK,CACnD,CAAA;AAEP,OAAC,EAAEjH,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAuF,QAAA,EAAA,IAAA,CAAK,CAAC,CACV,CAAA;AACH,KAAA;AACF,GAAC,EAAE,CAAC2B,UAAU,CAAC,CAAC,CAAA;AAEhBvH,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIyH,mBAAmB,EAAE;AACvBrF,MAAAA,UAAU,CAAC;AAAEmB,QAAAA,UAAU,EAAE,IAAI;AAAED,QAAAA,OAAO,EAAE,KAAA;AAAO,OAAA,CAAC,CAAA;AAClD,KAAA;AACF,GAAC,EAAE,CAACmE,mBAAmB,CAAC,CAAC,CAAA;AAEzB,EAAA,OAAOA,mBAAmB,CAAA;AAC5B,CAAC;;AC7BM,MAAMO,YAAY,GAA8BA,CAAC;AACtD5F,EAAAA,UAAU,GAAGA,MAAK,EAAG;AACrB6D,EAAAA,gBAAgB,GAAG,IAAI;EACvBqB,oBAAoB,GAAIW,EAAE,IAAM,EAAA;AACjC,CAAA,KAAI;EACH,MAAM,CAACR,mBAAmB,EAAEC,sBAAsB,CAAC,GACjD7H,QAAQ,CAAqB,IAAI,CAAC,CAAA;EACpC,MAAM,CAACwE,QAAQ,EAAE6D,WAAW,CAAC,GAAGrI,QAAQ,EAAyB,CAAA;AACjE;AAEAG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,CAAC,YAAW;AACV,MAAA,MAAMuC,MAAM,GAAG,MAAM6B,SAAS,EAAE,CAAA;MAChC8D,WAAW,CAAC3F,MAAM,CAAC,CAAA;MAEnB,IAAI,CAACA,MAAM,EAAE;AACX1H,QAAAA,OAAO,CAACmI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AAClC,OAAA;AACF,KAAC,GAAG,CAAA;GACL,EAAE,EAAE,CAAC,CAAA;AAENhD,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIqE,QAAQ,EAAE;AACZ;AAEA;AACA,MAAA,IAAI,mBAAmB,IAAIA,QAAQ,IAAIA,QAAQ,CAAC8D,iBAAiB,EAAE;AACjE;AACA;AACA;AACAT,QAAAA,sBAAsB,CACpBrH,oBAACgH,4BAA4B,EAAA;AAC3B9E,UAAAA,MAAM,EAAE8B,QAAQ;AAChB4B,UAAAA,gBAAgB,EAAEA,gBAAgB;AAClC7D,UAAAA,UAAU,EAAEA,UAAU;AACtBkF,UAAAA,oBAAoB,EAAEA,oBAAAA;AACtB,SAAA,CAAA,CACH,CAAA;AACH,OAAC,MAAM,IAAI,YAAY,IAAIjD,QAAQ,EAAE;AACnCqD,QAAAA,sBAAsB,CACpBrH,KAAC,CAAAC,aAAA,CAAAyH,+BAA+B,EAC9B;AAAAxF,UAAAA,MAAM,EAAE8B,QAAQ;AAChBjC,UAAAA,UAAU,EAAEA,UAAU;AACtBkF,UAAAA,oBAAoB,EAAEA,oBAAAA;AAAoB,SAAA,CAC1C,CACH,CAAA;AACH,OAAC,MAAM;AACLzM,QAAAA,OAAO,CAACmI,KAAK,CAAC,gBAAgB,CAAC,CAAA;AACjC,OAAA;AACF,KAAA;AACF,GAAC,EAAE,CAACqB,QAAQ,CAAC,CAAC,CAAA;AAEd,EAAA,IAAIoD,mBAAmB,EAAE;AACvB,IAAA,OAAOpH,KAAkB,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAA,MAAA,cAAA,EAAA,eAAA;KAAiB,EAAAmH,mBAAmB,CAAO,CAAA;AACtE,GAAA;AAEA,EAAA,OAAOpH,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAA,IAAA,cAAA,EAAkB,uBAAA;AAAuB,GAAA,CAAO,CAAA;AACzD;;AC/EO,MAAM8H,yBAAyB,GAAG;AACvCC,EAAAA,SAAS,EAAE,mBAAmB;AAC9BC,EAAAA,YAAY,EAAE,sBAAsB;AACpCC,EAAAA,SAAS,EAAE,mBAAmB;AAC9BC,EAAAA,cAAc,EAAE,gBAAgB;AAChCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,kBAAkB,EAAE,oBAAoB;AACxCC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,aAAa,EAAE,eAAe;AAC9BC,EAAAA,iBAAiB,EAAE,yBAAyB;AAC5CC,EAAAA,UAAU,EAAE,kBAAkB;AAC9BC,EAAAA,qBAAqB,EAAE,6BAA6B;AACpDC,EAAAA,WAAW,EAAE,mBAAmB;AAChCC,EAAAA,gBAAgB,EAAE,wBAAA;;;;;"}
|
|
1
|
+
{"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxClosedCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkOptAnonConsentCookie.ts","../src/components/DEDisclosure/hooks/useOnetrust.ts","../src/components/DEDisclosure/DisclosureWithBannerStatus.tsx","../src/components/DEDisclosure/DisclosureWithoutBannerStatus.tsx","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["import type { ResponseStatusType } from '@washingtonpost/subs-sdk';\n\nexport 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\n// https://github.com/WashPost/subs-be-user-data-enrichment/blob/8e8f8460c59adbe9c83b50f368bff1d3300bfd6b/src/main/java/washpost/paywall/userdataenrichment/model/ResponseState.java#L19\nexport const DeleteAttributeState = {\n SUCCESS: '150',\n SYSTEM_ERROR: '151',\n INVALID_ATTRIBUTE_NAME: '152',\n INVALID_ATTRIBUTE_NOT_EXISTS: '153',\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\nexport interface IProfileResponse {\n status: ResponseStatusType;\n state: (typeof AttributesState)[keyof typeof AttributesState];\n attributes: {\n [key: string]: {\n attribute_name: string;\n value: string | null;\n date_created: number;\n last_modified_date: number;\n };\n };\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 { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxClosedCookie = () => {\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 { checkAlertBoxClosedCookie } from '../components/DEDisclosure/utils/checkAlertBoxClosedCookie';\n\n/**\n * Checks privacy cookies to decide if we can send up 1pd\n * If US, checks that wp_usp exists\n * Else If OptAnonConsent cookie exists, checks the value of targeting cookies consent\n * Else If EEA, always returns true\n * Else, returns false\n * @returns {boolean}\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 if (window.pageType === 'onboarding') {\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (\n typeof gdprAllowTargarting === 'boolean' &&\n checkAlertBoxClosedCookie()\n ) {\n return gdprAllowTargarting;\n }\n\n // Downstream systems\n // Checking for window.pageType === 'onboarding' to avoid being true on graphics articles etc for now -- MNI-710\n if (intl_region === 'EEA' && window.pageType === 'onboarding') {\n return true;\n }\n }\n\n return false;\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n DEFAULT_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport type { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\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: DEFAULT_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 }\n return [];\n } catch (e) {\n console.debug(e);\n return [];\n }\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","import {\n ENDPOINTS,\n DEFAULT_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport type { ResponseStatusType } from '@washingtonpost/subs-sdk';\nimport { type 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: DEFAULT_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()) {\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 }\n return sendToGA({ submitData, source });\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 type { 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 = `${ENDPOINTS.base}/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 type {\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;\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 = (\n str: string,\n onLinkClick: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void\n) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str, onLinkClick = () => {}) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str, i) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n key={`privacy-link-${i}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n onClick={(e) => onLinkClick(e)}\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\nexport const checkOptanonConsentCookie = () => {\n const value = getCookie(COOKIE) || '';\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport type { ICookieStore } from '@washingtonpost/subs-sdk';\nimport { listenToCookieStore as listenToCookieStoreUtil } from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxClosedCookie } from '../utils/checkAlertBoxClosedCookie';\nimport { checkOptanonConsentCookie } from '../utils/checkOptAnonConsentCookie';\n\nconst CONSENT_COOKIE = 'OptanonConsent';\n\nconst ALERT_BOX_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 useOnetrust = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [consentCookieExists, setConsentCookieExists] = useState<\n boolean | undefined\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 (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n\n if (checkAlertBoxClosedCookie()) {\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 const cleanupFns: ((() => void) | null)[] = [];\n if (listenToCookieStore && window.cookieStore) {\n const cleanupFn = listenToCookieStoreUtil(CONSENT_COOKIE, () => {\n if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\n });\n cleanupFns.push(cleanupFn);\n\n const cleanupFn2 = listenToCookieStoreUtil(ALERT_BOX_COOKIE, () => {\n if (checkAlertBoxClosedCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n cleanupFns.push(cleanupFn2);\n }\n return () => {\n cleanupFns.forEach((fn) => fn && fn());\n };\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 if (checkOptanonConsentCookie()) {\n setConsentCookieExists(true);\n }\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 (checkAlertBoxClosedCookie()) {\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 {\n consentCookieExists,\n alertBoxClosed,\n listenToCookieStore,\n listenToTcfApi,\n };\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOnetrust } from './hooks/useOnetrust';\n\ninterface DEDisclosureWithBannerStatusProps {\n config: DisclosureConfigValue;\n allowCookieStore?: boolean;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithBannerStatus: React.FC<\n DEDisclosureWithBannerStatusProps\n> = ({\n config,\n onFinished,\n allowCookieStore = true,\n onPrivacyPolicyClick = () => {},\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n const { alertBoxClosed, consentCookieExists } = useOnetrust({\n allowCookieStore,\n });\n\n useEffect(() => {\n if (config) {\n // step 3: set disclosure based on config\n\n if (alertBoxClosed) {\n setDisclosure(config.disclosure_afterbanner);\n } else {\n setDisclosure(config.disclosure_beforebanner);\n }\n }\n }, [alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering && consentCookieExists) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering, consentCookieExists]);\n\n return disclosureRendering;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { hydrateLinks } from './utils/hydrateLinks';\n\ninterface DEDisclosureWithoutBannerStatusProps {\n config: DisclosureConfigValue;\n onFinished: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\n}\n\nexport const DEDisclosureWithoutBannerStatus: React.FC<\n DEDisclosureWithoutBannerStatusProps\n> = ({ config, onFinished, onPrivacyPolicyClick = () => {} }) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n\n useEffect(() => {\n if (config) {\n setDisclosure(config.disclosure);\n }\n }, [config]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce(\n (prev, current) => (\n <>\n {prev}\n <p>{hydrateLinks(current, onPrivacyPolicyClick)}</p>\n </>\n ),\n <></>\n )\n );\n }\n }, [disclosure]);\n\n useEffect(() => {\n if (disclosureRendering) {\n onFinished({ isFinished: true, isError: false });\n }\n }, [disclosureRendering]);\n\n return disclosureRendering;\n};\n","import type { ReactEventHandler } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport type { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { DEDisclosureWithBannerStatus } from './DisclosureWithBannerStatus';\nimport { DEDisclosureWithoutBannerStatus } from './DisclosureWithoutBannerStatus';\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 onPrivacyPolicyClick?: ReactEventHandler<HTMLAnchorElement>;\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 onPrivacyPolicyClick = (_e) => {},\n}) => {\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 setDisclosureRendering(\n <DEDisclosureWithBannerStatus\n config={myConfig}\n allowCookieStore={allowCookieStore}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else if ('disclosure' in myConfig) {\n setDisclosureRendering(\n <DEDisclosureWithoutBannerStatus\n config={myConfig}\n onFinished={onFinished}\n onPrivacyPolicyClick={onPrivacyPolicyClick}\n />\n );\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig]);\n\n if (disclosureRendering) {\n return <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>;\n }\n\n return <div data-test-id=\"de-disclosure-loading\"></div>;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n JOB_TITLE: 'profile_job_title',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n ROLE: 'profile_edu_role',\n MAJOR: 'profile_edu_major',\n GRADUATION_YEAR: 'profile_edu_graduation_year',\n} as const;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","DeleteAttributeState","SYSTEM_ERROR","INVALID_ATTRIBUTE_NAME","INVALID_ATTRIBUTE_NOT_EXISTS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxClosedCookie","length","hasRequiredPrivacyCookies","window","intl_region","country_code","countryCode","WPGeo","pageType","gdprAllowTargarting","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","DEFAULT_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","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","remoteConfig","Object","keys","forEach","configKey","split","toLowerCase","_","hydrateLinks","str","onLinkClick","array","chunks","i","rel","className","href","onClick","toReturn","reduce","prev","current","Fragment","checkOptanonConsentCookie","CONSENT_COOKIE","ALERT_BOX_COOKIE","useOnetrust","allowCookieStore","consentCookieExists","setConsentCookieExists","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFns","cleanupFn","listenToCookieStoreUtil","cleanupFn2","fn","listenerId","callback","_tcData","success","DEDisclosureWithBannerStatus","onPrivacyPolicyClick","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","DEDisclosureWithoutBannerStatus","DEDisclosure","_e","setMyConfig","checkBannerStatus","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","JOB_TITLE","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION","ROLE","MAJOR","GRADUATION_YEAR"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.5.0",
|
|
3
3
|
"license": "UNLICENSED",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@types/enzyme": "^3.10.18",
|
|
59
59
|
"@types/jest": "^29.5.11",
|
|
60
60
|
"@types/lodash": "^4.14.170",
|
|
61
|
-
"@cfaester/enzyme-adapter-react-18": "^0.
|
|
61
|
+
"@cfaester/enzyme-adapter-react-18": "^0.8.0",
|
|
62
62
|
"babel-loader": "^9.1.3",
|
|
63
63
|
"enzyme": "^3.11.0",
|
|
64
64
|
"enzyme-to-json": "^3.6.2",
|