{"version":3,"file":"static/js/193.428b7652.chunk.js","mappings":"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","sources":["assets/fontawesome/solid/plus.svg","assets/plus.svg","assets/minus.svg","components/common/FaqsList/FaqsList.js","components/common/InputPagination/InputPagination.js","components/common/Resource/ResourceJumbo.js","components/common/Resource/ResourceSmall.js","components/icons/DataTableSortIcon.js","utilities/dataTableUtilities.js","hooks/useContentOverflowDetection.js","components/dataset/DataTable/DataTableCellContent.js","components/dataset/DataTable/DataTable.js","components/dataset/DataTable/DataTableDropdownMenu.js","components/dataset/DataTable/DataTableStatusBar.js","components/dataset/DatasetResources/DatasetResources.js"],"sourcesContent":["var _path;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPlus(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n fill: \"currentColor\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M240 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H176V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H240V80z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlus);\nexport default __webpack_public_path__ + \"static/media/plus.b83d134ba483bc667459224f4e44117c.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPlus(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"20px\",\n height: \"21px\",\n viewBox: \"0 0 20 21\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"2. Atom/Icon/Plus\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"3.-Molecule/FAQ/Accordion_Closed\",\n transform: \"translate(-691.000000, -7.000000)\",\n fill: \"#0071BC\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"FAQ/Accordion_Closed\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"2.-Atom/Icon/Plus\",\n transform: \"translate(691.000000, 7.500000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4285714,0 L11.428,8.571 L20,8.57142857 L20,11.4285714 L11.428,11.428 L11.4285714,20 L8.57142857,20 L8.571,11.428 L0,11.4285714 L0,8.57142857 L8.571,8.571 L8.57142857,0 L11.4285714,0 Z\"\n })))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlus);\nexport default __webpack_public_path__ + \"static/media/plus.bae004e4429382141801d443f21b34b8.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgMinus(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"20px\",\n height: \"3px\",\n viewBox: \"0 0 20 3\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"minus icon\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Active\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"XL-Tool_Landing_InHospital-Results_Hover\",\n transform: \"translate(-1067.000000, -4687.000000)\",\n fill: \"#0071BC\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"FAQs\",\n transform: \"translate(102.000000, 4585.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Expanded-FAQ\",\n transform: \"translate(273.000000, 86.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"2.-Atom/Icon/Minus\",\n transform: \"translate(692.000000, 7.500000)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"2.-Atom/Icon/Plus\",\n x: 0,\n y: 8.57142857,\n width: 20,\n height: 2.85714286\n }))))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMinus);\nexport default __webpack_public_path__ + \"static/media/minus.1b78eaf6e8614a8257a72a8cfdd32bd8.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Button from 'react-bootstrap/Button'\nimport Accordion from 'react-bootstrap/Accordion'\nimport Card from 'react-bootstrap/Card'\nimport take from 'lodash/take'\nimport configData from '../../../config'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport { Helmet, HelmetProvider } from 'react-helmet-async'\nimport { stripHTML } from '../../../services/formatters/global'\n\nimport plusIcon from '../../../assets/plus.svg'\nimport minusIcon from '../../../assets/minus.svg'\n\nimport './FaqsList.scss'\n\n// pull max FAQs to display on screen from config\nconst { faqDisplayLimit } = configData\n\nclass FaqsList extends Component {\n constructor (props) {\n super(props)\n\n const { faqs } = props\n\n this.state = {\n faqs: faqs.map(({\n fieldFaqQuestion: question,\n fieldFaqAnswer: { value: answer }\n }) => {\n return {\n question,\n answer,\n collapsed: true\n }\n }),\n allFaqsShown: faqs.length <= faqDisplayLimit\n }\n }\n\n handleDisplayAllFaqs = () => {\n this.setState({\n allFaqsShown: true\n })\n }\n\n toggleFaq (i) {\n const { faqs } = this.state\n faqs[i].collapsed = !faqs[i].collapsed\n this.setState({ faqs })\n }\n\n render () {\n const {\n faqs,\n allFaqsShown\n } = this.state\n\n const {\n className,\n header,\n leftColOffset\n } = this.props\n\n const faqsToDisplay = allFaqsShown ? faqs : take(faqs, faqDisplayLimit)\n\n const faqSchema = {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqsToDisplay.map(faq => ({\n '@type': 'Question',\n name: stripHTML(faq?.question),\n acceptedAnswer: {\n '@type': 'Answer',\n text: stripHTML(faq?.answer)\n }\n }))\n }\n\n return (\n <div className={cx('FaqsList', className)}>\n <HelmetProvider>\n <Helmet>\n <script type='application/ld+json'>\n {JSON.stringify(faqSchema)}\n </script>\n </Helmet>\n </HelmetProvider>\n\n <Container>\n <Row>\n <Col lg={{ offset: leftColOffset }}>\n <div className='FaqsList__inner'>\n <h2>{header}</h2>\n <Accordion>\n {faqsToDisplay.map(({\n question,\n collapsed,\n answer\n }, index) => (\n <Card key={index}>\n <div\n role='button'\n eventkey={index}\n // aria-expanded={!collapsed}\n aria-controls={`QuestionAccordionElement__${index}`}\n className='QuestionWrapper accordion-button collapsed card-header'\n onClick={() => this.toggleFaq(index)}\n >\n <div className='Question'>\n <div className='Question__prefix'>\n Q:\n </div>\n <div className='Question__content'>\n <h3>{question}</h3>\n </div>\n <div className='Question__suffix'>\n <img alt='' src={collapsed ? plusIcon : minusIcon} />\n </div>\n </div>\n </div>\n {/* <Accordion.Button\n as={Card.Header}\n className='QuestionWrapper'\n eventkey={index}\n onClick={() => this.toggleFaq(index)}\n >\n <div className='Question'>\n <div className='Question__prefix'>\n Q:\n </div>\n <div className='Question__content'>\n <h4>{question}</h4>\n </div>\n <div aria-expanded={collapsed ? 'false' : 'true'} className='Question__suffix'>\n <img alt='' src={collapsed ? plusIcon : minusIcon} />\n </div>\n </div>\n </Accordion.Button> */}\n <Accordion.Collapse eventKey={index} in={!collapsed} id={`QuestionAccordionElement__${index}`}>\n <Card.Body>\n <RichTextField\n className='Answer'\n content={answer}\n />\n </Card.Body>\n </Accordion.Collapse>\n </Card>\n ))}\n </Accordion>\n {\n !allFaqsShown &&\n <div className='ShowMoreContainer'>\n <Button onClick={this.handleDisplayAllFaqs}>\n {`Show more (${faqs.length - faqDisplayLimit})`}\n </Button>\n </div>\n }\n </div>\n </Col>\n </Row>\n </Container>\n\n </div>\n )\n }\n}\n\nFaqsList.propTypes = {\n className: PropTypes.string,\n header: PropTypes.string,\n faqs: PropTypes.arrayOf(PropTypes.shape({\n fieldFaqAnswer: PropTypes.shape({\n value: PropTypes.string.isRequired\n }),\n fieldFaqQuestion: PropTypes.string.isRequired\n })),\n leftColOffset: PropTypes.number\n}\n\nFaqsList.defaultProps = {\n header: 'Frequently Asked Questions',\n leftColOffset: 0\n}\n\nexport default FaqsList\n","import React, { useEffect, useMemo, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport CaretLeftRightIcon from '../../icons/CaretLeftRightIcon'\nimport Button from 'react-bootstrap/Button'\nimport Text from '../../common/Text/Text'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\nimport {\n getCurrentPage,\n getMaxPageNumber,\n getNewOffset\n} from '../../../utilities/paginationHelpers'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nimport './InputPagination.scss'\n\n// the window width below which to compare total param's length for style changes\nconst CONTENT_WIDTH_THRESHOLD = 400\n\nconst InputPagination = (props) => {\n const {\n isLoading,\n limit,\n onUpdateOffset,\n offset,\n total\n } = props\n const { isMobile, windowWidth } = useDisplayContext()\n const [pageNumberInput, setPageNumberInput] = useState(1)\n\n // dynamically resize input based on total length\n const inputWidth = useMemo(() => {\n const widthBasis = isMobile ? 15 : 16\n const minWidth = 76\n const dynamicWidth = total.toString().length * widthBasis\n\n return Math.max(minWidth, dynamicWidth)\n }, [total, isMobile])\n\n // generate page number based on prop changes\n useEffect(() => {\n setPageNumberInput(getCurrentPage(offset, limit))\n }, [offset, limit])\n\n // helpers\n const maxPage = getMaxPageNumber(total, limit)\n // flags to disable buttons based on current page\n const isNoPreviousPage = offset === 0\n const isNoNextPage = pageNumberInput === maxPage\n // when the total is huge, remove padding from buttons so content stays inline\n const totalExceedsThreshold = isMobile && windowWidth <= CONTENT_WIDTH_THRESHOLD && total.toString().length > 8\n\n // encapsulates the offset calculation for easier execution\n const handleGoToPage = (pageNumber) => {\n onUpdateOffset(getNewOffset(pageNumber, limit))\n }\n\n const handleInputChange = ({ target }) => {\n setPageNumberInput(target.value)\n }\n\n // go to first page\n const handleFirstClick = () => {\n handleGoToPage(1)\n }\n\n // go to last page\n const handleLastClick = () => {\n handleGoToPage(maxPage)\n }\n\n const handlePrevOnClick = () => {\n handleGoToPage(pageNumberInput - 1)\n }\n\n const handleNextOnClick = () => {\n handleGoToPage(pageNumberInput + 1)\n }\n\n /*\n when user presses enter\n sanitize user input then call parent function to update page\n */\n const handleEnterKeyPress = (e) => {\n if (e.key === 'Enter') {\n // sanitize user input by removing letters\n let safeValue = parseInt(pageNumberInput.toString().replace(/[^\\d]+/g, ''))\n\n // ensure at least 1 number exists\n if (!safeValue) safeValue = 1\n // floor check\n if (safeValue < 1) safeValue = 1\n // ceiling check\n if (safeValue > maxPage) safeValue = maxPage\n\n // stash any changes we made to user input\n if (safeValue !== pageNumberInput) {\n setPageNumberInput(safeValue)\n }\n handleGoToPage(safeValue)\n }\n }\n\n const isEmptyDisplay = maxPage <= 1\n\n function renderContent () {\n return (\n <>\n {!isMobile &&\n <Button\n variant='link'\n disabled={isNoPreviousPage}\n onClick={handleFirstClick}\n >\n <CaretLeftRightIcon direction='left' isDisabled={isNoPreviousPage} />\n First\n </Button>}\n <Button\n className={cx(\n 'InputPagination__previous',\n { isTrimmed: totalExceedsThreshold }\n )}\n variant='link'\n disabled={isNoPreviousPage}\n onClick={handlePrevOnClick}\n >\n <CaretLeftRightIcon direction='left' isDisabled={isNoPreviousPage} />\n {!isMobile && 'Previous'}\n </Button>\n <div className='InputPagination__input-box'>\n <input\n aria-label='Current Page'\n className='InputPagination__input'\n style={{ width: inputWidth }}\n type='text'\n onChange={handleInputChange}\n onKeyPress={handleEnterKeyPress}\n value={pageNumberInput}\n />\n <Text typeFace={isMobile ? 'Body/16pt/Black/L' : 'Rubik-Regular'} className='InputPagination__text-label'>\n {`of ${numberWithCommas(maxPage)}`}\n </Text>\n </div>\n <Button\n className={cx(\n 'InputPagination__next',\n { isTrimmed: totalExceedsThreshold }\n )}\n variant='link'\n disabled={isNoNextPage}\n onClick={handleNextOnClick}\n >\n {!isMobile && 'Next'}\n <CaretLeftRightIcon direction='right' isDisabled={isNoNextPage} />\n </Button>\n {!isMobile &&\n <Button\n variant='link'\n disabled={isNoNextPage}\n onClick={handleLastClick}\n >\n Last\n <CaretLeftRightIcon direction='right' isDisabled={isNoNextPage} />\n </Button>}\n </>\n )\n }\n\n return (\n <div className={cx('InputPagination', { empty: isEmptyDisplay })}>\n <div className='InputPagination__inner'>\n {!isLoading && renderContent()}\n </div>\n </div>\n )\n}\n\nInputPagination.propTypes = {\n isLoading: PropTypes.bool,\n limit: PropTypes.number.isRequired,\n total: PropTypes.number.isRequired,\n offset: PropTypes.number.isRequired,\n onUpdateOffset: PropTypes.func.isRequired\n}\n\nexport default InputPagination\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { getBorderColor } from './ResourceSmall'\nimport ExternalLinkIcon from '../../../components/icons/ExternalLinkIcon'\nimport { retainAccessToken } from '../../../utilities/linkHelpers'\nimport { isPreviewUrl } from '../../../utilities/routeHelpers'\n\nimport './ResourceJumbo.scss'\n\nconst ResourceJumbo = ({ type, text, linkText, linkHref, index, isExternal }) => {\n const isPreview = isPreviewUrl(linkHref)\n const isRelativePath = linkHref?.startsWith('/')\n let newUrl = linkHref\n\n if (isRelativePath && isPreview) {\n newUrl = '/preview' + linkHref\n newUrl = retainAccessToken(newUrl)\n }\n\n return (\n <LinkHandler\n className='ResourceJumbo__container'\n href={newUrl}\n noBs\n >\n <div className='ResourceJumbo jumbotron jumbotron-fluid' fluid='true' style={{ borderLeftColor: getBorderColor(index) }}>\n <h3 className='ResourceJumbo__type'>{type}</h3>\n <h4 className='ResourceJumbo__text'>{text}</h4>\n <p className='ResourceJumbo__pseudo-link'>{linkText} {isExternal && <ExternalLinkIcon />} </p>\n </div>\n </LinkHandler>\n )\n}\n\nResourceJumbo.propTypes = {\n index: PropTypes.number,\n type: PropTypes.string,\n text: PropTypes.string.isRequired,\n linkText: PropTypes.string,\n linkHref: PropTypes.string,\n isExternal: PropTypes.bool\n}\n\nResourceJumbo.defaultProps = {\n type: 'Resources',\n linkText: 'View Resource',\n linkHref: '/'\n}\n\nexport default ResourceJumbo\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../Text/Text'\nimport cx from 'classnames'\nimport LinkHandler from '../LinkHandler/LinkHandler'\nimport config from '../../../config'\nimport { combineClassObjects } from '../../../utilities/displayUtilities'\nimport ResourceCardHeading from './ResourceCardHeading'\n\nimport './ResourceSmall.scss'\n\n// top border cards have top color accent\nconst { wddseAccentColorPalette } = config\n// which only consists of first 6 colors in palette\nexport const resourceBorderAccents = wddseAccentColorPalette.slice(0, 7)\n\n/**\n * Determine accented border color to use based on position\n * @param {number} index\n */\nexport const getBorderColor = (index) => {\n if (typeof index !== 'number') return null\n\n const safeIndex = index % resourceBorderAccents.length\n return resourceBorderAccents[safeIndex]\n}\n\nconst baseClasses = {\n anchorContainer: 'ResourceSmall__container',\n container: 'ResourceSmall',\n containerInner: 'ResourceSmall__inner',\n type: 'ResourceSmall__small-text type',\n heading: 'ResourceSmall__heading',\n footerLabel: 'ResourceSmall__footer-label',\n footer: 'ResourceSmall__small-text footer'\n}\n\nconst ResourceSmall = (props) => {\n const {\n type,\n heading,\n index,\n slug,\n footer,\n classes\n } = props\n\n const style = { borderTopColor: getBorderColor(index) }\n const combinedClasses = combineClassObjects(baseClasses, classes)\n\n return (\n <LinkHandler className={combinedClasses.anchorContainer} href={slug} noBs>\n <div\n className={cx(combinedClasses.container, {\n isLight: true,\n isTopBorder: true\n })}\n style={style}\n >\n <div className={combinedClasses.containerInner}>\n {/* type added to resemble other card eyebrow structure */}\n {type &&\n <Text\n className={combinedClasses.type}\n typeFace='Small Text/MedGray'\n >\n {type}\n </Text>}\n {/* main card text */}\n <Text\n typeFace='Body/18pt/Black/L'\n className={combinedClasses.heading}\n >\n <ResourceCardHeading heading={heading} />\n </Text>\n {/* small footer text (date, View xxx) */}\n <Text\n className={combinedClasses.footer}\n typeFace='Body/16pt/MedGray'\n >\n {footer}\n </Text>\n </div>\n </div>\n </LinkHandler>\n )\n}\n\nResourceSmall.propTypes = {\n type: PropTypes.string,\n heading: PropTypes.string,\n slug: PropTypes.string,\n footer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object\n ]),\n // appends custom classes to the component's elements\n classes: PropTypes.shape({\n anchorContainer: PropTypes.string,\n container: PropTypes.string,\n containerInner: PropTypes.string,\n type: PropTypes.string,\n heading: PropTypes.string,\n footerLabel: PropTypes.string,\n footer: PropTypes.string\n }),\n index: PropTypes.number\n}\n\nResourceSmall.defaultProps = {\n index: null,\n classes: {}\n}\n\nexport default ResourceSmall\n","import React from 'react'\nimport cx from 'classnames'\nimport PropTypes from 'prop-types'\n\nimport './DataTableSortIcon.scss'\n\n// based on the faSort font awesome icon modified to have two path elements to allow painting multiple colors\nconst DataTableSortIcon = ({ direction, className }) => {\n return (\n <div className={cx('DataTableSortIcon__container')}>\n <svg\n aria-hidden='true'\n focusable='false'\n data-prefix='fas'\n data-icon='sort'\n className={cx('Arrow', 'SvgIcon', 'svg-inline--fa', 'fa-sort ', direction, className)}\n role='img'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 320 512'\n >\n <path\n fill='currentColor'\n d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'\n />\n <path\n fill='currentColor'\n d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'\n />\n </svg>\n </div>\n )\n}\n\nDataTableSortIcon.propTypes = {\n className: PropTypes.string,\n direction: PropTypes.oneOf(['up', 'down'])\n}\n\nDataTableSortIcon.defaultProps = {\n direction: 'down'\n}\n\nexport default DataTableSortIcon\n","import isEmpty from 'lodash/isEmpty'\nimport { numberWithCommas } from './searchPageHelpers'\n\nexport const ASC = 'ASC'\nexport const DESC = 'DESC'\nexport const TYPE_NUMERIC = 'NUMERIC'\nexport const TYPE_TEXT = 'TEXT'\nexport const TYPE_DATE = 'DATE'\nexport const ALIGN_LEFT = 'left'\nexport const ALIGN_CENTER = 'center'\nexport const ALIGN_RIGHT = 'right'\nexport const NO_SEPARATOR = '_none'\nexport const COMMA_SEPARATOR = 'comma'\nexport const STANDARD_FORMAT = 'standard'\nexport const PERCENT_FORMAT_DIVIDE = 'percentage_divide'\nexport const PERCENT_FORMAT_MULTIPLY = 'percentage_multiply'\nexport const PERCENT_FORMAT_NO_CHANGE = 'percentage'\nexport const CURRENCY_FORMAT = 'currency'\n\n/**\n * Format value for table display\n * @param {object} payload\n * @param {string} payload.value\n * @param {string} payload.type\n * @param {string} payload.format\n * @param {number} payload.numOfDecimalPlaces\n * @param {string} payload.thousandSeparator\n * @returns {string}\n */\nexport function getFormattedCellValue (payload = {}) {\n const {\n value,\n type\n } = payload\n\n if (isEmpty(value)) {\n return ''\n }\n\n switch (type) {\n case TYPE_NUMERIC:\n // ensure that value can be converted to number; if not, formatting method will break\n return isNaN(Number(value))\n ? value\n : formatNumberValue(payload)\n case TYPE_TEXT:\n default:\n // no formatting necessary for text\n return value\n }\n}\n\n/**\n * Format number value for table display\n * @param {object} payload\n * @param {string} payload.value\n * @param {string} payload.format\n * @param {number} payload.numOfDecimalPlaces\n * @param {string} payload.thousandSeparator\n * @returns {string}\n */\nfunction formatNumberValue (payload) {\n const {\n value = '',\n format = STANDARD_FORMAT,\n numOfDecimalPlaces: specifiedNumOfDecimalPlaces,\n thousandSeparator = NO_SEPARATOR\n } = payload\n\n const originalDecimal = value.split('.')[1]\n const originalDecimalLength = originalDecimal ? originalDecimal.length : 0\n let defaultNumOfDecimalPlaces\n\n const formattedValue = transformValue(\n value,\n // convert string value to number\n updatedValue => Number(updatedValue),\n // convert percentage if necessary (e.g., .1 -> 10) and adjust decimal precision\n updatedValue => {\n let newVal\n\n switch (format) {\n case PERCENT_FORMAT_MULTIPLY:\n // if decimal not specified, multiplying will move decimal 2 places to\n // right, thereby removing 2 places to the right of decimal\n newVal = updatedValue * 100\n defaultNumOfDecimalPlaces = Math.max(originalDecimalLength - 2, 0)\n break\n case PERCENT_FORMAT_DIVIDE:\n newVal = updatedValue / 100\n // if decimal not specified, dividing will move decimal 2 places to\n // left, thereby adding a 2 places to the right of decimal\n defaultNumOfDecimalPlaces = originalDecimalLength + 2\n break\n case PERCENT_FORMAT_NO_CHANGE:\n default:\n // non-percentages formats will land here as well\n newVal = updatedValue\n defaultNumOfDecimalPlaces = originalDecimalLength\n break\n }\n const finalDecimalNum = typeof specifiedNumOfDecimalPlaces === 'number'\n ? specifiedNumOfDecimalPlaces\n : defaultNumOfDecimalPlaces\n\n // ensure final decimal length is greater than or equal to 0\n return newVal.toFixed(Math.max(0, finalDecimalNum))\n },\n // finally, apply commas\n updatedValue => thousandSeparator === COMMA_SEPARATOR ? numberWithCommas(updatedValue) : updatedValue\n )\n\n switch (format) {\n case PERCENT_FORMAT_MULTIPLY:\n case PERCENT_FORMAT_DIVIDE:\n case PERCENT_FORMAT_NO_CHANGE:\n return `${formattedValue}%`\n case CURRENCY_FORMAT:\n return `$${formattedValue}`\n case STANDARD_FORMAT:\n default:\n return formattedValue\n }\n}\n\n/**\n * Helper for transforming initial value with a series of functions that are run\n * through a .reduce\n * @param {any} initialValue\n * @param {function[]} transformFns\n * @returns {any}\n */\nexport function transformValue (initialValue, ...transformFns) {\n return transformFns.reduce((updatedValue, transformFn) => {\n return transformFn(updatedValue)\n }, initialValue)\n}\n","import { useRef, useState, useLayoutEffect } from 'react'\n\n// It seems like when the content width is very close to the container width (e.g., 70px content width, 71px container width),\n// the CSS ellipsis gets toggled despite the measurements; therefore, when comparing the content width to the container width we need\n// to account for this behavior. Through trial and error, I found that a margin of 13 works; so now, for example,\n// if the content width is 60px and the container width is 70px, this hook would calculate that the content is overflowing.\nconst ellipsisTriggerMargin = 13\n\n/**\n * Hook used by both HeaderCellContent and BodyCellContent to determine whether to show\n * tooltip or dropdown menu\n * @param {number} cellWidth\n */\nexport default function useContentOverflowDetection (cellWidth, sortOrder) {\n const contentRef = useRef()\n const containerRef = useRef()\n const [isContentOverflowing, setIsContentOverflowing] = useState(false)\n\n useLayoutEffect(() => {\n const contentWidth = contentRef.current.clientWidth\n const containerWidth = containerRef.current.clientWidth\n setIsContentOverflowing(contentWidth + ellipsisTriggerMargin > containerWidth)\n // the cellWidth prop only changes when the user drags the column resize, so we also want to watch for\n // sortOrder change to trigger re-measurement, which reduces the width of the cell\n }, [cellWidth, sortOrder])\n\n return {\n isContentOverflowing,\n contentRef,\n containerRef\n }\n}\n","import React, { useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger'\nimport Tooltip from 'react-bootstrap/Tooltip'\nimport DataTableSortIcon from '../../icons/DataTableSortIcon'\nimport {\n getFormattedCellValue,\n ASC,\n DESC,\n TYPE_NUMERIC,\n TYPE_TEXT,\n TYPE_DATE,\n ALIGN_LEFT,\n ALIGN_CENTER,\n ALIGN_RIGHT,\n NO_SEPARATOR,\n COMMA_SEPARATOR,\n STANDARD_FORMAT,\n PERCENT_FORMAT_DIVIDE,\n PERCENT_FORMAT_MULTIPLY,\n PERCENT_FORMAT_NO_CHANGE,\n CURRENCY_FORMAT\n} from '../../../utilities/dataTableUtilities'\nimport useContentOverflowDetection from '../../../hooks/useContentOverflowDetection'\n\nimport './DataTableCellContent.scss'\n\nconst CellContent = (props) => {\n const {\n className,\n content,\n tooltip,\n alignment,\n onClick,\n id,\n containerRef,\n contentRef\n } = props\n\n function renderTooltip (tooltipProps) {\n return (\n <Tooltip\n {...tooltipProps}\n bsPrefix='CellContent__tooltip'\n arrowProps={{ style: { display: 'none' } }}\n >\n {tooltip}\n </Tooltip>\n )\n }\n\n function renderContentWithTooltip () {\n return (\n <OverlayTrigger\n flip\n placement='bottom'\n delay={{ show: 250, hide: 400 }}\n overlay={e => renderTooltip(e)}\n trigger={['hover', 'focus']}\n >\n {renderContent()}\n </OverlayTrigger>\n )\n }\n\n function renderContent () {\n return (\n <div ref={containerRef} id={id} className={cx('CellContent', className)} onClick={onClick}>\n <div className={cx('CellContent__content', alignment)}>{content}</div>\n <div ref={contentRef} className='CellContent__measure'>{content}</div>\n </div>\n )\n }\n\n return tooltip\n ? renderContentWithTooltip()\n : renderContent()\n}\n\nCellContent.propTypes = {\n id: PropTypes.string,\n className: PropTypes.string,\n content: PropTypes.string,\n tooltip: PropTypes.string,\n alignment: PropTypes.string,\n onClick: PropTypes.func,\n containerRef: PropTypes.object,\n contentRef: PropTypes.object\n}\n\nexport const HeaderCellContent = React.memo((props) => {\n const {\n schemaLookUp,\n width,\n header,\n isHeaderMenuOpen,\n sortOrder,\n onUpdateSortOrder,\n onRequestCloseHeaderMenu,\n onRequestOpenHeaderMenu,\n isMobile,\n direction,\n isSortActive,\n isLoading\n } = props\n\n const {\n contentRef,\n containerRef\n } = useContentOverflowDetection(width, sortOrder)\n\n function handleDropdownClick () {\n return isHeaderMenuOpen\n ? handleCloseDropdown\n : onRequestOpenHeaderMenu(header)\n }\n\n const handleCloseDropdown = useCallback(() => {\n onRequestCloseHeaderMenu()\n }, [onRequestCloseHeaderMenu])\n\n function handleToggleSortClick () {\n if (isLoading) {\n return\n }\n if (sortOrder === DESC) {\n onUpdateSortOrder(null, null)\n } else {\n const updatedSortOrder = sortOrder === ASC ? DESC : ASC\n onUpdateSortOrder(header, updatedSortOrder)\n }\n }\n\n const withDropdown = isMobile\n\n function insertLineBreaks (text, breakpoints) {\n if (!breakpoints || breakpoints?.length === 0) {\n return text\n }\n let foundBreakpoint = false\n let elementsAsStrings = text\n for (let i = 0; i < breakpoints.length; i++) {\n if (text.includes(breakpoints[i])) {\n foundBreakpoint = true\n }\n const regex = new RegExp(breakpoints[i], 'g')\n const characterWithBreaks = `zpqInsertBreakpointHerezpq${breakpoints[i]}zpqInsertBreakpointHerezpq`\n elementsAsStrings = elementsAsStrings.replace(regex, characterWithBreaks)\n }\n const chunks = elementsAsStrings.split('zpqInsertBreakpointHerezpq')\n const last = chunks.pop()\n return foundBreakpoint ? (\n <>\n {chunks.map(chunk => <>{chunk}<wbr /></>)}{last}\n </>\n ) : text\n }\n\n const headerWithBreaks = insertLineBreaks((schemaLookUp && schemaLookUp[header]?.title) ? schemaLookUp[header].title : header, ['_'])\n\n return (\n <div className='DataTable__header' onClick={withDropdown ? handleDropdownClick : handleToggleSortClick}>\n <div className='DataTable__headerText'>\n <CellContent\n id={header}\n className={cx({\n menuOpen: withDropdown && isHeaderMenuOpen,\n header: true\n })}\n tooltip={isMobile ? false : headerWithBreaks}\n content={headerWithBreaks}\n containerRef={containerRef}\n contentRef={contentRef}\n />\n </div>\n <div className={cx('DataTable__sort', { isActive: isSortActive })}>\n <DataTableSortIcon\n direction={direction}\n className='DataTable__sortOption'\n />\n </div>\n </div>\n )\n})\n\nHeaderCellContent.propTypes = {\n header: PropTypes.string,\n schemaLookUp: PropTypes.object,\n sortOrder: PropTypes.oneOf([ASC, DESC]),\n onUpdateSortOrder: PropTypes.func,\n isMobile: PropTypes.bool,\n width: PropTypes.number,\n isHeaderMenuOpen: PropTypes.bool,\n onRequestCloseHeaderMenu: PropTypes.func,\n onRequestOpenHeaderMenu: PropTypes.func,\n direction: PropTypes.string,\n isSortActive: PropTypes.bool,\n isLoading: PropTypes.bool\n}\n\nexport const BodyCellContent = (props) => {\n const {\n value,\n type,\n width,\n alignment,\n format,\n numOfDecimalPlaces,\n thousandSeparator\n } = props\n\n const {\n isContentOverflowing,\n contentRef,\n containerRef\n } = useContentOverflowDetection(width)\n\n const formattedValue = getFormattedCellValue({ value, type, format, numOfDecimalPlaces, thousandSeparator })\n\n return (\n <CellContent\n content={formattedValue}\n alignment={alignment}\n tooltip={isContentOverflowing ? formattedValue : null}\n containerRef={containerRef}\n contentRef={contentRef}\n />\n )\n}\n\nBodyCellContent.propTypes = {\n value: PropTypes.string,\n type: PropTypes.oneOf([TYPE_NUMERIC, TYPE_TEXT, TYPE_DATE]),\n alignment: PropTypes.oneOf([\n ALIGN_LEFT,\n ALIGN_RIGHT,\n ALIGN_CENTER\n ]),\n format: PropTypes.oneOf([\n STANDARD_FORMAT,\n PERCENT_FORMAT_DIVIDE,\n PERCENT_FORMAT_MULTIPLY,\n PERCENT_FORMAT_NO_CHANGE,\n CURRENCY_FORMAT\n ]),\n numOfDecimalPlaces: PropTypes.number,\n thousandSeparator: PropTypes.oneOf([\n NO_SEPARATOR,\n COMMA_SEPARATOR\n ]),\n width: PropTypes.number\n}\n\nBodyCellContent.defaultProps = {\n type: 'TEXT',\n alignment: 'left',\n format: STANDARD_FORMAT,\n numOfDecimalPlaces: 0,\n thousandSeparator: NO_SEPARATOR\n}\n","import React, { useMemo, useRef, useState, useEffect, useLayoutEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { ScrollSync, ScrollSyncPane } from 'react-scroll-sync'\nimport cx from 'classnames'\nimport isEmpty from 'lodash/isEmpty'\nimport Container from 'react-bootstrap/Container'\nimport Overlay from 'react-bootstrap/Overlay'\nimport Text from '../../common/Text/Text'\nimport { LoadingSpinner } from '../../common/LoadingCover/LoadingCover'\nimport { BodyCellContent, HeaderCellContent } from './DataTableCellContent'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport {\n useTable,\n useFlexLayout,\n useResizeColumns,\n useColumnOrder,\n usePagination\n} from 'react-table'\nimport {\n ASC,\n DESC\n} from '../../../utilities/dataTableUtilities'\n\nimport './DataTable.scss'\n\nconst DataTable = (props) => {\n const {\n headerGroups,\n columns,\n getTableBodyProps,\n rows,\n prepareRow,\n sort,\n onSetSort,\n isFullScreen,\n isLoading,\n windowHeight,\n columnTypes = {},\n columnFormatting = {},\n isMobile,\n schemaLookUp\n } = props\n const [openColumnMenu, setOpenColumnMenu] = useState(null)\n const [isSorting, setIsSorting] = useState(false)\n const tableRef = useRef()\n const tableBodyRef = useRef()\n const resizingColumnIndex = columns.findIndex(column => column.isResizing)\n\n function handleUpdateColumnSort (columnHeader, updatedSortOrder) {\n onSetSort({\n sortBy: columnHeader,\n sortOrder: updatedSortOrder\n })\n setIsSorting(true)\n }\n\n function handleSortAscClick (e) {\n handleUpdateColumnSort(openColumnMenu, ASC)\n handleRequestCloseHeaderMenu()\n }\n\n function handleSortDescClick (e) {\n handleUpdateColumnSort(openColumnMenu, DESC)\n handleRequestCloseHeaderMenu()\n }\n\n function handleSortDefaultClick (e) {\n handleUpdateColumnSort(null, null)\n handleRequestCloseHeaderMenu()\n }\n\n function handleRequestOpenHeaderMenu (columnHeader) {\n setOpenColumnMenu(columnHeader)\n }\n\n function handleRequestCloseHeaderMenu () {\n setOpenColumnMenu(null)\n }\n\n function ensureColumnMenuClosed () {\n if (openColumnMenu) {\n handleRequestCloseHeaderMenu()\n }\n }\n\n useEffect(() => {\n if (!isSorting) {\n tableBodyRef.current.scrollTop = 0\n tableBodyRef.current.scrollLeft = 0\n } else {\n setIsSorting(false)\n }\n }, [rows])\n\n useEffect(() => {\n // close any open mobile column menu if desktop\n if (!isMobile) {\n setOpenColumnMenu(null)\n }\n }, [isMobile])\n\n function renderTableHeader () {\n return (headerGroups && (\n <div className='thead' style={{ minWidth: headerGroups[0]?.getHeaderGroupProps()?.style?.minWidth }}>\n {headerGroups.map((headerGroup, groupIndex) => (\n <div key={groupIndex} className='tr' {...headerGroup?.getHeaderGroupProps()}>\n {headerGroup?.headers?.map((column, colIndex) => {\n return (\n <div\n key={colIndex}\n className='th'\n {...column?.getHeaderProps()}\n >\n <HeaderCellContent\n schemaLookUp={schemaLookUp}\n header={column.Header}\n isHeaderMenuOpen={openColumnMenu === column.Header}\n onRequestOpenHeaderMenu={e => handleRequestOpenHeaderMenu(e)}\n onRequestCloseHeaderMenu={e => handleRequestCloseHeaderMenu(e)}\n sortOrder={sort.sortBy === column.Header ? sort.sortOrder : null}\n onUpdateSortOrder={(columnHeader, updatedSortOrder) => handleUpdateColumnSort(columnHeader, updatedSortOrder)}\n value={column.Header}\n width={column.width}\n isMobile={isMobile}\n direction={sort.sortOrder === ASC ? 'up' : 'down'}\n isSortActive={sort.sortBy === column.Header}\n isLoading={isLoading}\n />\n <div\n {...column.getResizerProps()}\n className={cx('resizer', { isResizing: column.isResizing })}\n />\n </div>\n )\n }\n )}\n </div>\n ))}\n <Overlay\n target={tableRef}\n show={!!(openColumnMenu)}\n onHide={e => handleRequestCloseHeaderMenu(e)}\n placement='top-start'\n rootClose\n rootCloseEvent='click'\n >\n {({ show: _show, ...overlayProps }) => {\n const divProps = { ...overlayProps }\n // prevents react warning for invalid dom element props\n delete divProps.arrowProps\n\n return (\n <div\n className='CellContent__dropdownContainer'\n {...divProps}\n >\n <div className='dropdown CellContent__dropdown'>\n <div className='dropdown-menu show' aria-labelledby={openColumnMenu}>\n <div className='dropdown-item header'>{openColumnMenu}</div>\n <div className={cx('dropdown-item', sort.sortOrder === null ? 'selected' : '')} onClick={e => handleSortDefaultClick(e)}>Sort Default</div>\n <div className={cx('dropdown-item', sort.sortOrder === ASC && sort.sortBy === openColumnMenu ? 'selected' : '')} onClick={e => handleSortAscClick(e)}>Sort Ascending</div>\n <div className={cx('dropdown-item', sort.sortOrder === DESC && sort.sortBy === openColumnMenu ? 'selected' : '')} onClick={e => handleSortDescClick(e)}>Sort Descending</div>\n </div>\n </div>\n </div>\n\n )\n }}\n </Overlay>\n </div>)\n )\n }\n\n function renderTableBody () {\n return (\n <div {...getTableBodyProps()} className='tbody'>\n {rows.map((row, rowIndex) => {\n prepareRow(row)\n return (\n <div key={rowIndex} {...row.getRowProps()} className='tr'>\n {row.cells.map((cell, cellIndex) => {\n const formatting = columnFormatting[cell.column.Header] || {}\n const numOfDecimalPlaces = isEmpty(formatting.decimal_places)\n ? null\n : Number(formatting.decimal_places)\n return (\n <div\n key={cellIndex}\n {...cell.getCellProps()}\n className={cx('td', { isResizing: resizingColumnIndex === cellIndex })}\n >\n <BodyCellContent\n type={columnTypes[cell.column.Header]}\n alignment={formatting.alignment}\n format={formatting.formatting}\n value={cell.value}\n numOfDecimalPlaces={numOfDecimalPlaces}\n thousandSeparator={formatting.thousand_separator}\n width={cell.column.width}\n />\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n )\n }\n\n function renderEmptyResults () {\n return (\n <div className='DataTable__emptyDisplay'>\n <Text className='results' typeFace='Body/16pt/Black/L'>Showing 0 results</Text>\n <Text className='heading' typeFace='03 H3/Black/L'>Sorry, no matches found.</Text>\n <Text className='description' typeFace='05 H5/Black/Regular/L'>Here are some search tips:</Text>\n <ul>\n <Text domElement='li' typeFace='Body/18pt/Black/L'>Make sure all words are spelled correctly.</Text>\n <Text domElement='li' typeFace='Body/18pt/Black/L'>Try one or two fewer criteria.</Text>\n </ul>\n </div>\n )\n }\n\n const [availableHeight, setAvailableHeight] = useState(1)\n const containerRef = useRef(null)\n const isEmptyResults = rows.length === 0\n const showEmptyResults = isEmptyResults && !isLoading\n\n useLayoutEffect(() => {\n if (isFullScreen) {\n const height = containerRef.current ? containerRef.current.parentElement.getBoundingClientRect().height : 1\n setAvailableHeight(height)\n }\n // trigger setting available height when isEmptyResultsChanges\n }, [isFullScreen, windowHeight, isEmptyResults])\n\n return (\n <ScrollSync vertical={false}>\n <div\n ref={containerRef}\n className={cx({\n DataTable: true,\n loading: isLoading,\n isResizing: resizingColumnIndex > -1,\n fullscreen: isFullScreen\n })}\n style={isFullScreen ? { height: `${availableHeight}px` } : {}}\n >\n <Container className='DataTable__container' fluid={isFullScreen || isMobile}>\n <div className='DataTable__loadingIndicator'>\n <LoadingSpinner className='DataTable__spinner' />\n </div>\n <div\n ref={tableRef}\n className='table'\n onScroll={e => ensureColumnMenuClosed(e)}\n >\n {/** table header */}\n <ScrollSyncPane>\n <div className={isFullScreen ? 'thead-scroll-container' : 'thead-container'}>\n {renderTableHeader()}\n </div>\n </ScrollSyncPane>\n {/** table body */}\n <ScrollSyncPane>\n <div\n className={isFullScreen ? 'tbody-scroll-container' : 'tbody-container'}\n onScroll={e => ensureColumnMenuClosed(e)}\n ref={tableBodyRef}\n >\n {!isEmptyResults && renderTableBody()}\n {showEmptyResults && isFullScreen && renderEmptyResults()}\n </div>\n </ScrollSyncPane>\n </div>\n {showEmptyResults && !isFullScreen && renderEmptyResults()}\n </Container>\n </div>\n </ScrollSync>\n )\n}\n\n// these props are essentially what is returned from react-table's useTable()\nDataTable.propTypes = {\n headerGroups: PropTypes.arrayOf(PropTypes.object),\n columns: PropTypes.arrayOf(PropTypes.shape({ isResizing: PropTypes.bool })),\n getTableBodyProps: PropTypes.func,\n rows: PropTypes.arrayOf(PropTypes.object),\n prepareRow: PropTypes.func,\n sort: PropTypes.shape({\n sortBy: PropTypes.string,\n sortOrder: PropTypes.oneOf([ASC, DESC])\n }),\n onSetSort: PropTypes.func,\n isFullScreen: PropTypes.bool,\n isLoading: PropTypes.bool,\n windowHeight: PropTypes.number,\n columnTypes: PropTypes.object,\n columnFormatting: PropTypes.object,\n isMobile: PropTypes.bool,\n schemaLookUp: PropTypes.object\n}\n\nconst defaultHeaders = []\n\n/**\n * Hook used for derriving react-table props, which is consumed by DataTable;\n * these params originate from the response for interactive data table\n * @param {object} data\n * @param {string[]} data.dataHeaders - array of strings\n * @param {object[]} data.dataRows - array of key/value objects where key is column name\n */\nexport const useReactTableProps = ({ dataHeaders = defaultHeaders, dataRows, isMobile }) => {\n const columns = useMemo(() => {\n return dataHeaders.map((header) => {\n if (isMobile) {\n return {\n Header: header,\n id: header,\n accessor: header,\n width: 148,\n minWidth: 148\n }\n }\n // 48px is the space allocated to the sort icon and resizer\n // 8 is the aproximate ratio between string length and rendered size in pixels with the current styling\n let width = header.length * 8 + 48\n if (width > 256) {\n width = 256\n } else if (width < 148) {\n width = 148\n }\n return {\n Header: header,\n id: header,\n accessor: header,\n width: width,\n minWidth: 148\n }\n })\n }, [dataHeaders, isMobile])\n const defaultColumn = React.useMemo(\n () => ({\n minWidth: 30,\n width: 500,\n maxWidth: 1000\n }), [])\n\n const reactTableProps = useTable(\n {\n columns,\n data: dataRows,\n defaultColumn,\n initialState: {\n columnOrder: columns.map(column => column.id)\n },\n manualPagination: true\n },\n useFlexLayout,\n useResizeColumns,\n useColumnOrder,\n usePagination\n )\n return reactTableProps\n}\n\nexport default function (props) {\n const { windowHeight, isMobile } = useDisplayContext()\n\n return (\n <DataTable\n {...props}\n isMobile={isMobile}\n windowHeight={windowHeight}\n />\n )\n}\n\nexport { DataTable }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Dropdown from 'react-bootstrap/Dropdown'\n\nimport './DataTableDropdownMenu.scss'\n\nconst DataTableDropdownMenu = ({ children, className, alignRight }) => {\n return (\n <Dropdown.Menu align={alignRight} className={cx('DataTableDropdownMenu', className)}>\n {children}\n </Dropdown.Menu>\n )\n}\n\nDataTableDropdownMenu.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.object,\n PropTypes.element\n ]),\n className: PropTypes.string,\n alignRight: PropTypes.bool\n}\n\nexport default DataTableDropdownMenu\n","import React, { useMemo, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Text from '../../common/Text/Text'\nimport Container from 'react-bootstrap/Container'\nimport Dropdown from 'react-bootstrap/Dropdown'\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger'\nimport Tooltip from 'react-bootstrap/Tooltip'\nimport { ReactComponent as CompressIcon } from '../../../assets/fontawesome/regular/compress.svg'\nimport { ReactComponent as ExpandIcon } from '../../../assets/fontawesome/regular/expand.svg'\nimport DataTableDropdownMenu from './DataTableDropdownMenu'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\n\nimport './DataTableStatusBar.scss'\n\nconst limitOptions = [10, 50, 100]\n\nconst DataTableStatusBar = (props) => {\n const {\n offset,\n limit,\n onSetLimit,\n numOfTotalResults,\n numOfFoundResults,\n filters = [],\n keywords = '',\n isFullScreen,\n isLoading,\n onSetFullScreen\n } = props\n\n const viewStart = offset\n const viewEnd = Math.min(offset + limit, numOfFoundResults)\n const startCount = numberWithCommas(numOfFoundResults === 0 ? 0 : viewStart + 1)\n const endCount = numberWithCommas(viewEnd)\n const totalCount = numberWithCommas(numOfTotalResults)\n const foundCount = numberWithCommas(numOfFoundResults)\n\n function handleToggleFullScreen () {\n onSetFullScreen(!isFullScreen)\n }\n\n useEffect(() => {\n function handleKeyPress (e) {\n if (e.key === 'Escape') {\n onSetFullScreen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyPress)\n\n return () => {\n document.removeEventListener('keydown', handleKeyPress)\n }\n }, [onSetFullScreen])\n\n const isOriginalCountShowing = useMemo(() => {\n return !!(\n keywords.length > 0 ||\n filters.length > 0\n )\n }, [filters, keywords])\n\n return (\n <Container fluid={isFullScreen} className={cx('DataTableStatusBar', { loading: isLoading })}>\n <div className='DataTableStatusBar__stats found'>\n <Text typeFace='Body/16pt/Black/L'>Displaying</Text>\n <span className='DataTableStatusBar__stat'>{` ${startCount} - ${endCount} `}</span>\n <Text typeFace='Body/16pt/Black/L'>of</Text>\n <span className='DataTableStatusBar__stat'> {` ${foundCount} `} </span>\n <Text typeFace='Body/16pt/Black/L'>rows</Text>\n {isOriginalCountShowing && (\n <span className='DataTableStatusBar__stats original'>\n <span className='divider'>|</span>\n <Text domElement='span' typeFace='Body/16pt/Black/L'>Originally</Text>\n <span className='DataTableStatusBar__stat'> {` ${totalCount} `} </span>\n <Text domElement='span' typeFace='Body/16pt/Black/L'>rows</Text>\n </span>\n )}\n </div>\n <div className='DataTableStatusBar__selectLimit'>\n <Text domElement='span' typeFace='Body/16pt/Black/L'>Rows per page:</Text>\n <Dropdown>\n <Dropdown.Toggle className='DataTableStatusBar__selectLimitButton' variant='default'>{limit}</Dropdown.Toggle>\n <DataTableDropdownMenu alignRight className='DataTableStatusBar__selectLimitMenu'>\n {limitOptions.map(limit => {\n return (\n <Dropdown.Item\n as='div'\n key={limit}\n onClick={() => onSetLimit(limit)}\n >\n {limit}\n </Dropdown.Item>\n )\n })}\n </DataTableDropdownMenu>\n </Dropdown>\n </div>\n <button\n aria-label={isFullScreen ? 'Exit fullscreen' : 'Fullscreen'}\n className='DataTableStatusBar__fullScreenBtn'\n onClick={e => handleToggleFullScreen(e)}\n >\n <OverlayTrigger\n flip\n disabled\n placement='top-start'\n delay={{ show: 250, hide: 250 }}\n overlay={(tooltipProps) => (\n <Tooltip\n {...tooltipProps}\n bsPrefix='CellContent__tooltip'\n arrowProps={{ style: { display: 'none' } }}\n >\n {isFullScreen ? 'Exit fullscreen' : 'Fullscreen'}\n </Tooltip>\n )}\n trigger={['hover', 'focus']}\n >\n <>\n {isFullScreen ? <CompressIcon /> : <ExpandIcon />}\n </>\n </OverlayTrigger>\n </button>\n </Container>\n )\n}\n\nDataTableStatusBar.propTypes = {\n offset: PropTypes.number,\n limit: PropTypes.number,\n keywords: PropTypes.string,\n filters: PropTypes.array,\n numOfTotalResults: PropTypes.number,\n numOfFoundResults: PropTypes.number,\n onSetLimit: PropTypes.func,\n isFullScreen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onSetFullScreen: PropTypes.func\n}\n\nexport default DataTableStatusBar\n","import React, { useState, useMemo } from 'react'\nimport PropTypes from 'prop-types'\nimport { useHistory } from 'react-router-dom'\nimport isEmpty from 'lodash/isEmpty'\nimport take from 'lodash/take'\nimport ListGroup from 'react-bootstrap/ListGroup'\nimport ListGroupItem from 'react-bootstrap/ListGroupItem'\nimport Button from 'react-bootstrap/Button'\nimport config from '../../../config'\nimport ResourceJumbo from '../../common/Resource/ResourceJumbo'\nimport ExternalLinkIcon from '../../../components/icons/ExternalLinkIcon'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\n\nimport './DatasetResources.scss'\n\nconst {\n datasetResourcesFeaturedTitle\n} = config\n\nexport const FEATURED_RESOURCE_TYPES = {\n methodology: 'Methodology',\n dataDictionary: 'Data Dictionary',\n glossary: 'Glossary'\n}\nconst FEATURED_RESOURCE_DISPLAY_LIMIT = 5\nconst FEATURED_RESOURCE_SORT_PREFERENCE = 'Methodology'\n\nconst featuredResourceTypes = Object.values(FEATURED_RESOURCE_TYPES)\n\nfunction getResourceHref (resource) {\n const {\n internalPageSlug,\n fileUrl,\n externalLinkUrl\n } = resource\n\n if (internalPageSlug) {\n return internalPageSlug\n } else if (fileUrl) {\n return fileUrl\n } else if (externalLinkUrl) {\n return externalLinkUrl\n } else {\n return '/'\n }\n}\n\nfunction containsInternalLink (resource) {\n return !!(resource.internalPageSlug)\n}\n\nfunction isExternalLink (resource) {\n return resource.type === 'External Link'\n}\n\nfunction displayResourceType (resource) {\n if (isExternalLink(resource)) {\n return 'Resource'\n } else {\n return resource.type\n }\n}\n\nconst DatasetResources = ({\n header,\n description,\n featuredTitle,\n resources: unfilteredResources,\n showAdditionalResources,\n isTools\n}) => {\n // split raw data into data structures\n const resources = unfilteredResources.filter(resource => resource.showOnResourcesSection)\n // filter for featured, sort by the config preferred sort order\n const featuredResources = resources\n .filter(resource => isTools ? resource.isFeatured : featuredResourceTypes.includes(resource.type))\n .sort((a) => a.type === FEATURED_RESOURCE_SORT_PREFERENCE ? -1 : 1)\n const additionalResources = resources.filter(resource => isTools ? !resource.isFeatured : !featuredResourceTypes.includes(resource.type))\n\n const [isResourceListExpanded, setIsResourceListOpen] = useState(false)\n\n // determine what to show based on data\n const allResourcesCount = showAdditionalResources\n ? featuredResources.length + additionalResources.length\n : featuredResources.length\n\n const hiddenResourcesCount = allResourcesCount - FEATURED_RESOURCE_DISPLAY_LIMIT\n return (\n <div className='DatasetResources'>\n {header && (\n <h2>{header}</h2>\n )}\n\n {description && (\n <div className='DatasetResources__text-section'>\n {description && (\n <RichTextField className='DatasetResources__text' content={description} />\n )}\n </div>\n )}\n\n {!isEmpty(featuredResources) &&\n <div className='DatasetResources__featured-section'>\n {/* When no header is present the featuredTitle becomes the SEO header */}\n {!header && <h2>{featuredTitle} ({allResourcesCount})</h2>}\n {header && <p>{featuredTitle} ({allResourcesCount})</p>}\n {take(featuredResources, hiddenResourcesCount > 0\n ? (isResourceListExpanded ? featuredResources.length : FEATURED_RESOURCE_DISPLAY_LIMIT)\n : featuredResources.length\n ).map((resource, index) => {\n let actionLabel\n const isExternal = isExternalLink(resource)\n\n if (isExternal) {\n actionLabel = 'View'\n } else {\n actionLabel = containsInternalLink(resource) ? 'View' : 'Download'\n }\n return (\n <ResourceJumbo\n key={index}\n index={index}\n text={resource.title || resource.externalLinkLabel}\n type='Featured Resource'\n linkText={`${actionLabel} ${displayResourceType(resource)}`}\n linkHref={getResourceHref(resource)}\n isExternal={isExternal}\n />\n )\n })}\n </div>}\n\n {showAdditionalResources && !isEmpty(additionalResources) && (featuredResources.length >= 5 ? isResourceListExpanded : true) &&\n <>\n <div className='DatasetResources__related-section'>\n <ListGroup variant='flush'>\n {take(additionalResources,\n hiddenResourcesCount > 0\n ? (isResourceListExpanded ? additionalResources.length : FEATURED_RESOURCE_DISPLAY_LIMIT - featuredResources.length)\n : additionalResources.length\n ).map((resource, index) => {\n let actionLabel\n const isExternal = isExternalLink(resource)\n\n if (isExternal) {\n actionLabel = 'View'\n } else {\n actionLabel = containsInternalLink(resource) ? 'View' : 'Download'\n }\n\n return (\n <ListGroupItem key={index} className='DatasetResources__related-item'>\n <div>\n <h4 className='DatasetResources__related-item-title'>\n {isExternal ? 'Related Link' : resource.type}\n </h4>\n <h5 className='DatasetResources__related-item-text'>{isExternal ? resource.externalLinkLabel : resource.title}</h5>\n </div>\n <LinkHandler href={getResourceHref(resource)}>\n <>\n {`${actionLabel} ${displayResourceType(resource)}`} {isExternal && <ExternalLinkIcon />}\n </>\n </LinkHandler>\n </ListGroupItem>\n )\n })}\n </ListGroup>\n </div>\n </>}\n {hiddenResourcesCount > 0 &&\n <div className='DatasetResources__related-section__show-more'>\n <Button onClick={() => setIsResourceListOpen(!isResourceListExpanded)}>\n {isResourceListExpanded ? 'Show Less' : `Show More (${hiddenResourcesCount})`}\n </Button>\n </div>}\n </div>\n )\n}\n\nDatasetResources.propTypes = {\n header: PropTypes.string,\n featuredTitle: PropTypes.string,\n description: PropTypes.string,\n resources: PropTypes.array,\n showAdditionalResources: PropTypes.bool,\n isTools: PropTypes.bool\n}\n\nDatasetResources.defaultProps = {\n featuredTitle: datasetResourcesFeaturedTitle\n}\n\nexport default (props) => {\n const history = useHistory()\n\n const memoProps = useMemo(() => {\n return {\n history,\n ...props\n }\n }, [history, props])\n\n return (\n <DatasetResources\n {...memoProps}\n />\n )\n}\n\nexport { DatasetResources }\n"],"names":["_path","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgPlus","_ref","svgRef","title","titleId","props","xmlns","viewBox","fill","ref","id","d","ForwardRef","faqDisplayLimit","configData","FaqsList","Component","constructor","super","handleDisplayAllFaqs","setState","allFaqsShown","faqs","state","map","fieldFaqQuestion","question","fieldFaqAnswer","value","answer","collapsed","toggleFaq","render","className","header","leftColOffset","faqsToDisplay","take","faqSchema","mainEntity","faq","name","stripHTML","acceptedAnswer","text","_jsxs","cx","children","_jsx","HelmetProvider","Helmet","type","JSON","stringify","Container","Row","Col","lg","offset","Accordion","_ref2","index","Card","role","eventkey","onClick","alt","src","plusIcon","minusIcon","Collapse","eventKey","in","Body","RichTextField","content","Button","defaultProps","isLoading","limit","onUpdateOffset","total","isMobile","windowWidth","useDisplayContext","pageNumberInput","setPageNumberInput","useState","inputWidth","useMemo","widthBasis","dynamicWidth","toString","Math","max","useEffect","getCurrentPage","maxPage","getMaxPageNumber","isNoPreviousPage","isNoNextPage","totalExceedsThreshold","handleGoToPage","pageNumber","getNewOffset","handleInputChange","handleFirstClick","handleLastClick","handlePrevOnClick","handleNextOnClick","handleEnterKeyPress","e","safeValue","parseInt","replace","isEmptyDisplay","empty","_Fragment","variant","disabled","CaretLeftRightIcon","direction","isDisabled","isTrimmed","style","width","onChange","onKeyPress","Text","typeFace","numberWithCommas","ResourceJumbo","linkText","linkHref","isExternal","isPreview","isPreviewUrl","isRelativePath","startsWith","newUrl","retainAccessToken","LinkHandler","href","noBs","fluid","borderLeftColor","getBorderColor","ExternalLinkIcon","wddseAccentColorPalette","config","resourceBorderAccents","slice","safeIndex","baseClasses","anchorContainer","container","containerInner","heading","footerLabel","footer","ResourceSmall","slug","classes","borderTopColor","combinedClasses","combineClassObjects","isLight","isTopBorder","ResourceCardHeading","DataTableSortIcon","focusable","ASC","DESC","NO_SEPARATOR","COMMA_SEPARATOR","STANDARD_FORMAT","PERCENT_FORMAT_DIVIDE","PERCENT_FORMAT_MULTIPLY","PERCENT_FORMAT_NO_CHANGE","CURRENCY_FORMAT","getFormattedCellValue","payload","undefined","isEmpty","isNaN","Number","format","numOfDecimalPlaces","specifiedNumOfDecimalPlaces","thousandSeparator","originalDecimal","split","originalDecimalLength","defaultNumOfDecimalPlaces","formattedValue","initialValue","_len","transformFns","Array","_key","reduce","updatedValue","transformFn","transformValue","newVal","finalDecimalNum","toFixed","formatNumberValue","useContentOverflowDetection","cellWidth","sortOrder","contentRef","useRef","containerRef","isContentOverflowing","setIsContentOverflowing","useLayoutEffect","contentWidth","current","clientWidth","containerWidth","CellContent","tooltip","alignment","renderContent","OverlayTrigger","flip","placement","delay","show","hide","overlay","renderTooltip","tooltipProps","Tooltip","bsPrefix","arrowProps","display","trigger","HeaderCellContent","React","_schemaLookUp$header","schemaLookUp","isHeaderMenuOpen","onUpdateSortOrder","onRequestCloseHeaderMenu","onRequestOpenHeaderMenu","isSortActive","handleCloseDropdown","useCallback","withDropdown","headerWithBreaks","breakpoints","foundBreakpoint","elementsAsStrings","includes","regex","RegExp","characterWithBreaks","chunks","last","pop","chunk","insertLineBreaks","menuOpen","isActive","BodyCellContent","DataTable","headerGroups","columns","getTableBodyProps","rows","prepareRow","sort","onSetSort","isFullScreen","windowHeight","columnTypes","columnFormatting","openColumnMenu","setOpenColumnMenu","isSorting","setIsSorting","tableRef","tableBodyRef","resizingColumnIndex","findIndex","column","isResizing","handleUpdateColumnSort","columnHeader","updatedSortOrder","sortBy","handleRequestCloseHeaderMenu","ensureColumnMenuClosed","renderEmptyResults","domElement","scrollTop","scrollLeft","availableHeight","setAvailableHeight","isEmptyResults","showEmptyResults","height","parentElement","getBoundingClientRect","ScrollSync","vertical","loading","fullscreen","LoadingSpinner","onScroll","ScrollSyncPane","_headerGroups$","_headerGroups$$getHea","_headerGroups$$getHea2","minWidth","getHeaderGroupProps","headerGroup","groupIndex","_headerGroup$headers","headers","colIndex","getHeaderProps","Header","getResizerProps","Overlay","onHide","rootClose","rootCloseEvent","_show","overlayProps","divProps","renderTableHeader","row","rowIndex","getRowProps","cells","cell","cellIndex","formatting","decimal_places","getCellProps","thousand_separator","defaultHeaders","useReactTableProps","dataHeaders","dataRows","accessor","defaultColumn","maxWidth","useTable","data","initialState","columnOrder","manualPagination","useFlexLayout","useResizeColumns","useColumnOrder","usePagination","alignRight","Dropdown","Menu","align","limitOptions","onSetLimit","numOfTotalResults","numOfFoundResults","filters","keywords","onSetFullScreen","viewStart","viewEnd","min","startCount","endCount","totalCount","foundCount","handleKeyPress","document","addEventListener","removeEventListener","isOriginalCountShowing","Toggle","DataTableDropdownMenu","Item","as","CompressIcon","ExpandIcon","datasetResourcesFeaturedTitle","FEATURED_RESOURCE_TYPES","methodology","dataDictionary","glossary","featuredResourceTypes","values","getResourceHref","resource","internalPageSlug","fileUrl","externalLinkUrl","containsInternalLink","isExternalLink","displayResourceType","DatasetResources","description","featuredTitle","resources","unfilteredResources","showAdditionalResources","isTools","filter","showOnResourcesSection","featuredResources","isFeatured","a","additionalResources","isResourceListExpanded","setIsResourceListOpen","allResourcesCount","hiddenResourcesCount","actionLabel","externalLinkLabel","ListGroup","ListGroupItem","history","useHistory","memoProps"],"sourceRoot":""}