{"version":3,"file":"static/js/874.10283d17.chunk.js","mappings":"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","sources":["utilities/htmlTableParser.js","components/common/CellRenderer/CellRenderer.js","components/common/DynamicTable/DynamicTable.js","assets/toolDetailsWaveS.svg","assets/toolDetailsWaveM.svg","assets/toolDetailsWaveXL.svg","assets/startOverWave.svg","components/interactiveTools/InteractiveToolsHero/InteractiveToolsHero.js","components/interactiveTools/InteractiveToolsHero/InteractiveToolsHeroDetailPage.js","components/interactiveTools/InteractiveToolsStatusBar/InteractiveToolsStatusBar.js","components/interactiveTools/StartOverBanner/StartOverBanner.js","components/interactiveTools/InteractiveToolsResults/InteractiveToolsResultsRow.js","components/interactiveTools/InteractiveToolsResults/InteractiveToolsNoResults.js","components/interactiveTools/InteractiveToolsResults/InteractiveToolsResults.js","components/interactiveTools/InteractiveToolDetails/InteractiveToolDetails.js","components/interactiveTools/OtherInteractiveTools/OtherInteractiveTools.js","components/pages/InteractiveToolsPage/InteractiveToolDetailsPage.js","components/pages/InteractiveToolsPage/CustomTools/mmd-hospital/index.js","components/pages/InteractiveToolsPage/CustomTools/mmd-population/index.js","components/interactiveTools/InteractiveToolsHero/InteractiveToolsHeroSearchPage.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchLanding.js","components/pages/InteractiveToolsPage/InteractiveToolSearchPage.js","webpack://wddse-spa/./src/components/pages/InteractiveToolsPage/InteractiveToolSearchPage.scss?55b6","components/pages/InteractiveToolsPage/InteractiveToolSearchPage/MmdToolSearchPage.js","components/interactiveTools/InteractiveToolsResults/InteractiveToolResultsSearchPage.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchTypeaheadLists.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchSelect.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchInputs.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchInpatient.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchPrescriber.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchPhysician.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchOptout.js","components/common/DatePicker/DatePicker.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchRevalidation.js","stores/MsStateCountyToolStore/index.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchMsStateCounty.js","utilities/lookupToolUtilities/msCbsaTool.js","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchMsCbsa.js","assets/fontawesome/solid/arrow-right-arrow-left.svg","components/interactiveTools/InteractiveToolsSearch/InteractiveToolsSearch.js","components/pages/InteractiveToolsPage/InteractiveToolSearchPage/DefaultToolSearchPage.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsNationalMapView.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateMapView.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsTableView.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateCompareTable.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateCompareChart.js","components/common/SelectBtn/SelectBtn.js","components/common/PillBtn/PillBtn.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateCountyStateComparison.js","components/interactiveTools/InteractiveToolsResults/RelatedToolBanner.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateCountyToolResults.js","components/pages/InteractiveToolsPage/InteractiveToolSearchPage/MsStateCountyToolSearchPage.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsCbsaMapDisplay.js","utilities/mapUtilities.js","components/interactiveTools/InteractiveToolsResults/MarketSaturation/MsCbsaToolResults.js","components/pages/InteractiveToolsPage/InteractiveToolSearchPage/MsCbsaToolSearchPage.js","components/pages/InteractiveToolsPage/InteractiveToolPageContainer.js"],"sourcesContent":["/*\n  Module to parse WYSWIG table data sent from the backend\n  Assumed structure is a table HTML with no thead.\n*/\n\n// method: convert string to DOM then parse\n// returns an array of rows with headers at index 0\nfunction parseHtmlTable (tableString) {\n  const parser = new DOMParser() // eslint-disable-line\n  const htmlDoc = parser.parseFromString(tableString, 'text/html')\n  const final = []\n  const rows = htmlDoc.querySelectorAll('tr')\n\n  rows.forEach(row => {\n    final.push(parseRowValues(row))\n  })\n\n  return final\n}\n\n// extract row cell values into an array\nfunction parseRowValues (row) {\n  const values = []\n\n  for (let x = 0; x < row.children.length; x++) {\n    const rowValue = row.children[x].innerHTML\n    values.push(sanitizeRowValue(rowValue))\n  }\n\n  return values\n}\n\n// remove unwanted characters from row value\nfunction sanitizeRowValue (value = '') {\n  return value.replace(/&nbsp;/g, ' ')\n}\n\nexport default parseHtmlTable\n","import React from 'react'\nimport cx from 'classnames'\nimport PropTypes from 'prop-types'\nimport RichTextField from '../RichTextField/RichTextField'\n\nimport './CellRenderer.scss'\n\nconst CellRenderer = ({ column, size, type, className }) => {\n  switch (type) {\n    case 'header':\n      return (\n        <th style={size && { width: size }} className={cx('CellRenderer__cell', className || 'default-header')}>\n          <RichTextField content={column} />\n        </th>\n      )\n    default:\n      return (\n        <td style={size && { width: size }} className={cx('CellRenderer__cell', className || 'default-cell')}>\n          <RichTextField content={column} />\n        </td>\n      )\n  }\n}\n\nCellRenderer.propTypes = {\n  className: PropTypes.string,\n  column: PropTypes.string,\n  type: PropTypes.string,\n  size: PropTypes.number\n}\n\nexport default CellRenderer\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport memoizeOne from 'memoize-one'\nimport Text from '../Text/Text'\nimport RichTextField from '../RichTextField/RichTextField'\nimport ComponentShell from '../ComponentShell/ComponentShell'\nimport parseHtmlTable from '../../../utilities/htmlTableParser'\nimport config from '../../../config'\nimport get from 'lodash/get'\nimport withDisplayContext from '../../../hocs/withDisplayContext/withDisplayContext'\nimport CellRenderer from '../CellRenderer/CellRenderer'\nimport './DynamicTable.scss'\n\n// defines the table wrapper maximum width\nconst {\n  dynamicTableOverflowWidthArticle,\n  dynamicTableOverflowWidthInteractive,\n  dynamicTableColumnMaximum,\n  dynamicTableColumnMinimum\n} = config\n\nconst ARTICLE_CONTEXT = 'string'\nconst INTERACTIVE_CONTEXT = 'object'\n\nclass DynamicTable extends PureComponent {\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      width: 0\n    }\n  }\n\n  // determine whether or not to limit column widths based on content\n  analyzeColumns (data, maxWidth) {\n    // static controls\n    const headerFontAverageWidth = 8\n    const bodyFontAverageWidth = 7\n    const rawWidths = []\n\n    // determine the width of each column, and cache the max for each column\n    data.forEach((row, rowIndex) => {\n      row.forEach((column, columnIndex) => {\n        // add 30 to accomodate padding requirements\n        const currentWidth = rowIndex === 0\n          ? column.length * headerFontAverageWidth + 30\n          : column.length * bodyFontAverageWidth + 30\n        const cachedWidth = rawWidths[columnIndex] ? rawWidths[columnIndex] : 0\n\n        if (currentWidth > cachedWidth) {\n          rawWidths[columnIndex] = currentWidth\n        }\n      })\n    })\n\n    // determine if table overflows wrapper\n    const widthSum = rawWidths.reduce((prev, current) => {\n      return prev + current\n    }, [])\n\n    // overflow exists, throttle widths\n    if (widthSum > maxWidth) {\n      return rawWidths.map(width => {\n        if (width < dynamicTableColumnMinimum) return dynamicTableColumnMinimum\n        if (width > dynamicTableColumnMaximum) return dynamicTableColumnMaximum\n\n        return width\n      })\n    } else {\n      return rawWidths\n    }\n  }\n\n  parseHtmlTable = memoizeOne(parseHtmlTable)\n\n  // flatten data into array of arrays the table expects\n  parseJsonData = (data) => {\n    const headers = get(data, 'headers', [])\n    const rows = get(data, 'rows', [])\n\n    return [\n      headers,\n      ...rows\n    ]\n  }\n\n  refCallback = (element) => {\n    if (element) {\n      this.setState({\n        width: element.getBoundingClientRect().width\n      })\n    }\n  }\n\n  render () {\n    const { width } = this.state\n\n    const {\n      subtitle,\n      footnotes,\n      data,\n      hasFooter,\n      leftColOffset,\n      windowWidth,\n      toolType,\n      hasPagination,\n      headerClasses,\n      bodyClasses\n    } = this.props\n\n    // determine how to display based on incoming data then parse\n    // linting will not pass typeof with a constant (expects a string literal)\n    // eslint-disable-next-line\n    const tableContext = typeof data === ARTICLE_CONTEXT ? ARTICLE_CONTEXT : INTERACTIVE_CONTEXT\n    const jsData = tableContext === ARTICLE_CONTEXT ? this.parseHtmlTable(data) : this.parseJsonData(data)\n    // determine max table width to allow based on context then calc column size\n    let tableWidth = '100%'\n    // turn off for tools\n    let columnSizeData\n    if (toolType !== 'inpatient' && toolType !== 'perscriber') {\n      tableWidth = tableContext === ARTICLE_CONTEXT ? dynamicTableOverflowWidthArticle : dynamicTableOverflowWidthInteractive\n      columnSizeData = this.analyzeColumns(jsData, toolType ? '100%' : tableWidth)\n    }\n\n    // slice data array into relevant sections\n    const hasHeader = tableContext === INTERACTIVE_CONTEXT || data.indexOf('<thead>') > -1\n    const headerRow = hasHeader ? jsData[0] : null\n\n    const bodyRowStartIndex = hasHeader ? 1 : 0\n    const bodyRowEndIndex = hasFooter ? jsData.length - 1 : jsData.length\n\n    const bodyRows = jsData.slice(bodyRowStartIndex, bodyRowEndIndex)\n    const footerRow = hasFooter ? jsData[jsData.length - 1] : []\n\n    // toggle inset box shadow on right hand side to indicate scrollability\n    // first conditional expression is desktop & second handles mobile\n    const hasScrollShadow = toolType ? false : (width > dynamicTableOverflowWidthArticle) || (width > windowWidth)\n\n    const maxWidth = toolType ? 'none' : tableWidth\n    return (\n      <div className={toolType ? `DynamicTable DynamicTable__tools ${hasPagination ? '' : 'toolsMargin'}` : 'DynamicTable'}>\n        <ComponentShell leftColOffset={leftColOffset}>\n          <div className='DynamicTable__inner' style={{ maxWidth: maxWidth }}>\n\n            {\n              subtitle &&\n                <Text typeFace='05 H3/Black/Regular/L' className='DynamicTable__title'>\n                  {subtitle}\n                </Text>\n            }\n\n            <div\n              tabIndex={0} className={cx({\n                'DynamicTable__table-wrapper': true,\n                'DynamicTable__with-shadow': hasScrollShadow\n              })}\n            >\n\n              <table\n                ref={this.refCallback}\n                className='DynamicTable__table'\n              >\n                {hasHeader && (\n                  <thead>\n                    <tr>\n                      {\n                        headerRow.map((column, i) => (\n                          <CellRenderer\n                            key={`h-${i}`}\n                            index={i}\n                            column={column}\n                            className={headerClasses[i]}\n                            size={toolType ? null : columnSizeData[i]}\n                            type='header'\n                          />\n                        ))\n                      }\n                    </tr>\n                  </thead>\n                )}\n                <tbody>\n                  {\n                    bodyRows.map((row, rowIndex) => {\n                      return (\n                        <tr key={`r-${rowIndex}`}>\n                          {row.map((column, columnIndex) => (\n                            <CellRenderer\n                              key={`r-${rowIndex}-${columnIndex}`}\n                              index={columnIndex}\n                              column={column}\n                              rowIndex={rowIndex}\n                              size={toolType ? null : columnSizeData[columnIndex]}\n                              className={bodyClasses[columnIndex]}\n                            />\n                          ))}\n                        </tr>\n                      )\n                    })\n                  }\n                </tbody>\n                {\n                  hasFooter &&\n                    <tfoot>\n                      <tr>\n                        {\n                          footerRow.map((value, i) => (\n                            <td key={`f-${i}`} className='default-cell'>\n                              {\n                                !!value && (\n                                  <div\n                                    className='DynamicTable__footer-cell'\n                                    style={{ width: columnSizeData[i] }}\n                                    dangerouslySetInnerHTML={{ __html: value }}\n                                  />\n                                )\n                              }\n                            </td>\n                          ))\n                        }\n                      </tr>\n                    </tfoot>\n                }\n              </table>\n              <div className='DynamicTable__table-mobile-gutter' />\n            </div>\n            {footnotes && (\n              <Text domElement='div' typeFace='Small Text/MedGray'>\n                <RichTextField className='DynamicTable__footnotes' content={footnotes} />\n              </Text>\n            )}\n          </div>\n        </ComponentShell>\n      </div>\n    )\n  }\n}\n\nDynamicTable.propTypes = {\n  subtitle: PropTypes.string,\n  footnotes: PropTypes.string,\n  data: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.object\n  ]),\n  hasFooter: PropTypes.bool,\n  leftColOffset: PropTypes.number,\n  windowWidth: PropTypes.number.isRequired,\n  toolType: PropTypes.string,\n  hasPagination: PropTypes.bool,\n  headerClasses: PropTypes.arrayOf(PropTypes.string),\n  bodyClasses: PropTypes.arrayOf(PropTypes.string)\n}\n\nDynamicTable.defaultProps = {\n  subtitle: '',\n  footnotes: '',\n  data: {},\n  hasFooter: false,\n  leftColOffset: 0,\n  headerClasses: [],\n  bodyClasses: []\n}\n\nexport default withDisplayContext(DynamicTable)\n\nexport { DynamicTable }\n","var _defs, _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 SvgToolDetailsWaveS(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"320px\",\n    height: \"70px\",\n    viewBox: \"0 0 320 70\",\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  }, \"Mask\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M0,70 L320,70 C320,41.741363 320,25.0790637 320,20.013102 C320,12.4141595 280.605469,0.46514827 225.384766,8.04823771 C170.164063,15.6313272 159,21.0137571 81,21.0137571 C53.0121596,21.0137571 26.0121596,14.0091714 0,3.63797881e-12 L0,70 Z\",\n    id: \"path-1\"\n  }))), _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(\"mask\", {\n    id: \"mask-2\",\n    fill: \"white\"\n  }, /*#__PURE__*/React.createElement(\"use\", {\n    xlinkHref: \"#path-1\"\n  })), /*#__PURE__*/React.createElement(\"use\", {\n    id: \"Mask\",\n    fill: \"#FFFFFF\",\n    xlinkHref: \"#path-1\"\n  }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgToolDetailsWaveS);\nexport default __webpack_public_path__ + \"static/media/toolDetailsWaveS.cace87fbcb3458a69ed1725cb2a1f93c.svg\";\nexport { ForwardRef as ReactComponent };","var _defs, _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 SvgToolDetailsWaveM(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"100%\",\n    viewBox: \"0 0 758 100\",\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  }, \"Group 8\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M570.7469,0.325757475 C660.700078,-2.75169909 727.147543,16.6252721 767.005931,31.0457765 L767,100 L-5.62749847e-12,100 L-6.25277607e-12,0.325757475 C53.8087075,21.4506389 116.178919,32.0130796 187.110634,32.0130796 C367.306464,32.0130796 391.525233,-0.665436924 570.7469,0.325757475 Z\",\n    id: \"path-1\"\n  }))), _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: \"Group-8\"\n  }, /*#__PURE__*/React.createElement(\"mask\", {\n    id: \"mask-2\",\n    fill: \"white\"\n  }, /*#__PURE__*/React.createElement(\"use\", {\n    xlinkHref: \"#path-1\"\n  })), /*#__PURE__*/React.createElement(\"use\", {\n    id: \"Combined-Shape\",\n    fill: \"#FFFFFF\",\n    xlinkHref: \"#path-1\"\n  })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgToolDetailsWaveM);\nexport default __webpack_public_path__ + \"static/media/toolDetailsWaveM.7d8bf6d8cf197a9d0b9e9f3a26b5c37c.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 SvgToolDetailsWaveXl(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    preserveAspectRatio: \"none\",\n    viewBox: \"0 0 1280 143\",\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  }, \"Combined Shape\") : 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(\"path\", {\n    d: \"M1280.005,0 L1280.00992,142.952209 C1204.15983,104.66315 1101.03525,85.219393 970.636165,84.6209392 C666.610237,83.2256419 644.654171,133.425089 338.480437,137.013661 C153.317569,139.1839 58.1320853,109.196579 -0.00235028539,81.0865761 L0.005,0 L1280.005,0 Z\",\n    id: \"Combined-Shape\",\n    fill: \"#FFFFFF\",\n    transform: \"translate(640.004962, 71.476104) scale(-1, -1) translate(-640.004962, -71.476104) \"\n  }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgToolDetailsWaveXl);\nexport default __webpack_public_path__ + \"static/media/toolDetailsWaveXL.f19c0271f1ec71d7f848c36a35ccf37a.svg\";\nexport { ForwardRef as ReactComponent };","var _defs, _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 SvgStartOverWave(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"215px\",\n    height: \"222px\",\n    viewBox: \"0 0 215 222\",\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  }, \"Combined Shape\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M126.651397,89 C204.084573,115 236.557338,161.612655 197.854367,222 L0.151396885,222 L0.155285067,0.763957748 C48.7613335,7.07011837 65.0706651,68.3228291 126.651397,89 Z\",\n    id: \"path-1\"\n  }))), _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(\"mask\", {\n    id: \"mask-2\",\n    fill: \"white\"\n  }, /*#__PURE__*/React.createElement(\"use\", {\n    xlinkHref: \"#path-1\"\n  })), /*#__PURE__*/React.createElement(\"use\", {\n    id: \"Combined-Shape\",\n    fill: \"#16375F\",\n    xlinkHref: \"#path-1\"\n  }))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgStartOverWave);\nexport default __webpack_public_path__ + \"static/media/startOverWave.88962339b6bd7d8a34b269a05b3bb01c.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Breadcrumb from 'react-bootstrap/Breadcrumb'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport darkTealBackground from '../../../assets/interactiveToolHeroDarkTeal.webp'\nimport toolDetailsWaveS from '../../../assets/toolDetailsWaveS.svg'\nimport toolDetailsWaveM from '../../../assets/toolDetailsWaveM.svg'\nimport toolDetailsWaveXL from '../../../assets/toolDetailsWaveXL.svg'\nimport startOverWave from '../../../assets/startOverWave.svg'\nimport CaretLeftRightIcon from '../../icons/CaretLeftRightIcon'\nimport CarouselArrow from '../../icons/CarouselArrow'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { toolIcons, customToolsList } from '../../../utilities/lookupToolUtilities'\nimport { getToolsPagePath } from '../../../utilities/routeHelpers'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport history from '../../../history'\nimport defaultImage from '../../../assets/chart-icon.svg'\nimport './InteractiveToolsHero.scss'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport config from '../../../config.js'\n\nconst {\n  apiSite\n} = config\n\nexport const getBackgroundImage = (toolType) => {\n  // backgrounds are now pulled from the api only the fallback is left\n  return darkTealBackground\n}\n\nconst InteractiveToolsHero = ({\n  hasWave,\n  titleComponent,\n  id,\n  eyebrow,\n  toolType = ''\n}) => {\n  const { isDesktop, isTablet, isMobile } = useDisplayContext()\n\n  const getWaveInfo = () => {\n    if (isDesktop) {\n      return toolDetailsWaveXL\n    }\n    if (isTablet) {\n      return toolDetailsWaveM\n    }\n    if (isMobile) {\n      return toolDetailsWaveS\n    }\n  }\n\n  const customBackgroundImage = interactiveToolsStore.currentState.data?.fieldMediaImage2 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage2\n  const customIcon = interactiveToolsStore.currentState.data?.fieldMediaImage1 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage1\n  // Default image only when toolType is not in customToolList or toolIcon (iframe Page for e.g.).\n  // Otherwise Use toolicon if it's in CustomTools list (mmd).  Otherwise, empty since img handled outside hero.\n  const hasHeroIcon = !toolIcons[toolType] || customToolsList.includes(toolType)\n  let imageSource\n  if (hasHeroIcon) {\n    if (customIcon) {\n      imageSource = customIcon\n    } else {\n      imageSource = defaultImage\n    }\n  } else {\n    imageSource = ''\n  }\n  return (\n    <div\n      id={id}\n      className={cx('InteractiveToolsHero jumbotron', { wave: hasWave })}\n      fluid='true'\n      style={{ backgroundImage: `url(${customBackgroundImage || getBackgroundImage(toolType)})` }}\n    >\n      <div className='InteractiveToolsHero__inner'>\n        <Container>\n          <div className='InteractiveToolsHero__inner__content'>\n            <Breadcrumb className='InteractiveToolsHero__breadcrumb'>\n              {eyebrow && <Breadcrumb.Item active>{eyebrow}</Breadcrumb.Item>}\n            </Breadcrumb>\n            <div className='InteractiveToolsHero__container-inner'>\n              {titleComponent}\n            </div>\n          </div>\n          {imageSource && <div className='CustomTools__wrapper__icon'> <img src={imageSource} alt={interactiveToolsStore.currentState.data?.iconAltText || 'hero icon'} /> </div>}\n        </Container>\n      </div>\n\n      {hasWave && <img src={getWaveInfo()} className='InteractiveToolsHero__wave' alt=' ' />}\n    </div>\n  )\n}\n\nInteractiveToolsHero.propTypes = {\n  hasWave: PropTypes.bool,\n  titleComponent: PropTypes.element.isRequired,\n  id: PropTypes.string,\n  eyebrow: PropTypes.any,\n  toolType: PropTypes.string\n}\n\nexport const ToolSearchHeroTitle = ({ title, description }) => {\n  return (\n    <Container className='ToolSearchHeroTitle'>\n      <Row>\n        <Col lg={8}>\n          <h1>{title}</h1>\n          <p>{description}</p>\n        </Col>\n      </Row>\n    </Container>\n  )\n}\n\nToolSearchHeroTitle.propTypes = {\n  title: PropTypes.string,\n  description: PropTypes.string\n}\n\nexport const ToolDetailHeroTitle = (props) => {\n  const {\n    title,\n    detailMeta,\n    toolName,\n    toolUrlPath,\n    isLoading\n  } = props\n\n  const customIcon = interactiveToolsStore.currentState.data?.fieldMediaImage1 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage1\n\n  return (\n    <div className={cx('ToolDetailHeroTitle', { loading: isLoading })}>\n      <h1>{title}</h1>\n      {!!(detailMeta && detailMeta.length) && (\n        <ul className='ToolDetailHeroTitle__detailMetaList'>\n          {detailMeta.map(({ label, values, component }, idx) => {\n            const hasComponent = !!(component)\n            const hasValues = !hasComponent && Array.isArray(values)\n            return (\n              <li className='ToolDetailHeroTitle__detailMeta' key={idx}>\n                {/* if no values or component, assume label is meant as a stand-alone display */}\n                {label && <label>{label}{values || component ? ':' : ''}</label>}\n                {hasComponent && component}\n                {hasValues && values.map((value, i) => <p key={i}>{value}</p>)}\n              </li>\n            )\n          })}\n        </ul>\n      )}\n      <div className='ToolDetailHeroTitle__startOver'>\n        <img src={startOverWave} alt=' ' />\n        <div className='ToolDetailHeroTitle__toolIcon'>\n          <img src={customIcon || defaultImage} alt=' ' />\n        </div>\n        <div className='ToolDetailHeroTitle__startOverText'>\n          <p className='ToolDetailHeroTitle__toolName'>{toolName}</p>\n          <p className='ToolDetailHeroTitle__helpText'>Looking for different results?</p>\n        </div>\n        <LinkHandler variant='primary' className='ToolDetailHeroTitle__startOverBtn' href={toolUrlPath}>\n          Start Over\n        </LinkHandler>\n      </div>\n    </div>\n  )\n}\n\nToolDetailHeroTitle.propTypes = {\n  title: PropTypes.string.isRequired,\n  toolName: PropTypes.string.isRequired,\n  toolUrlPath: PropTypes.string.isRequired,\n  detailMeta: PropTypes.arrayOf(PropTypes.shape({\n    label: PropTypes.string,\n    values: PropTypes.arrayOf(PropTypes.string),\n    component: PropTypes.object\n  })),\n  isLoading: PropTypes.bool\n}\n\nexport const BackToSearchResultsLink = ({ toolUrlPath }) => {\n  return (\n    <LinkHandler className='InteractiveToolsHero__eyebrow' noBs href={`${toolUrlPath}`} routerData={{ search: history.location.search }}>\n      <CarouselArrow size='small' direction='left' /><span>Back to search results</span>\n    </LinkHandler>\n  )\n}\n\nBackToSearchResultsLink.propTypes = {\n  toolUrlPath: PropTypes.string.isRequired\n}\n\nexport const BackToToolsLink = () => {\n  return (\n    <LinkHandler className='InteractiveToolsHero__eyebrow' noBs href={getToolsPagePath()}>\n      <CaretLeftRightIcon direction='left' color='#fff' /><span>All Interactive Tools</span>\n    </LinkHandler>\n  )\n}\n\nexport default InteractiveToolsHero\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport InteractiveToolsHero, { ToolDetailHeroTitle, BackToSearchResultsLink } from './InteractiveToolsHero'\nimport interactiveToolsStore, {\n  loadToolDetailsHero\n} from '../../../stores/interactiveToolsStore'\n\nconst initialState = {\n  isLoading: true,\n  error: null\n}\n\nconst InteractiveToolsHeroDetailPage = (props) => {\n  const { toolDetailParam, toolDetailValue } = props\n  const { toolName, toolType, toolUrlPath, title, detailMeta } = interactiveToolsStore.useState(state => ({\n    toolName: state.data.name,\n    toolType: state.data.toolType,\n    toolUrlPath: state.data.slug,\n    title: state.detail.title,\n    detailMeta: state.detail.detailMeta\n  }))\n\n  const [{ isLoading, error }, setState] = useState(initialState)\n\n  useEffect(() => {\n    async function loadData () {\n      try {\n        setState(state => ({ ...state, isLoading: true, error: null }))\n        await loadToolDetailsHero({ [toolDetailParam]: toolDetailValue })\n        setState(state => ({ ...state, isLoading: false }))\n      } catch (error) {\n        setState(state => ({ ...state, isLoading: false }))\n      }\n    }\n\n    loadData()\n  }, [toolDetailParam, toolDetailValue])\n\n  useEffect(() => {\n    if (error) {\n      console.error('error loading detail tool hero', error)\n    }\n  }, [error])\n\n  return (\n    <InteractiveToolsHero\n      hasWave\n      toolType={toolType}\n      eyebrow={<BackToSearchResultsLink toolUrlPath={toolUrlPath} />}\n      titleComponent={\n        <ToolDetailHeroTitle\n          isLoading={isLoading}\n          toolType={toolType}\n          title={title}\n          detailMeta={detailMeta}\n          toolName={toolName}\n          toolUrlPath={toolUrlPath}\n        />\n      }\n    />\n  )\n}\n\nInteractiveToolsHeroDetailPage.propTypes = {\n  toolDetailParam: PropTypes.string,\n  toolDetailValue: PropTypes.string\n}\n\nexport default InteractiveToolsHeroDetailPage\n","import React, { forwardRef } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Dropdown from 'react-bootstrap/Dropdown'\nimport Text from '../../common/Text/Text'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\n\nimport './InteractiveToolsStatusBar.scss'\n\nconst sizeOptions = [10, 50, 100]\n\nconst InteractiveToolsStatusBar = forwardRef((props, ref) => {\n  const {\n    isLoadingStats,\n    onSetSize,\n    size,\n    offset,\n    numOfFoundResults,\n    className\n  } = props\n  const viewStart = offset\n  const viewEnd = Math.min(offset + size, numOfFoundResults)\n  const startCount = numberWithCommas(numOfFoundResults === 0 ? 0 : viewStart + 1)\n  const endCount = numberWithCommas(viewEnd)\n  const foundCount = numberWithCommas(numOfFoundResults)\n\n  return (\n    <div className={cx('InteractiveToolsStatusBar', className)} ref={ref}>\n      <div className='InteractiveToolsStatusBar__stats'>\n        {!isLoadingStats && (\n          <>\n            <Text typeFace='Body/16pt/Black/L'>Displaying</Text>\n            <span className='InteractiveToolsStatusBar__stat'>{` ${startCount} - ${endCount} `}</span>\n            <Text typeFace='Body/16pt/Black/L'>of</Text>\n            <span className='InteractiveToolsStatusBar__stat'> {` ${foundCount} `} </span>\n            <Text typeFace='Body/16pt/Black/L'>records</Text>\n          </>\n        )}\n      </div>\n      <div className='InteractiveToolsStatusBar__selectSize'>\n        {!isLoadingStats && (\n          <>\n            <Text domElement='span' typeFace='Body/16pt/Black/L'>Records per page:</Text>\n            <Dropdown>\n              <Dropdown.Toggle className='InteractiveToolsStatusBar__selectSizeButton' variant='default'>{size}</Dropdown.Toggle>\n              <Dropdown.Menu\n                flip={false}\n                alignRight\n                className='InteractiveToolsStatusBar__selectSizeMenu'\n              >\n                {sizeOptions.map(size => {\n                  return (\n                    <Dropdown.Item\n                      as='div'\n                      key={size}\n                      onClick={() => onSetSize(size)}\n                    >\n                      {size}\n                    </Dropdown.Item>\n                  )\n                })}\n              </Dropdown.Menu>\n            </Dropdown>\n          </>\n        )}\n      </div>\n    </div>\n  )\n})\n\nInteractiveToolsStatusBar.propTypes = {\n  isLoadingStats: PropTypes.bool,\n  onSetSize: PropTypes.func,\n  offset: PropTypes.number,\n  size: PropTypes.number,\n  numOfFoundResults: PropTypes.number,\n  className: PropTypes.string\n}\n\nexport default InteractiveToolsStatusBar\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { getBackgroundImage } from '../InteractiveToolsHero/InteractiveToolsHero'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport config from '../../../config'\n\nimport './StartOverBanner.scss'\n\nconst StartOverBanner = (props) => {\n  const {\n    toolType,\n    toolName,\n    toolUrlPath\n  } = props\n\n  const { apiSite } = config\n  const icon = interactiveToolsStore.currentState.data?.fieldMediaImage1 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage1\n  const backgroundImage = interactiveToolsStore.currentState.data?.fieldMediaImage2\n    ? apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage2\n    : getBackgroundImage(toolType)\n  return (\n    <div className='StartOverBanner' style={{ backgroundImage: `url(${backgroundImage})` }}>\n      <Container className='StartOverBanner__container'>\n        <Row>\n          <Col lg={12} className='StartOverBanner__eyebrow'>\n            {toolName}\n          </Col>\n        </Row>\n        <Row>\n          <Col lg={6} className='StartOverBanner__text'>\n            <h2>Didn't find the results you were looking for?</h2>\n            <LinkHandler variant='primary' className='StartOverBanner__button' href={toolUrlPath}>\n              Start Over\n            </LinkHandler>\n          </Col>\n          <Col lg={{ offset: 3, span: 3 }} className='StartOverBanner__toolIcon'>\n            <div className='StartOverBanner__toolIconContainer'>\n              <img src={icon || ''} alt=' ' />\n            </div>\n          </Col>\n        </Row>\n      </Container>\n    </div>\n  )\n}\n\nStartOverBanner.propTypes = {\n  toolType: PropTypes.string,\n  toolName: PropTypes.string,\n  toolUrlPath: PropTypes.string\n}\n\nexport default StartOverBanner\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Col from 'react-bootstrap/Col'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport history from '../../../history'\nimport { getZip } from '../../../services/formatters/lookupTool'\nimport { toolTypes } from '../../../utilities/lookupToolUtilities'\nimport { NpiTextDisplay } from '../NpiListModal/NpiListModal'\nimport * as revalidationTool from '../../../utilities/lookupToolUtilities/revalidationTool'\nimport './InteractiveToolsResultsRow.scss'\nimport dayjs from 'dayjs'\nimport { numberWithCommas } from '../../../utilities/searchPageHelpers'\n\nconst {\n  inpatient,\n  prescriber,\n  physician,\n  optout,\n  revalidation\n} = toolTypes\n\nconst multiNumberDisplay = (rowItem) => {\n  const num = rowItem\n  let nums = ''\n  if (typeof num === 'object' && num.length > 1) {\n    num.forEach((display, idx) => {\n      idx === num.length - 1 ? nums += `${display}` : nums += `${display}, `\n    })\n  }\n  return { num, nums }\n}\n\nfunction generateDetailUrlPath (toolUrl, value) {\n  return `${toolUrl}/provider/${value}`\n}\n\nconst InteractiveToolsResultsRow = (props) => {\n  const { toolType, isLoading } = props\n\n  if (isLoading) {\n    return (\n      <div className='ToolResults_row row loading'>\n        <Col lg={5} className='ToolResults_row_name' />\n        <Col lg={3} className='ToolResults_row_details' />\n        <Col lg={4} className='ToolResults_row_details' />\n      </div>\n    )\n  }\n\n  const RowComponent = rowToolTypes[toolType]\n\n  return <RowComponent {...props} />\n}\n\nInteractiveToolsResultsRow.propTypes = {\n  isLoading: PropTypes.bool,\n  row: PropTypes.object.isRequired,\n  toolType: PropTypes.string.isRequired,\n  toolUrl: PropTypes.string.isRequired\n}\n\nexport const InpatientRow = (props) => {\n  const { row, toolUrl } = props\n  const { num: ccn, nums: ccns } = multiNumberDisplay(row.Rndrng_Prvdr_CCN)\n  const href = generateDetailUrlPath(toolUrl, ccn || ccns)\n  const zip = getZip(row.Rndrng_Prvdr_Zip5)\n\n  return (\n    <LinkHandler href={href} routerData={{ search: history.location.search }} noBs className='ToolResults_row row'>\n      <Col lg='5' className='ToolResults_row_name'><h4>{row.Rndrng_Prvdr_Org_Name}</h4></Col>\n      <Col lg='3' className='ToolResults_row_details'>\n        {row.Rndrng_Prvdr_St}\n        <div>{row.Rndrng_Prvdr_City}, {row.Rndrng_Prvdr_State_Abrvtn} {zip}</div>\n      </Col>\n      <Col lg='4' className='ToolResults_row_details'><span className='bold'>CCN:</span> {ccns || ccn}</Col>\n    </LinkHandler>\n  )\n}\n\nInpatientRow.propTypes = InteractiveToolsResultsRow.propTypes\n\nexport const PrescriberRow = (props) => {\n  const { row, toolUrl } = props\n  const { num: npi, nums: npis } = multiNumberDisplay(row.Prscrbr_NPI)\n  const href = generateDetailUrlPath(toolUrl, npi || npis)\n\n  return (\n    <LinkHandler href={href} routerData={{ search: history.location.search }} noBs className='ToolResults_row row'>\n      <Col lg='5' className='ToolResults_row_name'><h4>{row.Prscrbr_First_Name} {row.Prscrbr_Last_Org_Name}</h4></Col>\n      <Col lg='3' className='ToolResults_row_details'>\n        {row.Prscrbr_City}, {row.Prscrbr_State_Abrvtn}\n      </Col>\n      <Col lg='4' className='ToolResults_row_details'>\n        <div>\n          <span className='bold'>Specialty:</span> {row.Prscrbr_Type}\n        </div>\n        <div>\n          <span className='bold'>NPI:</span> {npis || npi}\n        </div>\n      </Col>\n    </LinkHandler>\n  )\n}\n\nPrescriberRow.propTypes = InteractiveToolsResultsRow.propTypes\n\nexport const PhysicianRow = (props) => {\n  const { row, toolUrl } = props\n  const { num: npi, nums: npis } = multiNumberDisplay(row.Rndrng_NPI)\n  const href = generateDetailUrlPath(toolUrl, npi || npis)\n  const zip = getZip(row.Rndrng_Prvdr_Zip5)\n  const name = row.Rndrng_Prvdr_Ent_Cd === 'I'\n    ? `${row.Rndrng_Prvdr_First_Name} ${row.Rndrng_Prvdr_Last_Org_Name}`\n    : row.Rndrng_Prvdr_Last_Org_Name\n\n  return (\n    <LinkHandler href={href} routerData={{ search: history.location.search }} noBs className='ToolResults_row row'>\n      <Col lg='5' className='ToolResults_row_name'><h4>{name}</h4></Col>\n      <Col lg='3' className='ToolResults_row_details'>\n        <div className='caps'>{row.Rndrng_Prvdr_St1}</div>\n        <div className='caps'>{row.Rndrng_Prvdr_St2}</div>\n        <div className='caps'>{row.Rndrng_Prvdr_City}, {row.Rndrng_Prvdr_State_Abrvtn} {zip}</div>\n      </Col>\n      <Col lg='4' className='ToolResults_row_details'>\n        <div>\n          <span className='bold'>Specialty:</span> {row.Rndrng_Prvdr_Type}\n        </div>\n        <div>\n          <span className='bold'>Entity Type:</span> {row.Rndrng_Prvdr_Ent_Cd === 'I' ? 'Individual' : 'Organization'}\n        </div>\n        <div>\n          <span className='bold'>NPI:</span> {npis || npi}\n        </div>\n      </Col>\n    </LinkHandler>\n  )\n}\n\nPhysicianRow.propTypes = InteractiveToolsResultsRow.propTypes\n\nexport const RevalidationRow = (props) => {\n  const {\n    REVALIDATION_NPI,\n    isIndividual,\n    getNameFromRow,\n    isDmeSupplier,\n    getState,\n    getSpecialty,\n    getNpiList,\n    getDueDateDisplay,\n    getEnrollmentId,\n    getNumOfOrganizationsAssignedToIndividual,\n    getNumOfIndividualsAssignedToOrg\n  } = revalidationTool\n\n  const { row, formValues, toolUrl } = props\n  const resultType = isIndividual(row) ? 'Individual' : 'Organization'\n  const npiList = getNpiList(row)\n  const total = isIndividual(row)\n    ? getNumOfOrganizationsAssignedToIndividual(row)\n    : getNumOfIndividualsAssignedToOrg(row)\n  const name = getNameFromRow(row)\n  const { revalidationDueDate } = getDueDateDisplay(row)\n  const currentNpi = formValues[REVALIDATION_NPI] && npiList.includes(formValues[REVALIDATION_NPI])\n    ? formValues[REVALIDATION_NPI]\n    : npiList[0]\n  const href = generateDetailUrlPath(toolUrl, getEnrollmentId(row))\n\n  const NameElement = LinkHandler\n  const NameElementProps = { href: href, noBs: true, routerData: { search: history.location.search }, className: 'ToolResults_row_name' }\n\n  return (\n    <div className='ToolResults_row row non-clickable medicareRevalidationList__print-styling'>\n      <Col lg='5' className='ToolResults_row_details'>\n        <div className='small block-label'>{resultType.toUpperCase()}</div>\n        <NameElement {...NameElementProps}>\n          <h4>{name}</h4>\n        </NameElement>\n        <div>\n          <span className='bold'>NPI: </span>\n          <NpiTextDisplay\n            className='ToolResults_modal_link'\n            as='span'\n            name={name}\n            npis={npiList}\n            currentNpi={currentNpi}\n          />\n        </div>\n      </Col>\n      <Col lg='3' className='ToolResults_row_details'>\n        <div className='bold block-label revalidation_date_label'>Due Date:</div>\n        <div className='gray revalidation_date_size'>{revalidationDueDate}</div>\n      </Col>\n      <Col lg='4' className='ToolResults_row_details'>\n        <div><span className='bold'>State: </span>{getState(row)}</div>\n        <div><span className='bold'>Specialty: </span>{getSpecialty(row)}</div>\n        <div><span className='bold'>{resultType === 'Individual' ? 'Total Providers Receiving Reassigned Benefits' : 'Reassigned Providers'}: </span>{numberWithCommas(total)}</div>\n        {!!isDmeSupplier(row) && <div><span className='bold'>Enrollment Type: </span>{isDmeSupplier(row)}</div>}\n      </Col>\n    </div>\n  )\n}\n\nRevalidationRow.propTypes = InteractiveToolsResultsRow.propTypes\n\nexport const OptoutRow = (props) => {\n  const { row } = props\n  // opt out keys\n  const lastName = 'Last Name'\n  const firstName = 'First Name'\n  const npi = 'NPI'\n  const specialty = 'Specialty'\n  const zipCode = 'Zip code'\n  const state = 'State Code'\n  const city = 'City Name'\n  const streetOne = 'First Line Street Address'\n  const streetTwo = 'Second Line Street Address'\n  const effectiveDate = 'Optout Effective Date'\n  const endDate = 'Optout End Date'\n  const eligible = 'Eligible to Order and Refer'\n  const zip = getZip(row[zipCode])\n\n  return (\n    <div className='ToolResults_row row non-clickable optOut__print-styling'>\n      <Col lg='5' className='ToolResults_row_name black'>{row[lastName]}, {row[firstName]}</Col>\n      <Col lg='3' className='ToolResults_row_details'>\n        <div>{row[specialty]}</div>\n        <div><span className='bold'>NPI:</span> {row[npi]}</div>\n        <div className='caps'>{row[streetOne].toLowerCase()}</div>\n        <div className='caps'>{row[streetTwo].toLowerCase()}</div>\n        <div className='caps'>{row[city].toLowerCase()}, {row[state]} {zip}</div>\n      </Col>\n      <Col lg='4' className='ToolResults_row_details'>\n        <div><span className='bold'>Opt Out Effective Date: </span>{row[effectiveDate] ? dayjs(row[effectiveDate]).format('MMM D, YYYY') : ''}</div>\n        <div><span className='bold'>Opt Out End Date: </span>{row[endDate] ? dayjs(row[endDate]).format('MMM D, YYYY') : ''}</div>\n        <div><span className='bold'>Eligibile to Order and Refer: </span>{row[eligible] === 'Y' ? 'Yes' : (row[eligible] === 'N' ? 'No' : '')}</div>\n      </Col>\n    </div>\n  )\n}\n\nOptoutRow.propTypes = InteractiveToolsResultsRow.propTypes\n\nconst rowToolTypes = {\n  [inpatient]: InpatientRow,\n  [prescriber]: PrescriberRow,\n  [physician]: PhysicianRow,\n  [optout]: OptoutRow,\n  [revalidation]: RevalidationRow\n}\n\nexport default InteractiveToolsResultsRow\n","import React from 'react'\nimport Container from 'react-bootstrap/Container'\nimport Text from '../../common/Text/Text'\n\nimport './InteractiveToolsNoResults.scss'\n\nconst InteractiveToolsNoResults = () => {\n  return (\n    <Container className='LookupTools__NoResults'>\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 filters.</Text>\n        <Text domElement='li' typeFace='Body/18pt/Black/L'>For NPI search, enter the full 10-digit ID</Text>\n        <Text domElement='li' typeFace='Body/18pt/Black/L'>For CCN search, enter the full 6-character ID</Text>\n      </ul>\n    </Container>\n  )\n}\n\nexport default InteractiveToolsNoResults\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Container from 'react-bootstrap/Container'\nimport InteractiveToolsResultsRow from './InteractiveToolsResultsRow'\nimport InteractiveToolsNoResults from './InteractiveToolsNoResults'\nimport LoadingCover, { LoadingSpinner } from '../../common/LoadingCover/LoadingCover'\nimport history from '../../../history'\nimport cmsHeaderLogoWithText from '../../../assets/header/cms-header-logo-with-text.svg'\n\nimport './InteractivetoolsResults.scss'\n\nconst InteractiveToolResults = props => {\n  const {\n    data,\n    toolType,\n    toolConfig,\n    toolName,\n    toolUrl,\n    isLoading,\n    isInitialLoad,\n    formValues,\n    statusBarComponent,\n    paginationComponent,\n    showPrintHeader\n  } = props\n\n  const hasResults = data.length > 0\n\n  const printHeaders = toolConfig?.printViewHeaders || []\n\n  return (\n    <div className='ToolResults'>\n      {showPrintHeader && (\n        <div className='LookupToolsSearch__print-header'>\n          <img src={cmsHeaderLogoWithText} alt='Centers for Medicare & Medicaid Services Data' />\n          <div>{toolName}</div>\n          <div>{`data.cms.gov${history.location.pathname}`}</div>\n          <div className='searchValues'>\n            {printHeaders.map((header, i) => {\n              return (\n                <div key={i}>\n                  <div className='LookupToolsSearch__print-header-label'>\n                    {header?.displayName + ': '}\n                  </div>\n                  {formValues[header?.machineName]}\n                </div>\n              )\n            })}\n          </div>\n        </div>\n      )}\n      {isInitialLoad && <div className='ToolResults__loading'><LoadingCover /></div>}\n\n      {!isInitialLoad && (\n        <Container>\n          {statusBarComponent}\n          <div\n            className={cx({\n              ToolsResultsRows: true,\n              loading: isLoading\n            })}\n          >\n            <div className='ToolsResultsRows__loadingIndicator'>\n              <LoadingSpinner className='ToolsResultsRows__spinner' />\n            </div>\n            {hasResults && data.map((row, idx) => {\n              return (\n                <InteractiveToolsResultsRow\n                  key={idx}\n                  row={row}\n                  formValues={formValues}\n                  toolType={toolType}\n                  toolUrl={toolUrl}\n                />\n              )\n            })}\n\n          </div>\n          {hasResults && (\n            <div className='paginationHolder'>\n              {paginationComponent}\n            </div>\n          )}\n          {!isInitialLoad && !isLoading && !hasResults && <InteractiveToolsNoResults />}\n        </Container>\n      )}\n    </div>\n  )\n}\n\nInteractiveToolResults.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.object),\n  toolType: PropTypes.string,\n  toolConfig: PropTypes.object,\n  toolName: PropTypes.string,\n  toolUrl: PropTypes.string,\n  isLoading: PropTypes.bool,\n  isInitialLoad: PropTypes.bool,\n  formValues: PropTypes.object,\n  statusBarComponent: PropTypes.element,\n  paginationComponent: PropTypes.element,\n  showPrintHeader: PropTypes.bool\n}\n\nexport default InteractiveToolResults\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Container from 'react-bootstrap/Container'\nimport Button from 'react-bootstrap/Button'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport DynamicTable from '../../common/DynamicTable/DynamicTable'\nimport InteractiveToolsStatusBar from '../InteractiveToolsStatusBar/InteractiveToolsStatusBar'\nimport Pagination from '../../common/Pagination/Pagination'\nimport InputPagination from '../../common/InputPagination/InputPagination'\nimport LoadingCover from '../../common/LoadingCover/LoadingCover'\nimport {\n  getToolDetailDataApiParams,\n  getToolDetailStatsApiParams,\n  getToolDetailDisplayType,\n  getToolDetailResultsTitle,\n  DETAIL_DISPLAY_TYPE_LIST,\n  DETAIL_DISPLAY_TYPE_TABLE,\n  toolTypes\n} from '../../../utilities/lookupToolUtilities'\nimport { getAdjustedOffset } from '../../../utilities/searchPageHelpers'\nimport StartOverBanner from '../StartOverBanner/StartOverBanner'\nimport {\n  getLookupToolData,\n  getLookupToolDataStats\n} from '../../../services/apiDomains/lookupTool'\nimport InteractiveToolResults from '../InteractiveToolsResults/InteractiveToolsResults'\nimport { formatLookupToolDetails, convertDataToObjectArray } from '../../../services/formatters/lookupTool'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport history from '../../../history'\nimport { isIndividualId } from '../../../utilities/lookupToolUtilities/revalidationTool'\nimport cmsHeaderLogoWithText from '../../../assets/header/cms-header-logo-with-text.svg'\n\nimport './InteractiveToolDetails.scss'\n\nconst minStartOverRowBannerRowCount = 10\n\nconst initialUiState = {\n  isLoadingData: true,\n  isLoadingStats: true,\n  error: null,\n  size: 10,\n  offset: 0\n}\n\nconst customErrorPages = [toolTypes.revalidation]\n\nconst CustomError = ({ provider }) => {\n  const { toolUrlPath } = interactiveToolsStore.useState(state => ({\n    toolUrlPath: state.data.slug\n  }))\n  const title = isIndividualId(provider)\n    ? 'This individual does not belong to any organizations.'\n    : 'This organization does not have any individuals that belong to it.'\n  return (\n    <Container className='custom_error_message'>\n      <h2>{title}</h2>\n      <LinkHandler href={`${toolUrlPath}`} routerData={{ search: history.location.search }}>\n        <Button>\n          Back to results\n        </Button>\n      </LinkHandler>\n      <LinkHandler href={`${toolUrlPath}`}>\n        <Button variant='outline-primary'>\n          Start over\n        </Button>\n      </LinkHandler>\n    </Container>\n  )\n}\n\nconst InteractiveToolDetails = (props) => {\n  const {\n    id,\n    toolType,\n    toolDetailParam,\n    toolDetailValue,\n    toolName,\n    toolUrlPath,\n    isMobile\n  } = props\n  const detailDisplayType = getToolDetailDisplayType(toolType)\n  const resultsTitle = getToolDetailResultsTitle({ [toolDetailParam]: toolDetailValue }, toolType)\n  const [numOfFoundResults, setNumberOfFoundResults] = useState(0)\n  const [detailUiState, setDetailUiState] = useState({ ...initialUiState })\n  const [data, setData] = useState({})\n  const { size, offset, isLoadingData, isLoadingStats, error, detailParams } = detailUiState\n\n  // reset ui state if url params change\n  useEffect(() => {\n    setDetailUiState({\n      ...initialUiState,\n      // even though it is redundant to store props in state, this ensures that when the\n      // url parameters change, the subsequent useEffects will receive all the updated\n      // parameters (including size, offset) at the same time, which prevents requests with old parameters\n      detailParams: { [toolDetailParam]: toolDetailValue }\n    })\n  }, [toolDetailParam, toolDetailValue])\n\n  // call used for loading stats\n  useEffect(() => {\n    async function loadStats () {\n      try {\n        setDetailUiState(state => ({ ...state, isLoadingStats: true }))\n        const apiParams = await getToolDetailStatsApiParams(detailParams, toolType)\n        const stats = await getLookupToolDataStats(id, apiParams)\n        setNumberOfFoundResults(stats.found_rows)\n        setDetailUiState(state => ({ ...state, isLoadingStats: false }))\n      } catch (error) {\n        setDetailUiState(state => ({\n          ...state,\n          error\n        }))\n      }\n    }\n    if (detailParams) {\n      loadStats()\n    }\n  }, [id, detailParams, toolType])\n\n  // call used for loading data\n  useEffect(() => {\n    async function loadData () {\n      try {\n        setDetailUiState(state => ({ ...state, isLoadingData: true }))\n        const dataParams = { offset, size, ...detailParams }\n        const apiParams = await getToolDetailDataApiParams(id, dataParams, toolType)\n        const data = await getLookupToolData(id, apiParams)\n        const detailData = detailDisplayType === DETAIL_DISPLAY_TYPE_TABLE\n          ? formatLookupToolDetails(data, toolType).tableFormat\n          : convertDataToObjectArray(data)\n\n        setData(detailData)\n        setDetailUiState(state => ({ ...state, isLoadingData: false }))\n      } catch (error) {\n        setDetailUiState(state => ({\n          ...state,\n          error\n        }))\n      }\n    }\n\n    if (detailParams) {\n      loadData()\n    }\n  }, [id, detailParams, size, offset, toolType, detailDisplayType])\n\n  useEffect(() => {\n    if (error) {\n      setDetailUiState(state => ({ ...state, isLoadingData: false, isLoadingStats: false }))\n    }\n  }, [error])\n\n  function goToPage (updatedOffset) {\n    setDetailUiState(prevState => ({\n      ...prevState,\n      offset: updatedOffset\n    }))\n    // scroll to top immediately after navigation\n    window.scroll({\n      top: 400,\n      left: 0,\n      behavior: 'smooth'\n    })\n  }\n\n  function handleSetSize (updatedSize) {\n    const updatedOffset = getAdjustedOffset(updatedSize, detailUiState.offset)\n    setDetailUiState(prevState => ({\n      ...prevState,\n      offset: updatedOffset,\n      size: updatedSize\n    }))\n  }\n  const hasPagination = numOfFoundResults > 10\n\n  function renderPagination () {\n    if (!hasPagination) {\n      return null\n    }\n\n    if (detailDisplayType === DETAIL_DISPLAY_TYPE_TABLE) {\n      return (\n        <Pagination\n          limit={detailUiState.size}\n          offset={detailUiState.offset}\n          total={numOfFoundResults}\n          goToPage={e => goToPage(e)}\n        />\n      )\n    } else {\n      return (\n        <InputPagination\n          isLoading={isLoadingStats}\n          limit={detailUiState.size}\n          onUpdateOffset={e => goToPage(e)}\n          offset={detailUiState.offset}\n          total={numOfFoundResults}\n        />\n      )\n    }\n  }\n\n  const shouldDisplayStartOverBanner = (\n    // always show for mobile devices\n    isMobile ||\n    // only show on desktop if row count requirement is met\n    (!isMobile && numOfFoundResults >= minStartOverRowBannerRowCount)\n  )\n\n  const isInitialLoad = isLoadingData && !Object.keys(data).length\n\n  const displayCustomError = customErrorPages.includes(toolType) && data.length === 0\n\n  const { title, detailMeta, parentToolName } = interactiveToolsStore.useState(state => ({\n    title: state.detail.title,\n    detailMeta: state.detail.detailMeta,\n    parentToolName: state.data.name\n  }))\n\n  const detailMetaWithSpaces = []\n  for (let i = 0; i < detailMeta.length; i++) {\n    if (Array.isArray(detailMeta[i].values)) {\n      const formatted = detailMeta[i].values.filter(el => el !== '').join(' ')\n      detailMetaWithSpaces[i] = { label: detailMeta[i].label, values: [formatted] }\n    } else {\n      detailMetaWithSpaces[i] = { label: detailMeta[i].label, values: detailMeta[i].values }\n    }\n  }\n\n  const details = [{ values: [title] }, ...detailMetaWithSpaces]\n\n  return (\n    <div className={cx('DetailResults', { loading: isLoadingData })}>\n      <Container className={cx({ 'loading-container': isLoadingData })}>\n        <div className={cx('LookupToolsSearch__print-header', 'LookupToolsSearch__print-header-details')}>\n          <img src={cmsHeaderLogoWithText} alt='Centers for Medicare & Medicaid Services Data' />\n          <div>{parentToolName}</div>\n          <div>{`data.cms.gov${history.location.pathname}`}</div>\n          <div className='searchValues'>\n            {details.map((detail, i) => (\n              <div key={i}>\n                <div className='LookupToolsSearch__print-header-label'>\n                  {detail?.label ? `${detail.label}: ` : ''}\n                </div> {detail.values}\n              </div>\n            ))}\n          </div>\n        </div>\n        {!displayCustomError && <h2 className='DetailResults__results-title'>{resultsTitle}:</h2>}\n        {isInitialLoad\n          ? <LoadingCover />\n          : (\n            <>\n              {!displayCustomError && (\n                <InteractiveToolsStatusBar\n                  isLoadingStats={isLoadingStats}\n                  size={detailUiState.size}\n                  offset={detailUiState.offset}\n                  numOfFoundResults={numOfFoundResults}\n                  onSetSize={e => handleSetSize(e)}\n                />\n              )}\n              {detailDisplayType === DETAIL_DISPLAY_TYPE_TABLE && (\n                <>\n                  {isLoadingData && <LoadingCover />}\n                  <DynamicTable\n                    hasFooter={false}\n                    data={data}\n                    windowWidth='100%'\n                    toolType={toolType}\n                    hasPagination={hasPagination}\n                    headerClasses={data.headerClasses}\n                    bodyClasses={data.bodyClasses}\n                  />\n                </>\n              )}\n              {detailDisplayType === DETAIL_DISPLAY_TYPE_TABLE && renderPagination()}\n\n              {(detailDisplayType === DETAIL_DISPLAY_TYPE_LIST && !displayCustomError) && (\n                <InteractiveToolResults\n                  data={data}\n                  toolType={toolType}\n                  toolUrl={toolUrlPath}\n                  isLoading={isLoadingData}\n                  isLoadingStats={isLoadingStats}\n                  formValues={{}}\n                  statusBarComponent={null}\n                  paginationComponent={renderPagination()}\n                  error={error}\n                />\n              )}\n              {displayCustomError && <CustomError provider={toolDetailValue} />}\n            </>)}\n      </Container>\n      {shouldDisplayStartOverBanner && (\n        <StartOverBanner\n          toolType={toolType}\n          toolName={toolName}\n          toolUrlPath={toolUrlPath}\n        />\n      )}\n    </div>\n  )\n}\n\nInteractiveToolDetails.propTypes = {\n  id: PropTypes.string,\n  toolType: PropTypes.string,\n  toolDetailParam: PropTypes.string,\n  toolDetailValue: PropTypes.string,\n  toolName: PropTypes.string,\n  toolUrlPath: PropTypes.string,\n  isMobile: PropTypes.bool\n}\n\nCustomError.propTypes = {\n  provider: PropTypes.string\n}\n\nexport default InteractiveToolDetails\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Text from '../../common/Text/Text'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport Tool from '../ToolsList/Tool'\nimport { getToolsPagePath } from '../../../utilities/routeHelpers'\n\nimport './OtherInteractiveTools.scss'\n\nfunction OtherInteractiveTools ({ tools }) {\n  return (\n    <div className='OtherInteractiveTools__outer'>\n      <Container>\n        <Row>\n          <Col lg={4}>\n            <Text className='OtherInteractiveTools__eyebrow' typeFace='Small Text/White'>Interactive tools</Text>\n            <h2 className='OtherInteractiveTools__header'>Find the answers you need.</h2>\n            <LinkHandler\n              className='OtherInteractiveTools__link'\n              href={getToolsPagePath()}\n              label='View all tools'\n            />\n          </Col>\n          <Col lg={8}>\n            <ul className='OtherInteractiveTools__list'>\n              {\n                tools.map((tool) => (\n                  <Tool\n                    key={tool.id}\n                    tool={tool}\n                  />\n                ))\n              }\n            </ul>\n          </Col>\n        </Row>\n      </Container>\n    </div>\n  )\n}\n\nOtherInteractiveTools.propTypes = {\n  tools: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.string,\n    icon: PropTypes.string,\n    title: PropTypes.string.isRequired,\n    description: PropTypes.string.isRequired,\n    url: PropTypes.string.isRequired\n  }))\n}\n\nexport default OtherInteractiveTools\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport MetaHead from '../../layout/MetaHead/MetaHead'\nimport compose from '../../../hocs/compose'\nimport withBoundary from '../../../hocs/withBoundary/withBoundary'\nimport Footer from '../../layout/Footer/Footer'\nimport config from '../../../config'\nimport InteractiveToolsHeroDetailPage from '../../interactiveTools/InteractiveToolsHero/InteractiveToolsHeroDetailPage'\nimport InteractiveToolDetails from '../../interactiveTools/InteractiveToolDetails/InteractiveToolDetails'\nimport OtherInteractiveTools from '../../interactiveTools/OtherInteractiveTools/OtherInteractiveTools'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nconst { metaOrganizationName } = config\n\nconst InteractiveToolDetailsPage = (props) => {\n  const {\n    id,\n    isMobile,\n    title,\n    toolName,\n    toolUrlPath,\n    toolType,\n    toolDetailParam,\n    toolDetailValue,\n    featuredTools\n  } = props\n\n  return (\n    <div className='InteractiveToolDetailsPage'>\n      <MetaHead>\n        <title>{title}{metaOrganizationName}</title>\n      </MetaHead>\n      <div className='InteractiveToolDetailsPage__content pageAnimation'>\n        <InteractiveToolsHeroDetailPage\n          toolDetailParam={toolDetailParam}\n          toolDetailValue={toolDetailValue}\n        />\n        <InteractiveToolDetails\n          id={id}\n          toolDetailParam={toolDetailParam}\n          toolDetailValue={toolDetailValue}\n          toolType={toolType}\n          toolName={toolName}\n          toolUrlPath={toolUrlPath}\n          isMobile={isMobile}\n        />\n        {featuredTools.length > 0 && <OtherInteractiveTools tools={featuredTools} />}\n        <Footer />\n      </div>\n    </div>\n  )\n}\n\nInteractiveToolDetailsPage.propTypes = {\n  id: PropTypes.string,\n  isMobile: PropTypes.bool,\n  title: PropTypes.string,\n  toolName: PropTypes.string,\n  toolType: PropTypes.string,\n  toolUrlPath: PropTypes.string,\n  toolDetailParam: PropTypes.string,\n  toolDetailValue: PropTypes.string,\n  featuredTools: PropTypes.arrayOf(PropTypes.object)\n}\n\nconst InteractiveToolDetailsPageWithStore = (props) => {\n  const { match: { params = {} } } = props\n\n  const storeProps = interactiveToolsStore.useState(state => ({\n    id: state.data.id,\n    toolType: state.data.toolType,\n    toolName: state.data.name,\n    toolUrlPath: state.data.slug,\n    featuredTools: state.data.featuredTools,\n    title: state.detail.title\n  }))\n\n  const { isMobile } = useDisplayContext()\n  const { toolDetailParam, toolDetailValue } = params\n\n  return (\n    <InteractiveToolDetailsPage\n      {...props}\n      isMobile={isMobile}\n      toolDetailParam={toolDetailParam}\n      toolDetailValue={toolDetailValue}\n      {...storeProps}\n    />\n  )\n}\n\nInteractiveToolDetailsPageWithStore.propTypes = {\n  match: PropTypes.shape({ params: PropTypes.object })\n}\n\nexport default compose(withBoundary)(InteractiveToolDetailsPageWithStore)\n\nexport {\n  InteractiveToolDetailsPage,\n  InteractiveToolDetailsPageWithStore\n}\n","import React from 'react'\nimport './index.scss'\nconst MMDHospital = () => {\n  return (\n    <div className='mmd_hospital_wrapper'>\n      <iframe title='hospital' src='/mmd-hospital/tool.html' width='100%' height='1350px' frameBorder='0' />\n    </div>\n  )\n}\n\nexport default MMDHospital\n","import React from 'react'\nimport './index.scss'\nconst MMDPopulation = () => {\n  return (\n    <div className='mmd_population_wrapper'>\n      <iframe title='population' src='/mmd-population/map.html' width='100%' height='1300px' frameBorder='0' />\n    </div>\n  )\n}\n\nexport default MMDPopulation\n","import React from 'react'\nimport InteractiveToolsHero, { ToolSearchHeroTitle, BackToToolsLink } from './InteractiveToolsHero'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\n\nconst InteractiveToolsHeroSearchPage = () => {\n  const { name, description, toolType } = interactiveToolsStore.useState(state => ({\n    name: state.data.name,\n    description: state.data.description,\n    toolType: state.data.toolType\n  }))\n\n  return (\n    <InteractiveToolsHero\n      titleComponent={\n        <ToolSearchHeroTitle\n          title={name}\n          description={description}\n        />\n      }\n      eyebrow={<BackToToolsLink />}\n      toolType={toolType}\n    />\n  )\n}\n\nexport default InteractiveToolsHeroSearchPage\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport ContentPageLayout from '../../common/ContentPageLayout/ContentPageLayout'\nimport ContentPageNav from '../../common/ContentPageLayout/ContentPageNav'\nimport FaqsList from '../../common/FaqsList/FaqsList'\nimport Text from '../../common/Text/Text'\nimport DatasetResources from '../../dataset/DatasetResources/DatasetResources'\nimport DatasetCard from '../../common/Resource/DatasetCard'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport {\n  SECTION_TEXT,\n  SECTION_RESOURCES,\n  SECTION_DATASETS,\n  SECTION_FAQS\n} from '../../../services/formatters/lookupTool'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nimport './InteractiveToolsSearchLanding.scss'\nimport ResourceSmallCarousel from '../../common/Resource/ResourceSmallCarousel'\n\nconst InteractiveToolsSearchLanding = (props) => {\n  const { sections } = props\n  const { isMobile } = useDisplayContext()\n\n  const hasSectionData = sections.length > 0\n\n  function renderSection (section) {\n    const {\n      type,\n      description,\n      header\n    } = section\n\n    const leftColOffset = 3\n    let renderedDatasets\n    let datasetDisplay\n\n    switch (type) {\n      case SECTION_TEXT:\n        return (\n          <ComponentShell leftColOffset={leftColOffset}>\n            <h2>{header}</h2>\n            <RichTextField content={section.content} />\n          </ComponentShell>\n        )\n\n      case SECTION_RESOURCES:\n        return (\n          <ComponentShell leftColOffset={leftColOffset}>\n            <h2>{header}</h2>\n            <DatasetResources\n              isTools\n              description={description}\n              resources={section.resources}\n              showAdditionalResources\n            />\n          </ComponentShell>\n        )\n\n      case SECTION_DATASETS:\n        renderedDatasets = section.datasets.map(dataset => (\n          <DatasetCard\n            key={dataset.id}\n            classes={{ container: 'InteractiveToolsSearchLanding__dataset' }}\n            {...dataset}\n          />\n        ))\n\n        if (isMobile) {\n          datasetDisplay = (\n            <ResourceSmallCarousel\n              renderedResources={renderedDatasets}\n              isDatasetCarousel\n            />\n          )\n        } else {\n          datasetDisplay = (\n            <div className='InteractiveToolsSearchLanding__datasets'>\n              {renderedDatasets}\n            </div>\n          )\n        }\n        return (\n          <ComponentShell leftColOffset={leftColOffset}>\n            <h2>{header}</h2>\n            <RichTextField content={description} className='InteractiveToolsSearchLanding__datasets__description' />\n            <Text typeFace='Small Text/MedGray' className='InteractiveToolsSearchLanding__datasets__eyebrow'>Related Datasets</Text>\n            <div className='InteractiveToolsSearchLanding__datasets'>\n              {datasetDisplay}\n            </div>\n          </ComponentShell>\n        )\n\n      case SECTION_FAQS:\n        return (\n          <FaqsList\n            className='InteractiveToolsSearchLanding__faqs'\n            leftColOffset={leftColOffset}\n            header={header}\n            faqs={section.faqs}\n          />\n        )\n\n      default:\n        return null\n    }\n  }\n\n  function renderNav (sectionsData) {\n    const { sections, currentSectionId } = sectionsData\n\n    return (\n      <ContentPageNav\n        className='InteractiveToolsSearchLanding__nav'\n        sections={sections}\n        currentSectionId={currentSectionId}\n      />\n    )\n  }\n\n  // backend sections are not mandatory\n  if (!hasSectionData) return null\n\n  return (\n    <ContentPageLayout\n      className='InteractiveToolsSearchLanding'\n      sections={sections}\n      renderSection={e => renderSection(e)}\n      renderNav={e => renderNav(e)}\n    />\n  )\n}\n\nInteractiveToolsSearchLanding.propTypes = {\n  sections: PropTypes.arrayOf(PropTypes.object)\n}\n\nconst InteractiveToolsSearchLandingWithStore = (props) => {\n  const storeProps = interactiveToolsStore.useState(state => ({\n    sections: state.data.landingPageSections\n  }))\n\n  return (\n    <InteractiveToolsSearchLanding\n      {...props}\n      {...storeProps}\n    />\n  )\n}\n\nexport { InteractiveToolsSearchLanding }\n\nexport default InteractiveToolsSearchLandingWithStore\n","import React, { useRef, useLayoutEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Collapse from 'react-bootstrap/Collapse'\nimport MetaHead from '../../layout/MetaHead/MetaHead'\nimport Footer from '../../layout/Footer/Footer'\nimport BackTopTopBtn from '../../common/BackToTopBtn/BackToTopBtn'\nimport { dispatchRepositionEvent } from '../../common/ContentPageLayout/ContentPageLayout'\nimport config from '../../../config'\nimport ContactBanner from '../../common/ContactBanner/ContactBanner'\nimport { getDefaultSubjectLineForContent } from '../../../utilities/linkHelpers'\nimport InteractiveToolsHeroSearchPage from '../../interactiveTools/InteractiveToolsHero/InteractiveToolsHeroSearchPage'\nimport InteractiveToolsSearchLanding from '../../interactiveTools/InteractiveToolsSearch/InteractiveToolsSearchLanding'\nimport { toolTypes } from '../../../utilities/lookupToolUtilities'\n\nimport scssVar from './InteractiveToolSearchPage.scss'\n\nconst {\n  resultsTransitionTime = '750',\n  tealTheme = 'teal-theme',\n  purpleTheme = 'purple-theme',\n  lightBlueTheme = 'light-blue-theme'\n} = scssVar\n\nconst { metaOrganizationName } = config\n\nexport function getToolThemeClass (toolType) {\n  switch (toolType) {\n    case toolTypes.inpatient:\n      return purpleTheme\n    case toolTypes.prescriber:\n      return tealTheme\n    case toolTypes.physician:\n      return lightBlueTheme\n    case toolTypes.optout:\n      return purpleTheme\n    case toolTypes.revalidation:\n      return tealTheme\n    case toolTypes.marketSaturationCBSA:\n    case toolTypes.marketSaturationStateCounty:\n      return tealTheme\n    default:\n      return purpleTheme\n  }\n}\n\nexport const ExpandingResultsContainer = (props) => {\n  const {\n    children,\n    isSearchActive,\n    hasResults,\n    toolType\n  } = props\n\n  useLayoutEffect(() => {\n    // timeout seems to ensure that repositioning is more consistent\n    setTimeout(() => dispatchRepositionEvent(), 1)\n  }, [hasResults])\n\n  return (\n    <>\n      <div className={cx(\n        'InteractiveToolSearchPage__resultsContainer',\n        getToolThemeClass(toolType),\n        { searchActive: isSearchActive })}\n      >\n        <Collapse\n          timeout={parseInt(resultsTransitionTime, 10) || 500}\n          in={isSearchActive}\n          onEnter={dispatchRepositionEvent}\n          onEntering={dispatchRepositionEvent}\n          onEntered={dispatchRepositionEvent}\n          onExit={dispatchRepositionEvent}\n          onExiting={dispatchRepositionEvent}\n          onExited={dispatchRepositionEvent}\n        >\n          <div>\n            {children}\n          </div>\n        </Collapse>\n        <div className='waves-highlight' />\n      </div>\n    </>\n  )\n}\n\nExpandingResultsContainer.propTypes = {\n  children: PropTypes.any,\n  // indicates whether search is active, regardless of results\n  isSearchActive: PropTypes.bool,\n  // indicates if results are present, used to fire off reposition event\n  hasResults: PropTypes.bool,\n  toolType: PropTypes.string\n}\n\nconst InteractiveToolSearchPage = (props) => {\n  const {\n    name,\n    contactInfo,\n    metaTags,\n    children\n  } = props\n  const startRef = useRef(null)\n  const stopRef = useRef(null)\n\n  return (\n    <div className='InteractiveToolSearchPage'>\n      <MetaHead metaTags={metaTags}>\n        <title>{name}{metaOrganizationName}</title>\n      </MetaHead>\n      <div className='InteractiveToolSearchPage__content pageAnimation'>\n        <BackTopTopBtn\n          startRef={startRef}\n          stopRef={stopRef}\n          thresholdTop={800}\n        />\n        <div ref={startRef} />\n        <InteractiveToolsHeroSearchPage />\n        {children}\n        <InteractiveToolsSearchLanding />\n        <div ref={stopRef} />\n        <ContactBanner\n          {...contactInfo}\n          subjectLine={getDefaultSubjectLineForContent(name)}\n        />\n        <Footer />\n      </div>\n    </div>\n  )\n}\n\nInteractiveToolSearchPage.propTypes = {\n  isSearchActive: PropTypes.bool,\n  name: PropTypes.string,\n  contactInfo: PropTypes.object,\n  searchResults: PropTypes.oneOfType([\n    PropTypes.array,\n    PropTypes.bool\n  ]),\n  searchResultsContent: PropTypes.any,\n  metaTags: PropTypes.array,\n  children: PropTypes.any\n}\n\nexport default InteractiveToolSearchPage\n\nexport { InteractiveToolSearchPage }\n","// extracted by mini-css-extract-plugin\nexport default {\"resultsTransitionTime\":\"750\",\"tealTheme\":\"\\\"teal-theme\\\"\",\"purpleTheme\":\"\\\"purple-theme\\\"\",\"lightBlueTheme\":\"\\\"light-blue-theme\\\"\"};","import React from 'react'\nimport MMDHospital from '../CustomTools/mmd-hospital'\nimport MMDPopulation from '../CustomTools/mmd-population'\nimport { InteractiveToolSearchPage } from '../InteractiveToolSearchPage'\nimport interactiveToolsStore from '../../../../stores/interactiveToolsStore'\nimport { toolTypes } from '../../../../utilities/lookupToolUtilities/toolConfigs'\n\nfunction renderMmdComponent (toolType) {\n  switch (toolType) {\n    case toolTypes.mmdHospital:\n      return <MMDHospital />\n    case toolTypes.mmdPopulation:\n      return <MMDPopulation />\n    default:\n      return null\n  }\n}\n\nconst MmdTool = () => {\n  // inject props to component via store\n  const storeProps = interactiveToolsStore.useState(state => ({\n    id: state.data.id,\n    name: state.data.name,\n    contactInfo: state.data.contactInfo,\n    toolType: state.data.toolType,\n    metaTags: state.data.metaTags\n  }))\n\n  return (\n    <InteractiveToolSearchPage {...storeProps} isSearchActive>\n      {renderMmdComponent(storeProps.toolType)}\n    </InteractiveToolSearchPage>\n  )\n}\n\nexport default MmdTool\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport InteractiveToolResults from './InteractiveToolsResults'\nimport InteractiveToolsStatusBar from '../InteractiveToolsStatusBar/InteractiveToolsStatusBar'\nimport InputPagination from '../../common/InputPagination/InputPagination'\nimport { buildLookupToolUiQueryString } from '../../../utilities/lookupToolUtilities'\nimport history from '../../../history'\nimport { getAdjustedOffset } from '../../../utilities/searchPageHelpers'\n\nconst InteractiveToolResultsSearchPage = props => {\n  const storeProps = interactiveToolsStore.useState(state => ({\n    data: state.search.results,\n    toolType: state.data.toolType,\n    toolUrl: state.data.slug,\n    isLoading: state.search.isLoading,\n    isInitialLoad: state.search.isInitialLoad,\n    isLoadingStats: state.search.isLoadingStats,\n    size: state.search.size,\n    offset: state.search.offset,\n    numOfFoundResults: state.search.numOfFoundResults,\n    sort: state.search.sort,\n    formValues: state.search.formValues,\n    toolName: state.data.name\n  }))\n\n  const { onUpdateOffset, toolConfig } = props\n  const { size, offset, sort, formValues, isLoadingStats, numOfFoundResults, toolName } = storeProps\n\n  function handleUpdateOffset (updatedOffset) {\n    const queryString = buildLookupToolUiQueryString({\n      offset: updatedOffset,\n      size: size,\n      sort,\n      formValues\n    })\n\n    history.push({\n      search: queryString\n    })\n\n    onUpdateOffset()\n  }\n\n  function handleSetSize (updatedSize) {\n    const updatedOffset = getAdjustedOffset(updatedSize, offset)\n\n    const queryString = buildLookupToolUiQueryString({\n      offset: updatedOffset,\n      size: updatedSize,\n      sort,\n      formValues\n    })\n\n    history.push({\n      search: queryString\n    })\n  }\n\n  return (\n    <InteractiveToolResults\n      {...storeProps}\n      toolConfig={toolConfig}\n      toolName={toolName}\n      showPrintHeader\n      statusBarComponent={\n        <InteractiveToolsStatusBar\n          className='SearchStatusBar'\n          onSetSize={e => handleSetSize(e)}\n          isLoadingStats={isLoadingStats}\n          offset={offset}\n          size={size}\n          numOfFoundResults={numOfFoundResults}\n        />\n      }\n      paginationComponent={\n        <InputPagination\n          isLoading={isLoadingStats}\n          limit={size}\n          total={numOfFoundResults}\n          offset={offset}\n          onUpdateOffset={e => handleUpdateOffset(e)}\n        />\n      }\n    />\n  )\n}\n\nInteractiveToolResultsSearchPage.propTypes = {\n  onUpdateOffset: PropTypes.func,\n  toolConfig: PropTypes.object\n}\n\nexport default InteractiveToolResultsSearchPage\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\n\nconst ToolTypeaheadList = (props) => {\n  const {\n    data,\n    error,\n    isLoading,\n    onClick\n  } = props\n\n  return (\n    <ul className='InteractiveToolsSearchTypeaheadList__data-container'>\n      {!error && !isLoading && data.map((row, i) => {\n        const { listItem, value } = row\n        return (\n          <li className='InteractiveToolsSearchTypeaheadList__row' key={i} onMouseDown={() => onClick(value)}>\n            <Text typeFace='Body/18pt/Black/L' domElement='p' className='InteractiveToolsSearchTypeaheadList__row__org'>{listItem.name}</Text>\n            <Text typeFace='Body/18pt/Black/L' domElement='p' className='InteractiveToolsSearchTypeaheadList__row__location'>{listItem.location}</Text>\n          </li>\n        )\n      })}\n    </ul>\n  )\n}\n\nToolTypeaheadList.propTypes = {\n  data: PropTypes.arrayOf(PropTypes.shape({\n    listItem: PropTypes.shape({ name: PropTypes.string, location: PropTypes.string }), // the formatted list item for easy consumption\n    result: PropTypes.object, // the raw result,\n    value: PropTypes.object // object that should be used as form value entries\n  })),\n  error: PropTypes.any,\n  isLoading: PropTypes.bool.isRequired,\n  onClick: PropTypes.func.isRequired\n}\n\nexport default ToolTypeaheadList\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Select from 'react-select'\nimport cx from 'classnames'\nimport { ReactComponent as SortDownIcon } from '../../../assets/fontawesome/solid/sort-down.svg'\n\nimport config from '../../../config'\n\nconst {\n  stateFipsMapping\n} = config\n\nconst fipsKeys = Object.keys(stateFipsMapping)\nconst stateKeys = fipsKeys.filter(key => key < 60)\nconst territoryKeys = fipsKeys.filter(key => key >= 60)\nconst DISABLED_COLOR = '#5B616A'\nconst DISABLED_BACKGROUND_COLOR = '#E0E1E4'\n\nexport const stateSelectListWithoutTerritories = [\n  ...createStateOptions(stateKeys)\n]\n\nexport const stateSelectList = [\n  ...createStateOptions(stateKeys),\n  ...createStateOptions(territoryKeys)\n]\n\nexport function createStateOptions (fipsKeys) {\n  return fipsKeys.map(key => ({\n    fips: key,\n    label: stateFipsMapping[key].name,\n    value: stateFipsMapping[key].abbreviation\n  })).sort((a, b) => a.label > b.label ? 1 : -1)\n}\n\nconst DropdownIndicator = (props) => {\n  const { hasValue, selectProps, isDisabled } = props\n  return hasValue && selectProps.isClearable\n    ? null\n    : (\n      <span className='InteractiveToolsSearch__select__indicator-wrapper'>\n        <SortDownIcon style={isDisabled ? { color: DISABLED_COLOR } : {}} />\n      </span>\n    )\n}\n\nDropdownIndicator.propTypes = {\n  hasValue: PropTypes.bool,\n  isDisabled: PropTypes.bool,\n  selectProps: PropTypes.shape({\n    isClearable: PropTypes.bool\n  })\n}\n\nconst colorStyles = {\n  singleValue: (styles, { isDisabled }) => ({ ...styles, color: isDisabled ? DISABLED_COLOR : styles.color }),\n  control: (styles, { isDisabled }) => ({ ...styles, backgroundColor: isDisabled ? DISABLED_BACKGROUND_COLOR : styles.backgroundColor })\n}\n\nconst InteractiveToolsSearchSelect = (props) => {\n  const {\n    className,\n    ...otherProps\n  } = props\n  return (\n    <Select\n      className={cx('InteractiveToolsSearch__selectContainer', className)}\n      styles={colorStyles}\n      {...otherProps}\n    />\n  )\n}\n\nInteractiveToolsSearchSelect.propTypes = {\n  isClearable: PropTypes.bool,\n  classNamePrefix: PropTypes.string,\n  components: PropTypes.object,\n  isMulti: PropTypes.bool,\n  className: PropTypes.string,\n  value: PropTypes.shape({ value: PropTypes.any, label: PropTypes.string }),\n  name: PropTypes.string,\n  placeholder: PropTypes.string,\n  options: PropTypes.arrayOf(PropTypes.shape({ value: PropTypes.any, label: PropTypes.string }).isRequired),\n  onChange: PropTypes.func.isRequired\n}\n\nInteractiveToolsSearchSelect.defaultProps = {\n  isClearable: true,\n  classNamePrefix: 'InteractiveToolsSearch__select',\n  components: { DropdownIndicator },\n  isMulti: false,\n  value: null\n}\n\nexport const InteractiveSearchToolsStateSelect = (props) => {\n  const { value, ...otherProps } = props\n  const selectValue = stateSelectList.find(option => option.value === value) || null\n\n  return (\n    <InteractiveToolsSearchSelect\n      className='InteractiveToolsSearch__state'\n      placeholder='State'\n      options={stateSelectList}\n      value={selectValue}\n      {...otherProps}\n    />\n  )\n}\n\nInteractiveSearchToolsStateSelect.propTypes = {\n  ...InteractiveToolsSearchSelect.propTypes,\n  value: PropTypes.string // state abbreviation\n}\n\nexport default InteractiveToolsSearchSelect\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Form from 'react-bootstrap/Form'\n\nexport const NPI_MAX_CHAR = 10\nexport const CCN_MAX_CHAR = 6\n\nexport const FilteredInput = (props) => {\n  const {\n    valueFilter,\n    onChange,\n    ...otherProps\n  } = props\n\n  function handleChange (e) {\n    const value = e.target.value\n    const filteredValue = valueFilter(value)\n    // overwrite raw value with filtered value\n    e.target.value = filteredValue\n    onChange(e)\n  }\n\n  return (\n    <Form.Control\n      {...otherProps}\n      onChange={e => handleChange(e)}\n    />\n  )\n}\n\nFilteredInput.propTypes = {\n  valueFilter: PropTypes.func.isRequired,\n  name: PropTypes.string.isRequired,\n  placeholder: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  value: PropTypes.string.isRequired,\n  disabled: PropTypes.bool,\n  maxLength: PropTypes.number\n}\n\n// only numeric\nconst npiRegexFilter = value => value.replace(/\\D/g, '')\n\nexport const NpiInput = (props) => {\n  return (\n    <FilteredInput\n      placeholder='Enter 10-digit NPI number'\n      valueFilter={npiRegexFilter}\n      maxLength={NPI_MAX_CHAR}\n      // Moving props down below to be able to override default values.\n      {...props}\n    />\n  )\n}\n\n// only alphanumeric\nconst ccnRegexFilter = value => value.replace(/[^a-z0-9]/gi, '')\n\nexport const CcnInput = (props) => {\n  return (\n    <FilteredInput\n      {...props}\n      placeholder='Enter 6-character CCN'\n      valueFilter={ccnRegexFilter}\n      maxLength={CCN_MAX_CHAR}\n    />\n  )\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Button from 'react-bootstrap/Button'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Typeahead from '../../common/Typeahead/Typeahead'\nimport ToolTypeaheadList from './InteractiveToolsSearchTypeaheadLists'\nimport { InteractiveSearchToolsStateSelect } from './InteractiveToolsSearchSelect'\nimport { CcnInput } from './InteractiveToolsSearchInputs'\nimport {\n  INPATIENT_PROVIDER_NAME,\n  INPATIENT_STATE,\n  INPATIENT_CCN,\n  INPATIENT_CITY,\n  getTypeaheadData\n} from '../../../utilities/lookupToolUtilities/inpatientTool'\n\nconst InteractiveToolsSearchInpatient = props => {\n  const {\n    uuid,\n    formValues,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    onTextChange,\n    onTypeaheadClick,\n    typeaheadSize\n  } = props\n\n  const currentStateAbbreviation = formValues[INPATIENT_STATE]\n\n  function handleGetTypeaheadData (value) {\n    return getTypeaheadData(uuid, { value, size: typeaheadSize })\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='inpatient-lookup-form'>\n      <Row>\n        <Form.Group as={Col} lg={7} controlId='inpatientLookupToolProviderName' className='form-group'>\n          <Form.Label>Provider name</Form.Label>\n          <Typeahead\n            name={INPATIENT_PROVIDER_NAME}\n            initialSearchValue={formValues[INPATIENT_PROVIDER_NAME] ? formValues[INPATIENT_PROVIDER_NAME] : ''}\n            onChange={onTextChange}\n            getTypeaheadData={e => handleGetTypeaheadData(e)}\n            onRequestSearch={onSubmit}\n            onTypeaheadClick={onTypeaheadClick}\n            placeholder='Enter provider name'\n            listComponent={ToolTypeaheadList}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={5} controlId='inpatientLookupToolCcnNumber' className='form-group'>\n          <Form.Label>CCN number</Form.Label>\n          <CcnInput\n            name={INPATIENT_CCN}\n            onChange={onTextChange}\n            value={formValues[INPATIENT_CCN] ? formValues[INPATIENT_CCN] : ''}\n          />\n        </Form.Group>\n      </Row>\n\n      <Row>\n        <Form.Group as={Col} lg={3} controlId='inpatientLookupToolLocationCity' className='form-group'>\n          <Form.Label>Location</Form.Label>\n          <Form.Control\n            name={INPATIENT_CITY}\n            placeholder='City'\n            onChange={onTextChange}\n            value={formValues[INPATIENT_CITY] ? formValues[INPATIENT_CITY] : ''}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={2} controlId='inpatientLookupToolLocationState' className='form-group'>\n          <Form.Label visuallyHidden>State</Form.Label>\n          <InteractiveSearchToolsStateSelect\n            name={INPATIENT_STATE}\n            className='InteractiveToolsSearch__state'\n            value={currentStateAbbreviation}\n            onChange={onSelectChange(INPATIENT_STATE)}\n          />\n        </Form.Group>\n        <Col\n          lg={{ span: 5, offset: 2 }}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {!isEmpty(formValues) &&\n            <Button\n              className='InteractiveToolsSearch__form__clear animated fadeIn'\n              onClick={onClearAll}\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit'\n            disabled={isLoading || isEmpty(formValues)}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            Find Provider\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchInpatient.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.object.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onTextChange: PropTypes.func.isRequired,\n  onTypeaheadClick: PropTypes.func.isRequired,\n  typeaheadSize: PropTypes.number\n}\n\nexport default InteractiveToolsSearchInpatient\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Button from 'react-bootstrap/Button'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Typeahead from '../../common/Typeahead/Typeahead'\nimport ToolTypeaheadList from './InteractiveToolsSearchTypeaheadLists'\nimport { InteractiveSearchToolsStateSelect } from './InteractiveToolsSearchSelect'\nimport { NpiInput } from './InteractiveToolsSearchInputs'\nimport {\n  PRESCRIBER_FIRST_NAME,\n  PRESCRIBER_LAST_NAME,\n  PRESCRIBER_STATE,\n  PRESCRIBER_NPI,\n  PRESCRIBER_CITY,\n  getTypeaheadData\n} from '../../../utilities/lookupToolUtilities/prescriberTool'\n\nconst InteractiveToolsSearchPrescriber = props => {\n  const {\n    formValues,\n    uuid,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    onTextChange,\n    onTypeaheadClick,\n    typeaheadSize\n  } = props\n\n  const currentStateAbbreviation = formValues[PRESCRIBER_STATE]\n\n  function handleGetTypeaheadData (value) {\n    return getTypeaheadData(uuid, { value, size: typeaheadSize })\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='prescriber-lookup-form'>\n      <Row>\n        <Form.Group as={Col} lg={5} controlId='prescriberLookupToolProviderLastName' className='form-group'>\n          <Form.Label>Provider name</Form.Label>\n          <Typeahead\n            name={PRESCRIBER_LAST_NAME}\n            initialSearchValue={formValues[PRESCRIBER_LAST_NAME] ? formValues[PRESCRIBER_LAST_NAME] : ''}\n            onChange={onTextChange}\n            getTypeaheadData={e => handleGetTypeaheadData(e)}\n            onRequestSearch={onSubmit}\n            onTypeaheadClick={onTypeaheadClick}\n            placeholder='Enter provider last name'\n            listComponent={ToolTypeaheadList}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={4} controlId='prescriberLookupToolProviderFirstName' className='form-group'>\n          <Form.Label visuallyHidden>Provider first name</Form.Label>\n          <Form.Control\n            className='hasNoLabel'\n            name={PRESCRIBER_FIRST_NAME}\n            placeholder='Enter provider first name'\n            onChange={onTextChange}\n            value={formValues[PRESCRIBER_FIRST_NAME] ? formValues[PRESCRIBER_FIRST_NAME] : ''}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={3} controlId='prescriberLookupToolNpiNumber' className='form-group'>\n          <Form.Label>NPI number</Form.Label>\n          <NpiInput\n            name={PRESCRIBER_NPI}\n            onChange={onTextChange}\n            value={formValues[PRESCRIBER_NPI] ? formValues[PRESCRIBER_NPI] : ''}\n          />\n        </Form.Group>\n\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={3} controlId='prescriberLookupToolLocationCity' className='form-group'>\n          <Form.Label>Location</Form.Label>\n          <Form.Control\n            name={PRESCRIBER_CITY}\n            placeholder='City'\n            onChange={onTextChange}\n            value={formValues[PRESCRIBER_CITY] ? formValues[PRESCRIBER_CITY] : ''}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={2} controlId='prescriberLookupToolLocationState' className='form-group'>\n          <Form.Label visuallyHidden>State</Form.Label>\n          <InteractiveSearchToolsStateSelect\n            name={PRESCRIBER_STATE}\n            className='InteractiveToolsSearch__state'\n            value={currentStateAbbreviation}\n            onChange={onSelectChange(PRESCRIBER_STATE)}\n          />\n        </Form.Group>\n        <Col\n          lg={{ span: 5, offset: 2 }}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {!isEmpty(formValues) &&\n            <Button\n              className='InteractiveToolsSearch__form__clear'\n              onClick={onClearAll}\n              variant='primary'\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit'\n            disabled={isLoading || isEmpty(formValues)}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            Find Provider\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchPrescriber.propTypes = {\n  formValues: PropTypes.object.isRequired,\n  uuid: PropTypes.string.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onTextChange: PropTypes.func.isRequired,\n  onTypeaheadClick: PropTypes.func.isRequired,\n  typeaheadSize: PropTypes.number\n}\n\nexport default InteractiveToolsSearchPrescriber\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Button from 'react-bootstrap/Button'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Typeahead from '../../common/Typeahead/Typeahead'\nimport ToolTypeaheadList from './InteractiveToolsSearchTypeaheadLists'\nimport { InteractiveSearchToolsStateSelect } from './InteractiveToolsSearchSelect'\nimport { NpiInput } from './InteractiveToolsSearchInputs'\nimport {\n  PHYSICIAN_FIRST_NAME,\n  PHYSICIAN_LAST_NAME,\n  PHYSICIAN_NPI,\n  PHYSICIAN_CITY,\n  PHYSICIAN_STATE,\n  getTypeaheadData\n} from '../../../utilities/lookupToolUtilities/physicianTool'\n\nconst InteractiveToolsSearchPhysician = props => {\n  const {\n    uuid,\n    formValues,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    onTextChange,\n    onTypeaheadClick\n  } = props\n\n  const currentStateAbbreviation = formValues[PHYSICIAN_STATE]\n\n  function handleGetTypeaheadData (value) {\n    return getTypeaheadData(uuid, { value, size: 5 })\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='physician-lookup-form'>\n      <Row>\n        <Form.Group as={Col} lg={5} controlId='prescriberLookupToolProviderLastName' className='form-group'>\n          <Form.Label>Provider name</Form.Label>\n          <Typeahead\n            name={PHYSICIAN_LAST_NAME}\n            initialSearchValue={formValues[PHYSICIAN_LAST_NAME] ? formValues[PHYSICIAN_LAST_NAME] : ''}\n            onChange={onTextChange}\n            getTypeaheadData={e => handleGetTypeaheadData(e)}\n            onRequestSearch={onSubmit}\n            onTypeaheadClick={onTypeaheadClick}\n            placeholder='Enter provider last name or organization name'\n            listComponent={ToolTypeaheadList}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={4} controlId='prescriberLookupToolProviderFirstName' className='form-group'>\n          <Form.Label visuallyHidden>Provider first name</Form.Label>\n          <Form.Control\n            className='hasNoLabel'\n            name={PHYSICIAN_FIRST_NAME}\n            placeholder='Enter provider first name'\n            onChange={onTextChange}\n            value={formValues[PHYSICIAN_FIRST_NAME] ? formValues[PHYSICIAN_FIRST_NAME] : ''}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={3} controlId='prescriberLookupToolNpiNumber' className='form-group'>\n          <Form.Label>NPI number</Form.Label>\n          <NpiInput\n            name={PHYSICIAN_NPI}\n            onChange={onTextChange}\n            value={formValues[PHYSICIAN_NPI] ? formValues[PHYSICIAN_NPI] : ''}\n          />\n        </Form.Group>\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={3} controlId='prescriberLookupToolLocationCity' className='form-group'>\n          <Form.Label>Location</Form.Label>\n          <Form.Control\n            name={PHYSICIAN_CITY}\n            placeholder='City'\n            onChange={onTextChange}\n            value={formValues[PHYSICIAN_CITY] ? formValues[PHYSICIAN_CITY] : ''}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={2} controlId='prescriberLookupToolLocationState' className='form-group'>\n          <Form.Label visuallyHidden>State</Form.Label>\n          <InteractiveSearchToolsStateSelect\n            name={PHYSICIAN_STATE}\n            className='InteractiveToolsSearch__state'\n            value={currentStateAbbreviation}\n            onChange={onSelectChange(PHYSICIAN_STATE)}\n          />\n        </Form.Group>\n        <Col\n          lg={{ span: 5, offset: 2 }}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {!isEmpty(formValues) &&\n            <Button\n              className='InteractiveToolsSearch__form__clear'\n              onClick={onClearAll}\n              variant='primary'\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit'\n            disabled={isLoading || isEmpty(formValues)}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            Find Provider\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchPhysician.propTypes = {\n  formValues: PropTypes.object.isRequired,\n  uuid: PropTypes.string.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onTextChange: PropTypes.func.isRequired,\n  onTypeaheadClick: PropTypes.func.isRequired\n}\n\nexport default InteractiveToolsSearchPhysician\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Row from 'react-bootstrap/Row'\nimport Button from 'react-bootstrap/Button'\nimport Col from 'react-bootstrap/Col'\nimport InteractiveToolsSearchSelect from './InteractiveToolsSearchSelect'\nimport { NpiInput } from './InteractiveToolsSearchInputs'\nimport {\n  OPTOUT_FIRST_NAME,\n  OPTOUT_LAST_NAME,\n  OPTOUT_SPECIALTY,\n  OPTOUT_NPI,\n  OPTOUT_ZIP,\n  getSpecialtyOptions\n} from '../../../utilities/lookupToolUtilities/optoutTool'\n\nconst InteractiveToolsSearchOptout = props => {\n  const {\n    uuid,\n    formValues,\n    onTextChange,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit\n  } = props\n\n  const [specialtyOptions, setSpecialtyOptions] = useState([])\n\n  // load specialties once per uuid; silently fail if error\n  useEffect(() => {\n    getSpecialtyOptions(uuid)\n      .then(options => setSpecialtyOptions(options))\n      .catch(err => console.error('Error retrieving specialties', err))\n  }, [uuid])\n\n  const specialtySelectValue = formValues[OPTOUT_SPECIALTY]\n    ? { value: formValues[OPTOUT_SPECIALTY], label: formValues[OPTOUT_SPECIALTY] }\n    : null\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='inpatient-lookup-form'>\n      <Row>\n        <Form.Group as={Col} lg={5} controlId='optoutLookupToolLastName' className='form-group'>\n          <Form.Label>Provider name</Form.Label>\n          <Form.Control\n            name={OPTOUT_LAST_NAME}\n            placeholder='Enter provider last name'\n            onChange={onTextChange}\n            value={formValues[OPTOUT_LAST_NAME] ? formValues[OPTOUT_LAST_NAME] : ''}\n          />\n        </Form.Group>\n\n        <Form.Group as={Col} lg={4} controlId='optoutLookupToolFirstName' className='form-group'>\n          <Form.Label visuallyHidden>First Name</Form.Label>\n          <Form.Control\n            className='hasNoLabel'\n            name={OPTOUT_FIRST_NAME}\n            placeholder='Enter provider first name'\n            onChange={onTextChange}\n            value={formValues[OPTOUT_FIRST_NAME] ? formValues[OPTOUT_FIRST_NAME] : ''}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={3} controlId='optoutLookupToolNpi' className='form-group'>\n          <Form.Label>NPI number</Form.Label>\n          <NpiInput\n            name={OPTOUT_NPI}\n            onChange={onTextChange}\n            value={formValues[OPTOUT_NPI] ? formValues[OPTOUT_NPI] : ''}\n          />\n        </Form.Group>\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={5} controlId='specialtyInputName' className='form-group'>\n          <Form.Label>Specialty</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={OPTOUT_SPECIALTY}\n            value={specialtySelectValue}\n            placeholder='Select speciality'\n            options={specialtyOptions}\n            onChange={onSelectChange(OPTOUT_SPECIALTY)}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={2} controlId='optoutLookupToolZip' className='form-group'>\n          <Form.Label>ZIP code</Form.Label>\n          <Form.Control\n            name={OPTOUT_ZIP}\n            placeholder='ZIP code'\n            onChange={onTextChange}\n            value={formValues[OPTOUT_ZIP] ? formValues[OPTOUT_ZIP] : ''}\n          />\n        </Form.Group>\n        <Col\n          lg={5}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {!isEmpty(formValues) &&\n            <Button\n              className='InteractiveToolsSearch__form__clear animated fadeIn'\n              onClick={onClearAll}\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit'\n            disabled={isLoading || isEmpty(formValues)}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            Find Provider\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchOptout.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.object.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onTextChange: PropTypes.func.isRequired\n}\n\nexport default InteractiveToolsSearchOptout\n","import React, { createRef, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport dayjs from 'dayjs'\nimport Pikaday from 'pikaday'\n\nimport './DatePicker.scss'\n\nexport const DEFAULT_DATE_STRING_FORMAT = 'MM/DD/YYYY'\n\nconst i18n = {\n  previousMonth: 'Previous Month',\n  nextMonth: 'Next Month',\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  weekdaysShort: ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n}\n\n/**\n * Helper for checking if two dates are the same, including null values\n * @param {object} date1 date to compare (or null/undefined)\n * @param {object} date2 date to conpare (or null undefined)\n */\nfunction isSameDate (date1, date2) {\n  const isSame = (\n    date1 === date2 ||\n    dayjs(date1).isSame(date2)\n  )\n\n  return isSame\n}\n\nclass DatePicker extends React.PureComponent {\n  inputRef = createRef()\n  pikaDayRef = createRef()\n\n  get pikaDayInstance () { return this.pikaDayRef.current }\n\n  get internalDateValue () { return this.pikaDayInstance.getDate() }\n\n  handleDateChange = (date) => {\n    const { onChange } = this.props\n    onChange(date)\n  }\n\n  // upon opening, ensure calendar appears at the chosen date\n  handleOpen = () => {\n    this.pikaDayInstance.gotoDate(this.internalDateValue)\n  }\n\n  dateToString = (date) => {\n    const { dateFormat } = this.props\n    return dayjs(date).format(dateFormat)\n  }\n\n  parseDate = (dateString) => {\n    const dateParsed = new Date(dateString)\n    return dateParsed\n  }\n\n  componentDidUpdate (previousProps) {\n    const { minDate, maxDate, value } = this.props\n\n    // ensure internal minDate+maxDate are up-to-date with passed in props\n    if (!isSameDate(minDate, previousProps.minDate)) { this.pikaDayInstance.setMinDate(minDate) }\n    if (!isSameDate(maxDate, previousProps.maxDate)) { this.pikaDayInstance.setMaxDate(maxDate) }\n\n    // since pikaday has its own internal state, we'll check it against the new prop and update if necessary\n    if (!isSameDate(this.internalDateValue, value)) { this.pikaDayInstance.setDate(value, false) }\n  }\n\n  componentDidMount () {\n    const { value, yearRange } = this.props\n\n    this.pikaDayRef.current = new Pikaday({\n      field: this.inputRef.current,\n      defaultDate: value,\n      setDefaultDate: true,\n      toString: this.dateToString,\n      parse: this.parseDate,\n      onSelect: this.handleDateChange,\n      theme: 'DatePicker__picker',\n      i18n: i18n,\n      yearRange: yearRange,\n      onOpen: this.handleOpen\n      // 👇 helpful for styling 👇\n      // onClose: () => {\n      //   this.pikaDayInstance.show()\n      // },\n      // bound: false\n    })\n  }\n\n  handleUnmount = () => {\n    if (this.pikaDayInstance) {\n      this.pikaDayInstance.destroy()\n    }\n  }\n\n  render () {\n    const { disabled, placeholder, className, name } = this.props\n\n    return (\n      <DatePickerContainer className={className} onUnmount={this.handleUnmount}>\n        <input\n          type='text'\n          readOnly\n          name={name}\n          ref={this.inputRef}\n          disabled={disabled}\n          placeholder={placeholder}\n        />\n      </DatePickerContainer>\n    )\n  }\n}\n\nDatePicker.propTypes = {\n  className: PropTypes.string,\n  name: PropTypes.string,\n  value: PropTypes.instanceOf(Date),\n  onChange: PropTypes.func.isRequired,\n  dateFormat: PropTypes.string,\n  placeholder: PropTypes.string,\n  maxDate: PropTypes.instanceOf(Date),\n  minDate: PropTypes.instanceOf(Date),\n  disabled: PropTypes.bool,\n  yearRange: PropTypes.arrayOf(PropTypes.number)\n}\n\nDatePicker.defaultProps = {\n  dateFormat: DEFAULT_DATE_STRING_FORMAT\n}\n\nconst DatePickerContainer = ({ onUnmount, className, children }) => {\n  useEffect(() => {\n    return () => {\n      onUnmount()\n    }\n  }, [onUnmount])\n\n  return (\n    <div className={cx('DatePicker', className)}>\n      {children}\n    </div>\n  )\n}\n\nDatePickerContainer.propTypes = {\n  onUnmount: PropTypes.func.isRequired,\n  className: PropTypes.string,\n  children: PropTypes.any\n}\n\nexport default DatePicker\n","import React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport omit from 'lodash/omit'\nimport Form from 'react-bootstrap/Form'\nimport Button from 'react-bootstrap/Button'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Typeahead from '../../common/Typeahead/Typeahead'\nimport ToolTypeaheadList from './InteractiveToolsSearchTypeaheadLists'\nimport DatePicker from '../../common/DatePicker/DatePicker'\nimport InteractiveToolsSearchSelect, { InteractiveSearchToolsStateSelect } from './InteractiveToolsSearchSelect'\nimport { NpiInput } from './InteractiveToolsSearchInputs'\nimport {\n  REVALIDATION_ORG_NAME,\n  REVALIDATION_FIRST_NAME,\n  REVALIDATION_LAST_NAME,\n  REVALIDATION_START_DATE,\n  REVALIDATION_END_DATE,\n  REVALIDATION_DATE_FILTER_TYPE,\n  REVALIDATION_STATE,\n  REVALIDATION_NPI,\n  ONLY_DUE_DATE_RECORDS_VALUE,\n  DATE_RANGE_VALUE,\n  ALL_RECORDS_VALUE,\n  getTypeaheadData\n} from '../../../utilities/lookupToolUtilities/revalidationTool'\nimport { parseFormValueDate } from '../../../utilities/lookupToolUtilities'\nimport './InteractiveToolsSearchRevalidation.scss'\n\nconst dateFiterSelectOptions = [\n  { label: 'All records', value: ALL_RECORDS_VALUE },\n  { label: 'Only records with due dates', value: ONLY_DUE_DATE_RECORDS_VALUE },\n  { label: 'Records with due dates in the specified range', value: DATE_RANGE_VALUE }\n]\n\n// per requirements, revalidation year range is 2016 until 10 years from now\nconst datePickerYearRange = [2016, new Date().getFullYear() + 10]\n\nconst InteractiveToolsSearchRevalidation = props => {\n  const {\n    uuid,\n    formValues,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    onTextChange,\n    onDateChange,\n    onTypeaheadClick,\n    typeaheadSize\n  } = props\n  const dateFilterSelection = dateFiterSelectOptions.find(option => option.value === formValues[REVALIDATION_DATE_FILTER_TYPE]) || dateFiterSelectOptions[0]\n  const isDateRangeSelected = dateFilterSelection ? dateFilterSelection.value === DATE_RANGE_VALUE : false\n\n  const currentStateAbbreviation = formValues[REVALIDATION_STATE]\n\n  const startDateString = formValues[REVALIDATION_START_DATE]\n  const endDateString = formValues[REVALIDATION_END_DATE]\n\n  const startDate = parseFormValueDate(startDateString)\n  const endDate = parseFormValueDate(endDateString)\n\n  const isOrgInputPresent = formValues[REVALIDATION_ORG_NAME] && formValues[REVALIDATION_ORG_NAME].trim().length > 0\n  const isFirstNameInputPresent = formValues[REVALIDATION_FIRST_NAME] && formValues[REVALIDATION_FIRST_NAME].trim().length > 0\n  const isLastNameInputPresent = formValues[REVALIDATION_LAST_NAME] && formValues[REVALIDATION_LAST_NAME].trim().length > 0\n  const isIndividualInputPresent = isFirstNameInputPresent || isLastNameInputPresent\n  const isNpiInputPresent = formValues[REVALIDATION_NPI] && formValues[REVALIDATION_NPI].trim().length > 0\n\n  const isOrgInputDisabled = isIndividualInputPresent || isNpiInputPresent\n  const isIndividualInputDisabled = isOrgInputPresent || isNpiInputPresent\n  const isNpiInputDisabled = isOrgInputPresent || isIndividualInputPresent\n\n  // ensure date form values are cleared if date range is de-selected\n  useEffect(() => {\n    if (!isDateRangeSelected) {\n      onDateChange(REVALIDATION_START_DATE)(null)\n      onDateChange(REVALIDATION_END_DATE)(null)\n    }\n  }, [isDateRangeSelected, onDateChange])\n\n  function handleGetOrgTypeahead (value) {\n    return getTypeaheadData(uuid, { value, size: typeaheadSize, name: REVALIDATION_ORG_NAME })\n  }\n\n  function handleGetFirstNameTypeahead (value) {\n    return getTypeaheadData(uuid, { value, size: typeaheadSize, name: REVALIDATION_FIRST_NAME })\n  }\n\n  function handleGetLastNameTypeahead (value) {\n    return getTypeaheadData(uuid, { value, size: typeaheadSize, name: REVALIDATION_LAST_NAME })\n  }\n\n  function handleOnTypeAheadClick (values, field, submitOnClick) {\n    if (submitOnClick) {\n      onTypeaheadClick(values)\n    } else {\n      const value = values[field]\n\n      onTextChange({\n        target: {\n          name: field,\n          value: value\n        }\n      })\n\n      // Remove focus from input field after clicking.\n      const inputField = document.querySelector(`input[name=${field}]`)\n      if (inputField) {\n        inputField.blur()\n      }\n    }\n  }\n\n  function renderButtons (opts) {\n    const { offset = 0 } = opts\n\n    const nonDateInputs = omit(formValues, REVALIDATION_DATE_FILTER_TYPE)\n\n    const hasEmptyDateField = isDateRangeSelected\n      ? !startDate || !endDate\n      : false\n\n    const isDefaultFormState = !!(\n      dateFilterSelection.value === ALL_RECORDS_VALUE &&\n      isEmpty(nonDateInputs)\n    )\n\n    const isFormInvalid = !!(\n      hasEmptyDateField ||\n      isDefaultFormState\n    )\n\n    return (\n      <Form.Group\n        as={Col}\n        lg={{ offset: offset, span: 5 }}\n        className='InteractiveToolsSearch__button-container form-group'\n      >\n        <Row>\n          <Form.Group\n            as={Col}\n            lg={6}\n            className='form-group InteractiveToolsSearch__form__clear-wrapper'\n          >\n            {!isDefaultFormState &&\n              <Button\n                className='InteractiveToolsSearch__form__clear animated fadeIn'\n                onClick={onClearAll}\n              >\n                Clear All\n              </Button>}\n          </Form.Group>\n          <Form.Group\n            as={Col}\n            lg={6}\n            className='form-group InteractiveToolsSearch__form__submit-wrapper'\n          >\n            <Button\n              className='InteractiveToolsSearch__form__submit'\n              disabled={isLoading || isFormInvalid}\n              onClick={onSubmit}\n              type='submit'\n              variant='primary'\n            >\n              Find Provider\n            </Button>\n          </Form.Group>\n        </Row>\n      </Form.Group>\n    )\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='revalidation-lookup-form'>\n      <Row>\n        <Form.Group as={Col} lg={2} controlId='npi' className='form-group'>\n          <Form.Label>Search by NPI</Form.Label>\n          <NpiInput\n            name={REVALIDATION_NPI}\n            onChange={onTextChange}\n            value={formValues[REVALIDATION_NPI] || ''}\n            disabled={isNpiInputDisabled}\n            placeholder='Enter NPI'\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId='orgName' className='form-group'>\n          <Form.Label>Search for an organization</Form.Label>\n          <Typeahead\n            id={REVALIDATION_ORG_NAME}\n            name={REVALIDATION_ORG_NAME}\n            initialSearchValue={formValues[REVALIDATION_ORG_NAME] || ''}\n            onChange={onTextChange}\n            getTypeaheadData={e => handleGetOrgTypeahead(e)}\n            onRequestSearch={onSubmit}\n            onTypeaheadClick={onTypeaheadClick}\n            placeholder='Enter organization name'\n            listComponent={ToolTypeaheadList}\n            disabled={isOrgInputDisabled}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={6} controlId='indName' className='form-group'>\n          <Form.Label>Search for an individual</Form.Label>\n          <Row>\n            <Form.Group as={Col} lg={6} controlId='firstName' className='form-group'>\n              <Typeahead\n                id={REVALIDATION_FIRST_NAME}\n                name={REVALIDATION_FIRST_NAME}\n                initialSearchValue={formValues[REVALIDATION_FIRST_NAME] || ''}\n                onChange={onTextChange}\n                getTypeaheadData={e => handleGetFirstNameTypeahead(e)}\n                onRequestSearch={onSubmit}\n                onTypeaheadClick={(values) => handleOnTypeAheadClick(values, REVALIDATION_FIRST_NAME, false)}\n                placeholder='Enter provider first name'\n                listComponent={ToolTypeaheadList}\n                disabled={isIndividualInputDisabled}\n              />\n            </Form.Group>\n            <Form.Group as={Col} lg={6} controlId='lastName' className='form-group'>\n              <Typeahead\n                id={REVALIDATION_LAST_NAME}\n                name={REVALIDATION_LAST_NAME}\n                initialSearchValue={formValues[REVALIDATION_LAST_NAME] || ''}\n                onChange={onTextChange}\n                getTypeaheadData={e => handleGetLastNameTypeahead(e)}\n                onRequestSearch={onSubmit}\n                onTypeaheadClick={(values) => handleOnTypeAheadClick(values, REVALIDATION_LAST_NAME, false)}\n                placeholder='Enter provider last name'\n                listComponent={ToolTypeaheadList}\n                disabled={isIndividualInputDisabled}\n              />\n            </Form.Group>\n          </Row>\n        </Form.Group>\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={2} controlId='state' className='form-group'>\n          <Form.Label>Location</Form.Label>\n          <InteractiveSearchToolsStateSelect\n            name={REVALIDATION_STATE}\n            className={null}\n            value={currentStateAbbreviation}\n            onChange={onSelectChange(REVALIDATION_STATE)}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={5} controlId='dateFilter' className='form-group'>\n          <Form.Label>Filter records (All, Due Dates Only, Specific Range)</Form.Label>\n          <InteractiveToolsSearchSelect\n            isClearable={false}\n            name={REVALIDATION_DATE_FILTER_TYPE}\n            className='InteractiveToolsSearch__dateFilterType'\n            value={dateFilterSelection}\n            options={dateFiterSelectOptions}\n            onChange={onSelectChange(REVALIDATION_DATE_FILTER_TYPE)}\n          />\n        </Form.Group>\n\n        {isDateRangeSelected && (\n          <Form.Group as={Col} lg={5} className='InteractiveToolsSearch__dateRangeSelect form-group'>\n            <Row>\n              <Form.Group as={Col} lg={6} controlId='startDate' className='form-group InteractiveToolsSearch__start-date'>\n                <Form.Label>From</Form.Label>\n                <DatePicker\n                  name={REVALIDATION_START_DATE}\n                  value={startDate}\n                  onChange={onDateChange(REVALIDATION_START_DATE)}\n                  placeholder='MM/DD/YYYY'\n                  maxDate={endDate}\n                  yearRange={datePickerYearRange}\n                />\n              </Form.Group>\n              <Form.Group as={Col} lg={6} controlId='endDate' className='form-group InteractiveToolsSearch__end-date'>\n                <Form.Label>To</Form.Label>\n                <DatePicker\n                  name={REVALIDATION_END_DATE}\n                  value={endDate}\n                  onChange={onDateChange(REVALIDATION_END_DATE)}\n                  placeholder='MM/DD/YYYY'\n                  disabled={!startDate}\n                  minDate={startDate}\n                  yearRange={datePickerYearRange}\n                />\n              </Form.Group>\n            </Row>\n          </Form.Group>\n        )}\n        {!isDateRangeSelected && renderButtons({ offset: 0 })}\n      </Row>\n      {/* render new row if date inputs are showing */}\n      {isDateRangeSelected && (\n        <Row>\n          {renderButtons({ offset: 6 })}\n        </Row>\n      )}\n    </Form>\n  )\n}\n\nInteractiveToolsSearchRevalidation.propTypes = {\n  formValues: PropTypes.object.isRequired,\n  uuid: PropTypes.string.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onDateChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  onTextChange: PropTypes.func.isRequired,\n  onTypeaheadClick: PropTypes.func.isRequired,\n  typeaheadSize: PropTypes.number\n}\n\nexport default InteractiveToolsSearchRevalidation\n","import { Store } from 'pullstate'\n\nconst initialState = {\n  selectedCounty: {},\n  referencePeriods: []\n}\n\nconst MsStateCountyToolStore = new Store(initialState)\n\nexport default MsStateCountyToolStore\n","import React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Button from 'react-bootstrap/Button'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport InteractiveToolsSearchSelect, { stateSelectListWithoutTerritories as stateSelectList } from './InteractiveToolsSearchSelect'\nimport MsStateCountyToolStore from '../../../stores/MsStateCountyToolStore'\nimport {\n  MS_STATE,\n  MS_COUNTY,\n  MS_REFERENCE_PERIOD,\n  MS_HEALTH_SERVICE_AREA,\n  MS_METRIC,\n  useLoadReferencePeriodSelectList,\n  useLoadHealthServiceAreaSelectList,\n  useLoadMetricSelectList,\n  useLoadCountySelectList\n} from '../../../utilities/lookupToolUtilities/msStateCountyTool'\n\nconst InteractiveToolsSearchMsStateCounty = (props) => {\n  const {\n    uuid,\n    formValues,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    config\n  } = props\n\n  const allStatesSelectValue = { label: config.search_form ? config.search_form.MS_STATE.field_placeholder : '', value: '' }\n  const allCountiesSelectValue = { label: config.search_form ? config.search_form.MS_COUNTY.field_placeholder : '', value: '' }\n\n  const currentStateAbbreviation = formValues[MS_STATE]\n\n  const {\n    isLoading: isLoadingReferencePeriods,\n    selectList: referencePeriodSelectList\n  } = useLoadReferencePeriodSelectList(uuid, config)\n\n  const {\n    isLoading: isLoadingHealthServiceAreas,\n    selectList: healthServiceAreaSelectList\n  } = useLoadHealthServiceAreaSelectList(uuid, config)\n\n  const {\n    isLoading: isLoadingCounties,\n    selectList: countySelectList\n  } = useLoadCountySelectList(uuid, currentStateAbbreviation)\n\n  const {\n    selectList: metricSelectList\n  } = useLoadMetricSelectList(config)\n\n  const selectedReferencePeriodOption = referencePeriodSelectList.find(option => option.value === formValues[MS_REFERENCE_PERIOD]) || null\n  const selectedHealthServiceAreaOption = healthServiceAreaSelectList.find(option => option.value === formValues[MS_HEALTH_SERVICE_AREA]) || null\n  const selectedMetricOption = metricSelectList.find(option => option.value === formValues[MS_METRIC]) || null\n  const selectedStateOption = stateSelectList.find(option => option.value === currentStateAbbreviation) || allStatesSelectValue\n  const selectedCountyOption = countySelectList.find(option => option.value === formValues[MS_COUNTY]) || allCountiesSelectValue\n\n  function handleStateSelectionChange (selectedOption, actionType) {\n    // clear county when state selection changes\n    onSelectChange(MS_COUNTY)(null, 'clear')\n    onSelectChange(MS_STATE)(selectedOption, actionType)\n  }\n\n  function isFormInvalid () {\n    return (\n      isEmpty(formValues[MS_REFERENCE_PERIOD]) ||\n      isEmpty(formValues[MS_HEALTH_SERVICE_AREA]) ||\n      isEmpty(formValues[MS_METRIC])\n    )\n  }\n\n  useEffect(() => {\n    if (isLoadingReferencePeriods) {\n      MsStateCountyToolStore.update(state => {\n        state.referencePeriods = referencePeriodSelectList\n      })\n    }\n  }, [referencePeriodSelectList, isLoadingReferencePeriods])\n\n  if (!config.search_form) {\n    return <div />\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='InteractiveToolsSearch_msStateCounty'>\n      <Row>\n        <Form.Group as={Col} lg={4} controlId={MS_REFERENCE_PERIOD} className='form-group'>\n          <Form.Label>{config.search_form.MS_REFERENCE_PERIOD.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_REFERENCE_PERIOD}\n            value={selectedReferencePeriodOption}\n            placeholder={config.search_form.MS_REFERENCE_PERIOD.field_placeholder}\n            options={referencePeriodSelectList}\n            onChange={onSelectChange(MS_REFERENCE_PERIOD)}\n            isLoading={isLoadingReferencePeriods}\n            loadingMessage={() => 'Loading...'}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId={MS_HEALTH_SERVICE_AREA} className='form-group'>\n          <Form.Label>{config.search_form.MS_HEALTH_SERVICE_AREA.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_HEALTH_SERVICE_AREA}\n            value={selectedHealthServiceAreaOption}\n            placeholder={config.search_form.MS_HEALTH_SERVICE_AREA.field_placeholder}\n            options={healthServiceAreaSelectList}\n            onChange={onSelectChange(MS_HEALTH_SERVICE_AREA)}\n            isLoading={isLoadingHealthServiceAreas}\n            loadingMessage={() => 'Loading...'}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId={MS_METRIC} className='form-group'>\n          <Form.Label>{config.search_form.MS_METRIC.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_METRIC}\n            value={selectedMetricOption}\n            placeholder={config.search_form.MS_METRIC.field_placeholder}\n            options={metricSelectList}\n            onChange={onSelectChange(MS_METRIC)}\n            isClearable={false}\n          />\n        </Form.Group>\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={4} controlId={MS_STATE} className='form-group'>\n          <Form.Label>{config.search_form.MS_STATE.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_STATE}\n            value={selectedStateOption}\n            options={[allStatesSelectValue, ...stateSelectList]}\n            onChange={(value, action) => handleStateSelectionChange(value, action)}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId={MS_COUNTY} className='form-group'>\n          <Form.Label>{config.search_form.MS_COUNTY.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_COUNTY}\n            value={selectedCountyOption}\n            options={countySelectList}\n            onChange={onSelectChange(MS_COUNTY)}\n            isDisabled={!currentStateAbbreviation}\n            loadingMessage={() => 'Loading...'}\n            isLoading={isLoadingCounties}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Col\n          lg={4}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {!isEmpty(formValues) &&\n            <Button\n              className='InteractiveToolsSearch__form__clear auto'\n              onClick={onClearAll}\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit auto'\n            disabled={isLoading || isFormInvalid()}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            View Data\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchMsStateCounty.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.object.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  config: PropTypes.object\n}\n\nexport default InteractiveToolsSearchMsStateCounty\n","import { useEffect, useState } from 'react'\nimport { getLookupToolData } from '../../services/api'\nimport { convertDataToObjectArray } from '../../services/formatters/lookupTool'\n\nexport const MS_CBSA = 'cbsa'\nexport const MS_REFERENCE_PERIOD = 'referencePeriod'\nexport const MS_HEALTH_SERVICE_AREA = 'healthServiceArea'\nexport const MS_METRIC = 'metric'\n\nexport const getMetricFromLookup = (metric, config) => {\n  if (metric && config && config.metricsLookUp) {\n    return config.metricsLookUp[config.metricsLookUp.findIndex(m => m.value === metric)]\n  } else {\n    return 'N/A'\n  }\n}\n\nconst flattenMetric = (metric, config) => {\n  let flattened = ''\n  const foundMetric = getMetricFromLookup(metric, config)\n  const keys = Object.keys(foundMetric)\n  keys.forEach((key, i) => {\n    if (key !== 'label') {\n      flattened += `${foundMetric[key]}`\n      if (i !== keys.length - 1) {\n        flattened += ','\n      }\n    }\n  })\n  return flattened\n}\n\nexport function useLoadReferencePeriodSelectList (uuid, config) {\n  const [isLoading, setIsLoading] = useState(false)\n  const [selectList, setSelectList] = useState([])\n\n  useEffect(() => {\n    async function load () {\n      setIsLoading(true)\n\n      if (!config || !config.columns) {\n        setIsLoading(false)\n        return\n      }\n\n      const params = { columns: [config.columns.REFERENCE_PERIOD_COL], distinct: true }\n      const response = await getLookupToolData(uuid, params)\n      const selectList = convertDataToObjectArray(response, row => {\n        return { value: row[config.columns.REFERENCE_PERIOD_COL], label: row[config.columns.REFERENCE_PERIOD_COL] }\n      })\n\n      selectList.sort((a, b) => {\n        const aDate = Date.parse(a.value.split(' ')[2])\n        const bDate = Date.parse(b.value.split(' ')[2])\n        return bDate - aDate\n      })\n\n      setSelectList(selectList)\n      setIsLoading(false)\n    }\n\n    load()\n  }, [uuid])\n\n  return {\n    isLoading,\n    selectList\n  }\n}\n\nexport function useLoadHealthServiceAreaSelectList (uuid, config) {\n  const [isLoading, setIsLoading] = useState(false)\n  const [selectList, setSelectList] = useState([])\n\n  useEffect(() => {\n    async function load () {\n      setIsLoading(true)\n\n      if (!config || !config.columns) {\n        setIsLoading(false)\n        return\n      }\n\n      const params = { columns: [config.columns.HEALTH_SERVICE_AREA_COL], distinct: true }\n      const response = await getLookupToolData(uuid, params)\n      const selectList = convertDataToObjectArray(response, row => {\n        return { value: row[config.columns.HEALTH_SERVICE_AREA_COL], label: row[config.columns.HEALTH_SERVICE_AREA_COL] }\n      })\n      setSelectList(selectList)\n      setIsLoading(false)\n    }\n\n    load()\n  }, [uuid])\n\n  return {\n    isLoading,\n    selectList\n  }\n}\n\nexport function useLoadCbsaSelectList (uuid, config, selectedReferencePeriodOption, onSelectChange, formValues) {\n  const [isLoading, setIsLoading] = useState(false)\n  const [selectList, setSelectList] = useState([])\n\n  useEffect(() => {\n    async function load () {\n      setIsLoading(true)\n\n      if (!config || !config.columns) {\n        setIsLoading(false)\n        return\n      }\n\n      const params = {\n        columns: selectedReferencePeriodOption ? [config.columns.CBSA_NAME_COL, config.columns.REFERENCE_PERIOD_COL] : [config.columns.CBSA_NAME_COL],\n        distinct: true,\n        filter: selectedReferencePeriodOption ? { conditions: [{ filterName: 'reference_period_filter', column: 'reference_period', operator: '=', value: selectedReferencePeriodOption.value }] } : {},\n        size: 5000\n      }\n\n      const response = await getLookupToolData(uuid, params)\n      const selectList = convertDataToObjectArray(response, row => {\n        return { value: row[config.columns.CBSA_NAME_COL], label: row[config.columns.CBSA_NAME_COL], reference_period: row[config.columns.REFERENCE_PERIOD_COL] }\n      }).filter(el => el.label !== '--ALL--')\n      selectList.unshift({ label: 'All CBSAs', value: 'All CBSAs' })\n      setSelectList(selectList)\n\n      // Check if there is at least one value in the dropdown. If not, reset cbsa list.\n      if (!selectList.some(el => el.value === formValues[MS_CBSA])) {\n        onSelectChange(MS_CBSA)(null, 'clear')\n      }\n      setIsLoading(false)\n    }\n\n    load()\n  }, [uuid, selectedReferencePeriodOption])\n\n  return {\n    isLoading,\n    selectList\n  }\n}\n\n/**\n *\n * @param {object} data\n * @param {object} data.formValues\n * @param {object} data.aggregationLevel\n * @returns\n */\nexport function getToolSearchApiParams (data, config) {\n  const { formValues } = data\n\n  // these are 2 out of 3 necessary form inputs; the other, 'metric' does not\n  // filter the data - it only selects which column is being used to populate the maps\n  const baseInputs = {\n    [MS_REFERENCE_PERIOD]: {\n      filterName: MS_REFERENCE_PERIOD,\n      operator: '=',\n      column: config.columns.REFERENCE_PERIOD_COL\n    },\n    [MS_HEALTH_SERVICE_AREA]: {\n      filterName: MS_HEALTH_SERVICE_AREA,\n      operator: '=',\n      column: config.columns.HEALTH_SERVICE_AREA_COL\n    }\n  }\n\n  const filter = {\n    conditions: []\n  }\n\n  Object.keys(baseInputs).forEach(formKey => {\n    filter.conditions.push({\n      ...baseInputs[formKey],\n      value: formValues[formKey]\n    })\n  })\n\n  const payload = {\n    filter,\n    columns: [\n      config.columns.AGGREGATION_LEVEL_COL,\n      config.columns.CBSA_NAME_COL,\n      config.columns.CBSA_COL,\n      config.columns.REFERENCE_PERIOD_COL,\n      config.columns.HEALTH_SERVICE_AREA_COL,\n      flattenMetric(formValues.metric, config)\n    ],\n    size: 5000\n  }\n\n  return payload\n}\n\nexport function useLoadCbsaDisplayData (uuid, formValues, config) {\n  const [isLoading, setIsLoading] = useState(true)\n  const [data, setData] = useState([])\n  const [selectedCbsa, setSelectedCbsa] = useState({})\n  const [hasChange, setHasChange] = useState(false)\n\n  useEffect(() => {\n    if (!isLoading) {\n      setSelectedCbsa(data.filter(el => el[config.columns.CBSA_NAME_COL] === formValues.cbsa)[0])\n    }\n  }, [formValues.cbsa, isLoading, data])\n\n  useEffect(() => {\n    async function load () {\n      setIsLoading(true)\n\n      const relevantValues = {\n        [MS_CBSA]: formValues[MS_CBSA],\n        [config.columns.CBSA_NAME_COL]: formValues[config.columns.CBSA_NAME_COL],\n        [MS_REFERENCE_PERIOD]: formValues.referencePeriod,\n        [MS_HEALTH_SERVICE_AREA]: formValues.healthServiceArea,\n        [MS_METRIC]: formValues.metric\n      }\n\n      const apiParams = getToolSearchApiParams({\n        formValues: relevantValues\n      }, config)\n      const response = await getLookupToolData(uuid, apiParams)\n      const result = convertDataToObjectArray(response, data => {\n        const underscored = {}\n        Object.keys(data).forEach((key) => {\n          underscored[key.replace(/[ -]/g, '_')] = data[key]\n        })\n        return underscored\n      }) || []\n\n      const changeColumn = config?.metricsLookUp.filter(el => el.value === formValues.metric)[0].change\n      let change = false\n      for (let i = 0; i < result.length; i++) {\n        if (result[i][changeColumn]) {\n          change = true\n          break\n        }\n      }\n      setHasChange(change)\n      setData(result)\n      setIsLoading(false)\n    }\n\n    load()\n  }, [\n    uuid,\n    formValues,\n    config\n  ])\n\n  return {\n    isLoading,\n    selectedCbsa,\n    data,\n    hasChange\n  }\n}\n\nexport const NOT_ASSIGNED_COLOR = '#fff'\nexport const BLUE_1 = '#9BDAF1'\nexport const BLUE_2 = '#02BFE7'\nexport const BLUE_3 = '#0071BC'\nexport const BLUE_4 = '#024378'\nexport const BLUE_5 = '#112E51'\nexport const GREY = '#b3b9c1'\n\nexport const mapLegendData = [\n  {\n    label: 'Geographic Areas Not Assigned to a CBSA',\n    color: NOT_ASSIGNED_COLOR\n  },\n  {\n    label: 'Lowest 25%',\n    color: BLUE_1\n  },\n  {\n    label: 'Second Lowest 25%',\n    color: BLUE_2\n  },\n  {\n    label: 'Third Lowest 25%',\n    color: BLUE_3\n  },\n  {\n    label: 'Top 25% Excl. Extreme Values',\n    color: BLUE_4\n  },\n  {\n    label: 'Extreme Values',\n    color: BLUE_5\n  },\n  {\n    label: 'N/A - See technical guide',\n    color: GREY\n  }\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport Form from 'react-bootstrap/Form'\nimport Row from 'react-bootstrap/Row'\nimport Button from 'react-bootstrap/Button'\nimport Col from 'react-bootstrap/Col'\nimport InteractiveToolsSearchSelect from './InteractiveToolsSearchSelect'\nimport {\n  MS_REFERENCE_PERIOD,\n  MS_HEALTH_SERVICE_AREA,\n  MS_METRIC,\n  MS_CBSA,\n  useLoadCbsaSelectList,\n  useLoadReferencePeriodSelectList,\n  useLoadHealthServiceAreaSelectList\n} from '../../../utilities/lookupToolUtilities/msCbsaTool'\n\nconst InteractiveToolsSearchMsCbsa = (props) => {\n  const {\n    uuid,\n    formValues,\n    isLoading,\n    onClearAll,\n    onSelectChange,\n    onSubmit,\n    config\n  } = props\n\n  const {\n    isLoading: isLoadingReferencePeriods,\n    selectList: referencePeriodSelectList\n  } = useLoadReferencePeriodSelectList(uuid, config)\n\n  const {\n    isLoading: isLoadingHealthServiceAreas,\n    selectList: healthServiceAreaSelectList\n  } = useLoadHealthServiceAreaSelectList(uuid, config)\n\n  const metricSelectList = config && config.metricsLookUp\n    ? config.metricsLookUp.map(metric => { return { label: metric.label, value: metric.value } })\n    : []\n\n  const selectedReferencePeriodOption = referencePeriodSelectList.find(option => option.value === formValues[MS_REFERENCE_PERIOD]) || null\n  const selectedHealthServiceAreaOption = healthServiceAreaSelectList.find(option => option.value === formValues[MS_HEALTH_SERVICE_AREA]) || null\n  const selectedMetricOption = metricSelectList.find(option => option.value === formValues[MS_METRIC]) || null\n\n  const {\n    isLoading: isLoadingCbsa,\n    selectList: cbsaSelectList\n  } = useLoadCbsaSelectList(uuid, config, selectedReferencePeriodOption, onSelectChange, formValues)\n\n  const selectedCbsaOption = cbsaSelectList.find(option => option.value === formValues[MS_CBSA]) || null\n\n  function isFormInvalid () {\n    return (\n      isEmpty(formValues[MS_REFERENCE_PERIOD]) ||\n      isEmpty(formValues[MS_HEALTH_SERVICE_AREA]) ||\n      isEmpty(formValues[MS_METRIC])\n    )\n  }\n\n  if (!config || !config.search_form) {\n    return ''\n  }\n\n  function shouldShowClear () {\n    return !isEmpty(formValues) && (formValues?.referencePeriod || formValues?.healthServiceArea || formValues?.metric || formValues?.cbsa)\n  }\n\n  return (\n    <Form className='InteractiveToolsSearch__form' id='InteractiveToolsSearch_msStateCounty'>\n      <Row>\n        <Form.Group as={Col} lg={4} controlId={MS_REFERENCE_PERIOD} className='form-group'>\n          <Form.Label>{config.search_form.MS_REFERENCE_PERIOD.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_REFERENCE_PERIOD}\n            value={selectedReferencePeriodOption}\n            placeholder={config.search_form.MS_REFERENCE_PERIOD.field_placeholder}\n            options={referencePeriodSelectList}\n            onChange={onSelectChange(MS_REFERENCE_PERIOD)}\n            isLoading={isLoadingReferencePeriods}\n            loadingMessage={() => 'Loading...'}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId={MS_HEALTH_SERVICE_AREA} className='form-group'>\n          <Form.Label>{config.search_form.MS_HEALTH_SERVICE_AREA.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_HEALTH_SERVICE_AREA}\n            value={selectedHealthServiceAreaOption}\n            placeholder={config.search_form.MS_HEALTH_SERVICE_AREA.field_placeholder}\n            options={healthServiceAreaSelectList}\n            onChange={onSelectChange(MS_HEALTH_SERVICE_AREA)}\n            isLoading={isLoadingHealthServiceAreas}\n            loadingMessage={() => 'Loading...'}\n            isClearable={false}\n          />\n        </Form.Group>\n        <Form.Group as={Col} lg={4} controlId={MS_METRIC} className='form-group'>\n          <Form.Label>{config.search_form.MS_METRIC.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_METRIC}\n            value={selectedMetricOption}\n            placeholder={config.search_form.MS_METRIC.field_placeholder}\n            options={metricSelectList}\n            onChange={onSelectChange(MS_METRIC)}\n            isClearable={false}\n          />\n        </Form.Group>\n      </Row>\n      <Row>\n        <Form.Group as={Col} lg={4} controlId={MS_CBSA} className='form-group'>\n          <Form.Label>{config.search_form.MS_CBSA.field_label}</Form.Label>\n          <InteractiveToolsSearchSelect\n            name={MS_CBSA}\n            value={selectedCbsaOption}\n            placeholder={config.search_form.MS_CBSA.field_placeholder}\n            options={cbsaSelectList}\n            onChange={onSelectChange(MS_CBSA)}\n            isLoading={isLoadingCbsa}\n            loadingMessage={() => 'Loading...'}\n            isClearable={false}\n            isDisabled={!selectedReferencePeriodOption}\n          />\n        </Form.Group>\n        <Col\n          lg={4}\n          className='InteractiveToolsSearch__button-container'\n        >\n          {shouldShowClear() &&\n            <Button\n              className='InteractiveToolsSearch__form__clear auto'\n              onClick={onClearAll}\n            >\n              Clear All\n            </Button>}\n          <Button\n            className='InteractiveToolsSearch__form__submit auto'\n            disabled={isLoading || isFormInvalid()}\n            onClick={onSubmit}\n            type='submit'\n            variant='primary'\n          >\n            View Data\n          </Button>\n        </Col>\n      </Row>\n    </Form>\n  )\n}\n\nInteractiveToolsSearchMsCbsa.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.object.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  onClearAll: PropTypes.func.isRequired,\n  onSelectChange: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  config: PropTypes.object\n}\n\nexport default InteractiveToolsSearchMsCbsa\n","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 SvgArrowRightArrowLeft(_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: \"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\"\n  })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgArrowRightArrowLeft);\nexport default __webpack_public_path__ + \"static/media/arrow-right-arrow-left.a78aea5bf928f22a1e438e8a34803c7f.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useEffect } from 'react'\nimport cx from 'classnames'\nimport get from 'lodash/get'\nimport pickBy from 'lodash/pickBy'\nimport identity from 'lodash/identity'\nimport isEmpty from 'lodash/isEmpty'\nimport PropTypes from 'prop-types'\nimport interactiveToolsStore, { refreshLookupToolSearchResults } from '../../../stores/interactiveToolsStore'\nimport Breadcrumb from 'react-bootstrap/Breadcrumb'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport InpatientTool from './InteractiveToolsSearchInpatient'\nimport PrescriberTool from './InteractiveToolsSearchPrescriber'\nimport PhysicianTool from './InteractiveToolsSearchPhysician'\nimport OptoutTool from './InteractiveToolsSearchOptout'\nimport RevalidationTool from './InteractiveToolsSearchRevalidation'\nimport MarketSaturationStateCounty from './InteractiveToolsSearchMsStateCounty'\nimport MarketSaturationCbsa from './InteractiveToolsSearchMsCbsa'\nimport { buildLookupToolUiQueryString, toolTypes } from '../../../utilities/lookupToolUtilities'\nimport { getLookupToolSlugByToolType } from '../../../services/api'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport history from '../../../history'\nimport compose from '../../../hocs/compose'\nimport withUserAgreementModal from '../../../hocs/withUserAgreementModal/withUserAgreementModal'\nimport { DEFAULT_DATE_STRING_FORMAT } from '../../common/DatePicker/DatePicker'\nimport config from '../../../config'\nimport dayjs from 'dayjs'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { ReactComponent as ArrowRightLeftIcon } from '../../../assets/fontawesome/solid/arrow-right-arrow-left.svg'\n\nimport './InteractiveToolsSearch.scss'\n\nconst {\n  inpatient,\n  prescriber,\n  physician,\n  optout,\n  revalidation,\n  marketSaturationStateCounty,\n  marketSaturationCBSA\n} = toolTypes\n\nconst {\n  typeaheadMaxRows,\n  mobileTypeaheadMaxRows,\n  apiSite\n} = config\n\nconst getToolForm = (toolType) => {\n  let component = null\n\n  switch (toolType) {\n    case inpatient:\n      component = InpatientTool\n      break\n    case prescriber:\n      component = PrescriberTool\n      break\n    case physician:\n      component = PhysicianTool\n      break\n    case optout:\n      component = OptoutTool\n      break\n    case revalidation:\n      component = RevalidationTool\n      break\n    case marketSaturationStateCounty:\n      component = MarketSaturationStateCounty\n      break\n    case marketSaturationCBSA:\n      component = MarketSaturationCbsa\n      break\n    default:\n      break\n  }\n\n  return component\n}\n\nconst getFormTitle = (toolType) => {\n  switch (toolType) {\n    case marketSaturationStateCounty:\n    case marketSaturationCBSA:\n      return 'Select values:'\n    default:\n      return 'Find a Provider:'\n  }\n}\n\nconst InteractiveToolsSearchBreadcrumb = ({ path, label }) => {\n  return (\n\n    <Breadcrumb aria-label='switch tools' className='InteractiveToolsSearch__breadcrumb'>\n      <Breadcrumb.Item active>\n        <LinkHandler className='InteractiveToolsHero__eyebrow' noBs href={path}>\n          <div className='icon_wrapper'>\n            <div className='icon_wrapper__inner'>\n              <ArrowRightLeftIcon />\n            </div>\n            <span>{label}</span>\n          </div>\n        </LinkHandler>\n      </Breadcrumb.Item>\n    </Breadcrumb>\n\n  )\n}\n\nInteractiveToolsSearchBreadcrumb.propTypes = {\n  path: PropTypes.string.isRequired,\n  label: PropTypes.string.isRequired\n}\n\nconst InteractiveToolsSearch = (props) => {\n  const {\n    formValues,\n    isLoading,\n    size,\n    toolType,\n    isSearchActive,\n    uuid,\n    getUserAgreementStatus,\n    licenseAgreement,\n    submitHandler,\n    onSearchSubmit,\n    config\n  } = props\n\n  const { isMobile } = useDisplayContext()\n  const [searchBreadcrumbPath, setSearchBreadcrumbPath] = useState('')\n  const [searchBreadcrumbLabel, setSearchBreadcrumbLabel] = useState('')\n\n  useEffect(() => {\n    const getBreadcrumbParams = async () => {\n      switch (toolType) {\n        case marketSaturationStateCounty:\n          setSearchBreadcrumbLabel('Switch to CBSA mapping tool')\n          setSearchBreadcrumbPath(await getLookupToolSlugByToolType(marketSaturationCBSA))\n          break\n        case marketSaturationCBSA:\n          setSearchBreadcrumbLabel('Switch to state-county mapping tool')\n          setSearchBreadcrumbPath(await getLookupToolSlugByToolType(marketSaturationStateCounty))\n          break\n      }\n    }\n    getBreadcrumbParams()\n  })\n\n  const handleClearAll = () => {\n    interactiveToolsStore.update(state => {\n      state.search.formValues = {}\n    })\n\n    if (history.location.search !== '') {\n      history.push({ search: '' })\n    }\n  }\n\n  /**\n   * function returned from this is tailored for react-select, which executes the\n   * onChange callback with this signature: (selectOption, actionType)\n   * where actionType indicates whether this is from a clear or select action; if clear action,\n   * we will delete the field and value from formValues\n   * @param {string} field\n   * @returns {function}\n   */\n  const handleSelectChange = field => (selectOption, actionType) => {\n    const { action } = actionType\n    interactiveToolsStore.update(state => {\n      if (action === 'clear') {\n        delete state.search.formValues[field]\n      } else {\n        state.search.formValues[field] = get(selectOption, 'value')\n      }\n    })\n  }\n\n  const handleDateChange = field => dateValue => {\n    // store date as string since it is more consumable for forms and URLs\n    // (form components will convert string to date object as necessary)\n    const dateStringValue = dateValue\n      ? dayjs(dateValue).format(DEFAULT_DATE_STRING_FORMAT)\n      : null\n\n    // if a blank/null date is passed, remove the field from form values,\n    // otherwise, store the date string\n    interactiveToolsStore.update(state => {\n      if (!dateStringValue) {\n        delete state.search.formValues[field]\n      } else {\n        state.search.formValues[field] = dateStringValue\n      }\n    })\n  }\n\n  const handleFormSubmit = e => {\n    if (e && e.preventDefault) {\n      e.preventDefault()\n    }\n\n    const formValuesTrunced = pickBy(formValues, identity)\n    handleSubmit(formValuesTrunced)\n  }\n\n  // generate query string from form data & update url as needed\n  const handleSubmit = async formValuesTrunced => {\n    const isSearchAllowed = await isLicenseAgreedTo()\n\n    if (isSearchAllowed) {\n      if (submitHandler) {\n        submitHandler(formValuesTrunced)\n        return\n      }\n\n      const payload = {\n        // if hitting submit button, assume a fresh search and start\n        // at page 0, even if same form values\n        offset: 0,\n        size,\n        formValues: formValuesTrunced\n      }\n\n      const queryString = buildLookupToolUiQueryString(payload)\n\n      if (queryString === history.location.search) {\n        // refresh without pushing duplicate history entries\n        refreshLookupToolSearchResults(uuid, payload)\n      } else {\n        history.push({\n          search: queryString\n        })\n      }\n\n      onSearchSubmit()\n    }\n  }\n\n  const handleTextChange = ({ target }) => {\n    const { name, value } = target\n    // remove prop from store so empty string prop doesn't enable clear all\n    if (value === '') {\n      interactiveToolsStore.update(state => {\n        delete state.search.formValues[name]\n      })\n    } else {\n      interactiveToolsStore.update(state => {\n        state.search.formValues[name] = value\n      })\n    }\n  }\n\n  // when user selects a typeahead item fill form & submit\n  const handleSetAllFormValues = values => {\n    handleSubmit(values)\n  }\n\n  /**\n   *  License is 'agreed to' if the user accepted the license terms or\n   *  no license is attached to resource\n   */\n  const isLicenseAgreedTo = async () => {\n    if (isEmpty(licenseAgreement)) return true\n\n    const { hasAgreed } = await getUserAgreementStatus(uuid, { licenseAgreement })\n    return hasAgreed\n  }\n\n  const FormComponent = getToolForm(toolType)\n\n  const commonFormProps = {\n    uuid,\n    config,\n    formValues,\n    isLoading,\n    typeaheadSize: isMobile ? mobileTypeaheadMaxRows : typeaheadMaxRows,\n    onClearAll: handleClearAll,\n    onSelectChange: handleSelectChange,\n    onSubmit: handleFormSubmit,\n    onTextChange: handleTextChange,\n    onTypeaheadClick: handleSetAllFormValues,\n    onDateChange: handleDateChange\n  }\n\n  // in case a tool is not defined, fail gracefully\n  if (!FormComponent) return null\n\n  const customIcon = interactiveToolsStore?.currentState?.data?.fieldMediaImage1 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage1\n  const altText = interactiveToolsStore.currentState?.data?.iconAltText\n  return (\n    <div className='InteractiveToolsSearch__wrapper'>\n      <Container className='icon__wrapper'>\n        <div className='InteractiveToolsSearch__wrapper__icon'>\n          <img src={customIcon} alt={altText} />\n        </div>\n      </Container>\n      <div className='InteractiveToolsSearch__inner'>\n        <Container>\n          {(searchBreadcrumbPath && searchBreadcrumbLabel) ? (\n            <Row><InteractiveToolsSearchBreadcrumb path={searchBreadcrumbPath} label={searchBreadcrumbLabel} /></Row>\n          ) : null}\n          <Row>\n            <h2 className={cx({ verb: true, withSearchBreadcrumb: (searchBreadcrumbPath && searchBreadcrumbLabel) })}>{getFormTitle(toolType)}\n            </h2>\n          </Row>\n          <Row>\n            <FormComponent {...commonFormProps} />\n          </Row>\n        </Container>\n      </div>\n      <div className={cx('InteractiveToolsSearch__waves', toolType, { searchActive: isSearchActive })} />\n    </div>\n  )\n}\n\nInteractiveToolsSearch.propTypes = {\n  formValues: PropTypes.object.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n  size: PropTypes.number.isRequired,\n  toolType: PropTypes.string.isRequired,\n  isSearchActive: PropTypes.bool.isRequired,\n  uuid: PropTypes.string.isRequired,\n  getUserAgreementStatus: PropTypes.func.isRequired,\n  licenseAgreement: PropTypes.shape({\n    id: PropTypes.string,\n    title: PropTypes.string,\n    body: PropTypes.shape({\n      value: PropTypes.string\n    })\n  }),\n  // optional override of default submit handler\n  submitHandler: PropTypes.func,\n  onSearchSubmit: PropTypes.func,\n  config: PropTypes.object\n}\n\nconst InteractiveToolsSearchWithStore = (props) => {\n  const storeProps = interactiveToolsStore.useState(state => ({\n    formValues: state.search.formValues,\n    size: state.search.size,\n    isLoading: state.search.isLoading,\n    toolType: state.data.toolType,\n    uuid: state.data.id,\n    licenseAgreement: state.data.licenseAgreement\n  }))\n\n  return (\n    <InteractiveToolsSearch\n      {...storeProps}\n      {...props}\n    />\n  )\n}\n\nconst InteractiveToolsSearchEnhanced = compose(withUserAgreementModal('InteractiveToolsSearchEnhanced'))(InteractiveToolsSearchWithStore)\n\nexport default InteractiveToolsSearchEnhanced\n\nexport {\n  InteractiveToolsSearch,\n  getToolForm\n}\n","import React, { useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { parseQueryStringForLookupToolSearch } from '../../../../utilities/lookupToolUtilities'\nimport { resolveURLForEnvironment } from '../../../../utilities/linkHelpers'\nimport interactiveToolsStore, {\n  refreshLookupToolSearchResults,\n  cancelActiveSearchRequests,\n  initialState\n} from '../../../../stores/interactiveToolsStore'\nimport InteractiveToolSearchPage, { ExpandingResultsContainer } from '../InteractiveToolSearchPage'\nimport InteractiveToolResultsSearchPage from '../../../interactiveTools/InteractiveToolsResults/InteractiveToolResultsSearchPage'\nimport InteractiveToolsSearch from '../../../interactiveTools/InteractiveToolsSearch/InteractiveToolsSearch'\nimport config from '../../../../config'\n\nimport './DefaultToolSearchPage.scss'\n\nconst DefaultToolSearchPage = (props) => {\n  const toolConfig = props.config\n  const { history } = props\n  const queryString = history.location.search\n  const searchResultsRef = useRef(null)\n\n  // inject props to component via store\n  const storeProps = interactiveToolsStore.useState(state => ({\n    id: state.data.id,\n    name: state.data.name,\n    contactInfo: state.data.contactInfo,\n    searchResults: state.search.results,\n    searchLoading: state.search.isLoading,\n    toolType: state.data.toolType,\n    metaTags: state.data.metaTags,\n    fieldIframeSection: state.data.fieldIframeSection\n  }))\n\n  const { name, id, toolType, searchResults, fieldIframeSection } = storeProps\n  const isSearchActive = !!(queryString && queryString.length > 0)\n\n  useEffect(() => {\n    if (!isSearchActive) {\n      // clear saved scroll position when search is cleared/fresh page load\n      interactiveToolsStore.update(state => {\n        state.search.scrollPosition = 0\n      })\n    }\n  }, [isSearchActive])\n\n  useEffect(() => {\n    // save scroll position upon leaving page\n    return () => {\n      interactiveToolsStore.update(state => {\n        state.search.scrollPosition = window.pageYOffset\n      })\n    }\n  }, [])\n\n  useEffect(() => {\n    // before initiating new request or going back to default state,\n    // cancel any active requests\n    cancelActiveSearchRequests()\n\n    if (isSearchActive) {\n      // get payload from query string for loading lookup tool search\n      const refreshPayload = parseQueryStringForLookupToolSearch(queryString)\n      refreshLookupToolSearchResults(id, refreshPayload)\n    } else {\n      // ensure search state is reset if navigating to default/starting view\n      interactiveToolsStore.update(state => {\n        state.search = { ...initialState.search }\n      })\n    }\n  }, [queryString, isSearchActive, id])\n\n  useEffect(() => {\n    // upon umount, cancel any active requests\n    return () => {\n      cancelActiveSearchRequests()\n    }\n  }, [])\n\n  function scrollToResults () {\n    const currentScrollTop = window.pageYOffset\n    const top = searchResultsRef.current.getBoundingClientRect().top\n    window.scrollTo({\n      top: top + currentScrollTop,\n      behavior: 'smooth'\n    })\n  }\n  const src = resolveURLForEnvironment(fieldIframeSection?.fieldExternalLink?.uri, config)\n  const iframeJSX = (\n    <div className='iFrameOuterContainer'>\n      <iframe aria-label={name} src={src} width={fieldIframeSection?.fieldIframeWidth} height={fieldIframeSection?.fieldIframeHeight} />\n    </div>)\n  const searchResultsJSX = (\n    <>\n      <div ref={searchResultsRef} />\n      <ExpandingResultsContainer\n        isSearchActive={isSearchActive}\n        toolType={toolType}\n        hasResults={searchResults.length > 0}\n      >\n        <InteractiveToolResultsSearchPage toolConfig={toolConfig} onUpdateOffset={e => scrollToResults(e)} />\n      </ExpandingResultsContainer>\n    </>\n  )\n\n  return (\n    <InteractiveToolSearchPage {...props} isSearchActive={isSearchActive} {...storeProps}>\n      <InteractiveToolsSearch\n        onSearchSubmit={e => scrollToResults(e)}\n        isSearchActive={isSearchActive}\n      />\n      {fieldIframeSection ? iframeJSX : searchResultsJSX}\n    </InteractiveToolSearchPage>\n  )\n}\n\nDefaultToolSearchPage.propTypes = {\n  history: PropTypes.object,\n  config: PropTypes.object\n}\n\nexport default DefaultToolSearchPage\n","import React, { useState, useEffect } from 'react'\nimport ReactDOM from 'react-dom'\nimport PropTypes from 'prop-types'\nimport MapBoxMap from '../../../common/MapboxMap/MapBoxMap'\nimport Text from '../../../common/Text/Text'\nimport FeatureParser from '../../../common/MapboxMap/FeatureParser'\nimport { cantLoadBanner, getLoadingSection } from '../../../../utilities/displayUtilities'\nimport config from '../../../../config'\nimport cloneDeep from 'lodash/cloneDeep'\n\nimport {\n  NEEDS_CONTRAST,\n  useLoadMapDisplayData,\n  MsMapPaint,\n  MapLegendDisplay,\n  getMetricFromLookup,\n  mapLegendData\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport { setupHoverPopup } from '../../../../utilities/mapboxUtilities'\n\nimport './MsMapView.scss'\n\nconst MsNationalMapView = ({ formValues, uuid, handleIsLoading, handleHasData, toolConfig }) => {\n  const { isLoading, data } = useLoadMapDisplayData(uuid, formValues, toolConfig)\n  const [mapAlertBanner, setMapAlertBanner] = useState({})\n  const { metric } = formValues\n  const [mapConfig, setMapConfig] = useState({\n    settings: {\n      style: config.mapBoxStateAbbrStyle,\n      center: [\n        -97,\n        38.88\n      ],\n      zoom: 3,\n      pitch: 8\n    },\n    navigationControl: {\n      isEnabled: true,\n      position: 'bottom-left'\n    },\n    geoCoder: {\n      isEnabled: false\n    },\n    layer: {\n      beforeId: 'state-label',\n      id: 'state-number-layer',\n      source: 'state-data',\n      type: 'fill'\n    },\n    popup: {\n      layerId: 'state-number-layer',\n      callback: 'mousemove',\n      options: {\n        closeButton: false,\n        closeOnClick: false,\n        maxWidth: '400px'\n      }\n    }\n  })\n\n  useEffect(() => {\n    handleIsLoading(isLoading)\n  }, [isLoading, handleIsLoading])\n\n  useEffect(() => {\n    if (data.length === 0) {\n      handleHasData(false)\n    } else {\n      handleHasData(true)\n    }\n  }, [data, handleHasData])\n\n  const loadMapData = (map) => {\n    import('../../../../assets/data/state_geojson.json')\n      .then(geoJson => {\n        const mapGeoFeatures = createNationalMapFeatures(geoJson, data)\n        getMapLayerPaint()\n        map.addSource('state-data', { type: 'geojson', data: { features: mapGeoFeatures, type: 'FeatureCollection' } })\n        map.addLayer(mapConfig.layer, 'state-label')\n        setupHoverPopup(map, mapConfig.popup, renderPopup)\n        adjustTextContrast(map, mapGeoFeatures)\n      })\n  }\n\n  const createNationalMapFeatures = (geoJson, data) => {\n    const features = cloneDeep(geoJson.features)\n    data.forEach(result => {\n      const index = features.findIndex(feature => feature.properties.state_abbr === result.state && result.county === '--ALL--')\n      if (index !== -1) {\n        for (const prop in result) {\n          features[index].properties[prop] = (isNaN(result[prop]) || result[prop] === '') ? result[prop] : Number(result[prop])\n        }\n      }\n    })\n\n    features.forEach(feature => {\n      Object.keys(data[0]).forEach(key => {\n        if (feature.properties[key] === undefined) {\n          feature.properties[key] = ''\n        }\n      })\n    })\n    return features\n  }\n\n  const getMapLayerPaint = () => {\n    const tempMapConfig = Object.assign({}, mapConfig)\n    tempMapConfig.layer.paint = MsMapPaint(getMetricFromLookup(metric, toolConfig).color)\n    setMapConfig(tempMapConfig)\n  }\n\n  const adjustTextContrast = (map, features) => {\n    // base paint object to start the list of cases\n    const paint = {\n      'text-color': [\n        'case'\n      ]\n    }\n    // go through the features and if their color is dark\n    // enough to need text contrast, add that state to the case\n    features.forEach(feature => {\n      const index = NEEDS_CONTRAST.indexOf(feature.properties[getMetricFromLookup(metric, toolConfig).color])\n      if (index !== -1) {\n        paint['text-color'].push(['==',\n          [\n            'concat',\n            ['get', 'label']\n          ],\n          feature.properties.state\n        ],\n        '#fff')\n      }\n    })\n    // if it isnt a part of the cases, the text will be black\n    paint['text-color'].push('#000')\n    // this layer paints over the existing text\n    map.addLayer({\n      id: 'white-text',\n      type: 'symbol',\n      source: 'composite',\n      'source-layer': 'wddse_data_cms_gov_state_codes',\n      layout: {\n        'text-allow-overlap': true,\n        'text-field': [\n          'to-string',\n          ['get', 'label']\n        ],\n        'text-size': ['step', ['zoom'], 11, 5, 18],\n        'text-font': [\n          'DIN Pro Medium',\n          'Arial Unicode MS Regular'\n        ]\n      },\n      paint: paint\n    })\n    map.removeLayer('state-codes')\n  }\n\n  function renderPopup (feature) {\n    const formulas = {\n      state: { formula: 'state_name' },\n      data: [\n        {\n          label: 'Value: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).value})`\n        },\n        {\n          label: '% Change: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).change})`\n        }\n      ]\n    }\n    const popupProps = FeatureParser(feature, formulas)\n    const domNode = document.createElement('div')\n\n    ReactDOM.render(\n      <Text className='MsNationalMap__popup' typeFace='Rubik-Regular' domElement='div'>\n        <div className='title'>{popupProps.state}</div>\n        <ul>\n          {popupProps.data.map(({ label, value }, i) => {\n            return (\n              <li key={i}>\n                {`${label}${value}`}\n              </li>\n            )\n          })}\n        </ul>\n      </Text>,\n      domNode\n    )\n    return domNode\n  }\n\n  return (\n    <div className='MsMap__wrapper'>\n      {isLoading && getLoadingSection()}\n      {!isLoading && data.length > 0 && toolConfig && toolConfig.metricsLookUp ? (\n        <div className='map-wrapper'>\n          <div className='mapview_wrapper'>\n            <div className='mapbox_wrapper'>\n              <MapBoxMap\n                error={err => console.log('ms mapbox error:' + JSON.stringify(err))}\n                onMapLoad={map => loadMapData(map)}\n                settings={mapConfig.settings}\n                navigationControl={mapConfig.navigationControl}\n                geoCoder={mapConfig.geoCoder}\n                alertBanner={mapAlertBanner}\n                onAlertBannerClear={() => setMapAlertBanner({})}\n                OnMapError={() => { setMapAlertBanner(cantLoadBanner) }}\n              />\n            </div>\n            <MapLegendDisplay legendData={mapLegendData} cssClass='' />\n          </div>\n        </div>\n      ) : null}\n      {!isLoading && data.length === 0 && toolConfig.metricsLookUp ? (\n        <div className='no_data'>\n          <Text typeFace='02 H2/Black/L'>Sorry, no data available</Text>\n          <Text typeFace='Body/18pt/Black/L'>The selected values may not be available for this reference period or location. Please try different selections.</Text>\n        </div>\n      ) : null}\n    </div>\n  )\n}\n\nMsNationalMapView.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.shape({\n    state: PropTypes.string,\n    county: PropTypes.string,\n    referencePeriod: PropTypes.string,\n    healthServiceArea: PropTypes.string,\n    metric: PropTypes.string\n  }),\n  handleIsLoading: PropTypes.func,\n  handleHasData: PropTypes.func,\n  toolConfig: PropTypes.object\n}\n\nexport default MsNationalMapView\n","import React, { useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport PropTypes from 'prop-types'\nimport MapBoxMap from '../../../common/MapboxMap/MapBoxMap'\nimport Text from '../../../common/Text/Text'\nimport FeatureParser from '../../../common/MapboxMap/FeatureParser'\nimport { cantLoadBanner, getLoadingSection } from '../../../../utilities/displayUtilities'\nimport cloneDeep from 'lodash/cloneDeep'\nimport config from '../../../../config'\nimport {\n  useLoadMapDisplayData,\n  MsMapPaint,\n  MapLegendDisplay,\n  stateAbbrToMeta,\n  getMetricFromLookup,\n  mapLegendData\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport { setupHoverPopup } from '../../../../utilities/mapboxUtilities'\n\nconst MsStateMapView = ({ formValues, uuid, handleIsLoading, handleHasData, toolConfig }) => {\n  const { isLoading, data } = useLoadMapDisplayData(uuid, formValues, toolConfig)\n  const [mapAlertBanner, setMapAlertBanner] = useState({})\n  const { referencePeriod, healthServiceArea, metric, state, county } = formValues\n  const [map, setMap] = useState(null)\n  const [mapConfig, setMapConfig] = useState({\n    settings: {\n      style: config.mapBoxCountyStyle,\n      pitch: 0\n    },\n    navigationControl: {\n      isEnabled: true,\n      position: 'bottom-left'\n    },\n    geoCoder: {\n      isEnabled: false\n    },\n    layer: {\n      beforeId: 'counties',\n      id: 'counties-layer',\n      source: 'counties',\n      type: 'fill'\n    },\n    popup: {\n      layerId: 'counties-layer',\n      callback: 'mousemove',\n      options: {\n        closeButton: false,\n        closeOnClick: false,\n        maxWidth: '400px'\n      }\n    }\n  })\n  const [jumpTo, setJumpTo] = useState({})\n  const [stateCounties, setStateCounties] = useState([])\n\n  useEffect(() => {\n    // if any of the drop downs change, outside of county,\n    // we need to repaint based on the selections\n    const mapConfigCopy = cloneDeep(mapConfig)\n    mapConfigCopy.layer.paint = MsMapPaint(getMetricFromLookup(metric, toolConfig).color)\n    setMapConfig(mapConfigCopy)\n    // this updates the jumpTo function of MapBox making the\n    // view focus on the selected state\n    setJumpTo({\n      center: stateAbbrToMeta[state].center,\n      zoom: stateAbbrToMeta[state].zoom\n    })\n    // TODO: Rework so mapConfig isnt a dependency\n    // eslint-disable-next-line\n  }, [referencePeriod, healthServiceArea, metric, state])\n\n  useEffect(() => {\n    // if there is a county selected in the DDL, highlight it\n    if (county) {\n      if (map && map.getStyle()) {\n        const countyFP = county.split(',')[0]\n        map.setFilter('counties-highlighted', [\n          '==',\n          'COUNTYFP',\n          countyFP\n        ])\n        map.setFilter('counties-highlighted-2', [\n          '==',\n          'COUNTYFP',\n          countyFP\n        ])\n      }\n    } else {\n      // remove the outline from the map if there is no selected county\n      if (map && map.getStyle()) {\n        map.setFilter('counties-highlighted', [\n          '==',\n          '',\n          -1\n        ])\n        map.setFilter('counties-highlighted-2', [\n          '==',\n          '',\n          -1\n        ])\n      }\n    }\n  }, [county, map, stateCounties])\n\n  useEffect(() => {\n    handleIsLoading(isLoading)\n  }, [isLoading, handleIsLoading])\n\n  useEffect(() => {\n    if (data.length === 0) {\n      handleHasData(false)\n    } else {\n      handleHasData(true)\n    }\n  }, [data, handleHasData])\n\n  const loadMapData = (map) => {\n    import('../../../../assets/data/county_geojson.json')\n      .then(geoJson => {\n        const filteredGeojson = geoJson.features.filter(feature => Number(feature.properties.STATEFP) === stateAbbrToMeta[formValues.state].fips)\n        const mapGeoFeatures = createStateMapFeatures(filteredGeojson, data)\n        setStateCounties(mapGeoFeatures.map(feature => feature.properties))\n        map.addSource('counties', { type: 'geojson', data: { features: mapGeoFeatures, type: 'FeatureCollection' } })\n        map.addLayer(mapConfig.layer, 'counties')\n        // initialization of the layer that outlines counties\n        // at first it doesnt highlight anything\n        map.addLayer(\n          {\n            id: 'counties-highlighted-2',\n            type: 'line',\n            source: 'counties',\n            paint: {\n              'line-width': 2,\n              'line-color': '#000000',\n              'line-offset': -2\n            },\n            layout: {\n              'line-join': 'round'\n            },\n            // Display none by adding a\n            // filter with an empty string.\n            filter: ['==', '', -1]\n          }\n        )\n        map.addLayer(\n          {\n            id: 'counties-highlighted',\n            type: 'line',\n            source: 'counties',\n            paint: {\n              'line-width': 2,\n              'line-color': '#fff'\n            },\n            layout: {\n              'line-join': 'round'\n            },\n            // Display none by adding a\n            // filter with an empty string.\n            filter: ['==', '', -1]\n          }\n        )\n\n        setupHoverPopup(map, mapConfig.popup, renderPopup)\n        setMap(map)\n      })\n  }\n\n  const createStateMapFeatures = (geoJson, data) => {\n    const features = cloneDeep(geoJson)\n    data.forEach(result => {\n      const index = features.findIndex(feature => Number(feature.properties.COUNTYFP) === Number(result[toolConfig.columns.COUNTY_FIPS_COL]) && result.county !== '--ALL--')\n      if (index !== -1) {\n        for (const prop in result) {\n          features[index].properties[prop] = (isNaN(result[prop]) || result[prop] === '') ? result[prop] : Number(result[prop])\n        }\n      }\n    })\n\n    features.forEach(feature => {\n      Object.keys(data[0]).forEach(key => {\n        if (feature.properties[key] === undefined) {\n          feature.properties[key] = ''\n        }\n      })\n    })\n    return features\n  }\n\n  function renderPopup (feature) {\n    const formulas = {\n      state: { formula: '' },\n      data: [\n        {\n          label: 'Value: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).value})`\n        }\n      ]\n    }\n    const popupProps = FeatureParser(feature, formulas)\n    const domNode = document.createElement('div')\n    ReactDOM.render(\n      <div className='MsNationalMap__popup'>\n        <div className='title'>{feature.properties.NAME}</div>\n        <ul>\n          {popupProps.data.map(({ label, value }, i) => {\n            return (\n              <li key={i}>\n                {`${label}${value}`}\n              </li>\n            )\n          })}\n        </ul>\n      </div>,\n      domNode\n    )\n    return domNode\n  }\n\n  return (\n    <div className='MsMap__wrapper'>\n      {isLoading && getLoadingSection()}\n      {!isLoading && data.length > 0 ? (\n        <div className='map-wrapper'>\n          <div className='mapview_wrapper'>\n            <div className='mapbox_wrapper'>\n              <MapBoxMap\n                error={err => console.log('ms mapbox error:' + JSON.stringify(err))}\n                onMapLoad={loadMapData}\n                settings={mapConfig.settings}\n                navigationControl={mapConfig.navigationControl}\n                resetOverride\n                geoCoder={mapConfig.geoCoder}\n                alertBanner={mapAlertBanner}\n                onAlertBannerClear={() => setMapAlertBanner({})}\n                jumpTo={jumpTo}\n                OnMapError={() => { setMapAlertBanner(cantLoadBanner) }}\n              />\n            </div>\n            <MapLegendDisplay legendData={mapLegendData} />\n          </div>\n        </div>\n      ) : null}\n      {!isLoading && data.length === 0 ? (\n        <div className='no_data'>\n          <Text typeFace='02 H2/Black/L'>Sorry, no data available</Text>\n          <Text typeFace='Body/18pt/Black/L'>The selected values may not be available for this reference period or location. Please try different selections.</Text>\n        </div>\n      ) : null}\n    </div>\n  )\n}\n\nMsStateMapView.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.shape({\n    state: PropTypes.string,\n    county: PropTypes.string,\n    referencePeriod: PropTypes.string,\n    healthServiceArea: PropTypes.string,\n    metric: PropTypes.string\n  }),\n  handleIsLoading: PropTypes.func,\n  handleHasData: PropTypes.func,\n  toolConfig: PropTypes.object\n}\n\nexport default MsStateMapView\n","import React, { useEffect, useState, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { loadTableViewCountyData } from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport DataTable, { useReactTableProps } from '../../../dataset/DataTable/DataTable'\nimport InputPagination from '../../../common/InputPagination/InputPagination'\nimport useDisplayContext from '../../../../hooks/useDisplayContext'\nimport DataTableStatusBar from '../../../dataset/DataTable/DataTableStatusBar'\nimport { getAdjustedOffset } from '../../../../utilities/searchPageHelpers'\nimport get from 'lodash/get'\nimport { LoadingSpinner } from '../../../common/LoadingCover/LoadingCover'\nimport './MsTableView.scss'\n\nconst initialState = {\n  isFullScreen: false,\n  limit: 10,\n  offset: 0,\n  keywords: '',\n  sort: { sortBy: null, sortOrder: null },\n  isFilterOpen: false,\n  filterButtonRef: null\n}\n\nexport const MsTableView = ({ formValues, uuid, config }) => {\n  const tableSectionRef = useRef(null)\n  const { isMobile } = useDisplayContext()\n  const [isLoading, setIsLoading] = useState(true)\n  const [userSelections, setUserSelections] = useState({ ...initialState })\n  const { sort, limit, offset } = userSelections\n  const [tableData, setTableData] = useState({\n    _data: null,\n    metaData: null\n  })\n  const [statusBarData, setStatusBarData] = useState({\n    numOfTotalResults: 0,\n    numOfFoundResults: 0\n  })\n  const {\n    _data,\n    metaData\n  } = tableData\n  const dataHeaders = get(metaData, 'headers')\n  const columnTypes = get(metaData, 'data_file_meta_data.csvColumnTypes')\n  const columnFormatting = get(metaData, 'data_file_meta_data.csvDisplayFormatting')\n  const reactTableProps = useReactTableProps({ dataHeaders: dataHeaders, dataRows: _data, isMobile: isMobile })\n  const {\n    columns,\n    headerGroups,\n    getTableProps,\n    getTableBodyProps,\n    rows,\n    prepareRow\n  } = reactTableProps\n  const showSpinner = isLoading && !userSelections.isFullScreen && !(columns && dataHeaders)\n\n  useEffect(() => {\n    setIsLoading(true)\n    const { limit, offset, sort } = userSelections\n    loadTableViewCountyData(uuid, formValues, { limit: limit, offset: offset, sort: sort }, config)\n      .then(res => {\n        setStatusBarData({\n          numOfTotalResults: parseInt(get(res.meta, 'total_rows', 0), 10),\n          numOfFoundResults: parseInt(get(res.meta, 'found_rows', 0), 10)\n        })\n        setTableData({\n          _data: res.data,\n          metaData: res.meta\n        })\n        setIsLoading(false)\n      })\n  }, [uuid, formValues, userSelections, config])\n\n  useEffect(() => {\n    if (userSelections.isFullScreen) {\n      document.body.classList.add('dataset-full-screen')\n    } else {\n      document.body.classList.remove('dataset-full-screen')\n    }\n  }, [userSelections.isFullScreen])\n\n  function handleSetSort (updatedSort) {\n    setUserSelections(state => ({\n      ...state,\n      sort: updatedSort\n    }))\n  }\n\n  function handleSetLimit (updatedLimit) {\n    setUserSelections(state => ({\n      ...state,\n      limit: updatedLimit,\n      offset: getAdjustedOffset(updatedLimit, state.offset)\n    }))\n  }\n\n  function handleUpdateOffset (updatedOffset) {\n    setUserSelections(state => ({\n      ...state,\n      offset: updatedOffset\n    }))\n\n    const currentScrollTop = window.pageYOffset\n    const top = tableSectionRef.current.getBoundingClientRect().top - 185\n\n    // scroll to top of table section after changing pages\n    window.scrollTo({\n      top: top + currentScrollTop,\n      behavior: 'smooth'\n    })\n  }\n\n  function handleSetFullScreen (updatedIsFullScreen) {\n    setUserSelections(state => ({\n      ...state,\n      isFullScreen: updatedIsFullScreen\n    }))\n  }\n\n  return (\n    <div className={`TableView__wrapper ${userSelections.isFullScreen && 'fullscreen'}`}>\n      {showSpinner && <LoadingSpinner />}\n      {columns && dataHeaders && (\n        <div ref={tableSectionRef}>\n          <DataTableStatusBar\n            numOfTotalResults={statusBarData.numOfTotalResults}\n            numOfFoundResults={statusBarData.numOfFoundResults}\n            offset={offset}\n            limit={limit}\n            onSetLimit={e => handleSetLimit(e)}\n            isFullScreen={userSelections.isFullScreen}\n            onSetFullScreen={e => handleSetFullScreen(!userSelections.isFullScreen)}\n          />\n          <DataTable\n            headerGroups={headerGroups}\n            meta={metaData}\n            columns={columns}\n            getTableProps={getTableProps}\n            getTableBodyProps={getTableBodyProps}\n            rows={rows}\n            prepareRow={prepareRow}\n            sort={sort}\n            onSetSort={e => handleSetSort(e)}\n            isFullScreen={userSelections.isFullScreen}\n            isLoading={isLoading}\n            columnTypes={columnTypes}\n            columnFormatting={columnFormatting}\n          />\n          <div className='pagination__wrapper'>\n            <InputPagination\n              isLoading={isLoading}\n              limit={limit}\n              total={statusBarData.numOfFoundResults}\n              offset={offset}\n              onUpdateOffset={e => handleUpdateOffset(e)}\n            />\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nMsTableView.propTypes = {\n  uuid: PropTypes.string,\n  formValues: PropTypes.shape({\n    state: PropTypes.string,\n    county: PropTypes.string,\n    referencePeriod: PropTypes.string,\n    healthServiceArea: PropTypes.string,\n    metric: PropTypes.string\n  }),\n  config: PropTypes.object\n}\n\nexport default MsTableView\n","import React, { useEffect, useState, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport DataTable, { useReactTableProps } from '../../../dataset/DataTable/DataTable'\nimport InputPagination from '../../../common/InputPagination/InputPagination'\nimport useDisplayContext from '../../../../hooks/useDisplayContext'\nimport DataTableStatusBar from '../../../dataset/DataTable/DataTableStatusBar'\nimport { getAdjustedOffset } from '../../../../utilities/searchPageHelpers'\nimport MsStateCountyToolStore from '../../../../stores/MsStateCountyToolStore'\nimport { preserveDataGaps } from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport cloneDeep from 'lodash/cloneDeep'\nimport get from 'lodash/get'\n\nimport './MsTableView.scss'\n\nconst initialState = {\n  isFullScreen: false,\n  limit: 10,\n  offset: 0,\n  keywords: '',\n  sort: { sortBy: null, sortOrder: null },\n  isFilterOpen: false,\n  filterButtonRef: null\n}\n\nexport const MsStateCompareTable = ({ selectedMetric, selectedStates }) => {\n  const referencePeriods = cloneDeep(MsStateCountyToolStore.useState(state => state.referencePeriods))\n  referencePeriods.sort((a, b) => {\n    const aDate = Date.parse(a.value.split(' ')[2])\n    const bDate = Date.parse(b.value.split(' ')[2])\n    return aDate - bDate\n  })\n\n  const tableSectionRef = useRef(null)\n  const { isMobile } = useDisplayContext()\n  const isLoading = false\n  const [userSelections, setUserSelections] = useState({ ...initialState })\n  const { sort, limit, offset } = userSelections\n  const [tableData, setTableData] = useState({\n    _data: null,\n    metaData: null\n  })\n  const [statusBarData, setStatusBarData] = useState({\n    numOfTotalResults: 0,\n    numOfFoundResults: 0\n  })\n  const {\n    _data,\n    metaData\n  } = tableData\n  const dataHeaders = get(metaData, 'headers')\n  const columnTypes = get(metaData, 'data_file_meta_data.csvColumnTypes')\n  const columnFormatting = get(metaData, 'data_file_meta_data.csvDisplayFormatting')\n  const reactTableProps = useReactTableProps({ dataHeaders: dataHeaders, dataRows: _data, isMobile: isMobile })\n  const {\n    columns,\n    headerGroups,\n    getTableProps,\n    getTableBodyProps,\n    rows,\n    prepareRow\n  } = reactTableProps\n\n  useEffect(() => {\n    if (userSelections.isFullScreen) {\n      document.body.classList.add('dataset-full-screen')\n    } else {\n      document.body.classList.remove('dataset-full-screen')\n    }\n  }, [userSelections.isFullScreen])\n\n  function handleSetSort (updatedSort) {\n    setUserSelections(state => ({\n      ...state,\n      sort: updatedSort\n    }))\n  }\n\n  function handleSetLimit (updatedLimit) {\n    setUserSelections(state => ({\n      ...state,\n      limit: updatedLimit,\n      offset: getAdjustedOffset(updatedLimit, state.offset)\n    }))\n  }\n\n  function handleUpdateOffset (updatedOffset) {\n    setUserSelections(state => ({\n      ...state,\n      offset: updatedOffset\n    }))\n\n    const currentScrollTop = window.pageYOffset\n    const top = tableSectionRef.current.getBoundingClientRect().top - 185\n\n    // scroll to top of table section after changing pages\n    window.scrollTo({\n      top: top + currentScrollTop,\n      behavior: 'smooth'\n    })\n  }\n\n  function handleSetFullScreen (updatedIsFullScreen) {\n    setUserSelections(state => ({\n      ...state,\n      isFullScreen: updatedIsFullScreen\n    }))\n  }\n\n  useEffect(() => {\n    // if there is data formats it for the table\n    if (selectedStates[0] && selectedStates[0].data) {\n      const states = preserveDataGaps(selectedStates, referencePeriods)\n      const formattedTableData = []\n      for (let i = 0; i < referencePeriods.length; i++) {\n        const row = {}\n        row['Reference Period'] = referencePeriods[i].value\n        for (let j = 0; j < states.length; j++) {\n          row[states[j].stateName] = states[j].data[i][selectedMetric]\n        }\n        states.map(state => {})\n        formattedTableData.push(row)\n      }\n      // generate headers\n      const headers = ['Reference Period', ...states.map(state => state.stateName)]\n      const csvColumnTypes = {}\n      for (let i = 0; i < headers.length; i++) {\n        csvColumnTypes[headers[i]] = 'TEXT'\n      }\n      const csvDisplayFormatting = {}\n      // apply sort if applicable\n      if (sort && sort.sortBy && sort.sortOrder && headers.includes(sort.sortBy)) {\n        if (sort.sortBy === 'Reference Period') {\n          if (sort.sortOrder === 'ASC') {\n            formattedTableData.sort((a, b) => {\n              const aDate = Date.parse(a['Reference Period'].split(' ')[2])\n              const bDate = Date.parse(b['Reference Period'].split(' ')[2])\n              return aDate - bDate\n            })\n          } else if (sort.sortOrder === 'DESC') {\n            formattedTableData.sort((a, b) => {\n              const aDate = Date.parse(a['Reference Period'].split(' ')[2])\n              const bDate = Date.parse(b['Reference Period'].split(' ')[2])\n              return bDate - aDate\n            })\n          }\n        } else {\n          if (sort.sortOrder === 'ASC') {\n            formattedTableData.sort((a, b) => {\n              const aVal = a[sort.sortBy] ? parseFloat(a[sort.sortBy].replace(/,/g, '')) : 0\n              const bVal = b[sort.sortBy] ? parseFloat(b[sort.sortBy].replace(/,/g, '')) : 0\n              return aVal - bVal\n            })\n          } else if (sort.sortOrder === 'DESC') {\n            formattedTableData.sort((a, b) => {\n              const aVal = a[sort.sortBy] ? parseFloat(a[sort.sortBy].replace(/,/g, '')) : 0\n              const bVal = b[sort.sortBy] ? parseFloat(b[sort.sortBy].replace(/,/g, '')) : 0\n              return bVal - aVal\n            })\n          }\n        }\n      }\n      setTableData({\n        _data: formattedTableData.slice(offset, offset + limit), // formatted data with pagination\n        metaData: {\n          headers,\n          data_file_meta_data: {\n            csvColumnTypes,\n            csvDisplayFormatting\n          }\n        }\n      })\n      setStatusBarData({\n        numOfTotalResults: 10,\n        numOfFoundResults: referencePeriods.length || 10\n      })\n    }\n  }, [selectedMetric, selectedStates, sort, limit, offset])\n\n  return (\n    <div className={`TableView__wrapper ${userSelections.isFullScreen && 'fullscreen'}`}>\n      {columns && dataHeaders && (\n        <div ref={tableSectionRef}>\n          <DataTableStatusBar\n            numOfTotalResults={statusBarData.numOfTotalResults}\n            numOfFoundResults={statusBarData.numOfFoundResults}\n            offset={offset}\n            limit={limit}\n            onSetLimit={e => handleSetLimit(e)}\n            isFullScreen={userSelections.isFullScreen}\n            onSetFullScreen={e => handleSetFullScreen(!userSelections.isFullScreen)}\n          />\n          <DataTable\n            headerGroups={headerGroups}\n            meta={metaData}\n            columns={columns}\n            getTableProps={getTableProps}\n            getTableBodyProps={getTableBodyProps}\n            rows={rows}\n            prepareRow={prepareRow}\n            sort={sort}\n            onSetSort={e => handleSetSort(e)}\n            isFullScreen={userSelections.isFullScreen}\n            isLoading={isLoading}\n            columnTypes={columnTypes}\n            columnFormatting={columnFormatting}\n          />\n          <div className='pagination__wrapper'>\n            <InputPagination\n              isLoading={isLoading}\n              limit={limit}\n              total={statusBarData.numOfFoundResults}\n              offset={offset}\n              onUpdateOffset={e => handleUpdateOffset(e)}\n            />\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nMsStateCompareTable.propTypes = {\n  selectedMetric: PropTypes.string.isRequired,\n  selectedStates: PropTypes.array.isRequired\n}\n\nexport default MsStateCompareTable\n","import React, { useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { Line } from 'react-chartjs-2'\nimport ChartScrollableWrapper from '../../../common/Charts/ChartScrollableWrapper'\nimport MsStateCountyToolStore from '../../../../stores/MsStateCountyToolStore'\nimport { getMetricFromLookup, msStateCompareChartDataTransform, preserveDataGaps, numberWithConfigFormatting } from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport cloneDeep from 'lodash/cloneDeep'\nimport { numberWithCommas } from '../../../../utilities/searchPageHelpers'\nimport { cantLoadBanner, getAlertBanner } from '../../../../utilities/displayUtilities'\nimport SimpleBar from 'simplebar-react'\nimport { isEmpty } from 'lodash'\n\nimport './MsStateCompareChart.scss'\n\nconst MsStateCompareChart = ({ selectedMetric, selectedStates, config }) => {\n  const CURSOR_PADDING = 25\n  const referencePeriods = cloneDeep(MsStateCountyToolStore.useState(state => state.referencePeriods))\n  referencePeriods.sort((a, b) => {\n    const aDate = Date.parse(a.value.split(' ')[2])\n    const bDate = Date.parse(b.value.split(' ')[2])\n    return aDate - bDate\n  })\n  const transformedData = msStateCompareChartDataTransform(selectedMetric, preserveDataGaps(selectedStates, referencePeriods))\n  const [isClicked, setIsClicked] = useState(false)\n  const [inToolTip, setInToolTip] = useState(false)\n  const [inChart, setInChart] = useState(false)\n  const [alertBanner, setAlertBanner] = useState({})\n\n  useEffect(() => {\n    setIsClicked(false)\n\n    if (isEmpty(transformedData)) {\n      setAlertBanner(cantLoadBanner)\n    }\n  }, [selectedStates])\n\n  let tooltipEl = document.getElementById('chartjs-tooltip')\n\n  // Create element on first render\n  if (!tooltipEl) {\n    tooltipEl = document.createElement('div')\n    tooltipEl.id = 'chartjs-tooltip'\n    document.body.appendChild(tooltipEl)\n  }\n\n  useEffect(() => {\n    // Fixes an issue where dropdown hovers over the chart making mouse never re-enter. If in tooltip, always in chart.\n    if (inToolTip) { setInChart(true) }\n\n    // tooltip only visible when the pointer is on the chart\n    if (inChart || inToolTip) {\n      tooltipEl.style.opacity = 1\n    } else {\n      tooltipEl.style.opacity = 0\n    }\n  }, [inChart, inToolTip])\n\n  const renderTooltip = function (tooltipModel) {\n    setInChart(true)\n\n    // Set caret Position\n    tooltipEl.classList.remove('above', 'below', 'no-transform')\n    tooltipEl.classList.add('ms-chart-tooltip-wrapper')\n    if (tooltipModel.yAlign) {\n      tooltipEl.classList.add(tooltipModel.yAlign)\n    } else {\n      tooltipEl.classList.add('no-transform')\n    }\n\n    // Set Text\n    if (tooltipModel.body && !isClicked) {\n      ReactDOM.render(\n        <ToolTipContent\n          dataPoints={tooltipModel.body}\n          xLabel={tooltipModel.dataPoints[0].xLabel}\n          metric={selectedMetric}\n          setInToolTip={setInToolTip}\n          config={config}\n        />,\n        tooltipEl\n      )\n    }\n\n    // `this` will be the overall tooltip\n    const position = this._chart.canvas.getBoundingClientRect()\n    if (!isClicked) {\n      // Display, position, and set styles for font\n      tooltipEl.style.position = 'absolute'\n      tooltipEl.style.left = position.left + window.pageXOffset + tooltipModel.caretX - CURSOR_PADDING - tooltipEl.offsetWidth + 'px'\n      tooltipEl.style.top = position.top + window.pageYOffset + tooltipModel.caretY - CURSOR_PADDING - tooltipEl.offsetHeight + 'px'\n      tooltipEl.style.fontFamily = tooltipModel._bodyFontFamily\n      tooltipEl.style.fontSize = tooltipModel.bodyFontSize + 'px'\n      tooltipEl.style.fontStyle = tooltipModel._bodyFontStyle\n      tooltipEl.style.padding = tooltipModel.yPadding + 'px ' + tooltipModel.xPadding + 'px'\n      // tooltipEl.style.pointerEvents = 'none'\n    }\n  }\n\n  const options = optionsConfig(selectedMetric, config)\n  options.hover.mode = isClicked ? '' : 'index'\n  options.tooltips.custom = renderTooltip\n\n  return (\n    <div className='MsStateCompareChart__wrapper' onMouseLeave={() => setInChart(false)} onMouseEnter={() => setInChart(true)}>\n      <ChartScrollableWrapper>\n        {chartLegend(transformedData)}\n        <div className='chart__wrapper'>\n          <div className='x-axis-label__wrapper'>\n            <div className='x-axis-label'>\n              {getMetricFromLookup(selectedMetric, config).label}\n            </div>\n          </div>\n          <div\n            onClick={() => setIsClicked(!isClicked)}\n            className='react-js-chart__wrapper'\n          >\n            {!isEmpty(alertBanner) && getAlertBanner(alertBanner, () => { setAlertBanner(null) })}\n            <Line\n              data={{\n                labels: referencePeriods.map(referencePeriod => referencePeriod.value),\n                datasets: transformedData.map((dataset, i) => {\n                  return {\n                    // react chart lib req's a label to prevent rendering issues\n                    label: dataset.label,\n                    borderColor: dataset.lineColor,\n                    pointBackgroundColor: dataset.lineColor,\n                    pointHoverBackgroundColor: '#fff',\n                    pointHoverBorderColor: dataset.lineColor,\n                    data: dataset.data,\n                    line: {\n                      stepped: true\n                    },\n                    ...commonConfig\n                  }\n                })\n              }}\n              options={options}\n            />\n          </div>\n        </div>\n\n      </ChartScrollableWrapper>\n    </div>\n  )\n}\n\nMsStateCompareChart.propTypes = {\n  selectedMetric: PropTypes.string.isRequired,\n  selectedStates: PropTypes.array.isRequired,\n  config: PropTypes.object\n}\n\nexport default MsStateCompareChart\n\nconst chartLegend = (transformedData) => {\n  return (\n    <div className='chartLegend__wrapper' style={{ padding: `${transformedData.length > 0 ? '10px' : ''}` }}>\n      {\n        transformedData.map((state, i) => {\n          return (\n            <div key={i}>\n              <div className='swatch' style={{ backgroundColor: state.lineColor }} />\n              <div className='label'>\n                {state.label}\n              </div>\n            </div>\n          )\n        })\n      }\n    </div>\n  )\n}\n\nconst commonConfig = {\n  borderWidth: 4,\n  fill: false,\n  pointHoverBorderWidth: 2,\n  pointStyle: 'circle',\n  pointRadius: 4,\n  pointHitRadius: 10,\n  borderCapStyle: 'round',\n  borderJoinStyle: 'miter',\n  pointHoverRadius: 6,\n  tension: 0\n}\n\nconst scaleLabelConfig = {\n  display: true,\n  fontSize: 15,\n  fontFamily: '\"Rubik\", \"sans-serif\"',\n  padding: {\n    top: 25,\n    bottom: 0\n  },\n  fontColor: '#5b616a'\n}\n\nexport const ToolTipContent = ({ dataPoints, xLabel, metric, setInToolTip, config }) => {\n  return (\n    <div\n      className='ms-chart-tooltip'\n      onMouseEnter={() => {\n        setInToolTip(true)\n      }}\n      onMouseLeave={() => {\n        setInToolTip(false)\n      }}\n    >\n      <div className='popup-header'>\n        <div className='title'>\n          {xLabel}\n        </div>\n      </div>\n      <div className='popup-body'>\n        <SimpleBar forceVisible='y' autoHide={false} className='data-wrapper'>\n          <div className='column-wrapper'>\n            <ul className='data'>\n              {dataPoints.sort((a, b) => b.lines[0].split(': ')[1] - a.lines[0].split(': ')[1]).map((data, i) => {\n                const labels = data.lines[0].split(': ')\n                return (\n                  <li key={i}>\n                    <div className='label'>{labels[0]}</div>\n                  </li>\n                )\n              })}\n            </ul>\n            <ul className='data'>\n              {dataPoints.sort((a, b) => b.lines[0].split(': ')[1] - a.lines[0].split(': ')[1]).map((data, i) => {\n                const labels = data.lines[0].split(': ')\n                return (\n                  <li key={i}>\n                    <div className='value'>{numberWithConfigFormatting(numberWithCommas(labels[1], 2), metric, config)}</div>\n                  </li>\n                )\n              })}\n            </ul>\n          </div>\n        </SimpleBar>\n      </div>\n    </div>\n  )\n}\n\nToolTipContent.propTypes = {\n  // data points passed via custom tooltip by chart.js hook\n  dataPoints: PropTypes.array,\n  xLabel: PropTypes.string,\n  metric: PropTypes.string,\n  setInToolTip: PropTypes.func,\n  config: PropTypes.object\n}\n\nexport const optionsConfig = (metric, config) => {\n  return {\n    legend: {\n      display: false\n    },\n    scales: {\n      xAxes: [\n        {\n          scaleLabel: {\n            labelString: 'Reference Period',\n            ...scaleLabelConfig\n          },\n          gridLines: {\n            color: '#aeb0b5',\n            drawBorder: true,\n            tickMarkLength: 0,\n            drawOnChartArea: false\n          },\n          ticks: {\n            fontSize: 14,\n            fontWeight: 800,\n            fontFamily: '\"Rubik\", \"sans-serif\"',\n            fontColor: '#5b616a',\n            autoSkip: false,\n            lineHeight: 19,\n            minRotation: 90,\n            padding: 15\n          },\n          afterFit: (axis) => {\n            axis.paddingRight = 25\n            axis.paddingLeft = 0\n          }\n        }\n      ],\n      yAxes: [\n        {\n          ticks: {\n            min: 0,\n            fontSize: 15,\n            fontFamily: '\"Rubik\", \"sans-serif\"',\n            fontColor: '#5b616a',\n            callback: function (value) {\n              let updatedVal = value\n              if (value >= 1000) {\n                updatedVal = value / 1e3 + 'K'\n              }\n              if (value >= 1000000) {\n                updatedVal = value / 1e6 + 'M'\n              }\n              if (value >= 1000000000) {\n                updatedVal = value / 1e9 + 'B'\n              }\n\n              return numberWithConfigFormatting(updatedVal, metric, config)\n            }\n          },\n          afterFit: (axis) => {\n            axis.left = 0\n          }\n        }\n      ]\n    },\n    hover: {\n      mode: 'index',\n      intersect: false\n    },\n    tooltips: {\n      mode: 'index',\n      intersect: false,\n      enabled: false\n    },\n    maintainAspectRatio: false,\n    responsive: true,\n    plugins: {\n      datalabels: {\n        display: false\n      }\n    }\n  }\n}\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../Text/Text'\nimport { ReactComponent as PlusIcon } from '../../../assets/fontawesome/solid/plus.svg'\n\nimport './SelectBtn.scss'\n\nconst SelectBtn = (props) => {\n  const { label, options, selected, onSelect, isDisabled } = props\n  const [isExpanded, setIsExpanded] = useState(false)\n\n  function toggleExpand () {\n    if (isExpanded) {\n      setIsExpanded(false)\n    } else {\n      setIsExpanded(true)\n    }\n  }\n\n  function handleOnSelect (item) {\n    if (!selected.includes(item)) {\n      toggleExpand()\n\n      if (typeof onSelect === 'function') {\n        onSelect(item)\n      }\n    }\n  }\n\n  return (\n    <div className='SelectBtn__wrapper'>\n      <Text\n        domElement='button'\n        disabled={isDisabled}\n        typeFace='Rubik-Regular'\n        className={'SelectBtn__button' + ((isExpanded) ? ' active' : '')}\n        onClick={() => toggleExpand()}\n      >\n        <span className='label'>{label}</span><span className='icon'><PlusIcon className='PlusIcon' /></span>\n      </Text>\n      <div className='SelectBtn__options-wrapper'>\n        <ul className='SelectBtn__options' style={{ display: (isExpanded) ? 'block' : 'none' }}>\n          {options.map((option, i) => (\n            <li key={i} className={'SelectBtn__option' + (selected.includes(option) ? ' selected' : '')} onClick={() => handleOnSelect(option)}>{option}</li>\n          ))}\n        </ul>\n        <div className='SelectBtn__options-overlay' style={{ display: (isExpanded) ? 'block' : 'none' }} onClick={() => toggleExpand()} />\n      </div>\n    </div>\n  )\n}\n\nSelectBtn.defaultProps = {\n  options: [],\n  selected: [],\n  label: 'Add Item',\n  isDisabled: false\n}\n\nSelectBtn.propTypes = {\n  options: PropTypes.arrayOf(PropTypes.string),\n  selected: PropTypes.arrayOf(PropTypes.string),\n  label: PropTypes.string,\n  onSelect: PropTypes.func,\n  isDisabled: PropTypes.bool\n}\n\nexport default SelectBtn\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SearchFilterCloseIcon from '../../icons/SearchFilterCloseIcon'\n\nimport './PillBtn.scss'\n\nconst PillBtn = (props) => {\n  const { label, onSelect, isDisabled } = props\n\n  function handleOnSelect (item, event) {\n    if (typeof onSelect === 'function') {\n      onSelect(item, event)\n    }\n  }\n\n  return (\n    <button className='PillBtn' disabled={isDisabled} onClick={(e) => handleOnSelect(label, e)}>\n      <span className='label'>{label}</span>\n      {!isDisabled ? (<span className='icon'><SearchFilterCloseIcon /></span>) : ''}\n    </button>\n  )\n}\n\nPillBtn.defaultProps = {\n  label: 'Selected Item',\n  isDisabled: false\n}\n\nPillBtn.propTypes = {\n  label: PropTypes.string,\n  isDisabled: PropTypes.bool,\n  onSelect: PropTypes.func\n}\n\nexport default PillBtn\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport FormCheck from 'react-bootstrap/FormCheck'\nimport Text from '../../../common/Text/Text'\nimport SelectBtn from '../../../common/SelectBtn/SelectBtn'\nimport PillBtn from '../../../common/PillBtn/PillBtn'\nimport { LoadingSpinner } from '../../../common/LoadingCover/LoadingCover'\n\nimport {\n  loadStateComparisonData,\n  loadNationAndTerritoriesData\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\nimport { stateSelectListWithoutTerritories as stateSelectList } from '../../InteractiveToolsSearch/InteractiveToolsSearchSelect'\nimport config from '../../../../config'\n\nimport './MsStateCountyStateComparison.scss'\n\nconst MAX_STATE_COMPARISON_ITEMS = 10\nconst NATION_AND_TERRITORIES_LABEL = 'Nation + Territories Data'\nconst NATION_AND_TERRITORIES_DEFAULT = {\n  isActive: false,\n  data: []\n}\n\nconst MsStateCountyStateComparison = ({ uuid, state, healthServiceArea, metric, setSelected, showChartView, setShowChartView, isSearchActive, toolConfig }) => {\n  const [stateComparisonList, setStateComparisonList] = useState([])\n  const [stateComparisonDefault, setStateComparisonDefault] = useState('')\n  const [stateComparisonNation, setStateComparisonNation] = useState({ ...NATION_AND_TERRITORIES_DEFAULT })\n  const [isStateComparisonLoading, setIsStateComparisonLoading] = useState(false)\n  const [lineColors, setLineColors] = useState(config.wddseAccentColorPalette.slice(0).reverse())\n\n  useEffect(() => {\n    setStateComparisonList([])\n    setStateComparisonDefault('')\n    if (state) {\n      setStateComparisonDefault(state)\n      setIsStateComparisonLoading(true)\n      loadStateComparisonData(uuid, { state, healthServiceArea, metric }, toolConfig)\n        .then(res => {\n          const lineColor = lineColors.pop()\n          setLineColors(lineColors)\n          setStateComparisonList([\n            {\n              stateName: getStateNameFromStateCode(state),\n              stateCode: state,\n              data: res,\n              lineColor: lineColor\n            }\n          ])\n          setIsStateComparisonLoading(false)\n        })\n    }\n  }, [state, healthServiceArea, metric, uuid, toolConfig])\n\n  useEffect(() => {\n    if (stateComparisonNation.isActive) {\n      setSelected([\n        {\n          stateName: 'Nation + Territories',\n          data: stateComparisonNation.data,\n          lineColor: '#86B853'\n        },\n        ...stateComparisonList\n      ])\n    } else {\n      setSelected(stateComparisonList)\n    }\n  }, [stateComparisonList, stateComparisonNation, setSelected])\n\n  useEffect(() => {\n    if (stateComparisonList.length === 0 && !stateComparisonNation.isActive) {\n      setShowChartView(true)\n    }\n  }, [stateComparisonList, stateComparisonNation])\n\n  // Reset component's state when Clear All button is pressed on parent component.\n  useEffect(() => {\n    if (!isSearchActive) {\n      setStateComparisonList([])\n      setStateComparisonDefault('')\n      setStateComparisonNation({ ...NATION_AND_TERRITORIES_DEFAULT })\n      setIsStateComparisonLoading(false)\n      setLineColors(config.wddseAccentColorPalette.slice(0).reverse())\n    }\n  }, [isSearchActive])\n\n  function handleOnStateComparisonAdd (stateCode) {\n    if (stateComparisonOpenSpots() > 0 && !isStateComparisonLoading) {\n      setIsStateComparisonLoading(true)\n      loadStateComparisonData(uuid, { state: stateCode, healthServiceArea, metric }, toolConfig)\n        .then(res => {\n          const lineColor = lineColors.pop()\n          setLineColors(lineColors)\n          setStateComparisonList([\n            ...stateComparisonList.filter(item => item.stateName !== stateCode),\n            {\n              stateName: getStateNameFromStateCode(stateCode),\n              stateCode: stateCode,\n              data: res,\n              lineColor: lineColor\n            }\n          ])\n          setIsStateComparisonLoading(false)\n        })\n    }\n  }\n\n  function handleOnStateComparisonRemove (stateCode) {\n    if (stateComparisonDefault !== stateCode) {\n      setLineColors([...lineColors, stateComparisonList.filter(item => item.stateCode === stateCode)[0].lineColor])\n      setStateComparisonList(stateComparisonList.filter(item => item.stateCode !== stateCode))\n    }\n  }\n\n  function handleOnNationAndTerritoriesChange () {\n    if (stateComparisonNation.isActive) {\n      setStateComparisonNation({ ...NATION_AND_TERRITORIES_DEFAULT })\n    } else {\n      setIsStateComparisonLoading(true)\n      loadNationAndTerritoriesData(uuid, { healthServiceArea, metric }, toolConfig)\n        .then(res => {\n          setStateComparisonNation({\n            isActive: true,\n            data: res\n          })\n          setIsStateComparisonLoading(false)\n        })\n    }\n  }\n\n  function stateComparisonOpenSpots () {\n    return MAX_STATE_COMPARISON_ITEMS - stateComparisonList.length\n  }\n\n  function addStateButtonCount () {\n    if (stateComparisonList.length === 0) {\n      return 2\n    } else if (stateComparisonOpenSpots() > 0) {\n      return 1\n    }\n    return 0\n  }\n\n  function getStateNameFromStateCode (code) {\n    const filteredList = stateSelectList.filter(item => item.value === code)\n\n    if (filteredList.length > 0) {\n      return filteredList[0].label\n    }\n\n    return ''\n  }\n\n  function getStateCodeFromStateName (name) {\n    const filteredList = stateSelectList.filter(item => item.label === name)\n\n    if (filteredList.length > 0) {\n      return filteredList[0].value\n    }\n\n    return ''\n  }\n\n  return (\n    <div className='MsStateComparisonForm__wrapper'>\n      <div className='state_comparison'>\n        {isStateComparisonLoading && <LoadingSpinner statusText='' className='spinner' />}\n        <div className='state_comparison__header'>\n          <Text className='state_comparison__title' typeFace='Montserrat Header/Navy'>State Comparison</Text>\n          <Text className='state_comparison__description' typeFace='Rubik-Regular'>\n            Select up to <strong>{stateComparisonOpenSpots()} more</strong> states to\n            compare {stateComparisonDefault ? getStateNameFromStateCode(stateComparisonDefault) : ''} data over time.\n          </Text>\n          <ul className='state_comparison__list'>\n            {stateComparisonList.map((state, i) => (\n              <li key={i} className='state_comparison__list-item'>\n                <PillBtn\n                  label={state.stateName}\n                  isDisabled={(stateComparisonDefault === state.stateCode) || isStateComparisonLoading}\n                  onSelect={(label) => handleOnStateComparisonRemove(getStateCodeFromStateName(label))}\n                />\n              </li>\n            ))}\n            {!isStateComparisonLoading && [...Array(addStateButtonCount()).keys()].map(i => (\n              <li key={i + stateComparisonList} className='state_comparison__list-item'>\n                <SelectBtn\n                  options={\n                    stateSelectList\n                      .map(state => state.label)\n                      .filter(stateName => !stateComparisonList.map(item => item.stateName).includes(stateName))\n                  }\n                  label='Add State'\n                  onSelect={(label) => handleOnStateComparisonAdd(getStateCodeFromStateName(label))}\n                />\n              </li>\n            ))}\n          </ul>\n          {(stateComparisonList.length !== 0 || stateComparisonNation.isActive) && (\n            <div className='state_comparison__settings'>\n              <FormCheck\n                type='checkbox'\n                onChange={() => handleOnNationAndTerritoriesChange()}\n                label={`Display ${NATION_AND_TERRITORIES_LABEL}`}\n                aria-label={`Display ${NATION_AND_TERRITORIES_LABEL}`}\n              />\n              <div>\n                <div className='tab_container chart_table'>\n                  <div className={`tab_link_wrapper ${showChartView && 'underline'}`} onClick={() => setShowChartView(true)}>\n                    <Text typeFace='Rubik-Regular'>Chart View</Text>\n                  </div>\n                  <div className={`tab_link_wrapper ${!showChartView && 'underline'}`} onClick={() => setShowChartView(false)}>\n                    <Text typeFace='Rubik-Regular'>Table View</Text>\n                  </div>\n                </div>\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nMsStateCountyStateComparison.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  healthServiceArea: PropTypes.string.isRequired,\n  metric: PropTypes.string.isRequired,\n  state: PropTypes.string,\n  setSelected: PropTypes.func,\n  showChartView: PropTypes.bool,\n  setShowChartView: PropTypes.func,\n  isSearchActive: PropTypes.bool,\n  toolConfig: PropTypes.object\n}\n\nexport default MsStateCountyStateComparison\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Text from '../../common/Text/Text'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { getLookupToolSlugByToolType } from '../../../services/api'\nimport interactiveToolsStore from '../../../stores/interactiveToolsStore'\nimport config from '../../../config'\n\nimport './RelatedToolBanner.scss'\n\nconst RelatedToolBanner = ({ eyebrow, description, cta, targetToolType }) => {\n  const [targetPath, setTargetPath] = useState('')\n  const { apiSite } = config\n  // this component is only used by the market saturation tools, if it is used elsewhere the logic will have to change\n  const icon = interactiveToolsStore.currentState.data?.fieldMediaImage1 && apiSite + interactiveToolsStore.currentState.data?.fieldMediaImage1\n\n  useEffect(() => {\n    const getTargetPath = async () => {\n      setTargetPath(await getLookupToolSlugByToolType(targetToolType))\n    }\n    getTargetPath()\n  })\n  return (\n    <div className='RelatedToolBanner_wrapper'>\n      <Row>\n        <Col md='9'>\n          <Text typeFace='Rubik-Regular' className='RelatedToolBanner__eyebrow'>\n            {eyebrow}\n          </Text>\n          <h2 className='RelatedToolBanner__description'>{description}</h2>\n          <div className='RelatedToolBanner__cta-wrapper'>\n            <LinkHandler className='RelatedToolBanner__cta btn btn-primary' noBs href={targetPath}>{cta}</LinkHandler>\n          </div>\n        </Col>\n        <Col md='3'>\n          <div className='RelatedToolBanner__icon-wrapper'>\n            <img src={icon} alt='Tool icon' />\n          </div>\n        </Col>\n      </Row>\n    </div>\n  )\n}\n\nRelatedToolBanner.propTypes = {\n  eyebrow: PropTypes.string.isRequired,\n  description: PropTypes.string.isRequired,\n  cta: PropTypes.string.isRequired,\n  targetToolType: PropTypes.string.isRequired\n}\n\nexport default RelatedToolBanner\n","import React, { useEffect, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport MsNationalMapView from './MsNationalMapView'\nimport MsStateMapView from './MsStateMapView'\nimport MsTableView from './MsTableView'\nimport MsStateCompareTable from './MsStateCompareTable'\nimport MsStateCompareChart from './MsStateCompareChart'\nimport Text from '../../../common/Text/Text'\nimport stateFipsMapping from '../../../../config/stateFipsMapping.json'\nimport isEmpty from 'lodash/isEmpty'\nimport MsStateCountyToolStore from '../../../../stores/MsStateCountyToolStore'\nimport { LoadingSpinner } from '../../../common/LoadingCover/LoadingCover'\nimport MsStateCountyStateComparison from './MsStateCountyStateComparison'\nimport RelatedToolBanner from '../RelatedToolBanner'\nimport { toolTypes } from '../../../../utilities/lookupToolUtilities'\n\nimport './MsToolResults.scss'\n\nimport {\n  loadStateDisplayData,\n  getMetricFromLookup,\n  DisplaySelectionsContext,\n  getCountyMetaCardData\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\n\nconst MsStateCountyToolResults = ({ uuid, formValues, toolType, isSearchActive, config }) => {\n  const [stateCardData, setStateCardData] = useState({})\n  const [isMapLoading, setIsMapLoading] = useState(false)\n  const [showMapView, setShowMapView] = useState(true)\n  const [showChartView, setShowChartView] = useState(true)\n  const [mapHasData, setMapHasData] = useState(false)\n  const [selectedCompareStates, setSelectedCompareStates] = useState([])\n  const [isCountyDataLoading, setIsCountyDataLoading] = useState(false)\n  const countyCardData = MsStateCountyToolStore.useState(state => state.selectedCounty)\n\n  useEffect(() => {\n    if (config.metricsLookUp) {\n      // reset view to map\n      setShowMapView(true)\n      // go get the states data for the meta data card\n      // if a state was selected\n      if (formValues.state) {\n        loadStateDisplayData(uuid, formValues, config)\n          .then(res => {\n            setStateCardData(res)\n          })\n      }\n      if (formValues.county) {\n        setIsCountyDataLoading(true)\n        getCountyMetaCardData(uuid, formValues, config)\n          .then(res => {\n            MsStateCountyToolStore.update(state => {\n              setIsCountyDataLoading(false)\n              state.selectedCounty = { ...res, name: res.county }\n            })\n          })\n      } else {\n        MsStateCountyToolStore.update(state => {\n          state.selectedCounty = {}\n        })\n      }\n    }\n  }, [formValues, uuid, config])\n\n  const handleSelectedStates = useCallback((selected) => {\n    setSelectedCompareStates(selected)\n  }, [])\n\n  if (isEmpty(formValues)) {\n    return null\n  }\n\n  return (\n    <Container className='ToolResults MsToolResults__wrapper'>\n      {mapHasData ? (\n        <>\n          {(formValues.state ? (\n            <div className='selection_meta_data__wrapper'>\n              {isCountyDataLoading && <LoadingSpinner statusText='' className='spinner' />}\n              {renderMetaDataCards(stateCardData, countyCardData, formValues, config)}\n            </div>\n          )\n            : (\n              <div className='selection_meta_data__wrapper'>\n                <div className='selection_meta_data'>\n                  <Text typeFace='Montserrat Header/Navy'>All States &amp; Territories</Text>\n                </div>\n              </div>\n            )\n          )}\n          <div className='tab_container'>\n            <div className={`tab_link_wrapper ${showMapView && 'underline'}`} onClick={() => setShowMapView(true)}>\n              <Text typeFace='Rubik-Regular'>Map View</Text>\n            </div>\n            {formValues.state !== undefined && (\n              <div className={`tab_link_wrapper ${!showMapView && 'underline'}`} onClick={() => setShowMapView(false)}>\n                <Text typeFace='Rubik-Regular'>Table View</Text>\n              </div>\n            )}\n          </div>\n        </>\n      ) : null}\n      {showMapView ? (\n        <>\n          {formValues.state !== undefined && config.columns\n            ? (\n              <MsStateMapView\n                uuid={uuid}\n                formValues={formValues}\n                handleIsLoading={isLoading => setIsMapLoading(isLoading)}\n                handleHasData={hasData => setMapHasData(hasData)}\n                toolConfig={config}\n              />)\n            : (\n              <MsNationalMapView\n                uuid={uuid}\n                formValues={formValues}\n                handleIsLoading={isLoading => setIsMapLoading(isLoading)}\n                handleHasData={hasData => setMapHasData(hasData)}\n                toolConfig={config}\n              />\n            )}\n        </>\n      ) : (\n        <MsTableView\n          uuid={uuid}\n          formValues={formValues}\n          config={config}\n        />\n      )}\n      {!isMapLoading && mapHasData && (\n        <>\n          <DisplaySelectionsContext {...formValues} label='Selected values:' getMetricFromLookup={getMetricFromLookup} config={config} />\n          <div className='MsStateComparison__wrapper'>\n            <MsStateCountyStateComparison\n              {...formValues}\n              uuid={uuid}\n              setSelected={handleSelectedStates}\n              showChartView={showChartView}\n              setShowChartView={setShowChartView}\n              isSearchActive={isSearchActive}\n              toolConfig={config}\n            />\n            {(selectedCompareStates.length !== 0) && (\n              showChartView\n                ? <MsStateCompareChart selectedMetric={formValues.metric} selectedStates={selectedCompareStates} config={config} />\n                : <MsStateCompareTable uuid={uuid} formValues={formValues} selectedMetric={formValues.metric} selectedStates={selectedCompareStates} />\n            )}\n          </div>\n          <DisplaySelectionsContext\n            label='Selected datapoints:'\n            healthServiceArea={formValues.healthServiceArea}\n            metric={formValues.metric}\n            getMetricFromLookup={getMetricFromLookup}\n            config={config}\n          />\n        </>\n      )}\n      {!isMapLoading && mapHasData && (\n        <RelatedToolBanner\n          eyebrow='Market Saturation and Utilization'\n          description='Looking for CBSA data?'\n          cta='View CBSA data'\n          toolType={toolType}\n          targetToolType={toolTypes.marketSaturationCBSA}\n        />\n      )}\n\n    </Container>\n  )\n}\n\nMsStateCountyToolResults.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.shape({\n    state: PropTypes.string,\n    county: PropTypes.string,\n    referencePeriod: PropTypes.string,\n    healthServiceArea: PropTypes.string,\n    metric: PropTypes.string\n  }),\n  toolType: PropTypes.string.isRequired,\n  isSearchActive: PropTypes.bool,\n  config: PropTypes.object\n}\n\nexport default MsStateCountyToolResults\n\nconst renderMetaDataCards = (stateCardData, countyCardData, formValues, config) => {\n  if (!isEmpty(stateCardData) && !isEmpty(countyCardData) && formValues.county) {\n    return (\n      <div className='two_children'>\n        {metaDataCard(formatMetaData(stateCardData, formValues, true, config), true)}\n        {metaDataCard(formatMetaData(countyCardData, formValues, false, config), false)}\n      </div>\n    )\n  } else if (!isEmpty(stateCardData)) {\n    return (\n      <div className='one_child'>\n        {metaDataCard(formatMetaData(stateCardData, formValues, true, config), true)}\n      </div>\n    )\n  }\n}\n\nconst formatMetaData = (data, formValues, isState, config) => {\n  const formattedCardData = {}\n  const metric = getMetricFromLookup(formValues.metric, config)\n  if (isState) {\n    formattedCardData.name = stateFipsMapping[data[config.columns.STATE_FIPS_COL]].name\n  } else {\n    formattedCardData.name = data.name ? data.name : formValues.county.split(',')[1]\n  }\n  formattedCardData.description = data[metric.description]\n  formattedCardData.value = data[metric.value]\n  formattedCardData.change = data[metric.change]\n  formattedCardData.moratorium = data.moratorium\n  return formattedCardData\n}\n\nconst metaDataCard = ({ name, description, value, change, moratorium }, isState) => {\n  return (\n    <div className='selection_meta_data'>\n      <div className='state_eyebrow'>\n        <Text typeFace='Small Text/Black'>{isState ? 'State' : 'County'}</Text>\n      </div>\n      <div className='state_name'>\n        <Text typeFace='Montserrat Header/Navy'>{name}</Text>\n      </div>\n      <div className='metric__wrapper'>\n        <div>\n          <div>\n            <div className='label'>Metric Quartile:</div>\n            <div className='value'>{description === undefined || description === '' ? 'N/A' : description}</div>\n          </div>\n        </div>\n        <div>\n          <div>\n            <div className='label'>Value:</div>\n            <div className='value'>{value === undefined || value === '' ? 'N/A' : value}</div>\n          </div>\n          {isState && (\n            <div>\n              <div className='label'>% Change:</div>\n              <div className='value'>{change === undefined || change === '' ? 'N/A' : change}</div>\n            </div>\n          )}\n          <div>\n            <div className='label'>Moratoria:</div>\n            <div className='value'>{moratorium === undefined || moratorium === '' ? 'N/A' : moratorium}</div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React, { useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { buildLookupToolUiQueryString, parseQueryStringForLookupToolSearch } from '../../../../utilities/lookupToolUtilities'\nimport interactiveToolsStore from '../../../../stores/interactiveToolsStore'\nimport InteractiveToolSearchPage, { ExpandingResultsContainer } from '../InteractiveToolSearchPage'\nimport InteractiveToolsSearch from '../../../interactiveTools/InteractiveToolsSearch/InteractiveToolsSearch'\nimport MsStateCountyToolResults from '../../../interactiveTools/InteractiveToolsResults/MarketSaturation/MsStateCountyToolResults'\nimport { updateFormValuesSearchState } from '../../../../utilities/searchPageHelpers'\n\nconst MsStateCountyToolSearchPage = (props) => {\n  const { config, history } = props\n  const queryString = history.location.search\n  const searchResultsRef = useRef(null)\n\n  // inject props to component via store\n  const storeProps = interactiveToolsStore.useState(state => ({\n    uuid: state.data.id,\n    name: state.data.name,\n    contactInfo: state.data.contactInfo,\n    searchResults: state.search.results,\n    searchLoading: state.search.isLoading,\n    toolType: state.data.toolType,\n    metaTags: state.data.metaTags,\n    // use cached form values to hand into search results, since we won't want to\n    // display the live updates of the form inputs\n    formValues: state.search.cachedFormValues\n  }))\n\n  const isSearchActive = !!(queryString && queryString.length > 0)\n\n  // this will run both upon page load and after form submission, and will parse the query string and\n  // save the parameters in the store for components to use\n  useEffect(() => {\n    if (isSearchActive) {\n      // get form values from query string\n      const { formValues } = parseQueryStringForLookupToolSearch(queryString)\n      updateFormValuesSearchState(formValues, interactiveToolsStore)\n    }\n  }, [queryString, isSearchActive])\n\n  function handleSubmit (formValues) {\n    const queryString = buildLookupToolUiQueryString({ formValues })\n    if (queryString !== history.location.search) {\n      updateFormValuesSearchState(formValues, interactiveToolsStore)\n      // Update URL query after setting new form values.\n      history.push({ search: queryString })\n    }\n    // Brief delay to allow for result card and map to load.\n    setTimeout(() => {\n      scrollToResults()\n    }, 250)\n  }\n\n  function scrollToResults () {\n    const currentScrollTop = window.pageYOffset - 100\n    const top = searchResultsRef?.current?.getBoundingClientRect()?.top\n    if (top) {\n      window.scrollTo({\n        top: top + currentScrollTop,\n        behavior: 'smooth'\n      })\n    }\n  }\n\n  return (\n    <InteractiveToolSearchPage {...props} isSearchActive={isSearchActive} {...storeProps}>\n      <InteractiveToolsSearch\n        submitHandler={e => handleSubmit(e)}\n        isSearchActive={isSearchActive}\n        config={config}\n      />\n      <div ref={searchResultsRef} />\n      <ExpandingResultsContainer\n        isSearchActive={isSearchActive}\n        toolType={storeProps.toolType}\n        hasResults={isSearchActive}\n      >\n        <MsStateCountyToolResults\n          uuid={storeProps.uuid}\n          formValues={storeProps.formValues}\n          toolType={storeProps.toolType}\n          isSearchActive={isSearchActive}\n          config={config}\n        />\n      </ExpandingResultsContainer>\n    </InteractiveToolSearchPage>\n  )\n}\n\nMsStateCountyToolSearchPage.propTypes = {\n  history: PropTypes.object,\n  config: PropTypes.object\n}\n\nexport default MsStateCountyToolSearchPage\n","import React, { useState, useEffect } from 'react'\nimport ReactDOM from 'react-dom'\nimport PropTypes from 'prop-types'\nimport MapBoxMap from '../../../common/MapboxMap/MapBoxMap'\nimport Text from '../../../common/Text/Text'\nimport FeatureParser from '../../../common/MapboxMap/FeatureParser'\nimport { cantLoadBanner, getLoadingSection } from '../../../../utilities/displayUtilities'\nimport { getDataSourceNameForPeriod } from '../../../../utilities/mapUtilities'\nimport config from '../../../../config'\nimport { flattenDeep, isEmpty, cloneDeep } from 'lodash'\nimport { setupHoverPopup } from '../../../../utilities/mapboxUtilities'\n\nimport {\n  MsMapPaint,\n  MapLegendDisplay\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\n\nimport {\n  MS_CBSA,\n  MS_REFERENCE_PERIOD,\n  MS_HEALTH_SERVICE_AREA,\n  useLoadCbsaDisplayData,\n  // useLoadGeoData,\n  getMetricFromLookup,\n  mapLegendData\n} from '../../../../utilities/lookupToolUtilities/msCbsaTool'\nimport { getInteractiveData } from '../../../../services/apiDomains/dataset'\n\nimport './MsMapView.scss'\n\nconst MsCbsaMapDisplay = ({ formValues, uuid, handleIsLoading, selectedCbsaData, toolConfig }) => {\n  const {\n    isLoading,\n    selectedCbsa,\n    data,\n    hasChange\n  } = useLoadCbsaDisplayData(uuid, formValues, toolConfig)\n  selectedCbsaData(selectedCbsa)\n  const dataSourceName = getDataSourceNameForPeriod(toolConfig?.geo_dataset_mapping, formValues?.referencePeriod)\n  const [cbsaFeatures, setCbsaFeatures] = useState({})\n  const [geoJson, setGeoJson] = useState({})\n  const [isLoadingGeoJson, setIsLoadingGeoJson] = useState(true)\n  const [center, setCenter] = useState()\n  const [diagonal, setDiagonal] = useState()\n\n  useEffect(() => {\n    async function load () {\n      setIsLoadingGeoJson(true)\n\n      const result = await getInteractiveData(uuid, { source: dataSourceName })\n      const selectedCbsaFeatures = result.data.features.filter(el => el.properties.NAME === formValues?.cbsa)[0]\n      setCbsaFeatures(selectedCbsaFeatures)\n\n      if (selectedCbsaFeatures?.geometry?.coordinates && selectedCbsaFeatures.geometry.coordinates.length > 0) {\n        const features = flattenDeep(selectedCbsaFeatures.geometry.coordinates) // non contiguous areas have nested arrays\n        let north = features[1]\n        let south = features[1]\n        let west = features[0]\n        let east = features[0]\n        for (let i = 2; i < features.length; i += 2) { // greedy algorythm to find extreme points\n          if (features[i] > east) {\n            east = features[i]\n          } else if (features[i] < west) {\n            west = features[i]\n          }\n          if (features[i + 1] > north) {\n            north = features[i + 1]\n          } else if (features[i + 1] < south) {\n            south = features[i + 1]\n          }\n        }\n        setCenter([(east + west) / 2, (north + south) / 2]) // average gives center\n        setDiagonal(Math.sqrt(Math.pow(north - south, 2) + Math.pow(east - west, 2))) // pythagorean formula for diagonal\n      }\n\n      setGeoJson(result)\n      setIsLoadingGeoJson(false)\n    }\n\n    load()\n  }, [\n    uuid,\n    dataSourceName\n  ])\n\n  const { metric } = formValues\n  const [map, setMap] = useState(null)\n  const [mapAlertBanner, setMapAlertBanner] = useState({})\n  const [mapConfig, setMapConfig] = useState({\n    settings: {\n      style: config.mapBoxCbsaStyle,\n      center: [\n        -97,\n        38.88\n      ],\n      zoom: 3,\n      pitch: 0\n    },\n    navigationControl: {\n      isEnabled: true,\n      position: 'bottom-left'\n    },\n    geoCoder: {\n      isEnabled: false\n    },\n    layer: {\n      beforeId: 'state-label',\n      id: 'state-number-layer',\n      source: 'state-data',\n      type: 'fill'\n    },\n    popup: {\n      layerId: 'state-number-layer',\n      callback: 'mousemove',\n      options: {\n        closeButton: false,\n        closeOnClick: false,\n        maxWidth: '400px'\n      }\n    }\n  })\n\n  const [jumpTo, setJumpTo] = useState({})\n  useEffect(() => {\n    // this updates the jumpTo function of MapBox making the\n    // view focus on the selected cbsa\n    const scale = 2 // This value determines the difference in zoom between large and small CBSA. Higher values give a bigger difference\n    const setPoint = 4.5 // Change the zoom of every CBSA by a set amount, larger is more zoomed in\n    setJumpTo({\n      center: center || mapConfig.settings.center,\n      zoom: diagonal ? scale / diagonal + setPoint : mapConfig.settings.zoom\n    })\n  }, [mapConfig.settings.center, mapConfig.settings.zoom, formValues, center, diagonal])\n\n  useEffect(() => {\n    // if there is a cbsa selected in the DDL, highlight it\n    if (cbsaFeatures?.properties) {\n      if (map && map.getStyle()) {\n        const cbsaFP = cbsaFeatures.properties.CBSAFP\n        map.setFilter('cbsa-selected', [\n          '==',\n          'CBSAFP',\n          cbsaFP\n        ])\n        map.setFilter('cbsa-selected-2', [\n          '==',\n          'CBSAFP',\n          cbsaFP\n        ])\n      }\n      setMapAlertBanner({})\n    } else {\n      // remove the outline from the map if there is no selected cbsa\n      if (map && map.getStyle()) {\n        map.setFilter('cbsa-selected', [\n          '==',\n          '',\n          -1\n        ])\n        map.setFilter('cbsa-selected-2', [\n          '==',\n          '',\n          -1\n        ])\n      }\n      if (formValues[MS_CBSA] !== 'All CBSAs' && !isEmpty(selectedCbsa) && !isLoadingGeoJson) {\n        setMapAlertBanner({ type: 'warning', title: 'Sorry, we are unable to load the map for the selected CBSA.' })\n      }\n    }\n  }, [map, selectedCbsa, formValues])\n\n  useEffect(() => {\n    handleIsLoading(isLoading || data.length === 0)\n  }, [isLoading, handleIsLoading, data])\n\n  const loadMapData = async (map) => {\n    const mapGeoFeatures = createNationalMapFeatures(geoJson.data, data)\n    getMapLayerPaint()\n    map.addSource('state-data', { type: 'geojson', data: { features: mapGeoFeatures, type: 'FeatureCollection' } })\n    map.addLayer(mapConfig.layer, 'state-label')\n    map.addLayer(\n      {\n        id: 'cbsa-selected-2',\n        type: 'line',\n        source: 'state-data',\n        paint: {\n          'line-width': 2,\n          'line-color': '#000000',\n          'line-offset': -2\n        },\n        layout: {\n          'line-join': 'round'\n        },\n        // Display none by adding a\n        // filter with an empty string.\n        filter: ['==', '', -1]\n      }\n    )\n    map.addLayer(\n      {\n        id: 'cbsa-selected',\n        type: 'line',\n        source: 'state-data',\n        paint: {\n          'line-width': 2,\n          'line-color': '#fff'\n        },\n        layout: {\n          'line-join': 'round'\n        }\n      }\n    )\n    setupHoverPopup(map, mapConfig.popup, renderPopup)\n    setMap(map)\n  }\n\n  const createNationalMapFeatures = (geoJson, data) => {\n    const features = cloneDeep(geoJson.features)\n    data.forEach(result => {\n      const index = features.findIndex(feature => feature.properties.CBSAFP === result.cbsa)\n      if (index !== -1) {\n        for (const prop in result) {\n          features[index].properties[prop] = (isNaN(result[prop]) || result[prop] === '') ? result[prop] : Number(result[prop])\n        }\n      }\n    })\n\n    features.forEach(feature => {\n      Object.keys(data[0]).forEach(key => {\n        if (feature.properties[key] === undefined) {\n          feature.properties[key] = ''\n        }\n      })\n    })\n    return features\n  }\n\n  const getMapLayerPaint = () => {\n    const tempMapConfig = Object.assign({}, mapConfig)\n\n    tempMapConfig.layer.paint = MsMapPaint(getMetricFromLookup(metric, toolConfig).color)\n    setMapConfig(tempMapConfig)\n  }\n\n  function renderPopup (feature) {\n    const formulas = hasChange ? {\n      state: { formula: 'NAME' },\n      data: [\n        {\n          label: 'Value: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).value})`\n        },\n        {\n          label: '% Change: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).change})`\n        }\n      ]\n    } : {\n      state: { formula: 'NAME' },\n      data: [\n        {\n          label: 'Value: ',\n          formula: `STRING_OR_NA(${getMetricFromLookup(metric, toolConfig).value})`\n        }\n      ]\n    }\n    const popupProps = FeatureParser(feature, formulas)\n    const domNode = document.createElement('div')\n\n    ReactDOM.render(\n      <div className='MsNationalMap__popup'>\n        <div className='title'>{popupProps.state}</div>\n        <ul>\n          {popupProps.data.map(({ label, value }, i) => {\n            return (\n              <li key={i}>\n                {`${label}${value}`}\n              </li>\n            )\n          })}\n        </ul>\n      </div>,\n      domNode\n    )\n    return domNode\n  }\n\n  return (\n    <div className='MsMap__wrapper'>\n      {isLoading && getLoadingSection()}\n      {!isLoading && !isLoadingGeoJson && data.length > 0 ? (\n        <div className='map-wrapper'>\n          <div className='mapview_wrapper'>\n            <div className='mapbox_wrapper'>\n              <MapBoxMap\n                error={err => console.log('ms mapbox error:' + JSON.stringify(err))}\n                onMapLoad={map => loadMapData(map)}\n                settings={mapConfig.settings}\n                navigationControl={mapConfig.navigationControl}\n                resetOverride\n                geoCoder={mapConfig.geoCoder}\n                alertBanner={mapAlertBanner}\n                onAlertBannerClear={() => setMapAlertBanner({})}\n                jumpTo={jumpTo}\n                OnMapError={() => { setMapAlertBanner(cantLoadBanner) }}\n              />\n            </div>\n            <MapLegendDisplay legendData={mapLegendData} cssClass='cbsa' />\n          </div>\n        </div>\n      ) : null}\n      {!isLoading && data.length === 0 ? (\n        <div className='no_data'>\n          <Text typeFace='02 H2/Black/L'>Sorry, no data available</Text>\n          <Text typeFace='Body/18pt/Black/L'>The selected values may not be available for this reference period or location. Please try different selections.</Text>\n        </div>\n      ) : null}\n    </div>\n  )\n}\n\nMsCbsaMapDisplay.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.shape({\n    [MS_CBSA]: PropTypes.string,\n    [MS_REFERENCE_PERIOD]: PropTypes.string,\n    [MS_HEALTH_SERVICE_AREA]: PropTypes.string,\n    metric: PropTypes.string,\n    referencePeriod: PropTypes.string,\n    cbsa: PropTypes.string\n  }),\n  handleIsLoading: PropTypes.func,\n  selectedCbsaData: PropTypes.func,\n  toolConfig: PropTypes.object\n}\n\nexport default MsCbsaMapDisplay\n","import set from 'lodash/set'\nimport cloneDeep from 'lodash/cloneDeep'\nimport pupa from 'pupa'\nimport { convertDataToObjectArray } from '../services/formatters/lookupTool'\nimport { isEmpty } from 'lodash'\n\nexport const DEFAULT_GEO_DATASOURCE_NAME = 'default-geo'\n\n/**\n * GeoJson does not supported nested objects and will stringify them (https://github.com/mapbox/mapbox-gl-js/issues/2434);\n * therefore, we have a special 'data' attribute in properties that this function will look for and use JSON.parse() to restore it\n * to its former object glory\n * @param {object} feature\n * @param {object} feature.properties\n * @param {object} feature.properties.data\n * @returns {object}\n */\nexport function formatGeoJsonFeature (feature) {\n  return {\n    ...feature,\n    properties: {\n      ...feature.properties,\n      data: JSON.parse(feature.properties.data || {})\n    }\n  }\n}\n\n/**\n * This is used to interpret a config object for transforming/mapping a data-viewer response; the response\n * is first converted to a more usable key/value object (rather than an array of values), and then that object\n * is transformed via that passed in base/setters.  Each setter specifies a key to instruct what property in\n * the transformed object is being set, and a value, which uses the pupa library to enable ES6/handlebars style\n * interpolation, e.g., { key: \"Full Name\", value: \"{firstName} {\"lastName\"}\" }.\n * see pupa docs https://github.com/sindresorhus/pupa#readme\n *\n * @param {object} response - raw response from data-viewer endpoint\n * @param {object} response.meta\n * @param {string[]} response.meta.headers\n * @param {array[]} response.data\n * @param {object} transformConfig\n * @param {object} transformConfig.base - base object to use for forming the transformed object\n * @param {object[]} transformConfig.setters\n * @param {string} transformConfig.setters.key - the path to set in base object\n * @param {string} transformConfig.setters.value - string using curly braces to retrieve value from response, e.g\n * @returns {object[]}\n */\nexport function transformResults (response, { base, setters }) {\n  const transformed = convertDataToObjectArray(response, (result) => {\n    const mappedResult = cloneDeep(base)\n    setters.forEach(({ key, value }) => {\n      const interpolatedValue = pupa(value, result)\n      set(mappedResult, key, interpolatedValue)\n    })\n\n    return mappedResult\n  })\n\n  return transformed\n}\n\n/**\n * This is used to traverse json structure and find which datasource name to use for the selected reference period.\n * If nothing is found, the default return is `default-geo`.\n *  * @param {object} geoJSON - JSON of config that maps reference periods and data source names\n *  * @param {string} referencePeriod - string value of reference period selected\n */\nexport function getDataSourceNameForPeriod (geoJSON, referencePeriod) {\n  let dataSourceName = DEFAULT_GEO_DATASOURCE_NAME\n\n  if (isEmpty(referencePeriod) || isEmpty(geoJSON)) { return dataSourceName }\n  geoJSON.forEach((mapping) => {\n    for (let i = 0; i < mapping?.reference_periods?.length; i++) {\n      const period = mapping.reference_periods[i]\n      if (referencePeriod === period) {\n        dataSourceName = mapping.datasource_name\n      }\n    }\n  })\n  return dataSourceName\n}\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport MsCbsaMapDisplay from './MsCbsaMapDisplay'\nimport isEmpty from 'lodash/isEmpty'\nimport Text from '../../../common/Text/Text'\nimport RelatedToolBanner from '../RelatedToolBanner'\nimport { toolTypes } from '../../../../utilities/lookupToolUtilities'\n\nimport './MsToolResults.scss'\n\nimport {\n  DisplaySelectionsContext\n} from '../../../../utilities/lookupToolUtilities/msStateCountyTool'\n\nimport {\n  MS_CBSA,\n  MS_REFERENCE_PERIOD,\n  MS_HEALTH_SERVICE_AREA,\n  getMetricFromLookup\n} from '../../../../utilities/lookupToolUtilities/msCbsaTool'\n\nconst MsCbsaToolResults = (props) => {\n  const {\n    uuid,\n    formValues,\n    toolType,\n    config\n  } = props\n\n  const [isMapLoading, setIsMapLoading] = useState(false)\n  const [selectedCbsaData, setSelectedCbsaData] = useState({})\n\n  if (isEmpty(formValues)) {\n    return null\n  }\n\n  return (\n    <Container className='ToolResults MsToolResults__wrapper cbsa'>\n      {(!isEmpty(formValues) && formValues[MS_CBSA] !== undefined && formValues[MS_CBSA] !== 'All CBSAs' ? (\n        <div className='selection_meta_data__wrapper'>\n          <div className='selection_meta_data'>\n            <div className='state_name'>\n              <Text typeFace='Montserrat Header/Navy'>{formValues[MS_CBSA]}</Text>\n            </div>\n            <div className='metric__wrapper'>\n              <div>\n                <div>\n                  <div className='label'>Metric Quartile:</div>\n                  <div className='value'>{selectedCbsaData ? selectedCbsaData[getMetricFromLookup(formValues.metric, config).description] : 'N/A'}</div>\n                </div>\n              </div>\n              <div>\n                <div>\n                  <div className='label'>Value:</div>\n                  <div className='value'>{selectedCbsaData ? selectedCbsaData[getMetricFromLookup(formValues.metric, config).value] : 'N/A'}</div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      )\n        : (\n          <div className='selection_meta_data__wrapper'>\n            <div className='selection_meta_data'>\n              <Text typeFace='Montserrat Header/Navy'>All CBSAs</Text>\n            </div>\n          </div>\n        )\n      )}\n      <MsCbsaMapDisplay\n        uuid={uuid}\n        formValues={formValues}\n        handleIsLoading={isLoading => setIsMapLoading(isLoading)}\n        selectedCbsaData={selectedCbsa => setSelectedCbsaData(selectedCbsa)}\n        toolConfig={config}\n      />\n      {!isMapLoading && (\n        <DisplaySelectionsContext {...formValues} label='Selected values:' getMetricFromLookup={getMetricFromLookup} config={config} />\n      )}\n      {!isMapLoading && (\n        <RelatedToolBanner\n          eyebrow='Market Saturation and Utilization'\n          description='Looking for State-County data?'\n          cta='View State-County data'\n          toolType={toolType}\n          targetToolType={toolTypes.marketSaturationStateCounty}\n        />\n      )}\n    </Container>\n  )\n}\n\nMsCbsaToolResults.propTypes = {\n  uuid: PropTypes.string.isRequired,\n  formValues: PropTypes.shape({\n    [MS_CBSA]: PropTypes.string,\n    [MS_REFERENCE_PERIOD]: PropTypes.string,\n    [MS_HEALTH_SERVICE_AREA]: PropTypes.string,\n    metric: PropTypes.string\n  }),\n  toolType: PropTypes.string.isRequired,\n  config: PropTypes.object\n}\n\nexport default MsCbsaToolResults\n","import React, { useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { buildLookupToolUiQueryString, parseQueryStringForLookupToolSearch } from '../../../../utilities/lookupToolUtilities'\nimport interactiveToolsStore from '../../../../stores/interactiveToolsStore'\nimport InteractiveToolSearchPage, { ExpandingResultsContainer } from '../InteractiveToolSearchPage'\nimport InteractiveToolsSearch from '../../../interactiveTools/InteractiveToolsSearch/InteractiveToolsSearch'\nimport MsCbsaToolResults from '../../../interactiveTools/InteractiveToolsResults/MarketSaturation/MsCbsaToolResults'\nimport { updateFormValuesSearchState } from '../../../../utilities/searchPageHelpers'\n\nconst MsCbsaToolSearchPage = (props) => {\n  const { history, config } = props\n  const queryString = history.location.search\n  const searchResultsRef = useRef(null)\n\n  // inject props to component via store\n  const storeProps = interactiveToolsStore.useState(state => ({\n    uuid: state.data.id,\n    name: state.data.name,\n    contactInfo: state.data.contactInfo,\n    searchResults: state.search.results,\n    searchLoading: state.search.isLoading,\n    toolType: state.data.toolType,\n    metaTags: state.data.metaTags,\n    // use cached form values to hand into search results, since we won't want to\n    // display the live updates of the form inputs\n    formValues: state.search.cachedFormValues\n  }))\n\n  const isSearchActive = !!(queryString && queryString.length > 0)\n\n  // this will run both upon page load and after form submission, and will parse the query string and\n  // save the parameters in the store for components to use\n  useEffect(() => {\n    if (isSearchActive) {\n      // get form values from query string\n      const { formValues } = parseQueryStringForLookupToolSearch(queryString)\n      updateFormValuesSearchState(formValues, interactiveToolsStore)\n    }\n  }, [queryString, isSearchActive])\n\n  function handleSubmit (formValues) {\n    const queryString = buildLookupToolUiQueryString({ formValues })\n    if (queryString !== history.location.search) {\n      updateFormValuesSearchState(formValues, interactiveToolsStore)\n      // Update URL query after setting new form values.\n      history.push({ search: queryString })\n    }\n    // Brief delay to allow for result card and map to load.\n    setTimeout(() => {\n      scrollToResults()\n    }, 250)\n  }\n\n  function scrollToResults () {\n    const currentScrollTop = window.pageYOffset\n    const top = searchResultsRef.current.getBoundingClientRect().top\n    window.scrollTo({\n      top: top + currentScrollTop,\n      behavior: 'smooth'\n    })\n  }\n\n  return (\n    <InteractiveToolSearchPage {...props} isSearchActive={isSearchActive} {...storeProps}>\n      <InteractiveToolsSearch\n        submitHandler={e => handleSubmit(e)}\n        onSearchSubmit={e => scrollToResults(e)}\n        isSearchActive={isSearchActive}\n        config={config}\n      />\n      <div ref={searchResultsRef} />\n      <ExpandingResultsContainer\n        isSearchActive={isSearchActive}\n        toolType={storeProps.toolType}\n        hasResults={isSearchActive}\n      >\n        <MsCbsaToolResults\n          uuid={storeProps.uuid}\n          formValues={storeProps.formValues}\n          toolType={storeProps.toolType}\n          config={config}\n        />\n      </ExpandingResultsContainer>\n    </InteractiveToolSearchPage>\n  )\n}\n\nMsCbsaToolSearchPage.propTypes = {\n  history: PropTypes.object,\n  config: PropTypes.object\n}\n\nexport default MsCbsaToolSearchPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Route } from 'react-router-dom'\nimport interactiveToolsStore, { initialState } from '../../../stores/interactiveToolsStore'\nimport InteractiveToolDetailsPage from './InteractiveToolDetailsPage'\nimport LoadingCover from '../../common/LoadingCover/LoadingCover'\nimport ErrorPage from '../ErrorPage/ErrorPage'\nimport { toolTypes } from '../../../utilities/lookupToolUtilities/toolConfigs'\nimport {\n  getLookupToolById,\n  getFeaturedLookupTools,\n  getLookupToolBackground,\n  getLookupToolIcon\n} from '../../../services/api'\nimport MmdToolSearchPage from './InteractiveToolSearchPage/MmdToolSearchPage'\nimport DefaultToolSearchPage from './InteractiveToolSearchPage/DefaultToolSearchPage'\nimport compose from '../../../hocs/compose'\nimport withBoundary from '../../../hocs/withBoundary/withBoundary'\nimport MsStateCountyToolSearchPage from './InteractiveToolSearchPage/MsStateCountyToolSearchPage'\nimport MsCbsaToolSearchPage from './InteractiveToolSearchPage/MsCbsaToolSearchPage'\n\nimport './InteractiveToolPageContainer.scss'\n\n/**\n * Method for loading main lookup tool data via uuid\n * @param {string} uuid - uuid of lookupt ool\n */\nexport async function loadLookupToolById (uuid = '') {\n  try {\n    // to avoid the deserializer's circular reference issue, we'll\n    // split out the loading of featured tools into a separate call\n    const [data, featuredTools] = await Promise.all([\n      getLookupToolById(uuid),\n      getFeaturedLookupTools(uuid)\n    ])\n\n    const { fieldCalloutImage, fieldMediaImage2, fieldMobileImage } = await getLookupToolBackground(data?.backgroundImage?.id)\n    const { fieldIconImageInverted, fieldMediaImage1, iconAltText, iconInvertedAltText } = await getLookupToolIcon(data?.iconImage?.id)\n\n    interactiveToolsStore.update(state => {\n      state.data = {\n        ...data,\n        featuredTools,\n        fieldCalloutImage: fieldCalloutImage?.uri?.url,\n        fieldMediaImage2: fieldMediaImage2?.uri?.url,\n        fieldMobileImage: fieldMobileImage?.uri?.url,\n        fieldIconImageInverted: fieldIconImageInverted?.uri?.url,\n        fieldMediaImage1: fieldMediaImage1?.uri?.url,\n        iconAltText: iconAltText,\n        iconInvertedAltText: iconInvertedAltText\n      }\n      // reset search to initial offset, size, etc... as well as detail state\n      state.search = { ...initialState.search }\n      state.detail = { ...initialState.detail }\n    })\n\n    return data\n  } catch (e) {\n    console.error(e)\n    throw e\n  }\n}\n\nfunction getSearchPageComponent (toolType) {\n  switch (toolType) {\n    case toolTypes.mmdHospital:\n    case toolTypes.mmdPopulation:\n      return MmdToolSearchPage\n    case toolTypes.marketSaturationStateCounty:\n      return MsStateCountyToolSearchPage\n    case toolTypes.marketSaturationCBSA:\n      return MsCbsaToolSearchPage\n    default:\n      return DefaultToolSearchPage\n  }\n}\n\nconst InteractiveToolPageContainer = (props) => {\n  const {\n    match,\n    slugResolveData\n  } = props\n  const { uuid } = slugResolveData\n  const { path: toolPath } = match\n  const [{ isLoading, error, toolType }, setState] = useState({ isLoading: true, error: null, toolType: null })\n  const [config, setConfig] = useState({})\n\n  useEffect(() => {\n    async function loadToolData () {\n      try {\n        setState({ isLoading: true, error: null })\n        const data = await loadLookupToolById(uuid)\n        setState({ isLoading: false, error: null, toolType: data.toolType })\n        setConfig(data.fieldExtraConfigJson)\n      } catch (e) {\n        setState({ isLoading: false, error: e })\n      }\n    }\n\n    loadToolData()\n  }, [uuid])\n\n  if (isLoading) {\n    return <LoadingCover />\n  } else if (error) {\n    return <ErrorPage error={error} />\n  } else {\n    const Component = getSearchPageComponent(toolType)\n    return (\n      <>\n        <Route path={toolPath} exact component={(props) => <Component {...props} config={config} />} />\n        <Route path={`${toolPath}/:toolDetailParam/:toolDetailValue`} exact component={InteractiveToolDetailsPage} />\n      </>\n    )\n  }\n}\n\nInteractiveToolPageContainer.propTypes = {\n  slugResolveData: PropTypes.shape({\n    uuid: PropTypes.string\n  }),\n  match: PropTypes.shape({\n    path: PropTypes.string\n  })\n}\n\nexport default compose(withBoundary)(InteractiveToolPageContainer)\n\nexport { InteractiveToolPageContainer }\n"],"names":["sanitizeRowValue","arguments","length","undefined","replace","tableString","htmlDoc","DOMParser","parseFromString","final","querySelectorAll","forEach","row","push","values","x","children","rowValue","innerHTML","parseRowValues","_ref","column","size","type","className","_jsx","style","width","cx","RichTextField","content","dynamicTableOverflowWidthArticle","dynamicTableOverflowWidthInteractive","dynamicTableColumnMaximum","dynamicTableColumnMinimum","config","ARTICLE_CONTEXT","INTERACTIVE_CONTEXT","DynamicTable","PureComponent","constructor","props","super","parseHtmlTable","memoizeOne","parseJsonData","data","get","refCallback","element","this","setState","getBoundingClientRect","state","analyzeColumns","maxWidth","rawWidths","rowIndex","columnIndex","currentWidth","reduce","prev","current","map","render","subtitle","footnotes","hasFooter","leftColOffset","windowWidth","toolType","hasPagination","headerClasses","bodyClasses","tableContext","jsData","columnSizeData","tableWidth","hasHeader","indexOf","headerRow","bodyRowStartIndex","bodyRowEndIndex","bodyRows","slice","footerRow","hasScrollShadow","ComponentShell","_jsxs","Text","typeFace","tabIndex","ref","i","CellRenderer","index","value","dangerouslySetInnerHTML","__html","domElement","defaultProps","withDisplayContext","apiSite","getBackgroundImage","darkTealBackground","ToolSearchHeroTitle","_ref2","title","description","Container","Row","Col","lg","ToolDetailHeroTitle","_interactiveToolsStor6","_interactiveToolsStor7","detailMeta","toolName","toolUrlPath","isLoading","customIcon","interactiveToolsStore","currentState","fieldMediaImage1","loading","_ref3","idx","label","component","hasComponent","hasValues","Array","isArray","src","startOverWave","alt","defaultImage","LinkHandler","variant","href","BackToSearchResultsLink","_ref4","noBs","routerData","search","history","location","CarouselArrow","direction","BackToToolsLink","getToolsPagePath","CaretLeftRightIcon","color","_interactiveToolsStor","_interactiveToolsStor2","_interactiveToolsStor3","_interactiveToolsStor4","_interactiveToolsStor5","hasWave","titleComponent","id","eyebrow","isDesktop","isTablet","isMobile","useDisplayContext","customBackgroundImage","fieldMediaImage2","imageSource","toolIcons","customToolsList","includes","wave","fluid","backgroundImage","Breadcrumb","Item","active","iconAltText","toolDetailsWaveXL","toolDetailsWaveM","toolDetailsWaveS","initialState","error","toolDetailParam","toolDetailValue","useState","name","slug","detail","useEffect","async","loadToolDetailsHero","loadData","console","InteractiveToolsHero","sizeOptions","forwardRef","isLoadingStats","onSetSize","offset","numOfFoundResults","viewStart","viewEnd","Math","min","startCount","numberWithCommas","endCount","foundCount","_Fragment","Dropdown","Toggle","Menu","flip","alignRight","as","onClick","icon","span","inpatient","prescriber","physician","optout","revalidation","toolTypes","multiNumberDisplay","rowItem","num","nums","display","generateDetailUrlPath","toolUrl","rowToolTypes","ccn","ccns","Rndrng_Prvdr_CCN","zip","getZip","Rndrng_Prvdr_Zip5","Rndrng_Prvdr_Org_Name","Rndrng_Prvdr_St","Rndrng_Prvdr_City","Rndrng_Prvdr_State_Abrvtn","npi","npis","Prscrbr_NPI","Prscrbr_First_Name","Prscrbr_Last_Org_Name","Prscrbr_City","Prscrbr_State_Abrvtn","Prscrbr_Type","Rndrng_NPI","Rndrng_Prvdr_Ent_Cd","Rndrng_Prvdr_First_Name","Rndrng_Prvdr_Last_Org_Name","Rndrng_Prvdr_St1","Rndrng_Prvdr_St2","Rndrng_Prvdr_Type","effectiveDate","endDate","eligible","toLowerCase","dayjs","format","REVALIDATION_NPI","isIndividual","getNameFromRow","isDmeSupplier","getState","getSpecialty","getNpiList","getDueDateDisplay","getEnrollmentId","getNumOfOrganizationsAssignedToIndividual","getNumOfIndividualsAssignedToOrg","revalidationTool","formValues","resultType","npiList","total","revalidationDueDate","currentNpi","NameElement","NameElementProps","toUpperCase","NpiTextDisplay","RowComponent","InteractiveToolsNoResults","toolConfig","isInitialLoad","statusBarComponent","paginationComponent","showPrintHeader","hasResults","printHeaders","printViewHeaders","cmsHeaderLogoWithText","pathname","header","displayName","machineName","LoadingCover","ToolsResultsRows","LoadingSpinner","InteractiveToolsResultsRow","initialUiState","isLoadingData","customErrorPages","CustomError","provider","isIndividualId","Button","detailDisplayType","getToolDetailDisplayType","resultsTitle","getToolDetailResultsTitle","setNumberOfFoundResults","detailUiState","setDetailUiState","setData","detailParams","goToPage","updatedOffset","prevState","window","scroll","top","left","behavior","apiParams","getToolDetailStatsApiParams","stats","getLookupToolDataStats","found_rows","loadStats","dataParams","getToolDetailDataApiParams","getLookupToolData","detailData","DETAIL_DISPLAY_TYPE_TABLE","formatLookupToolDetails","tableFormat","convertDataToObjectArray","renderPagination","Pagination","limit","e","InputPagination","onUpdateOffset","shouldDisplayStartOverBanner","Object","keys","displayCustomError","parentToolName","detailMetaWithSpaces","formatted","filter","el","join","details","InteractiveToolsStatusBar","updatedSize","getAdjustedOffset","handleSetSize","DETAIL_DISPLAY_TYPE_LIST","InteractiveToolResults","StartOverBanner","tools","tool","Tool","metaOrganizationName","InteractiveToolDetailsPage","featuredTools","MetaHead","InteractiveToolsHeroDetailPage","InteractiveToolDetails","OtherInteractiveTools","Footer","compose","withBoundary","match","params","storeProps","MMDHospital","height","frameBorder","MMDPopulation","InteractiveToolsHeroSearchPage","InteractiveToolsSearchLanding","sections","ContentPageLayout","renderSection","section","renderedDatasets","datasetDisplay","SECTION_TEXT","SECTION_RESOURCES","DatasetResources","isTools","resources","showAdditionalResources","SECTION_DATASETS","datasets","dataset","DatasetCard","classes","container","ResourceSmallCarousel","renderedResources","isDatasetCarousel","SECTION_FAQS","FaqsList","faqs","renderNav","sectionsData","currentSectionId","ContentPageNav","landingPageSections","resultsTransitionTime","tealTheme","purpleTheme","lightBlueTheme","getToolThemeClass","marketSaturationCBSA","marketSaturationStateCounty","ExpandingResultsContainer","isSearchActive","useLayoutEffect","setTimeout","dispatchRepositionEvent","searchActive","Collapse","timeout","parseInt","in","onEnter","onEntering","onEntered","onExit","onExiting","onExited","InteractiveToolSearchPage","contactInfo","metaTags","startRef","useRef","stopRef","BackTopTopBtn","thresholdTop","ContactBanner","subjectLine","getDefaultSubjectLineForContent","renderMmdComponent","mmdHospital","mmdPopulation","MmdTool","results","sort","queryString","buildLookupToolUiQueryString","handleUpdateOffset","listItem","onMouseDown","stateFipsMapping","fipsKeys","stateKeys","key","territoryKeys","DISABLED_COLOR","stateSelectListWithoutTerritories","createStateOptions","stateSelectList","fips","abbreviation","a","b","colorStyles","singleValue","styles","isDisabled","control","backgroundColor","InteractiveToolsSearchSelect","otherProps","Select","isClearable","classNamePrefix","components","DropdownIndicator","hasValue","selectProps","SortDownIcon","isMulti","InteractiveSearchToolsStateSelect","selectValue","find","option","placeholder","options","FilteredInput","valueFilter","onChange","Form","Control","target","filteredValue","handleChange","npiRegexFilter","NpiInput","maxLength","ccnRegexFilter","CcnInput","uuid","onClearAll","onSelectChange","onSubmit","onTextChange","onTypeaheadClick","typeaheadSize","currentStateAbbreviation","INPATIENT_STATE","Group","controlId","Label","Typeahead","INPATIENT_PROVIDER_NAME","initialSearchValue","getTypeaheadData","handleGetTypeaheadData","onRequestSearch","listComponent","ToolTypeaheadList","INPATIENT_CCN","INPATIENT_CITY","visuallyHidden","isEmpty","disabled","PRESCRIBER_STATE","PRESCRIBER_LAST_NAME","PRESCRIBER_FIRST_NAME","PRESCRIBER_NPI","PRESCRIBER_CITY","PHYSICIAN_STATE","PHYSICIAN_LAST_NAME","PHYSICIAN_FIRST_NAME","PHYSICIAN_NPI","PHYSICIAN_CITY","specialtyOptions","setSpecialtyOptions","getSpecialtyOptions","then","catch","err","specialtySelectValue","OPTOUT_SPECIALTY","OPTOUT_LAST_NAME","OPTOUT_FIRST_NAME","OPTOUT_NPI","OPTOUT_ZIP","DEFAULT_DATE_STRING_FORMAT","i18n","previousMonth","nextMonth","months","weekdays","weekdaysShort","isSameDate","date1","date2","isSame","DatePicker","React","inputRef","createRef","pikaDayRef","handleDateChange","date","handleOpen","pikaDayInstance","gotoDate","internalDateValue","dateToString","dateFormat","parseDate","dateString","Date","handleUnmount","destroy","getDate","componentDidUpdate","previousProps","minDate","maxDate","setMinDate","setMaxDate","setDate","componentDidMount","yearRange","Pikaday","field","defaultDate","setDefaultDate","toString","parse","onSelect","theme","onOpen","DatePickerContainer","onUnmount","readOnly","dateFiterSelectOptions","ALL_RECORDS_VALUE","ONLY_DUE_DATE_RECORDS_VALUE","DATE_RANGE_VALUE","datePickerYearRange","getFullYear","onDateChange","dateFilterSelection","REVALIDATION_DATE_FILTER_TYPE","isDateRangeSelected","REVALIDATION_STATE","startDateString","REVALIDATION_START_DATE","endDateString","REVALIDATION_END_DATE","startDate","parseFormValueDate","isOrgInputPresent","REVALIDATION_ORG_NAME","trim","isFirstNameInputPresent","REVALIDATION_FIRST_NAME","isLastNameInputPresent","REVALIDATION_LAST_NAME","isIndividualInputPresent","isNpiInputPresent","isOrgInputDisabled","isIndividualInputDisabled","isNpiInputDisabled","handleOnTypeAheadClick","submitOnClick","inputField","document","querySelector","blur","renderButtons","opts","nonDateInputs","omit","hasEmptyDateField","isDefaultFormState","isFormInvalid","handleGetOrgTypeahead","handleGetFirstNameTypeahead","handleGetLastNameTypeahead","Store","selectedCounty","referencePeriods","allStatesSelectValue","search_form","MS_STATE","field_placeholder","allCountiesSelectValue","MS_COUNTY","isLoadingReferencePeriods","selectList","referencePeriodSelectList","useLoadReferencePeriodSelectList","isLoadingHealthServiceAreas","healthServiceAreaSelectList","useLoadHealthServiceAreaSelectList","isLoadingCounties","countySelectList","useLoadCountySelectList","metricSelectList","useLoadMetricSelectList","selectedReferencePeriodOption","MS_REFERENCE_PERIOD","selectedHealthServiceAreaOption","MS_HEALTH_SERVICE_AREA","selectedMetricOption","MS_METRIC","selectedStateOption","selectedCountyOption","MsStateCountyToolStore","update","field_label","loadingMessage","action","handleStateSelectionChange","selectedOption","actionType","MS_CBSA","getMetricFromLookup","metric","metricsLookUp","findIndex","m","flattenMetric","flattened","foundMetric","useLoadCbsaDisplayData","setIsLoading","selectedCbsa","setSelectedCbsa","hasChange","setHasChange","columns","CBSA_NAME_COL","cbsa","baseInputs","filterName","operator","REFERENCE_PERIOD_COL","HEALTH_SERVICE_AREA_COL","conditions","formKey","AGGREGATION_LEVEL_COL","CBSA_COL","getToolSearchApiParams","referencePeriod","healthServiceArea","response","result","underscored","changeColumn","change","load","mapLegendData","setSelectList","distinct","aDate","split","isLoadingCbsa","cbsaSelectList","reference_period","unshift","some","useLoadCbsaSelectList","selectedCbsaOption","_path","assign","source","prototype","hasOwnProperty","call","apply","SvgArrowRightArrowLeft","svgRef","titleId","xmlns","viewBox","fill","d","typeaheadMaxRows","mobileTypeaheadMaxRows","getFormTitle","InteractiveToolsSearchBreadcrumb","path","ArrowRightLeftIcon","InteractiveToolsSearch","getUserAgreementStatus","licenseAgreement","submitHandler","onSearchSubmit","searchBreadcrumbPath","setSearchBreadcrumbPath","searchBreadcrumbLabel","setSearchBreadcrumbLabel","getLookupToolSlugByToolType","getBreadcrumbParams","handleSubmit","isLicenseAgreedTo","formValuesTrunced","payload","refreshLookupToolSearchResults","hasAgreed","FormComponent","InpatientTool","PrescriberTool","PhysicianTool","OptoutTool","RevalidationTool","MarketSaturationStateCounty","MarketSaturationCbsa","getToolForm","commonFormProps","handleClearAll","selectOption","preventDefault","pickBy","identity","dateValue","dateStringValue","altText","verb","withSearchBreadcrumb","withUserAgreementModal","_fieldIframeSection$f","searchResultsRef","searchResults","searchLoading","fieldIframeSection","scrollToResults","currentScrollTop","pageYOffset","scrollTo","scrollPosition","cancelActiveSearchRequests","refreshPayload","parseQueryStringForLookupToolSearch","resolveURLForEnvironment","fieldExternalLink","uri","iframeJSX","fieldIframeWidth","fieldIframeHeight","searchResultsJSX","InteractiveToolResultsSearchPage","handleIsLoading","handleHasData","useLoadMapDisplayData","mapAlertBanner","setMapAlertBanner","mapConfig","setMapConfig","settings","mapBoxStateAbbrStyle","center","zoom","pitch","navigationControl","isEnabled","position","geoCoder","layer","beforeId","popup","layerId","callback","closeButton","closeOnClick","createNationalMapFeatures","geoJson","features","cloneDeep","feature","properties","state_abbr","county","prop","isNaN","Number","getMapLayerPaint","tempMapConfig","paint","MsMapPaint","adjustTextContrast","NEEDS_CONTRAST","addLayer","layout","removeLayer","renderPopup","formulas","formula","popupProps","FeatureParser","domNode","createElement","ReactDOM","getLoadingSection","MapBoxMap","log","JSON","stringify","onMapLoad","mapGeoFeatures","addSource","setupHoverPopup","loadMapData","alertBanner","onAlertBannerClear","OnMapError","cantLoadBanner","MapLegendDisplay","legendData","cssClass","setMap","mapBoxCountyStyle","jumpTo","setJumpTo","stateCounties","setStateCounties","mapConfigCopy","stateAbbrToMeta","getStyle","countyFP","setFilter","createStateMapFeatures","COUNTYFP","COUNTY_FIPS_COL","NAME","filteredGeojson","STATEFP","resetOverride","isFullScreen","keywords","sortBy","sortOrder","isFilterOpen","filterButtonRef","tableSectionRef","userSelections","setUserSelections","tableData","setTableData","_data","metaData","statusBarData","setStatusBarData","numOfTotalResults","dataHeaders","columnTypes","columnFormatting","reactTableProps","useReactTableProps","dataRows","headerGroups","getTableProps","getTableBodyProps","rows","prepareRow","showSpinner","loadTableViewCountyData","res","meta","body","classList","add","remove","DataTableStatusBar","onSetLimit","handleSetLimit","updatedLimit","onSetFullScreen","handleSetFullScreen","updatedIsFullScreen","DataTable","onSetSort","handleSetSort","updatedSort","selectedMetric","selectedStates","states","preserveDataGaps","formattedTableData","j","stateName","headers","csvColumnTypes","csvDisplayFormatting","parseFloat","aVal","data_file_meta_data","transformedData","msStateCompareChartDataTransform","isClicked","setIsClicked","inToolTip","setInToolTip","inChart","setInChart","setAlertBanner","tooltipEl","getElementById","appendChild","opacity","optionsConfig","hover","mode","tooltips","custom","tooltipModel","yAlign","ToolTipContent","dataPoints","xLabel","_chart","canvas","pageXOffset","caretX","offsetWidth","caretY","offsetHeight","fontFamily","_bodyFontFamily","fontSize","bodyFontSize","fontStyle","_bodyFontStyle","padding","yPadding","xPadding","onMouseLeave","onMouseEnter","ChartScrollableWrapper","chartLegend","getAlertBanner","Line","labels","borderColor","lineColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","line","stepped","commonConfig","borderWidth","pointHoverBorderWidth","pointStyle","pointRadius","pointHitRadius","borderCapStyle","borderJoinStyle","pointHoverRadius","tension","scaleLabelConfig","bottom","fontColor","SimpleBar","forceVisible","autoHide","lines","numberWithConfigFormatting","legend","scales","xAxes","scaleLabel","labelString","gridLines","drawBorder","tickMarkLength","drawOnChartArea","ticks","fontWeight","autoSkip","lineHeight","minRotation","afterFit","axis","paddingRight","paddingLeft","yAxes","updatedVal","intersect","enabled","maintainAspectRatio","responsive","plugins","datalabels","SelectBtn","selected","isExpanded","setIsExpanded","toggleExpand","PlusIcon","handleOnSelect","item","PillBtn","event","SearchFilterCloseIcon","NATION_AND_TERRITORIES_LABEL","NATION_AND_TERRITORIES_DEFAULT","isActive","setSelected","showChartView","setShowChartView","stateComparisonList","setStateComparisonList","stateComparisonDefault","setStateComparisonDefault","stateComparisonNation","setStateComparisonNation","isStateComparisonLoading","setIsStateComparisonLoading","lineColors","setLineColors","wddseAccentColorPalette","reverse","stateComparisonOpenSpots","getStateNameFromStateCode","code","filteredList","getStateCodeFromStateName","loadStateComparisonData","pop","stateCode","statusText","handleOnStateComparisonRemove","handleOnStateComparisonAdd","FormCheck","loadNationAndTerritoriesData","cta","targetToolType","targetPath","setTargetPath","getTargetPath","md","stateCardData","setStateCardData","isMapLoading","setIsMapLoading","showMapView","setShowMapView","mapHasData","setMapHasData","selectedCompareStates","setSelectedCompareStates","isCountyDataLoading","setIsCountyDataLoading","countyCardData","loadStateDisplayData","getCountyMetaCardData","handleSelectedStates","useCallback","renderMetaDataCards","MsStateMapView","hasData","MsNationalMapView","MsTableView","DisplaySelectionsContext","MsStateCountyStateComparison","MsStateCompareChart","MsStateCompareTable","RelatedToolBanner","metaDataCard","formatMetaData","isState","formattedCardData","STATE_FIPS_COL","moratorium","cachedFormValues","updateFormValuesSearchState","_searchResultsRef$cur","_searchResultsRef$cur2","MsStateCountyToolResults","selectedCbsaData","dataSourceName","geoJSON","mapping","_mapping$reference_pe","reference_periods","period","datasource_name","getDataSourceNameForPeriod","geo_dataset_mapping","cbsaFeatures","setCbsaFeatures","setGeoJson","isLoadingGeoJson","setIsLoadingGeoJson","setCenter","diagonal","setDiagonal","_selectedCbsaFeatures","getInteractiveData","selectedCbsaFeatures","geometry","coordinates","flattenDeep","north","south","west","east","sqrt","pow","mapBoxCbsaStyle","cbsaFP","CBSAFP","setSelectedCbsaData","MsCbsaMapDisplay","MsCbsaToolResults","loadLookupToolById","_data$backgroundImage","_data$iconImage","Promise","all","getLookupToolById","getFeaturedLookupTools","fieldCalloutImage","fieldMobileImage","getLookupToolBackground","fieldIconImageInverted","iconInvertedAltText","getLookupToolIcon","iconImage","_fieldCalloutImage$ur","_fieldMediaImage2$uri","_fieldMobileImage$uri","_fieldIconImageInvert","_fieldMediaImage1$uri","url","InteractiveToolPageContainer","slugResolveData","toolPath","setConfig","fieldExtraConfigJson","loadToolData","ErrorPage","Component","MmdToolSearchPage","MsStateCountyToolSearchPage","MsCbsaToolSearchPage","DefaultToolSearchPage","getSearchPageComponent","Route","exact"],"sourceRoot":""}