@washingtonpost/subs-de-inputs 1.0.0-react18.1 → 1.0.0-react18.10

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.
@@ -1,4 +1,4 @@
1
- import { getCookie, WPGeo, JSON_HEADERS, ResponseStatus, ENDPOINTS } from '@washingtonpost/subs-sdk';
1
+ import { getCookie, WPGeo, JSON_HEADERS, ResponseStatus, ENDPOINTS, isLoggedIn, listenToCookieStore } from '@washingtonpost/subs-sdk';
2
2
  import React, { useState, useEffect } from 'react';
3
3
  import { Icon, theme, Select, styled } from '@washingtonpost/wpds-ui-kit';
4
4
  import { useWindowSize, useScript, ScriptStatus } from '@washingtonpost/subs-hooks';
@@ -39,7 +39,7 @@ const hasRequiredPrivacyCookies = () => {
39
39
  return !!(wp_usp && countryCode === 'US');
40
40
  };
41
41
 
42
- const base = `${ENDPOINTS.base}/de/v1`;
42
+ const base$1 = `${ENDPOINTS.base}/de/v1`;
43
43
  const attributesCache = {};
44
44
  const getAttributes = async ({
45
45
  fieldName
@@ -49,7 +49,7 @@ const getAttributes = async ({
49
49
  }
50
50
  const fieldNames = [fieldName];
51
51
  try {
52
- const url = new URL(`${base}/attributes`);
52
+ const url = new URL(`${base$1}/attributes`);
53
53
  url.searchParams.set('attributes', fieldNames.join(','));
54
54
  const data = await fetch(url.toString(), {
55
55
  credentials: 'include',
@@ -68,34 +68,55 @@ const getAttributes = async ({
68
68
  return [];
69
69
  }
70
70
  };
71
+
72
+ const sendGAEvent = props => {
73
+ if (typeof window === 'undefined') {
74
+ if (process.env.NODE_ENV !== "production") console.warn('NO WINDOW');
75
+ return;
76
+ }
77
+ // Initialize dataLayer if needed
78
+ window.dataLayer = window.dataLayer || [];
79
+ const eventData = {
80
+ ...props
81
+ };
82
+ window.dataLayer.push(eventData);
83
+ };
84
+ const sendToGA = async ({
85
+ submitData: {
86
+ fieldName,
87
+ value
88
+ },
89
+ source
90
+ }) => {
91
+ sendGAEvent({
92
+ event: 'site-onpage-click',
93
+ action: 'site-onpage-click',
94
+ category: 'profile',
95
+ label: fieldName,
96
+ 'de-label': fieldName,
97
+ [fieldName]: value,
98
+ section: 'profile',
99
+ subsection: source
100
+ });
101
+ return true;
102
+ };
103
+
104
+ const base = `${ENDPOINTS.base}/de/v1`;
71
105
  const ingest = async ({
72
106
  submitData: {
73
107
  fieldName,
74
108
  value
75
109
  },
76
- type = IngestType.IMPLICIT,
77
110
  source
78
111
  }) => {
79
112
  const url = `${base}/ingest`;
80
113
  const wapo_login_id = getCookie('wapo_login_id');
81
- if (!hasRequiredPrivacyCookies()) {
82
- throw new Error('does not satisfy cookie check');
83
- }
84
- let attributeInfo = attributesCache[fieldName];
85
- if (!attributeInfo) {
86
- attributeInfo = await getAttributes({
87
- fieldName
88
- });
89
- }
90
- if (attributeInfo[0] && attributeInfo[0].name === fieldName && attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT) {
91
- throw new Error('do not collect');
92
- }
93
114
  const jucid = localStorage.getItem('uuid');
94
115
  const ga = getCookie('_ga');
95
116
  const payload = {
96
117
  jucid,
97
118
  ga,
98
- type,
119
+ type: IngestType.EXPLICIT,
99
120
  wapo_login_id,
100
121
  // TODO: move this to BE to read from cookie headers
101
122
  data: {
@@ -120,6 +141,50 @@ const ingest = async ({
120
141
  }
121
142
  };
122
143
 
144
+ const isAnonymousWebview = () => {
145
+ if (typeof window === 'undefined') {
146
+ return false;
147
+ }
148
+ const wp_wv = getCookie('wp_wv');
149
+ return !!(wp_wv && !isLoggedIn());
150
+ };
151
+
152
+ const push = async ({
153
+ submitData,
154
+ source
155
+ }) => {
156
+ if (!hasRequiredPrivacyCookies()) {
157
+ throw new Error('does not satisfy cookie check');
158
+ }
159
+ if (isAnonymousWebview()) {
160
+ throw new Error('does not satisfy cookie check');
161
+ }
162
+ const {
163
+ fieldName
164
+ } = submitData;
165
+ const attributeInfo = await getAttributes({
166
+ fieldName
167
+ });
168
+ if (attributeInfo[0] && attributeInfo[0].name === fieldName && attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT) {
169
+ throw new Error('do not collect');
170
+ }
171
+ const type = attributeInfo[0] && attributeInfo[0].explicit === true ? IngestType.EXPLICIT : IngestType.IMPLICIT;
172
+ if (!attributeInfo[0] && process.env.NODE_ENV !== "production") {
173
+ console.warn(`no attribute info found for ${fieldName}, assuming implicit`);
174
+ }
175
+ if (type === IngestType.EXPLICIT) {
176
+ return ingest({
177
+ submitData,
178
+ source
179
+ });
180
+ } else {
181
+ return sendToGA({
182
+ submitData,
183
+ source
184
+ });
185
+ }
186
+ };
187
+
123
188
  const StyledMobileSelect = /*#__PURE__*/styled('select', {
124
189
  padding: '12px 16px 12px 6px',
125
190
  display: 'flex',
@@ -292,16 +357,14 @@ const DESelect = ({
292
357
  const submitSelected = async () => {
293
358
  try {
294
359
  var _window2;
295
- // TODO: Log to GA?
296
360
  const result = await ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.__twpdeu) === null || _window2 === void 0 ? void 0 : _window2.push({
297
361
  submitData: {
298
362
  fieldName,
299
363
  value: selected
300
364
  },
301
- type: config !== null && config !== void 0 && config.explicit ? IngestType.EXPLICIT : IngestType.IMPLICIT,
302
365
  source
303
366
  }));
304
- const isError = result ? result.status !== ResponseStatus.SUCCESS : true;
367
+ const isError = result === true ? false : result ? result.status !== ResponseStatus.SUCCESS : true;
305
368
  onFinished({
306
369
  isFinished: true,
307
370
  isError
@@ -325,7 +388,8 @@ const DESelect = ({
325
388
  disabled: true
326
389
  } : {};
327
390
  // sort and filter out archived values
328
- const values = config ? config.values.sort((a, b) => a.order - b.order).filter(value => value.archived !== true).filter(valuesFilter) : [];
391
+ // Note: config.values may be readonly
392
+ const values = config ? [...config.values].sort((a, b) => a.order - b.order).filter(value => value.archived !== true).filter(valuesFilter) : [];
329
393
  return React.createElement(SelectWrapper, null, children && React.createElement(Select.Root, {
330
394
  onValueChange: e => {
331
395
  setSelected(e);
@@ -367,5 +431,186 @@ const SelectWrapper = /*#__PURE__*/styled('div', {
367
431
  }
368
432
  });
369
433
 
370
- export { AttributesState, CollectionBehaviors, DESelect, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, ingest };
434
+ const configSrc = `${ENDPOINTS.base === 'https://subscribe.washingtonpost.com' ? 'https://www.washingtonpost.com/subscribe' : ENDPOINTS.base}/config/de/disclosure.json`;
435
+ const getConfig = async () => {
436
+ let myConfig = undefined;
437
+ // step 1: fetch config
438
+ const response = await fetch(configSrc);
439
+ const remoteConfig = await response.json();
440
+ // step 2: figure out which part of the config to use
441
+ // if country- or region-specific config found, use that
442
+ const {
443
+ country_code,
444
+ intl_region
445
+ } = WPGeo();
446
+ Object.keys(remoteConfig).forEach(configKey => {
447
+ if (country_code && configKey.split('|').includes(country_code.toLowerCase())) {
448
+ myConfig = remoteConfig[configKey];
449
+ } else if (intl_region === 'EEA' && configKey === 'eea') {
450
+ myConfig = remoteConfig[configKey];
451
+ }
452
+ });
453
+ // TODO: Check for billing country also
454
+ // else if no country-specific config, use the default config
455
+ if (typeof myConfig === 'undefined' && remoteConfig['_']) {
456
+ myConfig = remoteConfig['_'];
457
+ }
458
+ return myConfig;
459
+ };
460
+
461
+ const hydrateLinks = str => {
462
+ const array = str.split(/({{PRIVACY_POLICY}})/g);
463
+ const chunks = array.map(str => {
464
+ if (str === '{{PRIVACY_POLICY}}') {
465
+ return React.createElement("a", {
466
+ target: "_blank",
467
+ style: {
468
+ color: 'inherit'
469
+ },
470
+ className: "underline",
471
+ href: "https://www.washingtonpost.com/privacy-policy/"
472
+ }, "Privacy Policy");
473
+ }
474
+ return str;
475
+ });
476
+ const toReturn = chunks.reduce((prev, current) => React.createElement(React.Fragment, null, prev, current), React.createElement(React.Fragment, null));
477
+ return toReturn;
478
+ };
479
+
480
+ const COOKIE$1 = 'OptanonAlertBoxClosed';
481
+ const checkCookie = () => {
482
+ const value = getCookie(COOKIE$1) || '';
483
+ // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
484
+ // "Invalid date" is 12 characters long
485
+ return value.length > 12;
486
+ };
487
+
488
+ const COOKIE = 'OptanonAlertBoxClosed';
489
+ const useOneTrustAlertBoxClosed = ({
490
+ allowCookieStore
491
+ }) => {
492
+ const [alertBoxClosed, setAlertBoxClosed] = useState();
493
+ const [listenToCookieStore$1, setListenToCookieStore] = useState(false);
494
+ const [listenToTcfApi, setListenToTcfApi] = useState(false);
495
+ useEffect(() => {
496
+ var _window;
497
+ if (checkCookie()) {
498
+ setAlertBoxClosed(true);
499
+ return;
500
+ }
501
+ if (!window.__tcfapi) {
502
+ console.warn('warning: __tcfapi not found');
503
+ }
504
+ if ((_window = window) !== null && _window !== void 0 && _window.cookieStore && allowCookieStore) {
505
+ setListenToCookieStore(true);
506
+ } else if (window.__tcfapi) {
507
+ setListenToTcfApi(true);
508
+ } else {
509
+ console.warn('warning: neither cookieStore nor __tcfapi found');
510
+ }
511
+ }, []);
512
+ useEffect(() => {
513
+ let cleanupFn = () => {};
514
+ if (listenToCookieStore$1 && window.cookieStore) {
515
+ cleanupFn = listenToCookieStore(COOKIE, () => {
516
+ if (checkCookie()) {
517
+ setAlertBoxClosed(true);
518
+ }
519
+ });
520
+ }
521
+ return cleanupFn || (() => {});
522
+ }, [listenToCookieStore$1]);
523
+ useEffect(() => {
524
+ let listenerId;
525
+ if (listenToTcfApi && window.__tcfapi) {
526
+ const callback = (_tcData, success) => {
527
+ if (success) {
528
+ listenerId = _tcData.listenerId;
529
+ // tcData.eventStatus can be:
530
+ // tcloaded means user has made a choice and we’re ready to check it
531
+ // cmpuishown means the banner is shown
532
+ // useractioncomplete means the user has interacted with the banner
533
+ // but actually if the result for any of these is true, we just use the value of the cookie
534
+ if (checkCookie()) {
535
+ setAlertBoxClosed(true);
536
+ }
537
+ }
538
+ };
539
+ window.__tcfapi('addEventListener', 2, callback);
540
+ }
541
+ // cleanup fn
542
+ return () => {
543
+ if (window.__tcfapi && listenerId) window.__tcfapi('removeEventListener', 2, success => {
544
+ console.debug(success);
545
+ }, listenerId);
546
+ };
547
+ }, [listenToTcfApi]);
548
+ return {
549
+ alertBoxClosed,
550
+ listenToCookieStore: listenToCookieStore$1,
551
+ listenToTcfApi
552
+ };
553
+ };
554
+
555
+ const DEDisclosure = ({
556
+ onFinished = () => {},
557
+ allowCookieStore = true
558
+ }) => {
559
+ const [disclosure, setDisclosure] = useState(null);
560
+ const [disclosureRendering, setDisclosureRendering] = useState(null);
561
+ const [myConfig, setMyConfig] = useState();
562
+ const {
563
+ alertBoxClosed
564
+ } = useOneTrustAlertBoxClosed({
565
+ allowCookieStore
566
+ });
567
+ useEffect(() => {
568
+ (async () => {
569
+ const config = await getConfig();
570
+ setMyConfig(config);
571
+ if (!config) {
572
+ console.error('No config found');
573
+ }
574
+ })();
575
+ }, []);
576
+ useEffect(() => {
577
+ if (myConfig) {
578
+ // step 3: set disclosure based on config
579
+ // if config says to check onetrust, check onetrust
580
+ if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {
581
+ // check if onetrust is closed
582
+ // if it is, show the after banner disclosure
583
+ // if it is not, show the before banner disclosure
584
+ if (alertBoxClosed) {
585
+ setDisclosure(myConfig.disclosure_afterbanner);
586
+ } else {
587
+ setDisclosure(myConfig.disclosure_beforebanner);
588
+ }
589
+ } else if ('disclosure' in myConfig) {
590
+ setDisclosure(myConfig.disclosure);
591
+ } else {
592
+ console.error('Invalid config');
593
+ }
594
+ }
595
+ }, [myConfig, alertBoxClosed]);
596
+ useEffect(() => {
597
+ if (disclosure && Array.isArray(disclosure)) {
598
+ setDisclosureRendering(disclosure.reduce((prev, current) => {
599
+ return React.createElement(React.Fragment, null, prev, React.createElement("p", null, hydrateLinks(current)));
600
+ }, React.createElement(React.Fragment, null)));
601
+ // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?
602
+ onFinished({
603
+ isFinished: true,
604
+ isError: false
605
+ });
606
+ }
607
+ }, [disclosure]);
608
+ return disclosure === null ? React.createElement("div", {
609
+ "data-test-id": "de-disclosure-loading"
610
+ }) : React.createElement("div", {
611
+ "data-test-id": "de-disclosure"
612
+ }, disclosureRendering);
613
+ };
614
+
615
+ export { AttributesState, CollectionBehaviors, DEDisclosure, DESelect, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, push };
371
616
  //# sourceMappingURL=subs-de-inputs.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/dataEnrichment.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: 'string';\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: Array<AttributeValue>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport {\n Attribute,\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { hasRequiredPrivacyCookies } from '../utils/hasRequiredPrivacyCookies';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n type = IngestType.IMPLICIT,\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n let attributeInfo = attributesCache[fieldName];\n if (!attributeInfo) {\n attributeInfo = await getAttributes({ 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 jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n type?: (typeof IngestType)[keyof typeof IngestType];\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n {...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, IngestType } from '../../interfaces';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n // TODO: Log to GA?\n\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n type: config?.explicit ? IngestType.EXPLICIT : IngestType.IMPLICIT,\n source,\n });\n\n const isError = 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 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"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","_WPGeo","window","wp_usp","getCookie","countryCode","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","ingest","submitData","value","type","source","wapo_login_id","Error","attributeInfo","name","collection_behavior","jucid","localStorage","getItem","ga","payload","metadata","response","method","body","JSON","stringify","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","label","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","createElement","target","style","map","key","Icon","size","fill","gray80","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","warn","ScriptStatus","READY","submitSelected","_window2","result","push","explicit","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection"],"mappings":";;;;;;AAQO,MAAMA,mBAAmB,GAAG;AACjCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,cAAc,EAAE,gBAAA;EACR;AAcH,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,OAAO,EAAE,KAAA;EACD;AAEH,MAAMC,UAAU,GAAG;AACxBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,QAAQ,EAAE,UAAA;EACF;AAEH,MAAMC,mBAAmB,GAAG;AACjCJ,EAAAA,OAAO,EAAE,KAAK;AACdK,EAAAA,YAAY,EAAE,KAAK;AACnBC,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;AACpCf,EAAAA,cAAc,EAAE,KAAA;;;AC3CLgB,MAAAA,yBAAyB,GAAGA,MAAK;AAAA,EAAA,IAAAC,MAAA,CAAA;AAC5C,EAAA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,MAAMC,MAAM,GAAGC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAElC,EAAA,MAAMC,WAAW,GAAA,CAAAJ,MAAA,GAAGK,KAAK,EAAE,MAAA,IAAA,IAAAL,MAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,MAAA,CAASM,YAAY,CAAA;AAEzC,EAAA,OAAO,CAAC,EAAEJ,MAAM,IAAIE,WAAW,KAAK,IAAI,CAAC,CAAA;AAC3C;;ACEA,MAAMG,IAAI,GAAG,CAAA,EAAGC,SAAS,CAACD,KAAY,MAAA,CAAA,CAAA;AAEtC,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,IAAiB,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,YAAAA;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,CAAC1C,OAAO,EAAE;AACrD,MAAA,MAAM2C,UAAU,GAAGJ,IAAI,CAACI,UAAU,IAAI,EAAE,CAAA;AACxCnB,MAAAA,eAAe,CAACE,SAAS,CAAC,GAAGiB,UAAU,CAAA;AACvC,MAAA,OAAOA,UAAU,CAAA;AACnB,KAAC,MAAM;AACL,MAAA,OAAO,EAAE,CAAA;AACX,KAAA;GACD,CAAC,OAAOC,CAAC,EAAE;AACVC,IAAAA,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC,CAAA;AAChB,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AACF,EAAC;AAQYG,MAAAA,MAAM,GAAe,OAAO;AACvCC,EAAAA,UAAU,EAAE;IAAEtB,SAAS;AAAEuB,IAAAA,KAAAA;GAAO;EAChCC,IAAI,GAAGjD,UAAU,CAACE,QAAQ;AAC1BgD,EAAAA,MAAAA;AACD,CAAA,KAAI;AACH,EAAA,MAAMvB,GAAG,GAAM,CAAAN,EAAAA,KAAa,OAAA,CAAA,CAAA;AAE5B,EAAA,MAAM8B,aAAa,GAAGlC,SAAS,CAAC,eAAe,CAAC,CAAA;AAEhD,EAAA,IAAI,CAACJ,yBAAyB,EAAE,EAAE;AAChC,IAAA,MAAM,IAAIuC,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAClD,GAAA;AAEA,EAAA,IAAIC,aAAa,GAAG9B,eAAe,CAACE,SAAS,CAAC,CAAA;EAC9C,IAAI,CAAC4B,aAAa,EAAE;IAClBA,aAAa,GAAG,MAAM7B,aAAa,CAAC;AAAEC,MAAAA,SAAAA;AAAS,KAAE,CAAC,CAAA;AACpD,GAAA;EAEA,IACE4B,aAAa,CAAC,CAAC,CAAC,IAChBA,aAAa,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK7B,SAAS,IACnC4B,aAAa,CAAC,CAAC,CAAC,CAACE,mBAAmB,KAAK5D,mBAAmB,CAACE,cAAc,EAC3E;AACA,IAAA,MAAM,IAAIuD,KAAK,CAAC,gBAAgB,CAAC,CAAA;AACnC,GAAA;AAEA,EAAA,MAAMI,KAAK,GAAGC,YAAY,CAACC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC1C,EAAA,MAAMC,EAAE,GAAG1C,SAAS,CAAC,KAAK,CAAC,CAAA;AAE3B,EAAA,MAAM2C,OAAO,GAAG;IACdJ,KAAK;IACLG,EAAE;IACFV,IAAI;IACJE,aAAa;AAAE;AACfnB,IAAAA,IAAI,EAAE;MACJ,CAACP,SAAS,GAAG,CAACuB,KAAK,CAAA;KACpB;AACDa,IAAAA,QAAQ,EAAE;AAAEX,MAAAA,MAAAA;AAAQ,KAAA;GACrB,CAAA;EAED,IAAI;AACF,IAAA,MAAMY,QAAQ,GAAG,MAAM7B,KAAK,CAACN,GAAG,EAAE;AAChCoC,MAAAA,MAAM,EAAE,MAAM;AACd5B,MAAAA,WAAW,EAAE,SAAS;AACtBC,MAAAA,OAAO,EAAEC,YAAY;AACrB2B,MAAAA,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACN,OAAO,CAAA;AAC7B,KAAA,CAAC,CAAA;AAEF,IAAA,MAAMtB,IAAI,GAAG,MAAMwB,QAAQ,CAACxB,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;;ACjGA,MAAMwB,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;EACFC,KAAK;EACLC,MAAM;AACNC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,YAAY;AACZC,EAAAA,QAAQ,GAAGA,MAAK,EAAG;AACnBf,EAAAA,QAAQ,GAAG,KAAA;AAAK,CACD,KAAI;EACnB,MAAM,CAACgB,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,GAAGtB,QAAQ,GAAG;AAAEA,IAAAA,QAAQ,EAAE,IAAA;GAAM,GAAG,EAAE,CAAA;AAEvD;EACA,MAAMuB,gBAAgB,GAAGP,MAAM,GAC3B;AAAEF,IAAAA,YAAY,EAAEE,MAAAA;GAAQ,GACxBF,YAAY,GACZ;AAAEA,IAAAA,YAAAA;GAAc,GAChB,EAAE,CAAA;EAEN,MAAMU,sBAAsB,GAAIhE,KAAa,IAAI;AAC/C,IAAA,IAAIwD,MAAM,EAAE;MACV,OAAOxD,KAAK,KAAKwD,MAAM,GAAG;AAAES,QAAAA,QAAQ,EAAE,IAAA;OAAM,GAAG,EAAE,CAAA;AACnD,KAAA;IACA,OAAOjE,KAAK,KAAKsD,YAAY,GAAG;AAAEW,MAAAA,QAAQ,EAAE,IAAA;KAAM,GAAG,EAAE,CAAA;GACxD,CAAA;AAED,EAAA,OAAON,YAAY,GACjBO,oBAACvB,mBAAmB,EAAA,IAAA,EAClBuB,KAAC,CAAAC,aAAA,CAAAhD,kBAAkB,EACjB;AAAA+B,IAAAA,EAAE,EAAC,EAAE;AACLG,IAAAA,QAAQ,EAAEA,QAAQ;IAClBE,QAAQ,EAAG5D,CAAC,IAAK8D,SAAS,CAAC9D,CAAC,CAACyE,MAAM,CAACpE,KAAK,CAAC;IAAA,GACtC8D,YAAAA;AAAY,GAAA,EAEhBI,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQhB,KAAK,CAAS,EACtBe,KAAA,CAAAC,aAAA,CAACnB,kBAAkB,EACjB;AAAAhD,IAAAA,KAAK,EAAC,EAAE;AACRwC,IAAAA,QAAQ,EACR,IAAA;AAAAyB,IAAAA,QAAQ;AACRI,IAAAA,KAAK,EAAE;AAAE3C,MAAAA,KAAK,EAAE,SAAA;AAAW,KAAA;AAAA,GAAA,EAE1ByB,KAAK,CACa,EACpBC,MAAM,CAACkB,GAAG,CAAEtE,KAAK,IAChBkE,KAAA,CAAAC,aAAA,CAACnB,kBAAkB,EAAA;AACjBhD,IAAAA,KAAK,EAAEA,KAAK;AACZuE,IAAAA,GAAG,EAAEvE,KAAK;IAAA,GACNgE,sBAAsB,CAAChE,KAAK,CAAA;GAE/B,EAAAA,KAAK,CAET,CAAC,CACiB,EACrBkE,KAAA,CAAAC,aAAA,CAACK,IAAI,EACH;AAAArB,IAAAA,KAAK,EAAC,EAAE;AACRsB,IAAAA,IAAI,EAAC,KAAK;AACVC,IAAAA,IAAI,EAAEpC,KAAK,CAACC,MAAM,CAACoC,MAAM;AACzBN,IAAAA,KAAK,EAAE;AACLO,MAAAA,aAAa,EAAE,MAAM;AACrB3C,MAAAA,QAAQ,EAAE,UAAU;AACpB4C,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;AAAEpC,MAAAA,QAAQ,EAAE,UAAU;AAAE4C,MAAAA,KAAK,EAAE,MAAA;AAAM,KAAA;IAAM,CAC1D,CACa,GAEtBX,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACC,IAAI;AACVC,IAAAA,aAAa,EAAGxF,CAAC,IAAK8D,SAAS,CAAC9D,CAAC,CAAC;AAClC0D,IAAAA,QAAQ,EAAEA,QAAQ;AACd,IAAA,GAAAU,gBAAgB;OAChBD,YAAAA;GAAY,EAEhBI,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACG,OAAO,EAAe;IAAA,cAAA,EAAA,GAAGlC,EAAmB,CAAA,eAAA,CAAA;AAAA,GAAA,EAClDgB,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACI,KAAK,EAAA,IAAA,EAAElC,KAAK,CAAgB,EACpCe,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,EAAEnD,KAAK,CAACoD,QAAQ,CAACC,IAAAA;KAAM;IAAA,cAAA,EACnB,GAAAzC;AAEhB,GAAA,EAAAE,MAAM,CAACkB,GAAG,CAAEtE,KAAK,IAChBkE,KAAA,CAAAC,aAAA,CAACc,MAAM,CAACW,IAAI,EAAC;AAAA5F,IAAAA,KAAK,EAAEA,KAAK;AAAEuE,IAAAA,GAAG,EAAEvE,KAAAA;AAAK,GAAA,EAClCA,KAAK,CAET,CAAC,CACa,CAEpB,CAAA;AACH,CAAC;;AC9HD,MAAM6F,SAAS,GAAG,CAChBvH,EAAAA,SAAS,CAACwH,YAAY,KAAK,6CAA6C,GACpE,kDAAkD,GAClDxH,SAAS,CAACwH,aACS,uBAAA,CAAA,CAAA;AAElB,MAAMC,QAAQ,GAA4BA,CAAC;EAChD7F,MAAM;EACNzB,SAAS;EACT0E,KAAK;EACL6C,oBAAoB;EACpB1C,YAAY;EACZd,QAAQ;EACRyD,MAAM;AACN1C,EAAAA,QAAQ,GAAGA,MAAK,EAAG;AACnB2C,EAAAA,UAAU,GAAGA,QAAQ;EACrBC,YAAY,GAAGA,MAAM,IAAI;AACzBC,EAAAA,QAAAA;AAAQ,CACT,KAAI;EACH,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG5C,QAAQ,CAACsC,oBAAoB,CAAC,CAAA;EAE1D,MAAM,CAAC/B,QAAQ,EAAEsC,WAAW,CAAC,GAAG7C,QAAQ,CAAC,EAAE,CAAC,CAAA;AAE5C,EAAA,MAAM8C,YAAY,GAAGC,SAAS,CAACZ,SAAS,CAAC,CAAA;AAEzChC,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,MAAM6C,WAAW,GAAG,YAAW;MAC7B,IAAI;AAAA,QAAA,IAAAC,OAAA,CAAA;QACF,MAAMN,MAAM,GAAG,OAAAM,CAAAA,OAAA,GAAM5I,MAAM,MAAA,IAAA,IAAA4I,OAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,OAAA,GAANA,OAAA,CAAQC,QAAQ,MAAAD,IAAAA,IAAAA,OAAA,uBAAhBA,OAAA,CAAkBE,eAAe,CAAC;AAAEpI,UAAAA,SAAAA;AAAS,SAAE,CAAC,CAAA,CAAA;AACrE,QAAA,IAAI4H,MAAM,EAAE;AACVC,UAAAA,SAAS,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACtB,SAAC,MAAM;AACLzG,UAAAA,OAAO,CAACkH,KAAK,CAAC,sBAAsB,EAAErI,SAAS,CAAC,CAAA;AAClD,SAAA;OACD,CAAC,OAAOkB,CAAC,EAAE;QACVC,OAAO,CAACmH,IAAI,CAAC,sBAAsB,EAAEtI,SAAS,EAAEkB,CAAC,CAAC,CAAA;AACpD,OAAA;KACD,CAAA;IAED,IAAI6G,YAAY,KAAKQ,YAAY,CAACC,KAAK,IAAI,EAAEb,QAAQ,IAAIC,MAAM,CAAC,EAAE;AAChEK,MAAAA,WAAW,EAAE,CAAA;AACf,KAAA;AACF,GAAC,EAAE,CAACF,YAAY,CAAC,CAAC,CAAA;AAElB3C,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,MAAMqD,cAAc,GAAG,YAAW;MAChC,IAAI;AAAA,QAAA,IAAAC,QAAA,CAAA;AACF;QAEA,MAAMC,MAAM,GAAG,OAAAD,CAAAA,QAAA,GAAMpJ,MAAM,MAAA,IAAA,IAAAoJ,QAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,QAAA,GAANA,QAAA,CAAQP,QAAQ,MAAAO,IAAAA,IAAAA,QAAA,uBAAhBA,QAAA,CAAkBE,IAAI,CAAC;AAC1CtH,UAAAA,UAAU,EAAE;YAAEtB,SAAS;AAAEuB,YAAAA,KAAK,EAAEiE,QAAAA;WAAU;AAC1ChE,UAAAA,IAAI,EAAEoG,MAAM,KAANA,IAAAA,IAAAA,MAAM,eAANA,MAAM,CAAEiB,QAAQ,GAAGtK,UAAU,CAACC,QAAQ,GAAGD,UAAU,CAACE,QAAQ;AAClEgD,UAAAA,MAAAA;AACD,SAAA,CAAC,CAAA,CAAA;AAEF,QAAA,MAAMqH,OAAO,GAAGH,MAAM,GAClBA,MAAM,CAAC5H,MAAM,KAAKC,cAAc,CAAC1C,OAAO,GACxC,IAAI,CAAA;AAERmJ,QAAAA,UAAU,CAAC;AACTsB,UAAAA,UAAU,EAAE,IAAI;AAChBD,UAAAA,OAAAA;AACD,SAAA,CAAC,CAAA;OACH,CAAC,OAAO5H,CAAC,EAAE;AACVuG,QAAAA,UAAU,CAAC;AACTsB,UAAAA,UAAU,EAAE,KAAK;AACjBD,UAAAA,OAAO,EAAE,IAAA;AACV,SAAA,CAAC,CAAA;AACJ,OAAA;KACD,CAAA;IAED,IAAIf,YAAY,KAAKQ,YAAY,CAACC,KAAK,IAAIhB,MAAM,IAAIhC,QAAQ,EAAE;AAC7DiD,MAAAA,cAAc,EAAE,CAAA;AAClB,KAAA;AACF,GAAC,EAAE,CAACV,YAAY,EAAEP,MAAM,CAAC,CAAC,CAAA;AAE1B,EAAA,MAAMlC,gBAAgB,GAAGT,YAAY,IAAI+C,MAAM,GAAG;AAAE/C,IAAAA,YAAAA;GAAc,GAAG,EAAE,CAAA;AAEvE,EAAA,MAAMmE,SAAS,GAAG,EAAErB,QAAQ,IAAIC,MAAM,CAAC,CAAA;AAEvC,EAAA,MAAMvC,YAAY,GAAGtB,QAAQ,IAAIiF,SAAS,GAAG;AAAEjF,IAAAA,QAAQ,EAAE,IAAA;GAAM,GAAG,EAAE,CAAA;AAEpE;AACA,EAAA,MAAMY,MAAM,GAAGiD,MAAM,GACjBA,MAAM,CAACjD,MAAM,CACVsE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CAAC,CACjCC,MAAM,CAAE9H,KAAK,IAAKA,KAAK,CAAC+H,QAAQ,KAAK,IAAI,CAAC,CAC1CD,MAAM,CAAC3B,YAAY,CAAC,GACvB,EAAE,CAAA;AAEN,EAAA,OACEjC,oBAAC8D,aAAa,EAAA,IAAA,EACX5B,QAAQ,IACPlC,KAAC,CAAAC,aAAA,CAAAc,MAAM,CAACC,IAAI,EACV;IAAAC,aAAa,EAAGxF,CAAC,IAAI;MACnB4G,WAAW,CAAC5G,CAAC,CAAC,CAAA;AACd4D,MAAAA,QAAQ,CAAC;AAAEvD,QAAAA,KAAK,EAAEL,CAAAA;AAAC,OAAE,CAAC,CAAA;KACvB;OACGoE,gBAAgB;IAAA,GAChBD,YAAAA;AAEH,GAAA,EAAAsC,QAAQ,CAEZ,EACA,CAACA,QAAQ,IAAI,CAACC,MAAM,IACnBnC,KAAC,CAAAC,aAAA,CAAAlB,QAAQ,EACP;AAAAC,IAAAA,EAAE,EAAE,SAAS;AACbC,IAAAA,KAAK,EAAE,YAAY;AACnBC,IAAAA,MAAM,EAAE,EAAE;AACVZ,IAAAA,QAAQ,EAAE,IAAA;AAAI,GAAA,CAEjB,EACA,CAAC4D,QAAQ,IAAIC,MAAM,IAClBnC,KAAC,CAAAC,aAAA,CAAAlB,QAAQ,EACP;IAAAC,EAAE,EAAEmD,MAAM,CAAC/F,IAAI;AACf6C,IAAAA,KAAK,EAAEA,KAAK,IAAIkD,MAAM,CAAC/F,IAAI;IAC3BiD,QAAQ,EAAG5D,CAAC,IAAI;MACd4G,WAAW,CAAC5G,CAAC,CAAC,CAAA;AACd4D,MAAAA,QAAQ,CAAC;AAAEvD,QAAAA,KAAK,EAAEL,CAAAA;AAAC,OAAE,CAAC,CAAA;KACvB;IACDyD,MAAM,EAAEA,MAAM,CAACkB,GAAG,CAAEtE,KAAK,IAAKA,KAAK,CAACM,IAAI,CAAC;AACzCgD,IAAAA,YAAY,EAAEA,YAAY;AAC1Bd,IAAAA,QAAQ,EAAEA,QAAAA;AACV,GAAA,CACH,CACa,CAAA;AAEpB,EAAC;AAED,MAAMwF,aAAa,gBAAG5G,MAAM,CAAC,KAAK,EAAE;AAClC6G,EAAAA,SAAS,EAAE,YAAY;AACvB3G,EAAAA,OAAO,EAAE,MAAM;AACf4G,EAAAA,YAAY,EAAE,MAAM;AACpBC,EAAAA,aAAa,EAAE,QAAQ;AACvB,EAAA,UAAU,EAAE;AACV9G,IAAAA,OAAO,EAAE,SAAA;GACV;AACD,EAAA,KAAK,EAAE;AAAE4G,IAAAA,SAAS,EAAE,YAAA;AAAc,GAAA;AACnC,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors.gray80}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","_WPGeo","window","wp_usp","getCookie","countryCode","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","createElement","target","style","map","key","Icon","size","fill","gray80","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","Fragment","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const isAnonymousWebview: () => boolean;
@@ -0,0 +1,14 @@
1
+ import { IngestResponseState } from '../interfaces';
2
+ import { ResponseStatus } from '@washingtonpost/subs-sdk';
3
+ export declare const push: PushType;
4
+ type PushType = ({ submitData: { fieldName, value }, source, }: {
5
+ submitData: {
6
+ fieldName: string;
7
+ value: string;
8
+ };
9
+ source: string;
10
+ }) => Promise<{
11
+ status: ResponseStatus;
12
+ state: (typeof IngestResponseState)[keyof typeof IngestResponseState];
13
+ } | null | true>;
14
+ export {};
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-react18.1",
2
+ "version": "1.0.0-react18.10",
3
3
  "license": "UNLICENSED",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -20,9 +20,9 @@
20
20
  "pre-push": "npm run prepublishOnly"
21
21
  },
22
22
  "peerDependencies": {
23
- "@washingtonpost/subs-sdk": "2.0.0-react18.13",
24
- "@washingtonpost/subs-hooks": "1.0.0-react18.16",
25
- "@washingtonpost/wpds-ui-kit": "2.1.2",
23
+ "@washingtonpost/subs-sdk": "^2.0.0-react18",
24
+ "@washingtonpost/subs-hooks": "^1.0.0-react18",
25
+ "@washingtonpost/wpds-ui-kit": "^2.3.1",
26
26
  "react": ">=18.2.0",
27
27
  "react-dom": ">=18.2.0"
28
28
  },
@@ -34,7 +34,7 @@
34
34
  {
35
35
  "name": "de-inputs: utils",
36
36
  "path": "dist/subs-de-inputs.esm.js",
37
- "import": "{ getAttributes, ingest }",
37
+ "import": "{ getAttributes, push }",
38
38
  "limit": "1.5 KB"
39
39
  },
40
40
  {
@@ -42,6 +42,12 @@
42
42
  "path": "dist/subs-de-inputs.esm.js",
43
43
  "import": "{ DESelect }",
44
44
  "limit": "2.5 KB"
45
+ },
46
+ {
47
+ "name": "de-inputs: DEDisclosure",
48
+ "path": "dist/subs-de-inputs.esm.js",
49
+ "import": "{ DEDisclosure }",
50
+ "limit": "1.5 KB"
45
51
  }
46
52
  ],
47
53
  "devDependencies": {