@abcagency/hc-ui-components 1.0.4 → 1.0.6
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.
- package/dist/globals.css +1 -1
- package/dist/index.js +237 -376
- package/package.json +37 -38
- package/rollup.config.js +3 -1
- package/src/components/layout/footer.js +7 -7
- package/src/components/layout/layout.js +1 -1
- package/src/components/modules/accordions/MapAccordionItem.js +69 -69
- package/src/components/modules/accordions/default.js +8 -8
- package/src/components/modules/accordions/filterItem.js +53 -53
- package/src/components/modules/accordions/filters.js +44 -44
- package/src/components/modules/animations/slidein.js +1 -1
- package/src/components/modules/buttons/button-group-apply.js +85 -85
- package/src/components/modules/buttons/commute-pill.js +21 -21
- package/src/components/modules/buttons/default.js +16 -16
- package/src/components/modules/buttons/items-pill.js +2 -2
- package/src/components/modules/buttons/pill-wrapper.js +1 -1
- package/src/components/modules/buttons/show-all-button.js +20 -20
- package/src/components/modules/cards/default.js +8 -8
- package/src/components/modules/cards/filter.js +5 -5
- package/src/components/modules/dialogs/apply-dialog.js +47 -47
- package/src/components/modules/filter/commute.js +151 -149
- package/src/components/modules/filter/index.js +86 -86
- package/src/components/modules/filter/item.js +77 -77
- package/src/components/modules/filter/location.js +13 -13
- package/src/components/modules/filter/points-of-interest.js +6 -6
- package/src/components/modules/filter/radio-item.js +51 -51
- package/src/components/modules/filter/search.js +91 -89
- package/src/components/modules/filter/sort.js +83 -83
- package/src/components/modules/grid.js +17 -36
- package/src/components/modules/icon.js +33 -33
- package/src/components/modules/jobListing/listing-details.js +88 -88
- package/src/components/modules/maps/info-window-card.js +17 -17
- package/src/components/modules/maps/info-window-content.js +60 -60
- package/src/components/modules/maps/list/field-mapper.js +111 -113
- package/src/components/modules/maps/list/header-item.js +90 -90
- package/src/components/modules/maps/list/header.js +46 -46
- package/src/components/modules/maps/list/index.js +104 -104
- package/src/components/modules/maps/list/item-expand-card/index.js +1 -1
- package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +3 -3
- package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +4 -4
- package/src/components/modules/maps/list/list-item/index.js +133 -133
- package/src/components/modules/maps/map-list.js +73 -73
- package/src/components/modules/maps/map.js +26 -25
- package/src/components/modules/maps/tabs.js +79 -79
- package/src/components/modules/navigation/nav-link.js +2 -2
- package/src/components/modules/navigation/navbar.js +21 -24
- package/src/components/modules/navigation/skip-link.js +1 -1
- package/src/components/modules/navigation/social.js +3 -3
- package/src/components/modules/sections/default.js +2 -2
- package/src/contexts/mapListContext.js +19 -18
- package/src/index.js +103 -116
- package/src/styles/globals.css +23 -25
- package/src/tailwind/tailwind.config.js +6 -5
- package/src/util/fieldMapper.js +1 -1
- package/src/util/loading.js +2 -2
- package/src/components/modules/filter/search.js.rej +0 -9
- package/src/components/modules/form.js +0 -362
- package/src/components/modules/jumbotron.js +0 -81
- package/src/components/modules/video-player.js +0 -126
|
@@ -1,133 +1,133 @@
|
|
|
1
|
-
import React, { forwardRef } from 'react';
|
|
2
|
-
import Grid, { GridItem } from '~/components/modules/grid';
|
|
3
|
-
import Icon from '~/components/modules/icon';
|
|
4
|
-
import FieldMapper from '~/components/modules/maps/list/field-mapper';
|
|
5
|
-
import { useMapList } from '~/contexts/mapListContext';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const ListItem = forwardRef(
|
|
9
|
-
(
|
|
10
|
-
{
|
|
11
|
-
isActive,
|
|
12
|
-
bodyClassName,
|
|
13
|
-
className,
|
|
14
|
-
item,
|
|
15
|
-
fieldsShown,
|
|
16
|
-
specialFeatures,
|
|
17
|
-
onItemSelected,
|
|
18
|
-
showMap,
|
|
19
|
-
setMobileTab,
|
|
20
|
-
favorites,
|
|
21
|
-
setFavorites,
|
|
22
|
-
...props
|
|
23
|
-
},
|
|
24
|
-
ref,
|
|
25
|
-
) => {
|
|
26
|
-
const {siteConfig } = useMapList();
|
|
27
|
-
const mapPinColor = siteConfig.colors.primary.replace("#", "");
|
|
28
|
-
|
|
29
|
-
const handleClick = () => {
|
|
30
|
-
if (onItemSelected) {
|
|
31
|
-
onItemSelected(item);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
let isFavorite = favorites.includes(item.id);
|
|
36
|
-
|
|
37
|
-
const handleFavouriteClick = event => {
|
|
38
|
-
event.stopPropagation();
|
|
39
|
-
let updatedFavorites;
|
|
40
|
-
if (isFavorite) {
|
|
41
|
-
updatedFavorites = favorites.filter(fav => fav !== item.id);
|
|
42
|
-
} else {
|
|
43
|
-
updatedFavorites = [...favorites, item.id];
|
|
44
|
-
}
|
|
45
|
-
isFavorite = !isFavorite;
|
|
46
|
-
setFavorites(updatedFavorites);
|
|
47
|
-
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
return (
|
|
51
|
-
<button
|
|
52
|
-
ref={ref}
|
|
53
|
-
onClick={handleClick}
|
|
54
|
-
className={`
|
|
55
|
-
|
|
56
|
-
${isActive ? "bg-uiAccent/5 border-secondary border" : "text-uiText bg-white"}
|
|
57
|
-
${className ?? ""}
|
|
58
|
-
|
|
59
|
-
{...props}
|
|
60
|
-
>
|
|
61
|
-
<Grid
|
|
62
|
-
columns="grid-flow-col auto-cols-fr"
|
|
63
|
-
gap="gap-2"
|
|
64
|
-
isAnimated={false}
|
|
65
|
-
className={`
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
>
|
|
70
|
-
<Grid.Item className="hidden md:block md:absolute md:left-1.5 top-1.5">
|
|
71
|
-
<span className="sr-only">Expand row</span>
|
|
72
|
-
<Icon
|
|
73
|
-
icon="fluent-emoji-high-contrast:plus"
|
|
74
|
-
size="
|
|
75
|
-
className={`
|
|
76
|
-
opacity-0 text-uiText/60 transition group-hover:opacity-100 group-active:opacity-100
|
|
77
|
-
${isActive ? "opacity-100 rotate-45" : ""}
|
|
78
|
-
`}
|
|
79
|
-
/>
|
|
80
|
-
|
|
81
|
-
</Grid.Item>
|
|
82
|
-
|
|
83
|
-
<FieldMapper
|
|
84
|
-
item={item}
|
|
85
|
-
fieldsShown={fieldsShown}
|
|
86
|
-
specialFeatures={specialFeatures}
|
|
87
|
-
isFavorite={isFavorite}
|
|
88
|
-
handleFavouriteClick={handleFavouriteClick}
|
|
89
|
-
/>
|
|
90
|
-
<Grid.Item
|
|
91
|
-
key={"favorites"}
|
|
92
|
-
className="hidden md:block"
|
|
93
|
-
>
|
|
94
|
-
|
|
95
|
-
<Icon
|
|
96
|
-
icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
|
|
97
|
-
size="
|
|
98
|
-
iconClasses={isFavorite ? "text-primary" : ""}
|
|
99
|
-
title={!isFavorite ? 'Add job to favorites': 'Remove job from favorites'}
|
|
100
|
-
className={`
|
|
101
|
-
pr-2 transition-opacity duration-300 cursor-pointer opacity-100"
|
|
102
|
-
`}
|
|
103
|
-
onClick={e => handleFavouriteClick(e)}
|
|
104
|
-
/>
|
|
105
|
-
</Grid.Item>
|
|
106
|
-
</Grid>
|
|
107
|
-
|
|
108
|
-
{showMap && (
|
|
109
|
-
<div onClick={() => {setMobileTab("mapTab"); handleClick();}} className="md:hidden w-2/5 sm:w-1/3 p-1.5 my-1 bg-uiAccent/5 border border-uiAccent/10 rounded-sm">
|
|
110
|
-
<img
|
|
111
|
-
src={`https://maps.googleapis.com/maps/api/staticmap?scale=2¢er=${item.mapDetails?.latitude},${item.mapDetails?.longitude}&zoom=10&size=240x180&maptype=roadmap&markers=color:0x${mapPinColor}%7Clabel:•%7C${item.mapDetails?.latitude},${item.mapDetails?.longitude}&key=ToDo`}
|
|
112
|
-
alt={`Map of location for ${item.fields.position}`}
|
|
113
|
-
className="w-full h-full object-cover"
|
|
114
|
-
/>
|
|
115
|
-
</div>
|
|
116
|
-
)}
|
|
117
|
-
</button>
|
|
118
|
-
);
|
|
119
|
-
},
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
ListItem.displayName = "ListItem";
|
|
123
|
-
|
|
124
|
-
export default React.memo(ListItem, (prevProps, nextProps) => {
|
|
125
|
-
return (
|
|
126
|
-
(prevProps.isActive === nextProps.isActive ||
|
|
127
|
-
prevProps.isActive !== nextProps.isActive) &&
|
|
128
|
-
prevProps.bodyClassName === nextProps.bodyClassName &&
|
|
129
|
-
prevProps.className === nextProps.className &&
|
|
130
|
-
prevProps.fieldsShown === nextProps.fieldsShown &&
|
|
131
|
-
prevProps.item.id === nextProps.item.id
|
|
132
|
-
);
|
|
133
|
-
});
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import Grid, { GridItem } from '~/components/modules/grid';
|
|
3
|
+
import Icon from '~/components/modules/icon';
|
|
4
|
+
import FieldMapper from '~/components/modules/maps/list/field-mapper';
|
|
5
|
+
import { useMapList } from '~/contexts/mapListContext';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const ListItem = forwardRef(
|
|
9
|
+
(
|
|
10
|
+
{
|
|
11
|
+
isActive,
|
|
12
|
+
bodyClassName,
|
|
13
|
+
className,
|
|
14
|
+
item,
|
|
15
|
+
fieldsShown,
|
|
16
|
+
specialFeatures,
|
|
17
|
+
onItemSelected,
|
|
18
|
+
showMap,
|
|
19
|
+
setMobileTab,
|
|
20
|
+
favorites,
|
|
21
|
+
setFavorites,
|
|
22
|
+
...props
|
|
23
|
+
},
|
|
24
|
+
ref,
|
|
25
|
+
) => {
|
|
26
|
+
const { siteConfig } = useMapList();
|
|
27
|
+
const mapPinColor = siteConfig.colors.primary.replace("#", "");
|
|
28
|
+
|
|
29
|
+
const handleClick = () => {
|
|
30
|
+
if (onItemSelected) {
|
|
31
|
+
onItemSelected(item);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
let isFavorite = favorites.includes(item.id);
|
|
36
|
+
|
|
37
|
+
const handleFavouriteClick = event => {
|
|
38
|
+
event.stopPropagation();
|
|
39
|
+
let updatedFavorites;
|
|
40
|
+
if (isFavorite) {
|
|
41
|
+
updatedFavorites = favorites.filter(fav => fav !== item.id);
|
|
42
|
+
} else {
|
|
43
|
+
updatedFavorites = [...favorites, item.id];
|
|
44
|
+
}
|
|
45
|
+
isFavorite = !isFavorite;
|
|
46
|
+
setFavorites(updatedFavorites);
|
|
47
|
+
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<button
|
|
52
|
+
ref={ref}
|
|
53
|
+
onClick={handleClick}
|
|
54
|
+
className={`
|
|
55
|
+
hc-group hc-relative hc-flex md:hc-flex-col hc-w-full md:hc-pl-4 hc-text-left hc-bg-clip-border hc-border hc-border-transparent hc-break-words hc-overflow-hidden hc-cursor-pointer hc-transition-colors hover:hc-bg-uiAccent/5 focus:hc-hover:bg-uiAccent/5
|
|
56
|
+
${isActive ? "bg-uiAccent/5 border-secondary border" : "text-uiText bg-white"}
|
|
57
|
+
${className ?? ""}
|
|
58
|
+
`}
|
|
59
|
+
{...props}
|
|
60
|
+
>
|
|
61
|
+
<Grid
|
|
62
|
+
columns="hc-grid-flow-col hc-auto-cols-fr"
|
|
63
|
+
gap="hc-gap-2"
|
|
64
|
+
isAnimated={false}
|
|
65
|
+
className={`
|
|
66
|
+
hc-block md:hc-grid hc-flex-auto hc-p-2 hc-ps-4 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm
|
|
67
|
+
${bodyClassName ?? ""}
|
|
68
|
+
`}
|
|
69
|
+
>
|
|
70
|
+
<Grid.Item className="hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5">
|
|
71
|
+
<span className="hc-sr-only">Expand row</span>
|
|
72
|
+
<Icon
|
|
73
|
+
icon="fluent-emoji-high-contrast:plus"
|
|
74
|
+
size="hc-size-2.5"
|
|
75
|
+
className={`
|
|
76
|
+
hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100
|
|
77
|
+
${isActive ? "hc-opacity-100 hc-rotate-45" : ""}
|
|
78
|
+
`}
|
|
79
|
+
/>
|
|
80
|
+
|
|
81
|
+
</Grid.Item>
|
|
82
|
+
|
|
83
|
+
<FieldMapper
|
|
84
|
+
item={item}
|
|
85
|
+
fieldsShown={fieldsShown}
|
|
86
|
+
specialFeatures={specialFeatures}
|
|
87
|
+
isFavorite={isFavorite}
|
|
88
|
+
handleFavouriteClick={handleFavouriteClick}
|
|
89
|
+
/>
|
|
90
|
+
<Grid.Item
|
|
91
|
+
key={"favorites"}
|
|
92
|
+
className="hc-hidden md:hc-block"
|
|
93
|
+
>
|
|
94
|
+
|
|
95
|
+
<Icon
|
|
96
|
+
icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
|
|
97
|
+
size="hc-size-3.5"
|
|
98
|
+
iconClasses={isFavorite ? "hc-text-primary" : ""}
|
|
99
|
+
title={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}
|
|
100
|
+
className={`
|
|
101
|
+
hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100"
|
|
102
|
+
`}
|
|
103
|
+
onClick={e => handleFavouriteClick(e)}
|
|
104
|
+
/>
|
|
105
|
+
</Grid.Item>
|
|
106
|
+
</Grid>
|
|
107
|
+
|
|
108
|
+
{showMap && (
|
|
109
|
+
<div onClick={() => { setMobileTab("mapTab"); handleClick(); }} className="md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm">
|
|
110
|
+
<img
|
|
111
|
+
src={`https://maps.googleapis.com/maps/api/staticmap?scale=2¢er=${item.mapDetails?.latitude},${item.mapDetails?.longitude}&zoom=10&size=240x180&maptype=roadmap&markers=color:0x${mapPinColor}%7Clabel:•%7C${item.mapDetails?.latitude},${item.mapDetails?.longitude}&key=ToDo`}
|
|
112
|
+
alt={`Map of location for ${item.fields.position}`}
|
|
113
|
+
className="hc-w-full hc-h-full hc-object-cover"
|
|
114
|
+
/>
|
|
115
|
+
</div>
|
|
116
|
+
)}
|
|
117
|
+
</button>
|
|
118
|
+
);
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
ListItem.displayName = "ListItem";
|
|
123
|
+
|
|
124
|
+
export default React.memo(ListItem, (prevProps, nextProps) => {
|
|
125
|
+
return (
|
|
126
|
+
(prevProps.isActive === nextProps.isActive ||
|
|
127
|
+
prevProps.isActive !== nextProps.isActive) &&
|
|
128
|
+
prevProps.bodyClassName === nextProps.bodyClassName &&
|
|
129
|
+
prevProps.className === nextProps.className &&
|
|
130
|
+
prevProps.fieldsShown === nextProps.fieldsShown &&
|
|
131
|
+
prevProps.item.id === nextProps.item.id
|
|
132
|
+
);
|
|
133
|
+
});
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
import List from "~/components/modules/maps/list";
|
|
2
|
-
import Map from "~/components/modules/maps/map";
|
|
3
|
-
import Tabs from "~/components/modules/maps/tabs";
|
|
4
|
-
import Filter from "~/components/modules/filter";
|
|
5
|
-
import React from 'react'
|
|
6
|
-
|
|
7
|
-
const MapList = ({
|
|
8
|
-
loading = false,
|
|
9
|
-
mapDetails,
|
|
10
|
-
markerConfigs,
|
|
11
|
-
itemExpandedContent,
|
|
12
|
-
fieldsShown,
|
|
13
|
-
specialFeatures,
|
|
14
|
-
fieldNames,
|
|
15
|
-
showMap,
|
|
16
|
-
placeMappings
|
|
17
|
-
}) => {
|
|
18
|
-
|
|
19
|
-
const listProps = {
|
|
20
|
-
fieldsShown: fieldsShown,
|
|
21
|
-
fieldNames: fieldNames,
|
|
22
|
-
itemExpandedContent: itemExpandedContent,
|
|
23
|
-
loading: loading,
|
|
24
|
-
showMap: showMap,
|
|
25
|
-
specialFeatures: specialFeatures
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const mapProps = {
|
|
29
|
-
mapDetails: mapDetails,
|
|
30
|
-
markerConfigs: markerConfigs,
|
|
31
|
-
placeMappings: placeMappings,
|
|
32
|
-
clusterGridSize: 60,
|
|
33
|
-
showMap: showMap
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// useEffect(() => {
|
|
37
|
-
// if (selectedItem !== null) {
|
|
38
|
-
// trackEvent("Map", "View Location", selectedItem[titlePropName]);
|
|
39
|
-
// }
|
|
40
|
-
// // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
-
// }, []);
|
|
42
|
-
const map = <Map {...mapProps} />;
|
|
43
|
-
return (
|
|
44
|
-
<>
|
|
45
|
-
<div
|
|
46
|
-
className={`
|
|
47
|
-
${showMap == false ? "md:grid-rows-[100vh]" : "md:
|
|
48
|
-
md:grid md:pt-4 overflow-hidden relative
|
|
49
|
-
`}
|
|
50
|
-
>
|
|
51
|
-
<div
|
|
52
|
-
<List {...listProps} />
|
|
53
|
-
</div>
|
|
54
|
-
<div>{showMap && map}</div>
|
|
55
|
-
</div>
|
|
56
|
-
<div className="md:hidden">
|
|
57
|
-
<Tabs
|
|
58
|
-
showMap={showMap}
|
|
59
|
-
list={<List {...listProps} />}
|
|
60
|
-
map={!loading && showMap && map}
|
|
61
|
-
filter={
|
|
62
|
-
<Filter
|
|
63
|
-
showMap={showMap}
|
|
64
|
-
className="md:hidden"
|
|
65
|
-
/>
|
|
66
|
-
}
|
|
67
|
-
/>
|
|
68
|
-
</div>
|
|
69
|
-
</>
|
|
70
|
-
);
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export default MapList;
|
|
1
|
+
import List from "~/components/modules/maps/list";
|
|
2
|
+
import Map from "~/components/modules/maps/map";
|
|
3
|
+
import Tabs from "~/components/modules/maps/tabs";
|
|
4
|
+
import Filter from "~/components/modules/filter";
|
|
5
|
+
import React from 'react'
|
|
6
|
+
|
|
7
|
+
const MapList = ({
|
|
8
|
+
loading = false,
|
|
9
|
+
mapDetails,
|
|
10
|
+
markerConfigs,
|
|
11
|
+
itemExpandedContent,
|
|
12
|
+
fieldsShown,
|
|
13
|
+
specialFeatures,
|
|
14
|
+
fieldNames,
|
|
15
|
+
showMap,
|
|
16
|
+
placeMappings
|
|
17
|
+
}) => {
|
|
18
|
+
|
|
19
|
+
const listProps = {
|
|
20
|
+
fieldsShown: fieldsShown,
|
|
21
|
+
fieldNames: fieldNames,
|
|
22
|
+
itemExpandedContent: itemExpandedContent,
|
|
23
|
+
loading: loading,
|
|
24
|
+
showMap: showMap,
|
|
25
|
+
specialFeatures: specialFeatures
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const mapProps = {
|
|
29
|
+
mapDetails: mapDetails,
|
|
30
|
+
markerConfigs: markerConfigs,
|
|
31
|
+
placeMappings: placeMappings,
|
|
32
|
+
clusterGridSize: 60,
|
|
33
|
+
showMap: showMap
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// useEffect(() => {
|
|
37
|
+
// if (selectedItem !== null) {
|
|
38
|
+
// trackEvent("Map", "View Location", selectedItem[titlePropName]);
|
|
39
|
+
// }
|
|
40
|
+
// // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
+
// }, []);
|
|
42
|
+
const map = <Map {...mapProps} />;
|
|
43
|
+
return (
|
|
44
|
+
<>
|
|
45
|
+
<div
|
|
46
|
+
className={`
|
|
47
|
+
${showMap == false ? "md:hc-grid-rows-[100vh]" : "md:hc-rid-rows-[50vh_50vh]"}
|
|
48
|
+
md:hc-grid md:hc-pt-4 hc-overflow-hidden hc-relative
|
|
49
|
+
`}
|
|
50
|
+
>
|
|
51
|
+
<div>
|
|
52
|
+
<List {...listProps} />
|
|
53
|
+
</div>
|
|
54
|
+
<div>{showMap && map}</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div className="md:hc-hidden">
|
|
57
|
+
<Tabs
|
|
58
|
+
showMap={showMap}
|
|
59
|
+
list={<List {...listProps} />}
|
|
60
|
+
map={!loading && showMap && map}
|
|
61
|
+
filter={
|
|
62
|
+
<Filter
|
|
63
|
+
showMap={showMap}
|
|
64
|
+
className="md:hc-hidden"
|
|
65
|
+
/>
|
|
66
|
+
}
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
</>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default MapList;
|
|
@@ -27,7 +27,7 @@ const Map = ({
|
|
|
27
27
|
} = useMap();
|
|
28
28
|
|
|
29
29
|
const {
|
|
30
|
-
mapItems, handleFilterListingsByLocation, filteredListings,
|
|
30
|
+
mapItems, handleFilterListingsByLocation, filteredListings, setSelectedFilters,
|
|
31
31
|
setQuery
|
|
32
32
|
} = useMapList();
|
|
33
33
|
|
|
@@ -38,7 +38,7 @@ const Map = ({
|
|
|
38
38
|
usePlaces();
|
|
39
39
|
|
|
40
40
|
const onIdle = () => {
|
|
41
|
-
if(!currentCenter || !mapRef.current) return;
|
|
41
|
+
if (!currentCenter || !mapRef.current) return;
|
|
42
42
|
const newCenter = mapRef.current.getCenter().toJSON();
|
|
43
43
|
const newZoom = mapRef.current.zoom;
|
|
44
44
|
|
|
@@ -51,16 +51,17 @@ const Map = ({
|
|
|
51
51
|
|
|
52
52
|
useEffect(() => {
|
|
53
53
|
if (mapContainerRef.current) {
|
|
54
|
-
|
|
54
|
+
const handleScroll = () => {
|
|
55
55
|
setMapInteracted(true);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
56
|
+
};
|
|
57
|
+
var mapContainerRefCurrent = mapContainerRef.current;
|
|
58
|
+
mapContainerRef.current.addEventListener('wheel', handleScroll);
|
|
59
|
+
return () => mapContainerRefCurrent.removeEventListener('wheel', handleScroll);
|
|
60
|
+
}
|
|
61
|
+
}, [mapContainerRef.current]);
|
|
61
62
|
|
|
62
63
|
useEffect(() => {
|
|
63
|
-
if(mapRef.current){
|
|
64
|
+
if (mapRef.current) {
|
|
64
65
|
const mapInstance = mapRef.current;
|
|
65
66
|
const dragStartListener = mapInstance.addListener('dragstart', () => setMapInteracted(true));
|
|
66
67
|
const mouseDownListener = mapInstance.addListener('mousedown', () => setMapInteracted(true));
|
|
@@ -69,7 +70,7 @@ const Map = ({
|
|
|
69
70
|
google.maps.event.removeListener(mouseDownListener);
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
+
}, [mapRef.current, mapContainerRef.current]);
|
|
73
74
|
|
|
74
75
|
useEffect(() => {
|
|
75
76
|
if ((mapItems && mapItems.length > 0 || poiMarkers.length > 0) && mapRef.current) {
|
|
@@ -81,7 +82,7 @@ const Map = ({
|
|
|
81
82
|
if (mapItems && mapItems.length > 0 || poiMarkers.length > 0 && mapRef.current && mapInteracted) {
|
|
82
83
|
fitBounds(mapRef.current, true);
|
|
83
84
|
}
|
|
84
|
-
if(mapRef.current){
|
|
85
|
+
if (mapRef.current) {
|
|
85
86
|
let currZoom = mapRef.current.zoom;
|
|
86
87
|
let setZoomVal = currZoom < 13 ? currZoom : 12;
|
|
87
88
|
mapRef.current.setZoom(setZoomVal);
|
|
@@ -93,22 +94,22 @@ const Map = ({
|
|
|
93
94
|
mapRef.current.panTo(
|
|
94
95
|
new google.maps.LatLng(location.latitude, location.longitude),
|
|
95
96
|
);
|
|
96
|
-
if(mapRef.current){
|
|
97
|
+
if (mapRef.current) {
|
|
97
98
|
let setZoomVal = zoom < 13 ? zoom : 12;
|
|
98
99
|
mapRef.current.setZoom(setZoomVal);
|
|
99
100
|
}
|
|
100
101
|
}, [location, zoom, mapRef.current]);
|
|
101
102
|
|
|
102
103
|
const fitBounds = (map, overload = false) => {
|
|
103
|
-
if((mapInteracted === false || overload) && mapItems != null){
|
|
104
|
+
if ((mapInteracted === false || overload) && mapItems != null) {
|
|
104
105
|
const bounds = new window.google.maps.LatLngBounds();
|
|
105
106
|
mapItems.forEach(item => {
|
|
106
107
|
bounds.extend(new google.maps.LatLng(item.latitude, item.longitude));
|
|
107
108
|
});
|
|
108
|
-
if(!map) return;
|
|
109
|
+
if (!map) return;
|
|
109
110
|
map.fitBounds(bounds);
|
|
110
111
|
}
|
|
111
|
-
if(mapRef.current.zoom > 17){
|
|
112
|
+
if (mapRef.current.zoom > 17) {
|
|
112
113
|
mapRef.current.setZoom(16);
|
|
113
114
|
}
|
|
114
115
|
};
|
|
@@ -120,28 +121,28 @@ const Map = ({
|
|
|
120
121
|
|
|
121
122
|
const onLoad = map => {
|
|
122
123
|
if (!location || location === null) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
mapRef.current = map;
|
|
125
|
+
fitBounds(map, true);
|
|
126
|
+
return;
|
|
126
127
|
}
|
|
127
128
|
mapRef.current = map;
|
|
128
129
|
|
|
129
|
-
if(mapInteracted === false) {
|
|
130
|
-
|
|
130
|
+
if (mapInteracted === false) {
|
|
131
|
+
mapRef.current.panTo(
|
|
131
132
|
new google.maps.LatLng(location.latitude, location.longitude),
|
|
132
|
-
|
|
133
|
+
);
|
|
133
134
|
|
|
134
|
-
|
|
135
|
+
mapRef.current.setZoom(zoom);
|
|
135
136
|
}
|
|
136
137
|
};
|
|
137
138
|
|
|
138
139
|
const pinIconUrl = pinIcon({
|
|
139
140
|
fillColor: markerConfigs.fillColor,
|
|
140
141
|
strokeColor: markerConfigs.strokeColor
|
|
141
|
-
|
|
142
|
+
});
|
|
142
143
|
|
|
143
144
|
return (
|
|
144
|
-
<>{zoom && center && <div ref={mapContainerRef} className="h-full relative">
|
|
145
|
+
<>{zoom && center && <div ref={mapContainerRef} className="hc-h-full hc-relative">
|
|
145
146
|
<GoogleMap
|
|
146
147
|
zoom={zoom}
|
|
147
148
|
onLoad={onLoad}
|
|
@@ -189,7 +190,7 @@ const Map = ({
|
|
|
189
190
|
placesWindow={placesWindow}
|
|
190
191
|
setPlacesWindow={setPlacesWindow}
|
|
191
192
|
setSelectedPlaceMarker={setSelectedPlaceMarker}
|
|
192
|
-
|
|
193
|
+
/>
|
|
193
194
|
);
|
|
194
195
|
})}
|
|
195
196
|
</>
|