{"version":3,"file":"custom-universal-select-d0700d67.js","sources":["../../../client/src/javascripts/customer_pages/_utils/paginator/use-pagination-range.jsx","../../../client/src/javascripts/customer_pages/_utils/paginator/index.jsx","../../../client/src/javascripts/customer_pages/_utils/custom-universal-select.jsx"],"sourcesContent":["import { useMemo } from 'react';\n\nconst PAGINATION_BREAK = undefined;\n\nconst usePaginationRange = ({ totalPageCount, currentPage, maxSiblings }) => {\n const paginationRange = useMemo(() => {\n if (totalPageCount === 1) {\n return [1];\n }\n\n const leftSibling = Math.max(currentPage - maxSiblings, 1);\n const rightSibling = Math.min(currentPage + maxSiblings, totalPageCount);\n\n const range = [];\n let previousPage;\n\n for (let i = 1; i <= totalPageCount; i++) {\n const isFirstOrLastPage = i === 1 || i === totalPageCount;\n const isWithinDisplayableRange = i >= leftSibling && i <= rightSibling;\n\n if (isFirstOrLastPage || isWithinDisplayableRange) {\n if (previousPage && i !== previousPage + 1) {\n range.push(PAGINATION_BREAK);\n }\n range.push(i);\n previousPage = i;\n }\n }\n\n return range;\n }, [totalPageCount, currentPage, maxSiblings]);\n\n return({\n paginationRange\n });\n}\n\nexport { usePaginationRange, PAGINATION_BREAK };\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport screenAndStyle from '../screen-and-style';\nimport { usePaginationRange, PAGINATION_BREAK } from './use-pagination-range';\n\n// Max number of siblings either side of current page\n// * First & Last page always displayed\n// * Prev & Next displayed when valid\n// [1, PAGINATION_BREAK, 9, _10_, 11, PAGINATION_BREAK, 15] = 1 siblings\n// [1, PAGINATION_BREAK, 8, 9, _10_, 11, 12, PAGINATION_BREAK, 15] = 2 siblings\nconst MOBILE_PAGINATION_SIBLINGS = 1;\nconst DESKTOP_PAGINATION_SIBLINGS = 4;\n// ---------}\n\nconst scrollTo = (target) => {\n var top = target || 0,\n $target;\n\n if (isNaN(top)) {\n $target = $(target || 'body');\n\n if (['auto', 'scroll'].indexOf($target.css('overflow-y')) > -1) {\n // we're in a scrolling div\n $target.animate({ scrollTop: 0 });\n return;\n }\n\n top = $target.offset().top;\n }\n\n $('html, body').animate({\n scrollTop: top,\n });\n}\n\nconst Paginator = ({ scrollTarget, page: currentPage, onPagePrevious, onPageNext, totalPageCount, onGoToPage, title, children }) => {\n const handlePagePrevious = useCallback((e) => {\n e.preventDefault();\n if (currentPage > 1) {\n scrollTo(scrollTarget);\n onPagePrevious();\n }\n }, [scrollTarget, onPagePrevious, currentPage]);\n\n const handlePageNext = useCallback((e) => {\n e.preventDefault();\n if (currentPage < totalPageCount) {\n scrollTo(scrollTarget);\n onPageNext();\n }\n }, [scrollTarget, onPageNext, currentPage, totalPageCount]);\n\n const maxSiblings = screenAndStyle.assumePhoneOrSmallScreen() ? MOBILE_PAGINATION_SIBLINGS : DESKTOP_PAGINATION_SIBLINGS;\n const { paginationRange } = usePaginationRange({ totalPageCount, maxSiblings, currentPage });\n\n return (\n <>\n {children}\n {totalPageCount > 1 && (\n \n )}\n >\n );\n}\n\nPaginator.propTypes = {\n scrollTarget: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n ]).isRequired,\n page: PropTypes.number, // aka currentPage\n totalPageCount: PropTypes.number.isRequired,\n onPagePrevious: PropTypes.func.isRequired,\n onPageNext: PropTypes.func.isRequired,\n onGoToPage: PropTypes.func.isRequired,\n children: PropTypes.oneOfType([\n PropTypes.node,\n PropTypes.arrayOf(PropTypes.node),\n ]),\n title: PropTypes.string,\n}\n\nPaginator.defaultProps = {\n title: \"Pagination Navigation\"\n}\n\nexport default Paginator;\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nfunction CustomUniversalSelect({\n options,\n value,\n onChange,\n ariaLabel,\n hideCheckBox,\n solidArrowIcon,\n}) {\n const newRef = useRef(null);\n useEffect(() => {\n document.addEventListener('click', handleClick);\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n\n const [isListOpen, setIsListOpen] = useState('');\n const arrowStyle = solidArrowIcon ? 'caret' : 'angle';\n\n const paramOption = options.find(option => option.value === value) || options[0],\n headerOption = options.find(option => option.selected) || paramOption,\n headerTitle = headerOption?.label;\n\n const handleClick = e => {\n if (!newRef.current.contains(e.target)) {\n setIsListOpen(false);\n }\n };\n\n const toggleList = () => {\n setIsListOpen(prevState => !prevState);\n };\n\n const selectItem = item => {\n const { value } = item;\n setIsListOpen(false);\n onChange(value);\n };\n\n const handleKeyPress = event => {\n if (event.key === 'Escape') {\n event.preventDefault();\n \n setIsListOpen(false);\n }\n };\n\n const $options = options.map((option, i) => {\n if (value == option.label) {\n value = option.value;\n }\n return (\n \n );\n });\n\n return (\n