{"version":3,"file":"2306.bundle.e67390ba115075dbcdc5.js","mappings":"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","sources":["webpack://fieldlevel.app/./app-core/components/PageTitle.jsx","webpack://fieldlevel.app/./app-core/components/PagingControls/PagingControls.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/use_UNSTABLE_horizontalScrollTracking.js","webpack://fieldlevel.app/./app-core/components/SearchFilters/useTempValues.js","webpack://fieldlevel.app/./app-core/components/SearchFilters/TextSearchInput.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/SecondaryDropdown.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/AllFiltersModal.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/AllFiltersModal.module.css","webpack://fieldlevel.app/./app-core/components/SearchFilters/SearchFilters.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/Filters.module.css","webpack://fieldlevel.app/./app-core/components/SearchFilters/utility.js","webpack://fieldlevel.app/./app-core/hooks/routeTools/useURLParams/useURLParams.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n/**\r\n * This component is intended to set the document's title element programmatically. It's reactive to any\r\n * changes to the passed-in title, but it's otherwise simple in that it has no awareness of other components\r\n * that may be interacting with the document. It's recommended to keep things simple and use sparingly.\r\n *\r\n * NOTE: Due to its design, it'll automatically apply the most deeply nested usage last\r\n * (allowing children to override a parent), but if multiple components are setting titles dynamically,\r\n * there's no mechanism to prevent a parent component from \"retaking\" control.\r\n */\r\nconst PageTitle = props => {\r\n const { title } = props;\r\n const isMountedRef = useRef(false);\r\n const currentTitleRef = useRef(null);\r\n const setPageTitle = () => {\r\n if (title && typeof title === 'string' && document.title !== title && currentTitleRef.current !== title) {\r\n document.title = title;\r\n currentTitleRef.current = title;\r\n }\r\n };\r\n setPageTitle();\r\n\r\n useEffect(() => {\r\n if (!isMountedRef.current) {\r\n isMountedRef.current = true;\r\n return;\r\n }\r\n setPageTitle();\r\n }, [title]);\r\n\r\n return null;\r\n};\r\n\r\nPageTitle.propTypes = {\r\n title: PropTypes.string\r\n};\r\n\r\nexport default PageTitle;\r\n","import PropTypes from 'prop-types';\r\nimport cx from 'classnames';\r\n\r\nimport { Stack, Icon, BackMinor, ForwardMinor } from '@fieldlevel/playbook';\r\n\r\nimport WiredLink from '@appCore/components/WiredLink';\r\n\r\nconst CustomButton = ({ onClick, active, disabled, ariaLabel, children }) => {\r\n const textColorStyle = active ? 'text-interactive-base' : disabled ? 'text-muted' : 'text-interactive-active';\r\n const cursorStyle = disabled || active ? 'cursor-default' : 'cursor-pointer';\r\n const borderStyle = active && 'border border-base';\r\n\r\n return (\r\n <button\r\n className={cx(\r\n 'text-center font-[500] select-none p-2 rounded focus:outline-none',\r\n textColorStyle,\r\n cursorStyle,\r\n borderStyle\r\n )}\r\n disabled={disabled}\r\n onClick={onClick}\r\n aria-label={ariaLabel}\r\n >\r\n {children}\r\n </button>\r\n );\r\n};\r\n\r\nconst PagingButton = ({ linkProps, isActive, onClick, isDisabled, children, ariaLabel }) => {\r\n return !isActive && !isDisabled && linkProps ? (\r\n <WiredLink {...linkProps} unstyled>\r\n <CustomButton onClick={onClick} active={isActive} disabled={isDisabled} ariaLabel={ariaLabel}>\r\n {children}\r\n </CustomButton>\r\n </WiredLink>\r\n ) : (\r\n <CustomButton onClick={onClick} active={isActive} disabled={isDisabled} ariaLabel={ariaLabel}>\r\n {children}\r\n </CustomButton>\r\n );\r\n};\r\n\r\nconst PrevButton = props => {\r\n return (\r\n <PagingButton {...props} ariaLabel=\"Go back to previous page\">\r\n <div className=\"flex items-center\">\r\n <Icon source={BackMinor} color=\"current\" /> <span className=\"hidden md:block\">Back</span>\r\n </div>\r\n </PagingButton>\r\n );\r\n};\r\n\r\nconst NextButton = props => {\r\n return (\r\n <PagingButton {...props} ariaLabel=\"Go to next page\">\r\n <div className=\"flex items-center\">\r\n <span className=\"hidden md:block\">Next</span> <Icon source={ForwardMinor} color=\"current\" />\r\n </div>\r\n </PagingButton>\r\n );\r\n};\r\n\r\nconst PageButton = props => {\r\n const { isDisabled, isActive, page } = props;\r\n\r\n return (\r\n <PagingButton {...props}>\r\n {isDisabled && <span>{page > 0 ? page : '...'}</span>}\r\n {page > 0 && <span className={cx(isActive && 'text-base')}>{page}</span>}\r\n </PagingButton>\r\n );\r\n};\r\n\r\nconst PagingControls = ({ totalPages, currentPage, onPageChange, buildLinkProps }) => {\r\n totalPages = parseInt(totalPages, 10);\r\n currentPage = parseInt(currentPage, 10);\r\n\r\n const visiblePages = [];\r\n for (let index = 0; index < totalPages; index++) {\r\n const page = index + 1;\r\n const isFirst = index === 0;\r\n const isLast = index === totalPages - 1;\r\n const isPrev = page === currentPage - 1;\r\n const isCurrent = page === currentPage;\r\n const isNext = page === currentPage + 1;\r\n\r\n if (isFirst || isLast || isPrev || isCurrent || isNext) {\r\n visiblePages.push(page);\r\n }\r\n }\r\n\r\n const gapPages = [];\r\n visiblePages.forEach((page, index) => {\r\n const nextPage = visiblePages[index + 1];\r\n if (nextPage - page > 1) {\r\n gapPages.push(page);\r\n }\r\n });\r\n\r\n gapPages.forEach(page => {\r\n const gapIndex = visiblePages.indexOf(page);\r\n visiblePages.splice(gapIndex + 1, 0, 0);\r\n });\r\n\r\n const prevPage = () => {\r\n changePage(currentPage - 1);\r\n };\r\n\r\n const nextPage = () => {\r\n changePage(currentPage + 1);\r\n };\r\n\r\n const changePage = page => {\r\n if (page === currentPage || page < 1 || page > totalPages) {\r\n return;\r\n }\r\n onPageChange && onPageChange(page);\r\n };\r\n\r\n return (\r\n <>\r\n {totalPages > 1 && (\r\n <div className=\"flex justify-center py-2 px-0\">\r\n <Stack align=\"center\" spacing=\"tight\" noWrap>\r\n <Stack.Item>\r\n <PrevButton\r\n linkProps={buildLinkProps?.({ page: currentPage - 1 })}\r\n isDisabled={currentPage === 1}\r\n onClick={prevPage}\r\n />\r\n </Stack.Item>\r\n <Stack.Item>\r\n <Stack align=\"center\" spacing=\"tight\">\r\n {visiblePages.map((page, index) => (\r\n <Stack.Item key={index}>\r\n <PageButton\r\n isDisabled={page === 0}\r\n isActive={page != undefined && page === currentPage}\r\n page={page}\r\n onClick={() => changePage(page)}\r\n linkProps={buildLinkProps?.({ page })}\r\n />\r\n </Stack.Item>\r\n ))}\r\n </Stack>\r\n </Stack.Item>\r\n <Stack.Item>\r\n <NextButton\r\n linkProps={buildLinkProps?.({ page: currentPage + 1 })}\r\n isDisabled={currentPage >= totalPages}\r\n onClick={nextPage}\r\n />\r\n </Stack.Item>\r\n </Stack>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nPagingControls.propTypes = {\r\n totalPages: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n currentPage: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n onPageChange: PropTypes.func,\r\n buildLinkProps: PropTypes.func\r\n};\r\n\r\nexport default PagingControls;\r\n","import { useEffect } from 'react';\r\n\r\n/**\r\n * This hook attempts to enable \"scroll-by-drag\" functionality on a horizontal container. It accepts\r\n * a ref for the container and sets up additional functionality via native events. In particular,\r\n * it handles:\r\n * - Automatically setting scroll values on the container when the mouse is clicked + dragged\r\n * - Preventing click/mousedown events from firing on nested buttons/interactive ui during any scroll event\r\n */\r\nconst use_UNSTABLE_horizontalScrollTracking = ({ ref: scrollableContainerRef }) => {\r\n useEffect(() => {\r\n let isMouseDown = false;\r\n let isRecentlyDragged = false;\r\n\r\n let mouseDownXPosition, mouseDownScrollLeft, mouseDownEvent;\r\n\r\n const handleClick = function (e) {\r\n if (isRecentlyDragged) {\r\n e.stopImmediatePropagation();\r\n }\r\n isRecentlyDragged = false;\r\n };\r\n\r\n const handleMouseDown = function (e) {\r\n // If the event is organically triggered, stop all immediate handlers from firing, store the event,\r\n // (so we can trigger another later, though NOT organically), and setup mouse movement tracking mechanics\r\n if (e.isTrusted) {\r\n e.stopImmediatePropagation();\r\n mouseDownEvent = e;\r\n\r\n isMouseDown = true;\r\n mouseDownXPosition = e.pageX - scrollableContainerRef.current.offsetLeft;\r\n mouseDownScrollLeft = scrollableContainerRef.current.scrollLeft;\r\n }\r\n };\r\n const handleMouseUp = function (e) {\r\n isMouseDown = false;\r\n // If we have a mouseDownEvent stored, trigger another here if we didn't actually perform any\r\n // scrolling behavior, then clear the event.\r\n if (mouseDownEvent) {\r\n if (!isRecentlyDragged) {\r\n mouseDownEvent.target.dispatchEvent(\r\n new MouseEvent('mousedown', { bubbles: true, cancelable: true })\r\n );\r\n }\r\n mouseDownEvent = null;\r\n }\r\n };\r\n\r\n const handleMouseLeave = function (e) {\r\n isMouseDown = false;\r\n };\r\n\r\n const handleMouseMove = function (e) {\r\n e.preventDefault();\r\n if (!isMouseDown) {\r\n return;\r\n }\r\n const currentXPosition = e.pageX - scrollableContainerRef.current.offsetLeft;\r\n const scrolledDistance = currentXPosition - mouseDownXPosition;\r\n\r\n const currentScrollLeft = scrollableContainerRef.current.scrollLeft;\r\n const newScrollLeft = mouseDownScrollLeft - scrolledDistance;\r\n scrollableContainerRef.current.scrollLeft = newScrollLeft;\r\n\r\n // Track whether the scrollable container was actually scrolled. We do this using the calculated values\r\n // because the ref itself hasn't finished updating the value at this point. Note: this implementation\r\n // does not account for min/max values of scrollLeft, so you may drag your cursor but not experience\r\n // an actual scroll and yet this condition will still return true\r\n isRecentlyDragged = isRecentlyDragged || currentScrollLeft !== newScrollLeft;\r\n };\r\n\r\n scrollableContainerRef.current.addEventListener('mousedown', handleMouseDown, true);\r\n scrollableContainerRef.current.addEventListener('click', handleClick, true);\r\n\r\n scrollableContainerRef.current.addEventListener('mouseup', handleMouseUp, false);\r\n scrollableContainerRef.current.addEventListener('mouseleave', handleMouseLeave, false);\r\n scrollableContainerRef.current.addEventListener('mousemove', handleMouseMove, false);\r\n }, []);\r\n};\r\n\r\nexport default use_UNSTABLE_horizontalScrollTracking;\r\n","import { useState, useEffect, useRef, useMemo } from 'react';\r\n\r\n/**\r\n * This hook is intended to be used to track temporary changes to a given values object (e.g. before a confirm/submit\r\n * action). It works by creating a shallow copy of the object and providing onChange handlers to update its\r\n * state.\r\n *\r\n * By default, the initial values object passed in will be used for the entirety of the hook's lifecycle, with\r\n * any changes ignored. You may optionally pass 'reactToValuesChanges' to observe changes in the passed-in values\r\n * object and reset the temp state accordingly.\r\n */\r\nconst useTempValues = ({ values, reactToValuesChanges = false }) => {\r\n const [internalValues, setInternalValues] = useState(() => values);\r\n\r\n const stringifiedValues = useMemo(\r\n () => (reactToValuesChanges ? JSON.stringify(values) : null),\r\n [values, reactToValuesChanges]\r\n );\r\n const prevStringifiedValuesRef = useRef(stringifiedValues);\r\n\r\n useEffect(() => {\r\n if (prevStringifiedValuesRef.current !== stringifiedValues) {\r\n setInternalValues(values);\r\n prevStringifiedValuesRef.current = stringifiedValues;\r\n }\r\n }, [stringifiedValues]);\r\n\r\n const onChange = ({ key, value }) => setInternalValues(prev => ({ ...prev, [key]: value }));\r\n const onChangeMany = pairs => setInternalValues(prev => ({ ...prev, ...pairs }));\r\n\r\n return {\r\n tempValues: internalValues,\r\n tempOnChange: onChange,\r\n tempOnChangeMany: onChangeMany\r\n };\r\n};\r\n\r\nexport default useTempValues;\r\n","import { useRef, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cx from 'classnames';\r\n\r\nimport { Button, CloseMinor, Icon, SearchMinor } from '@fieldlevel/playbook';\r\n\r\nimport useTempValues from './useTempValues';\r\nimport { NestedTextFilterPropType, TextFilterPropType } from './utility';\r\n\r\nexport const StandaloneTextInput = ({ filterDef, onChange, values }) => {\r\n const { tempOnChange, tempValues } = useTempValues({ values, reactToValuesChanges: true });\r\n\r\n return (\r\n <TextSearchInput\r\n filterDef={filterDef}\r\n onChange={onChange}\r\n values={values}\r\n tempOnChange={tempOnChange}\r\n tempValues={tempValues}\r\n defKey=\"text\"\r\n />\r\n );\r\n};\r\n\r\nconst TextSearchInput = ({\r\n filterDef,\r\n onChange,\r\n values,\r\n tempOnChange,\r\n tempValues,\r\n defKey: key,\r\n disableButtons = false\r\n}) => {\r\n const hasValueRef = useRef(false);\r\n const hasValue = tempValues[key] !== '';\r\n hasValueRef.current = hasValue;\r\n\r\n const [isInputContainerActive, setIsInputContainerActive] = useState(hasValue);\r\n\r\n const containerRef = useRef(null);\r\n const buttonContainerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n let focusOutTimerId = null;\r\n\r\n // The general strategy here is to set the 'active' state to true\r\n // if any of the interactive elements are focused, and to set it to false\r\n // once blurred. In order to prevent prematurely setting the 'active' state to\r\n // false when switching from one interactive element to another (via tab or otherwise),\r\n // we set a timeout on the 'focusout' event and clear it if a 'focusin' event\r\n // is fired before expiration\r\n\r\n containerRef.current.addEventListener('focusin', e => {\r\n setIsInputContainerActive(true);\r\n clearTimeout(focusOutTimerId);\r\n });\r\n\r\n containerRef.current.addEventListener('focusout', e => {\r\n focusOutTimerId = setTimeout(() => {\r\n if (!hasValueRef.current) {\r\n setIsInputContainerActive(false);\r\n }\r\n\r\n // Note: This timeout was previously set to '50ms', and worked in Chrome, but was found to be\r\n // to low for proper functionality in OSX/Safari. If this is ever changed, be sure to\r\n // test in Safari as well.\r\n // See more here: https://app.asana.com/0/1203389036753004/1208264007249988/f\r\n }, 250);\r\n });\r\n\r\n return () => {\r\n clearTimeout(focusOutTimerId);\r\n };\r\n }, []);\r\n\r\n const clearValue = () => {\r\n onChange({ key, value: '' });\r\n };\r\n\r\n const clearTempValue = () => {\r\n tempOnChange({ key, value: '' });\r\n };\r\n\r\n const confirmTempValue = () => {\r\n onChange({ key, value: tempValues[key] });\r\n };\r\n\r\n return (\r\n <div className=\"flex gap-1 py-1 pl-2 pr-1 h-[40px] border rounded\" ref={containerRef}>\r\n {!filterDef.UNSTABLE_hideSearchIcon && <Icon source={SearchMinor} color=\"muted\" />}\r\n <input\r\n className=\"flex-grow flex-shrink min-w-0 outline-none sm:w-[220px] text-body-lg md:text-body\"\r\n disabled={filterDef.disabled}\r\n name={filterDef.name}\r\n placeholder={filterDef.placeholder}\r\n value={tempValues[key]}\r\n onChange={e => {\r\n tempOnChange({ key, value: e.currentTarget.value });\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n confirmTempValue();\r\n }\r\n if (e.key === 'Escape') {\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n {!disableButtons && (\r\n <div\r\n className={cx('gap-1 flex', isInputContainerActive ? 'visible' : 'invisible')}\r\n ref={buttonContainerRef}\r\n >\r\n <button\r\n aria-label=\"Clear search\"\r\n className=\"py-1 px-2\"\r\n disabled={!tempValues[key]}\r\n onClick={e => {\r\n if (values[key]) {\r\n clearValue();\r\n } else {\r\n clearTempValue();\r\n }\r\n }}\r\n >\r\n <Icon source={CloseMinor} color={!tempValues[key] ? 'muted' : 'current'} />\r\n </button>\r\n <Button\r\n ariaLabel=\"Apply search\"\r\n size=\"slim\"\r\n variant=\"primary\"\r\n onClick={() => confirmTempValue()}\r\n disabled={tempValues[key] === values[key]}\r\n >\r\n <Icon source={SearchMinor} color=\"current\" />\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nTextSearchInput.propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n filterDef: PropTypes.oneOfType([PropTypes.exact(TextFilterPropType), PropTypes.exact(NestedTextFilterPropType)])\r\n .isRequired,\r\n values: PropTypes.object.isRequired\r\n};\r\n\r\nexport default TextSearchInput;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport * as Popover from '@radix-ui/react-popover';\r\n\r\nimport { Button, ButtonGroup, ChoiceGroup, CloseMinor, DownMinor, Icon, Title, Checkbox } from '@fieldlevel/playbook';\r\n\r\nimport { isSmallAndUp } from '@appCore/utility/viewport';\r\n\r\nimport TextSearchInput from './TextSearchInput';\r\nimport useTempValues from './useTempValues';\r\nimport {\r\n deriveSecondaryKey,\r\n SecondaryDefPropType,\r\n SELECTION_TYPES,\r\n UNSTABLE_getGroupIndexFromDependentSelectGroupKey\r\n} from './utility';\r\n\r\nconst PopoverContent = React.forwardRef(\r\n ({ defKey: key, closePopover, secondaryDef, values, onChange, onChangeMany }, ref) => {\r\n const { tempValues, tempOnChange, tempOnChangeMany } = useTempValues({ values });\r\n\r\n const clearTempValue = () =>\r\n secondaryDef.selectionType === 'unstable_dependentSelectGroup' ||\r\n secondaryDef.selectionType === 'unstable_checkboxGroup'\r\n ? tempOnChangeMany(\r\n Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .reduce(\r\n (acc, relevantKey) => ({\r\n ...acc,\r\n [relevantKey]: secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n }),\r\n {}\r\n )\r\n )\r\n : tempOnChange({\r\n key,\r\n value: secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n });\r\n const confirmTempValue = () =>\r\n secondaryDef.selectionType === 'unstable_dependentSelectGroup' ||\r\n secondaryDef.selectionType === 'unstable_checkboxGroup'\r\n ? onChangeMany({\r\n values: Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .reduce(\r\n (acc, relevantKey) => ({\r\n ...acc,\r\n [relevantKey]: tempValues[relevantKey]\r\n }),\r\n {}\r\n )\r\n })\r\n : onChange({ key, value: tempValues[key] });\r\n\r\n if (secondaryDef.selectionType === 'unstable_nestedText') {\r\n return (\r\n <div ref={ref} className=\"bg-foreground-base shadow\">\r\n <div className=\"flex flex-col max-h-[312px] w-[290px] overflow-hidden sm:max-h-[400px]\">\r\n <div className=\"flex-grow flex-shrink p-4 space-y-4 overflow-y-auto\">\r\n <Title as=\"p\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n <TextSearchInput\r\n onChange={onChange}\r\n values={values}\r\n tempOnChange={tempOnChange}\r\n tempValues={tempValues}\r\n filterDef={secondaryDef}\r\n defKey={key}\r\n disableButtons\r\n />\r\n </div>\r\n <div className=\"p-4 border-t\">\r\n <ButtonGroup distribute=\"between\">\r\n <Button variant=\"secondary\" onClick={closePopover}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n confirmTempValue();\r\n closePopover();\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n return (\r\n <div ref={ref} className=\"bg-foreground-base shadow\">\r\n <div className=\"flex flex-col max-h-[312px] w-[290px] overflow-hidden sm:max-h-[400px]\">\r\n <div className=\"flex-grow flex-shrink p-4 space-y-4 overflow-y-auto\">\r\n <Title as=\"p\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n {secondaryDef.group.map((groupItemDef, groupIdx) => {\r\n const groupDefKey = `${key}.${groupIdx}`;\r\n return (\r\n <div key={groupDefKey} className=\"flex gap-2 mb-2\">\r\n <Checkbox\r\n name={groupItemDef.label}\r\n label={groupItemDef.label}\r\n onChange={value => {\r\n tempOnChange({ key: groupDefKey, value });\r\n }}\r\n checked={tempValues[groupDefKey]}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n <div className=\"flex items-center flex-shrink-0 p-4 border-t justify-between\">\r\n <Button\r\n variant=\"secondary\"\r\n disabled={Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .every(groupValKey => tempValues[groupValKey].length === 0)}\r\n onClick={() => clearTempValue()}\r\n >\r\n Clear all\r\n </Button>\r\n <ButtonGroup>\r\n <Button variant=\"secondary\" onClick={closePopover}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n confirmTempValue();\r\n closePopover();\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n return (\r\n <div ref={ref} className=\"bg-foreground-base shadow\">\r\n <div className=\"flex flex-col max-h-[312px] w-[290px] overflow-hidden sm:max-h-[400px]\">\r\n <div className=\"flex-grow flex-shrink p-4 space-y-4 overflow-y-auto\">\r\n <Title as=\"p\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n {secondaryDef.group.map((groupItemDef, groupIdx) => {\r\n const isMeetsCondition =\r\n !groupItemDef.dependencyCondition ||\r\n groupItemDef.dependencyCondition({\r\n values: tempValues,\r\n groupValues: Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .reduce(\r\n (acc, groupValKey) => ({\r\n ...acc,\r\n [groupValKey]: tempValues[groupValKey]\r\n }),\r\n {}\r\n )\r\n });\r\n if (!isMeetsCondition) {\r\n return null;\r\n }\r\n const groupDefKey = `${key}.${groupIdx}`;\r\n return (\r\n <div key={groupDefKey}>\r\n <p className=\"font-bold mb-2\">{groupItemDef.label}</p>\r\n <ChoiceGroup\r\n multiple={groupItemDef.selectionType === SELECTION_TYPES.multiSelect}\r\n name={groupDefKey}\r\n choices={groupItemDef.options}\r\n selected={tempValues[groupDefKey]}\r\n onChange={value => {\r\n tempOnChange({ key: groupDefKey, value });\r\n }}\r\n spacing=\"loose\"\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n <div className=\"flex items-center flex-shrink-0 p-4 border-t justify-between\">\r\n <Button\r\n variant=\"secondary\"\r\n disabled={Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .every(groupValKey => tempValues[groupValKey].length === 0)}\r\n onClick={() => clearTempValue()}\r\n >\r\n Clear all\r\n </Button>\r\n <ButtonGroup>\r\n <Button variant=\"secondary\" onClick={closePopover}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n confirmTempValue();\r\n closePopover();\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div ref={ref} className=\"bg-foreground-base shadow\">\r\n <div className=\"flex flex-col max-h-[312px] w-[290px] overflow-hidden sm:max-h-[400px]\">\r\n <div className=\"flex-grow flex-shrink p-4 space-y-4 overflow-y-auto\">\r\n <Title as=\"p\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n <ChoiceGroup\r\n multiple={secondaryDef.selectionType === SELECTION_TYPES.multiSelect}\r\n name={key}\r\n choices={secondaryDef.options}\r\n selected={tempValues[key]}\r\n onChange={value => tempOnChange({ key, value })}\r\n spacing=\"loose\"\r\n />\r\n </div>\r\n <div className=\"flex items-center flex-shrink-0 p-4 border-t justify-between\">\r\n <Button\r\n variant=\"secondary\"\r\n disabled={tempValues[key].length === 0}\r\n onClick={() => clearTempValue()}\r\n >\r\n Clear{secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? ' all' : ''}\r\n </Button>\r\n <ButtonGroup>\r\n <Button variant=\"secondary\" onClick={closePopover}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n confirmTempValue();\r\n closePopover();\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nPopoverContent.propTypes = {\r\n defKey: PropTypes.string.isRequired,\r\n closePopover: PropTypes.func.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n secondaryDef: SecondaryDefPropType.isRequired,\r\n values: PropTypes.object.isRequired\r\n};\r\n\r\nconst SecondaryDropdown = props => {\r\n const {\r\n secondaryDef,\r\n secondaryDefIdx,\r\n values,\r\n onChange,\r\n onChangeMany,\r\n openModal,\r\n isUNSTABLE_hideSecondaryDropdownBubbles = false,\r\n portalClassName,\r\n onSecondaryDropdownOpen\r\n } = props;\r\n const key = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n useEffect(() => {\r\n onSecondaryDropdownOpen?.(isOpen);\r\n }, [isOpen]);\r\n const openPopover = () => setIsOpen(true);\r\n const closePopover = () => setIsOpen(false);\r\n\r\n const isSelected = (() => {\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n return Object.keys(values)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .some(relevantKey => values[relevantKey]);\r\n }\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n return Object.keys(values)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .some(relevantKey => !!values[relevantKey].length);\r\n }\r\n return !!values[key].length;\r\n })();\r\n\r\n const derivedLabel = (() => {\r\n if (\r\n !isSelected ||\r\n (secondaryDef.selectionType === 'unstable_dependentSelectGroup' && secondaryDef.group.length > 3) ||\r\n secondaryDef.selectionType === 'unstable_checkboxGroup'\r\n ) {\r\n return secondaryDef.label;\r\n }\r\n if (secondaryDef.selectionType === 'unstable_nestedText') {\r\n // show value of text input filter\r\n return values[key];\r\n }\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n // Just take the last truthy value associated with the group and show its label\r\n return Object.keys(values)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .reduce((acc, valKey) => {\r\n if (values[valKey]) {\r\n // return label\r\n return secondaryDef.group[\r\n UNSTABLE_getGroupIndexFromDependentSelectGroupKey({ key: valKey })\r\n ].options.find(opt => opt.value === values[valKey]).label;\r\n }\r\n return acc;\r\n }, '');\r\n }\r\n if (secondaryDef.selectionType === SELECTION_TYPES.multiSelect) {\r\n const countSelected = values[key].length;\r\n const firstSelected = secondaryDef.options.find(opt => values[key].includes(opt.value));\r\n return `${firstSelected.label}${countSelected > 1 ? ` +${countSelected - 1}` : ''}`;\r\n }\r\n return secondaryDef.options.find(opt => opt.value === values[key]).label;\r\n })();\r\n\r\n const openInteractiveUI = () =>\r\n (isUNSTABLE_hideSecondaryDropdownBubbles && !secondaryDef.UNSTABLE_alwaysShowFilterWhileOthersHidden) ||\r\n !isSmallAndUp()\r\n ? openModal({ activeSecondaryDefIdx: secondaryDefIdx })\r\n : openPopover();\r\n const clearValue = () =>\r\n secondaryDef.selectionType === 'unstable_dependentSelectGroup' ||\r\n secondaryDef.selectionType === 'unstable_checkboxGroup'\r\n ? onChangeMany({\r\n values: Object.keys(values)\r\n .filter(valKey => valKey.startsWith(`${key}.`))\r\n .reduce((acc, relevantKey) => {\r\n const groupDefKey = UNSTABLE_getGroupIndexFromDependentSelectGroupKey({ key: relevantKey });\r\n const groupDef = secondaryDef.group[groupDefKey];\r\n return {\r\n ...acc,\r\n [relevantKey]: groupDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n };\r\n }, {})\r\n })\r\n : onChange({ key, value: secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? [] : '' });\r\n\r\n return (\r\n <Popover.Root open={isOpen}>\r\n <>\r\n {isSelected ? (\r\n <div className=\"flex items-center justify-between border border-[transparent] text-[#0369a1] bg-[#e8f0fe] rounded\">\r\n <Popover.Trigger asChild>\r\n <span>\r\n <button\r\n className=\"py-2 pl-4 pr-2 font-bold whitespace-nowrap hover:bg-[rgba(0,0,0,.04)]\"\r\n onClick={e => openInteractiveUI()}\r\n >\r\n {derivedLabel}\r\n </button>\r\n </span>\r\n </Popover.Trigger>\r\n <button\r\n aria-label={`Clear '${secondaryDef.label}' filter`}\r\n className=\"py-2 px-2 color-[#0369a1] hover:bg-[rgba(0,0,0,.04)]\"\r\n onClick={e => clearValue()}\r\n >\r\n <Icon source={CloseMinor} color=\"current\" />\r\n </button>\r\n </div>\r\n ) : (\r\n <div>\r\n <Popover.Trigger asChild>\r\n <span>\r\n <Button\r\n variant=\"secondary\"\r\n onClick={openInteractiveUI}\r\n disabled={secondaryDef.disabled}\r\n >\r\n <div className=\"flex items-center gap-2 whitespace-nowrap\">\r\n <span>{derivedLabel}</span>\r\n <Icon source={DownMinor} color={'current'} />\r\n </div>\r\n </Button>\r\n </span>\r\n </Popover.Trigger>\r\n </div>\r\n )}\r\n </>\r\n <Popover.Portal>\r\n <div className={portalClassName}>\r\n <Popover.Content\r\n align=\"start\"\r\n onInteractOutside={closePopover}\r\n onEscapeKeyDown={closePopover}\r\n onOpenAutoFocus={e => {\r\n e.preventDefault();\r\n }}\r\n >\r\n <PopoverContent\r\n defKey={key}\r\n closePopover={closePopover}\r\n secondaryDef={secondaryDef}\r\n values={values}\r\n onChange={onChange}\r\n onChangeMany={onChangeMany}\r\n />\r\n </Popover.Content>\r\n </div>\r\n </Popover.Portal>\r\n </Popover.Root>\r\n );\r\n};\r\n\r\nSecondaryDropdown.propTypes = {\r\n secondaryDef: SecondaryDefPropType.isRequired,\r\n secondaryDefIdx: PropTypes.number.isRequired,\r\n values: PropTypes.object.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n openModal: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SecondaryDropdown;\r\n","import { useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Button, ButtonGroup, Checkbox, ChoiceGroup, Modal, Title, Select } from '@fieldlevel/playbook';\r\n\r\nimport WiredLink from '@appCore/components/WiredLink';\r\n\r\nimport useTempValues from './useTempValues';\r\nimport { deriveSecondaryKey, getIsSecondaryKey, FilterDefPropType, SELECTION_TYPES } from './utility';\r\nimport TextSearchInput from './TextSearchInput';\r\n\r\nimport * as styles from './AllFiltersModal.module.css';\r\n\r\nconst SimpleSelect = props => (\r\n <div className={styles.SimpleSelectWrapper}>\r\n <Select {...props} />\r\n </div>\r\n);\r\n\r\nconst ModalContent = ({ closeModal, filterDef, values, onChangeMany, activeSecondaryDefIdx }) => {\r\n const { tempValues, tempOnChange, tempOnChangeMany } = useTempValues({ values });\r\n\r\n const listRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (activeSecondaryDefIdx) {\r\n const activeSection = listRef.current.querySelector(`[data-secondary-def-idx=\"${activeSecondaryDefIdx}\"]`);\r\n activeSection?.scrollIntoView();\r\n }\r\n }, []);\r\n\r\n const clearAllSecondaryTempValues = () => {\r\n const updateCmd = filterDef.secondary.reduce((acc, secondaryDef, secondaryDefIdx) => {\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n const keyPrefix = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n return secondaryDef.group.reduce((groupAcc, groupDef, groupDefIdx) => {\r\n return {\r\n ...groupAcc,\r\n [`${keyPrefix}.${groupDefIdx}`]:\r\n groupDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n };\r\n }, acc);\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n const keyPrefix = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n return secondaryDef.group.reduce((groupAcc, groupDef, groupDefIdx) => {\r\n return {\r\n ...groupAcc,\r\n [`${keyPrefix}.${groupDefIdx}`]:\r\n groupDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n };\r\n }, acc);\r\n }\r\n\r\n return {\r\n ...acc,\r\n [deriveSecondaryKey({ idx: secondaryDefIdx })]:\r\n secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? [] : ''\r\n };\r\n }, {});\r\n tempOnChangeMany(updateCmd);\r\n };\r\n\r\n const confirmSecondaryTempValues = () => onChangeMany({ values: tempValues });\r\n\r\n // Filter out any disabled filters\r\n const usableSecondaryFilters = filterDef.secondary.filter(secondaryDef => !secondaryDef.disabled);\r\n\r\n return (\r\n <div className=\"flex flex-col max-h-[80vh] sm:max-h-[400px]\">\r\n <ul className=\"px-1 pb-4 space-y-6 overflow-y-auto\" ref={listRef}>\r\n {usableSecondaryFilters.map((secondaryDef, secondaryDefIdx) => {\r\n if (secondaryDef.selectionType === 'unstable_nestedText') {\r\n return (\r\n <li key={secondaryDef.label} data-secondary-def-idx={secondaryDefIdx}>\r\n <fieldset>\r\n <Title as=\"h3\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n <div className=\"mt-4\">\r\n <div className=\"mb-2\">\r\n <TextSearchInput\r\n onChange={() => {}}\r\n values={values}\r\n tempOnChange={tempOnChange}\r\n tempValues={tempValues}\r\n filterDef={secondaryDef}\r\n defKey={deriveSecondaryKey({ idx: secondaryDefIdx })}\r\n disableButtons\r\n />\r\n </div>\r\n </div>\r\n </fieldset>\r\n </li>\r\n );\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n return (\r\n <li key={secondaryDef.label} data-secondary-def-idx={secondaryDefIdx}>\r\n <fieldset>\r\n <Title as=\"h3\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n <div className=\"mt-4\">\r\n {secondaryDef.group.map((groupItemDef, groupIdx) => {\r\n const secondaryKey = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n const groupDefKey = `${secondaryKey}.${groupIdx}`;\r\n return (\r\n <div key={groupDefKey} className=\"flex gap-2 mb-2\">\r\n <Checkbox\r\n name={groupItemDef.label}\r\n label={groupItemDef.label}\r\n onChange={value => {\r\n tempOnChange({ key: groupDefKey, value });\r\n }}\r\n checked={tempValues[groupDefKey]}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </fieldset>\r\n </li>\r\n );\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n return (\r\n <li key={secondaryDef.label} data-secondary-def-idx={secondaryDefIdx}>\r\n <fieldset>\r\n <Title as=\"h3\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n <div className=\"mt-4 space-y-2\">\r\n {secondaryDef.group.map((groupItemDef, groupIdx) => {\r\n const secondaryKey = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n const isMeetsCondition =\r\n !groupItemDef.dependencyCondition ||\r\n groupItemDef.dependencyCondition({\r\n values: tempValues,\r\n groupValues: Object.keys(tempValues)\r\n .filter(valKey => valKey.startsWith(secondaryKey))\r\n .reduce(\r\n (acc, groupValKey) => ({\r\n ...acc,\r\n [groupValKey]: tempValues[groupValKey]\r\n }),\r\n {}\r\n )\r\n });\r\n if (!isMeetsCondition) {\r\n return null;\r\n }\r\n const groupDefKey = `${secondaryKey}.${groupIdx}`;\r\n return (\r\n <div key={groupDefKey}>\r\n <p className=\"font-bold mb-2\">{groupItemDef.label}</p>\r\n {groupItemDef.UNSTABLE_selectVariant === 'simple' ? (\r\n <SimpleSelect\r\n name={groupDefKey}\r\n placeholder={{ label: 'Any', value: '' }}\r\n options={groupItemDef.options}\r\n value={tempValues[groupDefKey]}\r\n onChange={value =>\r\n tempOnChange({ key: groupDefKey, value })\r\n }\r\n />\r\n ) : (\r\n <ChoiceGroup\r\n multiple={\r\n groupItemDef.selectionType ===\r\n SELECTION_TYPES.multiSelect\r\n }\r\n name={groupDefKey}\r\n choices={groupItemDef.options}\r\n selected={tempValues[groupDefKey]}\r\n onChange={value =>\r\n tempOnChange({ key: groupDefKey, value })\r\n }\r\n spacing=\"loose\"\r\n />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </fieldset>\r\n </li>\r\n );\r\n }\r\n if (\r\n secondaryDef.selectionType === SELECTION_TYPES.singleSelect &&\r\n secondaryDef.UNSTABLE_selectVariant === 'simple'\r\n ) {\r\n return (\r\n <li key={secondaryDef.label} data-secondary-def-idx={secondaryDefIdx}>\r\n <fieldset>\r\n <div className=\"flex gap-4 items-center\">\r\n <Title as=\"h3\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n {secondaryDef.UNSTABLE_linkAction && (\r\n <WiredLink {...secondaryDef.UNSTABLE_linkAction.linkProps}>\r\n {secondaryDef.UNSTABLE_linkAction.label}\r\n </WiredLink>\r\n )}\r\n </div>\r\n <div className=\"mt-4\">\r\n <SimpleSelect\r\n name={deriveSecondaryKey({ idx: secondaryDefIdx })}\r\n options={secondaryDef.options}\r\n placeholder={{ label: 'Any', value: '' }}\r\n value={tempValues[deriveSecondaryKey({ idx: secondaryDefIdx })]}\r\n onChange={value =>\r\n tempOnChange({\r\n key: deriveSecondaryKey({ idx: secondaryDefIdx }),\r\n value\r\n })\r\n }\r\n />\r\n </div>\r\n </fieldset>\r\n </li>\r\n );\r\n }\r\n\r\n return (\r\n <li key={secondaryDef.label} data-secondary-def-idx={secondaryDefIdx}>\r\n <fieldset>\r\n <div className=\"flex gap-4 items-center\">\r\n <Title as=\"h3\" size=\"small\">\r\n {secondaryDef.label}\r\n </Title>\r\n {secondaryDef.UNSTABLE_linkAction && (\r\n <WiredLink {...secondaryDef.UNSTABLE_linkAction.linkProps}>\r\n {secondaryDef.UNSTABLE_linkAction.label}\r\n </WiredLink>\r\n )}\r\n </div>\r\n <div className=\"mt-4\">\r\n <ChoiceGroup\r\n multiple={secondaryDef.selectionType === SELECTION_TYPES.multiSelect}\r\n name={deriveSecondaryKey({ idx: secondaryDefIdx })}\r\n choices={secondaryDef.options}\r\n selected={tempValues[deriveSecondaryKey({ idx: secondaryDefIdx })]}\r\n onChange={value =>\r\n tempOnChange({ key: deriveSecondaryKey({ idx: secondaryDefIdx }), value })\r\n }\r\n spacing=\"loose\"\r\n />\r\n </div>\r\n </fieldset>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n <div className=\"-mx-4 px-4 pt-4 border-t\">\r\n <div className=\"flex justify-between\">\r\n <Button\r\n variant=\"secondary\"\r\n disabled={(() => {\r\n return (\r\n Object.entries(tempValues)\r\n .filter(([key]) => getIsSecondaryKey({ key }))\r\n // If the .length property is a number (strings, arrays, for text/select/multi-select), check the length, otherwise (boolean, for checkboxes) check truthiness\r\n .every(([key, value]) => (Number.isFinite(value.length) ? !value.length : !value))\r\n );\r\n })()}\r\n onClick={() => clearAllSecondaryTempValues()}\r\n >\r\n Clear all\r\n </Button>\r\n <ButtonGroup>\r\n <Button variant=\"secondary\" onClick={closeModal}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n confirmSecondaryTempValues();\r\n closeModal();\r\n }}\r\n >\r\n Apply\r\n </Button>\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nModalContent.propTypes = {\r\n closeModal: PropTypes.func.isRequired,\r\n filterDef: PropTypes.exact(FilterDefPropType).isRequired,\r\n values: PropTypes.object.isRequired,\r\n onChangeMany: PropTypes.func.isRequired,\r\n activeSecondaryIdx: PropTypes.number\r\n};\r\n\r\nconst AllFiltersModal = ({ isOpen, closeModal, filterDef, values, onChangeMany, activeSecondaryDefIdx }) => {\r\n return (\r\n <Modal open={isOpen} onDismiss={closeModal} title=\"All filters\">\r\n <ModalContent\r\n closeModal={closeModal}\r\n filterDef={filterDef}\r\n values={values}\r\n onChangeMany={onChangeMany}\r\n activeSecondaryDefIdx={activeSecondaryDefIdx}\r\n />\r\n </Modal>\r\n );\r\n};\r\n\r\nAllFiltersModal.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n closeModal: PropTypes.func.isRequired,\r\n filterDef: PropTypes.exact(FilterDefPropType).isRequired,\r\n values: PropTypes.object.isRequired,\r\n onChangeMany: PropTypes.func.isRequired,\r\n activeSecondaryIdx: PropTypes.number\r\n};\r\n\r\nexport default AllFiltersModal;\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"FL-AllFiltersModal__SimpleSelectWrapper\";\nexport { _1 as \"SimpleSelectWrapper\" }\n","import { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Button, Icon, FilterMinor, DownMinor, BackMinor, ForwardMinor } from '@fieldlevel/playbook';\r\n\r\nimport { DropdownMenu, DropdownMenuItem } from '@appCore/components/DropdownMenu/DropdownMenu';\r\n\r\nimport use_UNSTABLE_horizontalScrollTracking from './use_UNSTABLE_horizontalScrollTracking';\r\nimport { StandaloneTextInput } from './TextSearchInput';\r\nimport SecondaryDropdown from './SecondaryDropdown';\r\nimport AllFiltersModal from './AllFiltersModal';\r\nimport { FilterDefPropType } from './utility';\r\n\r\nimport * as styles from './Filters.module.css';\r\n\r\nconst SearchFilters = ({ filterDef, onChange, onChangeMany, values, portalClassName, onSecondaryDropdownOpen }) => {\r\n const [modalState, setModalState] = useState({\r\n isShowModal: false,\r\n activeSecondaryDefIdx: null\r\n });\r\n\r\n const openModal = ({ activeSecondaryDefIdx = null } = {}) =>\r\n setModalState({ isShowModal: true, activeSecondaryDefIdx });\r\n const closeModal = () => setModalState({ isShowModal: false, activeSecondaryDefIdx: null });\r\n\r\n const scrollableContainerRef = useRef(null);\r\n use_UNSTABLE_horizontalScrollTracking({ ref: scrollableContainerRef });\r\n\r\n const secondaryFiltersContainerRef = useRef(null);\r\n const scrollLeftButtonContainerRef = useRef(null);\r\n const scrollRightButtonContainerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n secondaryFiltersContainerRef.current.addEventListener('mouseenter', function (e) {\r\n if (scrollableContainerRef.current.scrollWidth > scrollableContainerRef.current.clientWidth) {\r\n if (scrollableContainerRef.current.scrollLeft > 0) {\r\n scrollLeftButtonContainerRef.current.style.display = 'flex';\r\n scrollLeftButtonContainerRef.current.style.opacity = '1';\r\n }\r\n\r\n if (\r\n scrollableContainerRef.current.scrollLeft + scrollableContainerRef.current.clientWidth <\r\n scrollableContainerRef.current.scrollWidth\r\n ) {\r\n scrollRightButtonContainerRef.current.style.display = 'flex';\r\n scrollRightButtonContainerRef.current.style.opacity = '1';\r\n }\r\n }\r\n });\r\n secondaryFiltersContainerRef.current.addEventListener('mouseleave', function (e) {\r\n scrollLeftButtonContainerRef.current.style.display = '';\r\n scrollRightButtonContainerRef.current.style.display = '';\r\n scrollLeftButtonContainerRef.current.style.opacity = '';\r\n scrollRightButtonContainerRef.current.style.opacity = '';\r\n });\r\n }, []);\r\n\r\n const scrollToTheRight = () => {\r\n const currentScrollLeft = scrollableContainerRef.current.scrollLeft;\r\n const currentClientWidth = scrollableContainerRef.current.clientWidth;\r\n const currentScrollWidth = scrollableContainerRef.current.scrollWidth;\r\n const newScrollLeft = currentScrollLeft + 200;\r\n\r\n scrollableContainerRef.current.style.scrollBehavior = 'smooth';\r\n scrollableContainerRef.current.scrollLeft = newScrollLeft;\r\n scrollableContainerRef.current.style.scrollBehavior = '';\r\n\r\n if (newScrollLeft > 0) {\r\n scrollLeftButtonContainerRef.current.style.display = 'flex';\r\n scrollLeftButtonContainerRef.current.style.opacity = '1';\r\n }\r\n\r\n // Note: since we're manually just incrementally adding 200 to the current scroll width, it's possible to\r\n // go over, which is why we use '>=' as a comparator. The browser will of course just stop at the max though.\r\n if (newScrollLeft + currentClientWidth >= currentScrollWidth) {\r\n scrollRightButtonContainerRef.current.style.display = '';\r\n scrollRightButtonContainerRef.current.style.opacity = '';\r\n }\r\n };\r\n\r\n const scrollToTheLeft = () => {\r\n const currentScrollLeft = scrollableContainerRef.current.scrollLeft;\r\n const currentClientWidth = scrollableContainerRef.current.clientWidth;\r\n const currentScrollWidth = scrollableContainerRef.current.scrollWidth;\r\n const newScrollLeft = currentScrollLeft - 200;\r\n\r\n scrollableContainerRef.current.style.scrollBehavior = 'smooth';\r\n scrollableContainerRef.current.scrollLeft = newScrollLeft;\r\n scrollableContainerRef.current.style.scrollBehavior = '';\r\n\r\n // Note: since we're manually just incrementally subtracting 200 from the current scroll width, it's possible\r\n // to calculate a number less than zero, which is why we use '<=' 0 as a comparator. The browser will of course\r\n // just stop at the minimum though.\r\n if (newScrollLeft <= 0) {\r\n scrollLeftButtonContainerRef.current.style.display = '';\r\n scrollLeftButtonContainerRef.current.style.opacity = '';\r\n }\r\n\r\n if (newScrollLeft + currentClientWidth < currentScrollWidth) {\r\n scrollRightButtonContainerRef.current.style.display = 'flex';\r\n scrollRightButtonContainerRef.current.style.opacity = '1';\r\n }\r\n };\r\n\r\n const selectedSecondaryFiltersCount = filterDef.secondary.reduce((acc, def, defIdx) => {\r\n const key = `secondary.${defIdx}`;\r\n const value = values[key];\r\n return acc + (!!value?.length ? 1 : 0);\r\n }, 0);\r\n\r\n const sortedSecondaryFilters = filterDef.secondary\r\n .map((secondaryDef, secondaryDefIdx) => {\r\n const secondaryKey = `secondary.${secondaryDefIdx}`;\r\n\r\n let isSelected;\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n isSelected = Object.keys(values)\r\n .filter(key => key.startsWith(`${secondaryKey}.`))\r\n .some(key => !!values[key].length);\r\n } else if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n isSelected = Object.keys(values)\r\n .filter(key => key.startsWith(`${secondaryKey}.`))\r\n .some(key => !!values[key]);\r\n } else {\r\n isSelected = !!values[secondaryKey].length;\r\n }\r\n\r\n return { secondaryDef, secondaryDefIdx, isSelected };\r\n })\r\n .filter(({ isSelected, secondaryDef }) => {\r\n if (filterDef.UNSTABLE_hideSecondaryDropdownBubbles) {\r\n return secondaryDef.UNSTABLE_alwaysShowFilterWhileOthersHidden || isSelected;\r\n }\r\n return true;\r\n })\r\n .sort((a, b) => {\r\n if (a.isSelected && !b.isSelected) {\r\n return -1;\r\n }\r\n if (!a.isSelected && b.isSelected) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n return (\r\n <>\r\n <div className=\"flex flex-col gap-y-2 gap-x-4 sm:gap-y-0 sm:flex-row sm:items-start\">\r\n {filterDef.text && (\r\n <div className=\"flex-shrink-0 sm:pr-4 sm:border-r\">\r\n <StandaloneTextInput filterDef={filterDef.text} values={values} onChange={onChange} />\r\n </div>\r\n )}\r\n <div ref={secondaryFiltersContainerRef} className=\"relative overflow-hidden\">\r\n <div className={styles.ScrollableContainer} ref={scrollableContainerRef}>\r\n {filterDef.primary && (\r\n <DropdownMenu\r\n buttonRendering={\r\n <Button>\r\n <div className=\"flex items-center gap-2 whitespace-nowrap\">\r\n <span>\r\n {filterDef.primary.options.find(opt => opt.value === values.primary)\r\n ?.label || filterDef.primary.label}\r\n </span>\r\n <Icon source={DownMinor} color=\"current\" />\r\n </div>\r\n </Button>\r\n }\r\n listRendering={\r\n <ul className=\"max-h-[400px] overflow-y-auto\">\r\n {filterDef.primary.options.map(option => (\r\n <li className=\"text-body\" key={option.label}>\r\n <DropdownMenuItem\r\n onSelect={() => onChange({ key: 'primary', value: option.value })}\r\n >\r\n <span className=\"block p-4\">{option.label}</span>\r\n </DropdownMenuItem>\r\n </li>\r\n ))}\r\n </ul>\r\n }\r\n portalClassName={portalClassName}\r\n />\r\n )}\r\n {filterDef.UNSTABLE_primaryButton && (\r\n <Button\r\n icon={filterDef.UNSTABLE_primaryButton.icon}\r\n onClick={filterDef.UNSTABLE_primaryButton.onClick}\r\n disabled={filterDef.UNSTABLE_primaryButton.disabled}\r\n />\r\n )}\r\n {(filterDef.secondary.length > 2 || filterDef.UNSTABLE_hideSecondaryDropdownBubbles) && (\r\n <Button\r\n onClick={() => openModal()}\r\n ariaLabel={`All filters${\r\n selectedSecondaryFiltersCount ? ` (${selectedSecondaryFiltersCount})` : ''\r\n }`}\r\n disabled={\r\n filterDef.UNSTABLE_hideSecondaryDropdownBubbles\r\n ? false\r\n : sortedSecondaryFilters.every(({ secondaryDef: { disabled } }) => !!disabled)\r\n }\r\n >\r\n <div className=\"flex gap-2 items-center whitespace-nowrap\">\r\n <Icon source={FilterMinor} color=\"current\" />\r\n {selectedSecondaryFiltersCount ? (\r\n <>\r\n <span className=\"hidden sm:inline\">\r\n All filters ({selectedSecondaryFiltersCount})\r\n </span>\r\n <span className=\"sm:hidden\">({selectedSecondaryFiltersCount})</span>\r\n </>\r\n ) : (\r\n <span className=\"hidden sm:inline\">All filters</span>\r\n )}\r\n </div>\r\n </Button>\r\n )}\r\n {sortedSecondaryFilters.map(({ secondaryDef, secondaryDefIdx }) => (\r\n <SecondaryDropdown\r\n key={secondaryDefIdx}\r\n secondaryDefIdx={secondaryDefIdx}\r\n secondaryDef={secondaryDef}\r\n values={values}\r\n onChange={onChange}\r\n onChangeMany={onChangeMany}\r\n openModal={openModal}\r\n isUNSTABLE_hideSecondaryDropdownBubbles={\r\n filterDef.UNSTABLE_hideSecondaryDropdownBubbles\r\n }\r\n portalClassName={portalClassName}\r\n onSecondaryDropdownOpen={onSecondaryDropdownOpen}\r\n />\r\n ))}\r\n </div>\r\n <div\r\n className=\"hidden absolute top-0 left-2 items-start h-full opacity-0 transition-opacity max-[576px]:!hidden\"\r\n ref={scrollLeftButtonContainerRef}\r\n >\r\n <button\r\n className=\"p-2 border rounded-full bg-[#FFFFFF] shadow-lg\"\r\n onClick={scrollToTheLeft}\r\n aria-label=\"Scroll filters to the left\"\r\n >\r\n <Icon source={BackMinor} />\r\n </button>\r\n </div>\r\n <div\r\n className=\"hidden absolute top-0 right-2 items-start h-full opacity-0 transition-opacity max-[576px]:!hidden\"\r\n ref={scrollRightButtonContainerRef}\r\n >\r\n <button\r\n className=\"p-2 border rounded-full bg-[#FFFFFF] shadow-lg\"\r\n onClick={scrollToTheRight}\r\n aria-label=\"Scroll filters to the right\"\r\n >\r\n <Icon source={ForwardMinor} />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <AllFiltersModal\r\n isOpen={modalState.isShowModal}\r\n activeSecondaryDefIdx={modalState.activeSecondaryDefIdx}\r\n closeModal={closeModal}\r\n filterDef={filterDef}\r\n values={values}\r\n onChangeMany={onChangeMany}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nSearchFilters.propTypes = {\r\n filterDef: PropTypes.exact(FilterDefPropType).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n onChangeMany: PropTypes.func.isRequired,\r\n values: PropTypes.object.isRequired\r\n};\r\n\r\nexport default SearchFilters;\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"FL-Filters__ScrollableContainer\";\nexport { _1 as \"ScrollableContainer\" }\n","import PropTypes from 'prop-types';\r\n\r\nimport { WiredLinkPropTypes } from '@appCore/components/WiredLink';\r\n\r\n// Example filter definition\r\n// const filterDef = {\r\n// primary: {\r\n// label: 'Sport selection',\r\n// selectionType: 'singleSelect',\r\n// options: [\r\n// {\r\n// label: 'Baseball',\r\n// value: 'baseball'\r\n// },\r\n// {\r\n// label: 'Soccer',\r\n// value: 'soccer'\r\n// },\r\n// {\r\n// label: 'Golf',\r\n// value: 'golf'\r\n// }\r\n// ]\r\n// },\r\n// secondary: [\r\n// {\r\n// label: 'Location',\r\n// selectionType: 'singleSelect',\r\n// options: [\r\n// { label: 'Somewhere, NC', value: 'Somewhere, NC' },\r\n// { label: 'Somewhere, GA', value: 'Somewhere, GA' },\r\n// { label: 'Somewhere, NY', value: 'Somewhere, NY' }\r\n// ]\r\n// },\r\n// {\r\n// label: 'Location 2',\r\n// selectionType: 'singleSelect',\r\n// options: [\r\n// { label: 'Somewhere, NC', value: 'Somewhere, NC' },\r\n// { label: 'Somewhere, GA', value: 'Somewhere, GA' },\r\n// { label: 'Somewhere, NY', value: 'Somewhere, NY' }\r\n// ]\r\n// },\r\n// {\r\n// label: 'Location 3',\r\n// selectionType: 'multiSelect',\r\n// options: [\r\n// { label: 'Somewhere, NC', value: 'Somewhere, NC' },\r\n// { label: 'Somewhere, GA', value: 'Somewhere, GA' },\r\n// { label: 'Somewhere, NY', value: 'Somewhere, NY' }\r\n// ]\r\n// }\r\n// ],\r\n// text: { placeholder: 'Search for a team' },\r\n// sort: [\r\n// { label: 'Sort ascending', value: 'ASC' },\r\n// { label: 'Sort descending', value: 'DESC' },\r\n// { label: 'Sort by special', value: 'SPECIAL' }\r\n// ]\r\n// };\r\n\r\nexport const SELECTION_TYPES = {\r\n singleSelect: 'singleSelect',\r\n multiSelect: 'multiSelect',\r\n // unstable\r\n checkbox: 'checkbox'\r\n};\r\n\r\nconst UNSTABLE_SELECTION_TYPE_VARIANTS = {\r\n // unstable\r\n simple: 'simple'\r\n};\r\n\r\nconst META_SELECTION_TYPES = {\r\n unstable_checkboxGroup: 'unstable_checkboxGroup',\r\n unstable_dependentSelectGroup: 'unstable_dependentSelectGroup'\r\n};\r\n\r\nconst BaseFilterDefNodePropType = {\r\n requestParamKey: PropTypes.string.isRequired,\r\n searchParamKey: PropTypes.string.isRequired,\r\n disabled: PropTypes.bool\r\n};\r\n\r\nexport const SelectableFilterPropType = {\r\n ...BaseFilterDefNodePropType,\r\n label: PropTypes.node.isRequired,\r\n selectionType: PropTypes.oneOf(Object.values(SELECTION_TYPES)).isRequired,\r\n UNSTABLE_selectVariant: PropTypes.oneOf(Object.values(UNSTABLE_SELECTION_TYPE_VARIANTS)),\r\n UNSTABLE_alwaysShowFilterWhileOthersHidden: PropTypes.bool,\r\n UNSTABLE_linkAction: PropTypes.exact({\r\n label: PropTypes.string.isRequired,\r\n linkProps: PropTypes.exact(WiredLinkPropTypes).isRequired\r\n }),\r\n options: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.node.isRequired,\r\n value: PropTypes.string.isRequired\r\n })\r\n ),\r\n defaultValue: PropTypes.string,\r\n dependencyCondition: PropTypes.func\r\n};\r\n\r\nexport const TextFilterPropType = {\r\n ...BaseFilterDefNodePropType,\r\n placeholder: PropTypes.string\r\n};\r\n\r\nexport const NestedTextFilterPropType = {\r\n ...BaseFilterDefNodePropType,\r\n placeholder: PropTypes.string,\r\n label: PropTypes.string.isRequired,\r\n selectionType: PropTypes.oneOf(['unstable_nestedText']),\r\n UNSTABLE_alwaysShowFilterWhileOthersHidden: PropTypes.bool,\r\n UNSTABLE_hideSearchIcon: PropTypes.bool\r\n};\r\n\r\nconst MetaSelectableFilterPropType = {\r\n UNSTABLE_alwaysShowFilterWhileOthersHidden: PropTypes.bool,\r\n label: PropTypes.node.isRequired,\r\n selectionType: PropTypes.oneOf(Object.values(META_SELECTION_TYPES)).isRequired,\r\n group: PropTypes.arrayOf(PropTypes.exact(SelectableFilterPropType)).isRequired\r\n};\r\n\r\nexport const SecondaryDefPropType = PropTypes.oneOfType([\r\n PropTypes.exact(MetaSelectableFilterPropType),\r\n PropTypes.exact(SelectableFilterPropType),\r\n PropTypes.exact(NestedTextFilterPropType)\r\n]);\r\n\r\nexport const FilterDefPropType = {\r\n primary: PropTypes.exact(SelectableFilterPropType),\r\n UNSTABLE_primaryButton: PropTypes.exact({\r\n onClick: PropTypes.func,\r\n icon: PropTypes.func,\r\n label: PropTypes.node,\r\n disabled: PropTypes.bool\r\n }),\r\n secondary: PropTypes.arrayOf(SecondaryDefPropType),\r\n text: PropTypes.exact(TextFilterPropType),\r\n sort: PropTypes.exact({\r\n ...BaseFilterDefNodePropType,\r\n defaultValue: PropTypes.string,\r\n options: PropTypes.arrayOf(\r\n PropTypes.exact({\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired\r\n })\r\n )\r\n }),\r\n page: PropTypes.exact(BaseFilterDefNodePropType),\r\n UNSTABLE_hideSecondaryDropdownBubbles: PropTypes.bool\r\n};\r\nexport const deriveSecondaryKey = ({ idx }) => `secondary.${idx}`;\r\n\r\nexport const getIsSecondaryKey = ({ key }) => /^secondary\\.\\d+/.test(key);\r\n\r\nexport const getIndexFromSecondaryKey = ({ key }) => parseInt(key.split('.')[1]);\r\n\r\nexport const UNSTABLE_getGroupIndexFromDependentSelectGroupKey = ({ key }) => parseInt(key.split('.')[2]);\r\n\r\nexport const UNSTABLE_getGroupIndexFromCheckboxGroupKey = ({ key }) => parseInt(key.split('.')[2]);\r\n\r\nexport const UNSTABLE_getSecondaryKeyFromDependentSelectGroupKey = ({ key }) => {\r\n const parts = key.split('.');\r\n return [parts[0], parts[1]].join('.');\r\n};\r\n\r\nexport const getIsEmptyValue = val => {\r\n if (typeof val === 'boolean') {\r\n return !val;\r\n }\r\n return !val.length;\r\n};\r\n","import { useMemo } from 'react';\r\n\r\nimport useRouteTools from '../useRouteTools/useRouteTools';\r\n\r\nconst useURLParams = () => {\r\n const routeTools = useRouteTools();\r\n return useMemo(() => routeTools.urlParams, [routeTools.urlParams]);\r\n};\r\n\r\nexport default useURLParams;\r\n"],"names":["PageTitle","props","title","isMountedRef","useRef","currentTitleRef","setPageTitle","document","current","useEffect","propTypes","PropTypes","CustomButton","_ref","onClick","active","disabled","ariaLabel","children","textColorStyle","cursorStyle","borderStyle","_jsx","className","cx","PagingButton","_ref2","linkProps","isActive","isDisabled","WiredLink","unstyled","PrevButton","_jsxs","Icon","source","BackMinor","color","NextButton","ForwardMinor","PageButton","page","PagingControls","_ref3","totalPages","currentPage","onPageChange","buildLinkProps","parseInt","visiblePages","index","push","gapPages","forEach","gapIndex","indexOf","splice","changePage","_Fragment","Stack","align","spacing","noWrap","Item","prevPage","map","undefined","nextPage","isRequired","ref","scrollableContainerRef","mouseDownXPosition","mouseDownScrollLeft","mouseDownEvent","isMouseDown","isRecentlyDragged","addEventListener","e","isTrusted","stopImmediatePropagation","pageX","offsetLeft","scrollLeft","target","dispatchEvent","MouseEvent","bubbles","cancelable","preventDefault","scrolledDistance","currentScrollLeft","newScrollLeft","values","reactToValuesChanges","internalValues","setInternalValues","useState","stringifiedValues","useMemo","JSON","stringify","prevStringifiedValuesRef","tempValues","tempOnChange","key","value","prev","tempOnChangeMany","pairs","StandaloneTextInput","filterDef","onChange","useTempValues","TextSearchInput","defKey","disableButtons","hasValueRef","hasValue","isInputContainerActive","setIsInputContainerActive","containerRef","buttonContainerRef","focusOutTimerId","clearTimeout","setTimeout","confirmTempValue","UNSTABLE_hideSearchIcon","SearchMinor","name","placeholder","currentTarget","onKeyDown","blur","CloseMinor","Button","size","variant","TextFilterPropType","NestedTextFilterPropType","PopoverContent","React","closePopover","secondaryDef","onChangeMany","clearTempValue","selectionType","Object","keys","filter","valKey","startsWith","concat","reduce","acc","relevantKey","SELECTION_TYPES","multiSelect","Title","as","label","ButtonGroup","distribute","group","groupItemDef","groupIdx","groupDefKey","Checkbox","checked","every","groupValKey","length","dependencyCondition","groupValues","ChoiceGroup","multiple","choices","options","selected","SecondaryDefPropType","SecondaryDropdown","secondaryDefIdx","openModal","isUNSTABLE_hideSecondaryDropdownBubbles","portalClassName","onSecondaryDropdownOpen","deriveSecondaryKey","idx","isOpen","setIsOpen","isSelected","some","derivedLabel","UNSTABLE_getGroupIndexFromDependentSelectGroupKey","find","opt","countSelected","firstSelected","includes","openInteractiveUI","UNSTABLE_alwaysShowFilterWhileOthersHidden","isSmallAndUp","activeSecondaryDefIdx","Popover","open","asChild","groupDef","DownMinor","onInteractOutside","onEscapeKeyDown","onOpenAutoFocus","SimpleSelect","Select","ModalContent","closeModal","listRef","activeSection","querySelector","scrollIntoView","usableSecondaryFilters","secondary","secondaryKey","UNSTABLE_selectVariant","singleSelect","UNSTABLE_linkAction","entries","getIsSecondaryKey","Number","isFinite","clearAllSecondaryTempValues","updateCmd","keyPrefix","groupAcc","groupDefIdx","FilterDefPropType","activeSecondaryIdx","AllFiltersModal","_ref4","Modal","onDismiss","SearchFilters","_filterDef$primary$op","modalState","setModalState","isShowModal","arguments","use_UNSTABLE_horizontalScrollTracking","secondaryFiltersContainerRef","scrollLeftButtonContainerRef","scrollRightButtonContainerRef","scrollWidth","clientWidth","style","display","opacity","selectedSecondaryFiltersCount","def","defIdx","sortedSecondaryFilters","UNSTABLE_hideSecondaryDropdownBubbles","sort","a","b","text","primary","DropdownMenu","buttonRendering","listRendering","option","DropdownMenuItem","onSelect","UNSTABLE_primaryButton","icon","FilterMinor","scrollToTheLeft","currentClientWidth","currentScrollWidth","scrollBehavior","scrollToTheRight","checkbox","BaseFilterDefNodePropType","requestParamKey","searchParamKey","SelectableFilterPropType","simple","WiredLinkPropTypes","defaultValue","MetaSelectableFilterPropType","unstable_checkboxGroup","unstable_dependentSelectGroup","test","getIndexFromSecondaryKey","split","UNSTABLE_getGroupIndexFromCheckboxGroupKey","_ref5","getIsEmptyValue","val","useURLParams","routeTools","useRouteTools","urlParams"],"sourceRoot":""}