Skip to content

Commit fb060bb

Browse files
authored
Merge pull request #1154 from CruGlobal/8405-filter-map
[MPDX-8405] Fix filtering the map by selected contacts
2 parents 9f1e8f2 + 9faf3d6 commit fb060bb

4 files changed

Lines changed: 142 additions & 195 deletions

File tree

pages/accountLists/[accountListId]/contacts/ContactsWrapper.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ParsedUrlQuery } from 'node:querystring';
22
import { useRouter } from 'next/router';
33
import React, { useCallback, useEffect, useMemo, useState } from 'react';
4+
import { omit } from 'lodash';
45
import { ContactsProvider } from 'src/components/Contacts/ContactsContext/ContactsContext';
56
import { TableViewModeEnum } from 'src/components/Shared/Header/ListHeader';
67
import {
@@ -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

Comments
 (0)