11import { ParsedUrlQuery } from 'node:querystring' ;
22import { useRouter } from 'next/router' ;
33import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
4+ import { omit } from 'lodash' ;
45import { ContactsProvider } from 'src/components/Contacts/ContactsContext/ContactsContext' ;
56import { TableViewModeEnum } from 'src/components/Shared/Header/ListHeader' ;
67import {
@@ -66,7 +67,7 @@ export const ContactsWrapper: React.FC<Props> = ({
6667 }
6768 } ) ;
6869
69- const [ activeFilters , setActiveFilters ] = useState <
70+ const [ activeFiltersRaw , setActiveFilters ] = useState <
7071 ContactFilterSetInput & TaskFilterSetInput
7172 > ( JSON . parse ( decodeURIComponent ( getQueryParam ( query , 'filters' ) ?? '{}' ) ) ) ;
7273 const [ starredFilter , setStarredFilter ] = useState <
@@ -77,12 +78,21 @@ export const ContactsWrapper: React.FC<Props> = ({
7778 ) ;
7879 const [ filterPanelOpen , setFilterPanelOpen ] = useState ( true ) ;
7980
81+ // Only allow the ids filter in map view, and remove the ids filter in other views
82+ const activeFilters = useMemo ( ( ) => {
83+ if ( viewMode === TableViewModeEnum . Map ) {
84+ return activeFiltersRaw ;
85+ } else {
86+ return omit ( activeFiltersRaw , 'ids' ) ;
87+ }
88+ } , [ viewMode , activeFiltersRaw ] ) ;
89+
8090 const getContactHrefObject : GetContactHrefObject = useCallback (
8191 ( contactId ) => {
8292 // Omit the filters and searchTerm from the previous query because we don't want them in the URL
8393 // if they are empty and Next.js will still add them to the URL query even if they are undefined.
8494 // i.e. { filters: undefined, searchTerm: '' } results in a querystring of ?filters=&searchTerm
85- const { filters : _filters , searchTerm : _searchTerm , ... newQuery } = query ;
95+ const newQuery = omit ( query , [ 'filters' , 'searchTerm' ] ) ;
8696
8797 const queryContactId : string [ ] = [ ] ;
8898 if ( addViewMode && viewMode !== TableViewModeEnum . List ) {
@@ -94,10 +104,7 @@ export const ContactsWrapper: React.FC<Props> = ({
94104 newQuery . contactId = queryContactId ;
95105
96106 const sanitizedFilters = sanitizeFilters ( activeFilters ) ;
97- if (
98- viewMode !== TableViewModeEnum . Map &&
99- Object . keys ( sanitizedFilters ) . length
100- ) {
107+ if ( Object . keys ( sanitizedFilters ) . length ) {
101108 newQuery . filters = encodeURIComponent ( JSON . stringify ( sanitizedFilters ) ) ;
102109 }
103110
0 commit comments