diff --git a/packages/core/components/Filters.jsx b/packages/core/components/Filters.jsx index 0930e578c..4ae0e5e80 100644 --- a/packages/core/components/Filters.jsx +++ b/packages/core/components/Filters.jsx @@ -57,8 +57,8 @@ export const useFilters = props => { // Desconstructing: notice, adding more descriptive visualizationConfig name over config // visualizationConfig feels more robust for all vis types so that its not confused with config/state/etc. - const { config: visualizationConfig, setConfig, filteredData, setFilteredData, excludedData, filterData } = props - const { type } = visualizationConfig + const { config: visualizationConfig, setConfig, filteredData, setFilteredData, excludedData, filterData, getUniqueValues } = props + const { type, data } = visualizationConfig /** * Re-orders a filter based on two indices and updates the runtime filters array and filters state @@ -166,19 +166,33 @@ export const useFilters = props => { e.preventDefault() // reset to first item in values array. - newFilters.map(filter => { - filter = handleSorting(filter) - filter.active = filter.values[0] - return filter + let needsQueryUpdate = false + const queryParams = getQueryParams() + newFilters.forEach((filter, i) => { + if(!filter.values || filter.values.length === 0){ + filter.values = getUniqueValues(data, filter.columnName) + } + newFilters[i].active = handleSorting(filter).values[0] + + + if (filter.setByQueryParameter && queryParams[filter.setByQueryParameter] !== filter.active) { + queryParams[filter.setByQueryParameter] = filter.active + needsQueryUpdate = true + } }) + if (needsQueryUpdate) { + updateQueryString(queryParams) + } + + setConfig({ ...visualizationConfig, filters: newFilters }) + if (type === 'map') { setFilteredData(newFilters, excludedData) } else { setFilteredData(filterData(newFilters, excludedData)) } - setConfig({ ...visualizationConfig, filters: newFilters }) } const filterConstants = { @@ -204,8 +218,8 @@ export const useFilters = props => { } const Filters = props => { - const { config: visualizationConfig, filteredData, dimensions } = props - const { filters, type, general, theme, filterBehavior } = visualizationConfig + const { config: visualizationConfig, filteredData, dimensions, getUniqueValues } = props + const { filters, type, general, theme, filterBehavior, data } = visualizationConfig const [mobileFilterStyle, setMobileFilterStyle] = useState(false) const [selectedFilter, setSelectedFilter] = useState('') const id = useId() diff --git a/packages/map/src/CdcMap.tsx b/packages/map/src/CdcMap.tsx index 63d34d08b..a05464e20 100644 --- a/packages/map/src/CdcMap.tsx +++ b/packages/map/src/CdcMap.tsx @@ -1704,7 +1704,7 @@ const CdcMap = ({ className, config, navigationHandler: customNavigationHandler, {general.introText &&
{parse(general.introText)}
} {/* prettier-ignore */} - {state?.filters?.length > 0 && } + {state?.filters?.length > 0 && }