Skip to content

Commit 3a3354b

Browse files
committed
Add reset search button
1 parent 306d133 commit 3a3354b

4 files changed

Lines changed: 54 additions & 16 deletions

File tree

demo/app/src/components/Header/Header.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import Link from 'next/link';
22
import { FaGithub } from 'react-icons/fa';
33
import DateRangePicker from '@wojtekmaj/react-daterange-picker/dist/DateRangePicker';
4-
54
import { useAppContext } from 'src/context/appContext';
65
import Container from '@components/Container';
76

7+
import {
8+
UTurnArrowLeft
9+
} from '@vectopus/atlas-icons-react';
10+
811
import styles from './Header.module.scss';
912

1013
const Header = () => {
11-
const { userParams, setUserParams } = useAppContext();
14+
const { userParams, setUserParams, opportunities, resetSearch } = useAppContext();
1215

1316
return (
1417
<>
@@ -31,6 +34,7 @@ const Header = () => {
3134
</header>
3235
<div className={styles.toolbar}>
3336
<DateRangePicker onChange={(v) => setUserParams({...userParams, dateRange: v})} value={userParams.dateRange} clearIcon={null} minDate={new Date()} />
37+
{opportunities && <button className={styles.resetSearch} onClick={resetSearch}>Reset Search <UTurnArrowLeft size={12} className={styles.resetSearchIcon}/> </button>}
3438
</div>
3539
</>
3640
);

demo/app/src/components/Header/Header.module.scss

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,19 @@
6161
height: 35px;
6262
background-color: $color-light-gray;
6363
z-index: 9999;
64+
65+
.resetSearch,
66+
.resetSearchIcon {
67+
display: inline-block;
68+
vertical-align: middle;
69+
}
70+
71+
.resetSearch {
72+
margin-left: 20px;
73+
background: none;
74+
color: grey;
75+
padding: 0;
76+
text-decoration: none;
77+
border: none;
78+
}
6479
}

demo/app/src/components/Map/Map.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import dynamic from 'next/dynamic';
2-
import { useState } from 'react';
2+
import { useEffect, useState, useRef } from 'react';
33
import { useAppContext } from 'src/context/appContext';
44

55
// react-leaflet-draw styles
@@ -44,6 +44,14 @@ const Map = (props) => {
4444
const [featureGroup, setFeatureGroup] = useState();
4545
const { userParams, setUserParams } = useAppContext();
4646
const { url, attribution } = whichMap('Stadia.AlidadeSmooth');
47+
const markerRef = useRef(null);
48+
49+
useEffect(() => {
50+
if(!userParams.geometry && markerRef.current){
51+
featureGroup.removeLayer(markerRef.current);
52+
markerRef.current = null;
53+
}
54+
}, [userParams]);
4755

4856
/**
4957
* saves feature group ref for later editing
@@ -56,6 +64,7 @@ const Map = (props) => {
5664
* on layer created handler
5765
*/
5866
function onCreated(e) {
67+
markerRef.current = e.layer;
5968
setUserParams({...userParams, geometry: {
6069
"type": "Point",
6170
"coordinates": [e.layer._latlng.lng, e.layer._latlng.lat]

demo/app/src/context/appContext.js

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
1-
import { createContext, useContext, useMemo, useState } from 'react';
1+
import { createContext, useContext, useRef, useMemo, useState } from 'react';
22
import useGetOpportunities from 'src/hooks/useGetOpportunities';
33
import useGetProducts from '../hooks/useGetProducts';
44
import { formatToISOString } from 'src/utils';
55

66
const AppContext = createContext();
77

8+
const today = new Date();
9+
const defaultUserParams = {
10+
dateRange: [
11+
today,
12+
new Date(new Date(today).setDate(today.getDate() + 3)),
13+
],
14+
provider: 'all',
15+
product: 'all'
16+
}
17+
818
export default function AppProvider({ children }) {
9-
const today = new Date();
1019
/**
1120
* @typedef {object} UserParams
1221
* @property {[Date, Date]} dateRange
@@ -16,17 +25,11 @@ export default function AppProvider({ children }) {
1625
const [
1726
userParams,
1827
setUserParams
19-
] = useState({
20-
dateRange: [
21-
today,
22-
new Date(new Date(today).setDate(today.getDate() + 3)),
23-
],
24-
provider: 'all',
25-
product: 'all'
26-
});
28+
] = useState({...defaultUserParams});
2729
const [hoveredOpportunity, setHoveredOpportunity] = useState(null);
2830
const [selectedOpportunity, setSelectedOpportunity] = useState(null);
2931
const [openFilters, setOpenFilters] = useState(false);
32+
const opportunitiesRef = useRef(null);
3033

3134
const postParams = useMemo(() => {
3235
return userParams.geometry ? {
@@ -40,7 +43,13 @@ export default function AppProvider({ children }) {
4043
}, [userParams])
4144

4245
const { isLoading: isLoadingProducts, data: products, error: errorProducts } = useGetProducts();
43-
const { isLoading: isLoadingOpps, data: opportunities, error: errorOpps } = useGetOpportunities(products, postParams);
46+
const { isLoading: isLoadingOpps, data: opportunitiesData, error: errorOpps } = useGetOpportunities(products, postParams);
47+
48+
opportunitiesRef.current = (postParams && opportunitiesData) ? opportunitiesData : null;
49+
50+
function resetSearch(){
51+
setUserParams({...defaultUserParams});
52+
}
4453

4554
const app = {
4655
userParams,
@@ -49,15 +58,16 @@ export default function AppProvider({ children }) {
4958
isLoadingProducts,
5059
products,
5160
errorProducts,
52-
opportunities,
61+
opportunities: opportunitiesRef.current,
5362
errorOpps,
5463
selectedOpportunity,
5564
setSelectedOpportunity,
5665
hoveredOpportunity,
5766
setHoveredOpportunity,
5867
openFilters,
5968
setOpenFilters,
60-
setHoveredOpportunity
69+
setHoveredOpportunity,
70+
resetSearch
6171
}
6272

6373
return (

0 commit comments

Comments
 (0)