@planningcenter/tapestry 4.9.0-rc.1 → 4.9.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearchFilter.js","sources":["../../../src/components/DataTable/useSearchFilter.ts"],"sourcesContent":["import { useDebouncedValue } from \"@utilities/useDebouncedValue\"\nimport { useEffect, useRef, useState } from \"react\"\n\nimport type { ActiveFilter } from \"./FilterTypes\"\n\nexport const SEARCH_DEBOUNCE_MS = 300\nexport const SEARCH_FILTER_NAME = \"q\"\nexport const SEARCH_FILTER_OPERATOR = \"contains\"\nexport const isSearchFilter = (filter: ActiveFilter) =>\n filter.name === SEARCH_FILTER_NAME\n\nconst searchQueryOf = (activeFilters: ActiveFilter[]) =>\n String(activeFilters.find(isSearchFilter)?.value ?? \"\")\n\nfunction withSearchQuery(activeFilters: ActiveFilter[], query: string) {\n if (query === \"\") return activeFilters.filter((f) => !isSearchFilter(f))\n if (!activeFilters.some(isSearchFilter)) {\n return [\n ...activeFilters,\n {\n name: SEARCH_FILTER_NAME,\n operator: SEARCH_FILTER_OPERATOR,\n value: query,\n },\n ]\n }\n return activeFilters.map((filter) =>\n isSearchFilter(filter) ? { ...filter, value: query } : filter\n )\n}\n\nfunction withChipFilters(\n activeFilters: ActiveFilter[],\n chipFilters: ActiveFilter[]\n) {\n const searchIndex = activeFilters.findIndex(isSearchFilter)\n if (searchIndex === -1) return chipFilters\n const index = Math.min(searchIndex, chipFilters.length)\n return [\n ...chipFilters.slice(0, index),\n activeFilters[searchIndex],\n ...chipFilters.slice(index),\n ]\n}\n\nexport function useSearchFilter(\n activeFilters: ActiveFilter[],\n onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void\n) {\n const appliedQuery = searchQueryOf(activeFilters)\n const [query, setQuery] = useState(appliedQuery)\n const settledQuery = useDebouncedValue(query.trim(), SEARCH_DEBOUNCE_MS)\n // Queries sent but possibly not yet echoed back. A late echo of one of\n // these must not overwrite what the user has typed since.\n const unconfirmedQueries = useRef([appliedQuery])\n\n const latest = useRef({ activeFilters, onActiveFiltersChange })\n useEffect(() => {\n latest.current = { activeFilters, onActiveFiltersChange }\n })\n\n useEffect(() => {\n const echoIndex = unconfirmedQueries.current.indexOf(appliedQuery)\n if (echoIndex !== -1) {\n unconfirmedQueries.current = unconfirmedQueries.current.slice(echoIndex)\n return\n }\n unconfirmedQueries.current = [appliedQuery]\n setQuery(appliedQuery)\n }, [appliedQuery])\n\n useEffect(() => {\n const sent = unconfirmedQueries.current\n if (settledQuery === sent[sent.length - 1]) return\n sent.push(settledQuery)\n const { activeFilters, onActiveFiltersChange } = latest.current\n onActiveFiltersChange(withSearchQuery(activeFilters, settledQuery))\n }, [settledQuery])\n\n const clearFilters = () => {\n unconfirmedQueries.current = [\"\"]\n setQuery(\"\")\n onActiveFiltersChange([])\n }\n\n return {\n chipFilters: activeFilters.filter((filter) => !isSearchFilter(filter)),\n clearFilters,\n onChipFiltersChange: (chipFilters: ActiveFilter[]) =>\n onActiveFiltersChange(withChipFilters(activeFilters, chipFilters)),\n onSearchChange: setQuery,\n searchQuery: query,\n }\n}\n"],"names":[],"mappings":"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"}