@abcagency/hc-ui-components 1.3.58 → 1.3.60

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.
Files changed (139) hide show
  1. package/dist/components/HireControlMap.js +11 -1
  2. package/dist/components/HireControlMap.js.map +1 -1
  3. package/dist/components/containers/accordions/filter-item-container.js.map +1 -1
  4. package/dist/components/containers/filter/commute-container.js +1 -1
  5. package/dist/components/containers/filter/commute-container.js.map +1 -1
  6. package/dist/components/containers/filter/filter-container.js.map +1 -1
  7. package/dist/components/containers/filter/filter-item-container.js.map +1 -1
  8. package/dist/components/containers/filter/location-container.js.map +1 -1
  9. package/dist/components/containers/filter/points-of-interest-container.js.map +1 -1
  10. package/dist/components/containers/filter/points-of-interest-radio-item-container.js.map +1 -1
  11. package/dist/components/containers/filter/search-container.js.map +1 -1
  12. package/dist/components/containers/jobListing/listing-details-container.js +5 -1
  13. package/dist/components/containers/jobListing/listing-details-container.js.map +1 -1
  14. package/dist/components/containers/list/item-list-container.js.map +1 -1
  15. package/dist/components/containers/maps/info-window-content-container.js.map +1 -1
  16. package/dist/components/containers/maps/map-container.js +1 -1
  17. package/dist/components/containers/maps/map-list-container.js.map +1 -1
  18. package/dist/components/containers/maps/map-marker-container.js +1 -1
  19. package/dist/components/containers/maps/map-marker-container.js.map +1 -1
  20. package/dist/components/modules/accordions/default.js +2 -2
  21. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  22. package/dist/components/modules/accordions/filters.js.map +1 -1
  23. package/dist/components/modules/buttons/button-group-apply.js +48 -54
  24. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  25. package/dist/components/modules/buttons/default.js +2 -2
  26. package/dist/components/modules/cards/default.js +2 -2
  27. package/dist/components/modules/dialogs/apply-dialog.js +1 -1
  28. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  29. package/dist/components/modules/filter/commute.js +2 -2
  30. package/dist/components/modules/filter/commute.js.map +1 -1
  31. package/dist/components/modules/filter/index.js.map +1 -1
  32. package/dist/components/modules/filter/location.js.map +1 -1
  33. package/dist/components/modules/filter/radio-item.js.map +1 -1
  34. package/dist/components/modules/filter/search.js.map +1 -1
  35. package/dist/components/modules/filter/sort.js +2 -2
  36. package/dist/components/modules/grid.js +1 -1
  37. package/dist/components/modules/icon.js +1 -1
  38. package/dist/components/modules/jobListing/listing-details.js +8 -7
  39. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  40. package/dist/components/modules/list/field-mapper.js.map +1 -1
  41. package/dist/components/modules/list/header-item.js.map +1 -1
  42. package/dist/components/modules/list/header.js +1 -1
  43. package/dist/components/modules/list/item-expand-card/index.js +1 -1
  44. package/dist/components/modules/list/item-expand-card/index.js.map +1 -1
  45. package/dist/components/modules/list/item-expand-card/recruiter-contact-nav.js +38 -38
  46. package/dist/components/modules/list/item-expand-card/recruiter-details.js +40 -40
  47. package/dist/components/modules/list/item-expand-card/recruiter-headshot.js +20 -20
  48. package/dist/components/modules/list/item-list.js +3 -3
  49. package/dist/components/modules/list/item-list.js.map +1 -1
  50. package/dist/components/modules/list/list-item/list-item.js.map +1 -1
  51. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  52. package/dist/components/modules/maps/map-list.js.map +1 -1
  53. package/dist/components/modules/maps/map-marker.js +1 -1
  54. package/dist/components/modules/maps/map-marker.js.map +1 -1
  55. package/dist/components/modules/maps/map.js +1 -1
  56. package/dist/components/modules/maps/place-marker.js +1 -1
  57. package/dist/components/modules/maps/tabs.js +1 -1
  58. package/dist/constants/eventTypes.js +1 -0
  59. package/dist/constants/eventTypes.js.map +1 -1
  60. package/dist/contexts/mapContext.js.map +1 -1
  61. package/dist/contexts/mapListContext.js +3 -1
  62. package/dist/contexts/mapListContext.js.map +1 -1
  63. package/dist/contexts/placesContext.js.map +1 -1
  64. package/dist/contexts/themeContext.js.map +1 -1
  65. package/dist/services/configService.js.map +1 -1
  66. package/dist/services/listingEntityService.js.map +1 -1
  67. package/dist/services/listingService.js.map +1 -1
  68. package/dist/services/recruiterService.js.map +1 -1
  69. package/dist/types/components/modules/buttons/button-group-apply.d.ts +4 -4
  70. package/dist/types/components/modules/jobListing/listing-details.d.ts +3 -1
  71. package/dist/types/constants/eventTypes.d.ts +1 -0
  72. package/dist/types/contexts/mapListContext.d.ts +4 -0
  73. package/dist/util/filterUtil.js +3 -3
  74. package/dist/util/filterUtil.js.map +1 -1
  75. package/dist/util/mapIconUtil.js.map +1 -1
  76. package/dist/util/mapUtil.js.map +1 -1
  77. package/package.json +90 -90
  78. package/src/.editorconfig +12 -12
  79. package/src/bundleIndex.js +14 -14
  80. package/src/components/HireControlMap.js +148 -142
  81. package/src/components/containers/accordions/filter-item-container.js +83 -83
  82. package/src/components/containers/filter/commute-container.js +89 -89
  83. package/src/components/containers/filter/filter-container.js +76 -76
  84. package/src/components/containers/filter/filter-item-container.js +117 -117
  85. package/src/components/containers/filter/location-container.js +45 -45
  86. package/src/components/containers/filter/points-of-interest-container.js +33 -33
  87. package/src/components/containers/filter/points-of-interest-radio-item-container.js +35 -35
  88. package/src/components/containers/filter/search-container.js +61 -61
  89. package/src/components/containers/jobListing/listing-details-container.js +3 -1
  90. package/src/components/containers/list/item-list-container.tsx +81 -81
  91. package/src/components/containers/maps/info-window-content-container.js +53 -53
  92. package/src/components/containers/maps/map-list-container.js +50 -50
  93. package/src/components/containers/maps/map-marker-container.js +78 -78
  94. package/src/components/modules/accordions/filterItem.js +27 -27
  95. package/src/components/modules/accordions/filters.js +32 -32
  96. package/src/components/modules/buttons/button-group-apply.js +115 -135
  97. package/src/components/modules/dialogs/apply-dialog.js +48 -48
  98. package/src/components/modules/filter/commute.js +108 -108
  99. package/src/components/modules/filter/index.js +55 -55
  100. package/src/components/modules/filter/location.js +51 -51
  101. package/src/components/modules/filter/radio-item.js +42 -42
  102. package/src/components/modules/filter/search.js +79 -79
  103. package/src/components/modules/jobListing/listing-details.js +110 -108
  104. package/src/components/modules/list/field-mapper.js +130 -130
  105. package/src/components/modules/list/header-item.js +92 -92
  106. package/src/components/modules/list/item-expand-card/index.js +22 -22
  107. package/src/components/modules/list/item-list.tsx +117 -117
  108. package/src/components/modules/list/list-item/list-item.js +130 -130
  109. package/src/components/modules/maps/info-window-content.js +64 -64
  110. package/src/components/modules/maps/map-list.js +38 -38
  111. package/src/components/modules/maps/map-marker.js +29 -29
  112. package/src/constants/eventTypes.js +15 -14
  113. package/src/contexts/mapContext.tsx +129 -129
  114. package/src/contexts/mapListContext.tsx +326 -318
  115. package/src/contexts/placesContext.js +102 -102
  116. package/src/contexts/themeContext.js +40 -40
  117. package/src/services/configService.ts +16 -16
  118. package/src/services/listingEntityService.ts +16 -16
  119. package/src/services/listingService.ts +40 -40
  120. package/src/services/recruiterService.ts +18 -18
  121. package/src/styles/bundle.css +268 -268
  122. package/src/styles/index.css +33 -33
  123. package/src/types/Address.ts +7 -7
  124. package/src/types/ContentSection.ts +9 -9
  125. package/src/types/GetListingParams.ts +8 -8
  126. package/src/types/LatLng.ts +4 -4
  127. package/src/types/ListingEntity.ts +11 -11
  128. package/src/types/ListingFields.ts +25 -25
  129. package/src/types/Listings.ts +32 -32
  130. package/src/types/Recruiter.ts +9 -9
  131. package/src/types/SimilarListing.ts +24 -24
  132. package/src/types/config/Colors.ts +8 -8
  133. package/src/types/config/MapConfig.ts +31 -31
  134. package/src/types/config/PointsOfInterestConfig.ts +13 -13
  135. package/src/types/config/SearchConfig.ts +4 -4
  136. package/src/util/filterUtil.js +2 -1
  137. package/src/util/mapIconUtil.js +180 -180
  138. package/src/util/mapUtil.js +92 -92
  139. package/dist/types/contexts/themeContext.d.ts +0 -11
@@ -1,117 +1,117 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { useTrackEvent } from '~/contexts/trackEventContext';
3
- import FilterItem from '~/components/modules/filter/item';
4
- import { useMapList } from '~/contexts/mapListContext';
5
-
6
- const FilterItemContainer = ({
7
- className,
8
- item,
9
- type = 'checkbox',
10
- itemKey = null,
11
- hasCount = true,
12
- field,
13
- isExternalLink = false,
14
- externalLinkUrl,
15
- selectedFilters,
16
- setSelectedFilters,
17
- subcategoryRequireCategory = false,
18
- ...rest
19
- }) => {
20
- const { trackEvent, eventTypes } = useTrackEvent();
21
- const itemName = item.name ? item.name : item;
22
- itemKey = itemKey === null ? itemName : itemKey;
23
- const isActive = selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];
24
- const [activeItem, setActiveItem] = useState(isActive);
25
-
26
- useEffect(() => {
27
- if (!selectedFilters || isExternalLink) return;
28
- setActiveItem(!!selectedFilters[field]?.[itemKey]);
29
- }, [selectedFilters, field, itemKey]);
30
-
31
- const { filteredListings } = useMapList();
32
- const changeHandler = () => {
33
- if (!isActive || isExternalLink) {
34
- trackEvent(eventTypes.FILTER_APPLIED, { filterType: field, filterChecked: itemKey });
35
- }
36
-
37
- setSelectedFilters(prevFilters => {
38
- const updatedFilters = { ...prevFilters };
39
-
40
- if (field === 'city' || field === 'state' || field === 'cityState') {
41
- delete updatedFilters['entityName'];
42
- }
43
-
44
- if (!isActive) {
45
- if (!updatedFilters[field]) {
46
- updatedFilters[field] = {};
47
- }
48
- updatedFilters[field][itemKey] = true;
49
- return updatedFilters;
50
- }
51
-
52
- delete updatedFilters[field][itemKey];
53
-
54
- if (updatedFilters[field] && Object.keys(updatedFilters[field]).length === 0) {
55
- delete updatedFilters[field];
56
- }
57
-
58
- if (field === 'categoryClass' && subcategoryRequireCategory) {
59
- const activeCategoryClass = itemKey;
60
- const categoriesToConsiderForRemoval = new Set(
61
- filteredListings
62
- .filter(listing => listing.fields.categoryClass === activeCategoryClass)
63
- .flatMap(listing => listing.fields.category || [])
64
- );
65
-
66
- const categoriesToRetain = new Set(
67
- filteredListings
68
- .filter(listing => listing.fields.categoryClass !== activeCategoryClass)
69
- .flatMap(listing => listing.fields.category || [])
70
- .filter(category => categoriesToConsiderForRemoval.has(category))
71
- );
72
-
73
- if (updatedFilters['category']) {
74
- Object.keys(updatedFilters['category']).forEach(categoryKey => {
75
- if (categoriesToConsiderForRemoval.has(categoryKey) && !categoriesToRetain.has(categoryKey)) {
76
- delete updatedFilters['category'][categoryKey];
77
- }
78
- });
79
-
80
- if (Object.keys(updatedFilters['category']).length === 0) {
81
- delete updatedFilters['category'];
82
- }
83
- }
84
- }
85
-
86
- return updatedFilters;
87
- });
88
- };
89
-
90
- useEffect(() => {
91
- if (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;
92
- else if (activeItem === true) {
93
- setActiveItem(false);
94
- }
95
- }, [selectedFilters]);
96
-
97
- return (
98
- <FilterItem
99
- className={className}
100
- item={item}
101
- type={type}
102
- itemKey={itemKey}
103
- hasCount={hasCount}
104
- field={field}
105
- activeItem={activeItem}
106
- setActiveItem={setActiveItem}
107
- changeHandler={changeHandler}
108
- isExternalLink={isExternalLink}
109
- externalLinkUrl={externalLinkUrl}
110
- trackEvent={trackEvent}
111
- eventTypes={eventTypes}
112
- {...rest}
113
- />
114
- );
115
- };
116
-
117
- export default FilterItemContainer;
1
+ import React, { useState, useEffect } from 'react';
2
+ import { useTrackEvent } from '~/contexts/trackEventContext';
3
+ import FilterItem from '~/components/modules/filter/item';
4
+ import { useMapList } from '~/contexts/mapListContext';
5
+
6
+ const FilterItemContainer = ({
7
+ className,
8
+ item,
9
+ type = 'checkbox',
10
+ itemKey = null,
11
+ hasCount = true,
12
+ field,
13
+ isExternalLink = false,
14
+ externalLinkUrl,
15
+ selectedFilters,
16
+ setSelectedFilters,
17
+ subcategoryRequireCategory = false,
18
+ ...rest
19
+ }) => {
20
+ const { trackEvent, eventTypes } = useTrackEvent();
21
+ const itemName = item.name ? item.name : item;
22
+ itemKey = itemKey === null ? itemName : itemKey;
23
+ const isActive = selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];
24
+ const [activeItem, setActiveItem] = useState(isActive);
25
+
26
+ useEffect(() => {
27
+ if (!selectedFilters || isExternalLink) return;
28
+ setActiveItem(!!selectedFilters[field]?.[itemKey]);
29
+ }, [selectedFilters, field, itemKey]);
30
+
31
+ const { filteredListings } = useMapList();
32
+ const changeHandler = () => {
33
+ if (!isActive || isExternalLink) {
34
+ trackEvent(eventTypes.FILTER_APPLIED, { filterType: field, filterChecked: itemKey });
35
+ }
36
+
37
+ setSelectedFilters(prevFilters => {
38
+ const updatedFilters = { ...prevFilters };
39
+
40
+ if (field === 'city' || field === 'state' || field === 'cityState') {
41
+ delete updatedFilters['entityName'];
42
+ }
43
+
44
+ if (!isActive) {
45
+ if (!updatedFilters[field]) {
46
+ updatedFilters[field] = {};
47
+ }
48
+ updatedFilters[field][itemKey] = true;
49
+ return updatedFilters;
50
+ }
51
+
52
+ delete updatedFilters[field][itemKey];
53
+
54
+ if (updatedFilters[field] && Object.keys(updatedFilters[field]).length === 0) {
55
+ delete updatedFilters[field];
56
+ }
57
+
58
+ if (field === 'categoryClass' && subcategoryRequireCategory) {
59
+ const activeCategoryClass = itemKey;
60
+ const categoriesToConsiderForRemoval = new Set(
61
+ filteredListings
62
+ .filter(listing => listing.fields.categoryClass === activeCategoryClass)
63
+ .flatMap(listing => listing.fields.category || [])
64
+ );
65
+
66
+ const categoriesToRetain = new Set(
67
+ filteredListings
68
+ .filter(listing => listing.fields.categoryClass !== activeCategoryClass)
69
+ .flatMap(listing => listing.fields.category || [])
70
+ .filter(category => categoriesToConsiderForRemoval.has(category))
71
+ );
72
+
73
+ if (updatedFilters['category']) {
74
+ Object.keys(updatedFilters['category']).forEach(categoryKey => {
75
+ if (categoriesToConsiderForRemoval.has(categoryKey) && !categoriesToRetain.has(categoryKey)) {
76
+ delete updatedFilters['category'][categoryKey];
77
+ }
78
+ });
79
+
80
+ if (Object.keys(updatedFilters['category']).length === 0) {
81
+ delete updatedFilters['category'];
82
+ }
83
+ }
84
+ }
85
+
86
+ return updatedFilters;
87
+ });
88
+ };
89
+
90
+ useEffect(() => {
91
+ if (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;
92
+ else if (activeItem === true) {
93
+ setActiveItem(false);
94
+ }
95
+ }, [selectedFilters]);
96
+
97
+ return (
98
+ <FilterItem
99
+ className={className}
100
+ item={item}
101
+ type={type}
102
+ itemKey={itemKey}
103
+ hasCount={hasCount}
104
+ field={field}
105
+ activeItem={activeItem}
106
+ setActiveItem={setActiveItem}
107
+ changeHandler={changeHandler}
108
+ isExternalLink={isExternalLink}
109
+ externalLinkUrl={externalLinkUrl}
110
+ trackEvent={trackEvent}
111
+ eventTypes={eventTypes}
112
+ {...rest}
113
+ />
114
+ );
115
+ };
116
+
117
+ export default FilterItemContainer;
@@ -1,45 +1,45 @@
1
- import React from 'react';
2
- import FilterLocation from '~/components/modules/filter/location';
3
- import FilterCommute from '~/components/containers/filter/commute-container';
4
- import FilterPointsOfInterest from '~/components/containers/filter/points-of-interest-container';
5
- import { useMapList } from '~/contexts/mapListContext';
6
-
7
- const FilterLocationContainer = ({
8
- className,
9
- defaultValue,
10
- setDefaultValue,
11
- showMap = false,
12
- setLocation,
13
- setSelectedListItem
14
- }) => {
15
- const { setSelectedFilters, selectedFilters, filterOptions } = useMapList();
16
-
17
- const locations = filterOptions?.locations;
18
- const pointsOfInterest = filterOptions?.pointsOfInterest;
19
-
20
- return (
21
- <FilterLocation
22
- className={className}
23
- defaultValue={defaultValue}
24
- setDefaultValue={setDefaultValue}
25
- showMap={showMap}
26
- setLocation={setLocation}
27
- setSelectedListItem={setSelectedListItem}
28
- locations={locations}
29
- setSelectedFilters={setSelectedFilters}
30
- selectedFilters={selectedFilters}
31
- >
32
- {showMap && <FilterCommute className="hc-mt-6" />}
33
- {showMap && (
34
- <FilterPointsOfInterest
35
- className="hc-mt-4"
36
- pointsOfInterest={pointsOfInterest}
37
- setDefaultValue={setDefaultValue}
38
- defaultValue={defaultValue}
39
- />
40
- )}
41
- </FilterLocation>
42
- );
43
- };
44
-
45
- export default FilterLocationContainer;
1
+ import React from 'react';
2
+ import FilterLocation from '~/components/modules/filter/location';
3
+ import FilterCommute from '~/components/containers/filter/commute-container';
4
+ import FilterPointsOfInterest from '~/components/containers/filter/points-of-interest-container';
5
+ import { useMapList } from '~/contexts/mapListContext';
6
+
7
+ const FilterLocationContainer = ({
8
+ className,
9
+ defaultValue,
10
+ setDefaultValue,
11
+ showMap = false,
12
+ setLocation,
13
+ setSelectedListItem
14
+ }) => {
15
+ const { setSelectedFilters, selectedFilters, filterOptions } = useMapList();
16
+
17
+ const locations = filterOptions?.locations;
18
+ const pointsOfInterest = filterOptions?.pointsOfInterest;
19
+
20
+ return (
21
+ <FilterLocation
22
+ className={className}
23
+ defaultValue={defaultValue}
24
+ setDefaultValue={setDefaultValue}
25
+ showMap={showMap}
26
+ setLocation={setLocation}
27
+ setSelectedListItem={setSelectedListItem}
28
+ locations={locations}
29
+ setSelectedFilters={setSelectedFilters}
30
+ selectedFilters={selectedFilters}
31
+ >
32
+ {showMap && <FilterCommute className="hc-mt-6" />}
33
+ {showMap && (
34
+ <FilterPointsOfInterest
35
+ className="hc-mt-4"
36
+ pointsOfInterest={pointsOfInterest}
37
+ setDefaultValue={setDefaultValue}
38
+ defaultValue={defaultValue}
39
+ />
40
+ )}
41
+ </FilterLocation>
42
+ );
43
+ };
44
+
45
+ export default FilterLocationContainer;
@@ -1,33 +1,33 @@
1
- import React from 'react';
2
- import Accordion from '~/components/modules/accordions/default';
3
- import AccordionFilterItem from '~/components/modules/accordions/filterItem';
4
- import RadioItemContainer from '~/components/containers/filter/points-of-interest-radio-item-container';
5
-
6
- const FilterPointsOfInterestContainer = ({
7
- title = "Points of interest",
8
- pointsOfInterest,
9
- setDefaultValue,
10
- className,
11
- defaultValue
12
- }) => {
13
- const renderRadioItem = (item, index) => (
14
- <RadioItemContainer key={item.key + index} item={item} field={item.id} />
15
- );
16
-
17
- const body = pointsOfInterest.items.map((item, index) => renderRadioItem(item, index));
18
-
19
- return (
20
- <div className={`hc-relative ${className ?? ""}`}>
21
- <Accordion defaultValue={defaultValue} className="hc-space-y-4">
22
- <AccordionFilterItem
23
- id="points-of-interest"
24
- setDefaultValue={setDefaultValue}
25
- header={title}
26
- body={body}
27
- />
28
- </Accordion>
29
- </div>
30
- );
31
- };
32
-
33
- export default FilterPointsOfInterestContainer;
1
+ import React from 'react';
2
+ import Accordion from '~/components/modules/accordions/default';
3
+ import AccordionFilterItem from '~/components/modules/accordions/filterItem';
4
+ import RadioItemContainer from '~/components/containers/filter/points-of-interest-radio-item-container';
5
+
6
+ const FilterPointsOfInterestContainer = ({
7
+ title = "Points of interest",
8
+ pointsOfInterest,
9
+ setDefaultValue,
10
+ className,
11
+ defaultValue
12
+ }) => {
13
+ const renderRadioItem = (item, index) => (
14
+ <RadioItemContainer key={item.key + index} item={item} field={item.id} />
15
+ );
16
+
17
+ const body = pointsOfInterest.items.map((item, index) => renderRadioItem(item, index));
18
+
19
+ return (
20
+ <div className={`hc-relative ${className ?? ""}`}>
21
+ <Accordion defaultValue={defaultValue} className="hc-space-y-4">
22
+ <AccordionFilterItem
23
+ id="points-of-interest"
24
+ setDefaultValue={setDefaultValue}
25
+ header={title}
26
+ body={body}
27
+ />
28
+ </Accordion>
29
+ </div>
30
+ );
31
+ };
32
+
33
+ export default FilterPointsOfInterestContainer;
@@ -1,35 +1,35 @@
1
- import React from 'react';
2
- import RadioItem from '~/components/modules/filter/radio-item';
3
- import { useMap } from '~/contexts/mapContext';
4
- import { useTrackEvent } from '~/contexts/trackEventContext';
5
-
6
- const RadioItemContainer = ({
7
- className,
8
- item,
9
- field,
10
- ...rest
11
- }) => {
12
- const { trackEvent, eventTypes } = useTrackEvent();
13
- const { selectedPlaces, setSelectedPlaces } = useMap();
14
- const chosenPlace = item.key.toLowerCase();
15
- const isActive = selectedPlaces.includes(chosenPlace);
16
-
17
- const changeHandler = () => {
18
- if (!isActive)
19
- trackEvent(eventTypes.POI_APPLIED, { chosenPlace });
20
- setSelectedPlaces([isActive ? '' : chosenPlace]);
21
- };
22
-
23
- return (
24
- <RadioItem
25
- className={className}
26
- item={item}
27
- field={field}
28
- isActive={isActive}
29
- changeHandler={changeHandler}
30
- {...rest}
31
- />
32
- );
33
- };
34
-
35
- export default RadioItemContainer;
1
+ import React from 'react';
2
+ import RadioItem from '~/components/modules/filter/radio-item';
3
+ import { useMap } from '~/contexts/mapContext';
4
+ import { useTrackEvent } from '~/contexts/trackEventContext';
5
+
6
+ const RadioItemContainer = ({
7
+ className,
8
+ item,
9
+ field,
10
+ ...rest
11
+ }) => {
12
+ const { trackEvent, eventTypes } = useTrackEvent();
13
+ const { selectedPlaces, setSelectedPlaces } = useMap();
14
+ const chosenPlace = item.key.toLowerCase();
15
+ const isActive = selectedPlaces.includes(chosenPlace);
16
+
17
+ const changeHandler = () => {
18
+ if (!isActive)
19
+ trackEvent(eventTypes.POI_APPLIED, { chosenPlace });
20
+ setSelectedPlaces([isActive ? '' : chosenPlace]);
21
+ };
22
+
23
+ return (
24
+ <RadioItem
25
+ className={className}
26
+ item={item}
27
+ field={field}
28
+ isActive={isActive}
29
+ changeHandler={changeHandler}
30
+ {...rest}
31
+ />
32
+ );
33
+ };
34
+
35
+ export default RadioItemContainer;
@@ -1,61 +1,61 @@
1
- import React, { useRef, useState, useEffect } from 'react';
2
- import { useMapList } from '~/contexts/mapListContext';
3
- import Search from '~/components/modules/filter/search';
4
-
5
- const SearchContainer = ({
6
- inputPlaceholder = "Keywords",
7
- showSearchIcon = false,
8
- className,
9
- labelClassName
10
- }) => {
11
- const { query, setQuery, siteConfig } = useMapList();
12
- const [inputValue, setInputValue] = useState(query != null ? query : "");
13
- const debounceTimer = useRef(null);
14
-
15
- const handleInputChange = e => {
16
- setInputValue(e.target.value);
17
- if (debounceTimer.current) {
18
- clearTimeout(debounceTimer.current);
19
- }
20
- debounceTimer.current = setTimeout(() => {
21
- setQuery(e.target.value);
22
- }, 500);
23
- };
24
-
25
- const handleSubmitInput = value => {
26
- setInputValue(value);
27
- if (debounceTimer.current) {
28
- clearTimeout(debounceTimer.current);
29
- }
30
- debounceTimer.current = setTimeout(() => {
31
- setQuery(value);
32
- }, 500);
33
- };
34
-
35
- const handleReset = () => {
36
- setInputValue("");
37
- setQuery("");
38
- };
39
-
40
- useEffect(() => {
41
- if (query == null) {
42
- setInputValue("");
43
- }
44
- }, [query]);
45
-
46
- return (
47
- <Search
48
- inputPlaceholder={siteConfig.searchConfig.placeholder || inputPlaceholder}
49
- showSearchIcon={showSearchIcon}
50
- className={className}
51
- labelClassName={labelClassName}
52
- inputValue={inputValue}
53
- handleInputChange={handleInputChange}
54
- handleReset={handleReset}
55
- label={siteConfig.searchConfig.label}
56
- handleSubmitInput={handleSubmitInput}
57
- />
58
- );
59
- };
60
-
61
- export default SearchContainer;
1
+ import React, { useRef, useState, useEffect } from 'react';
2
+ import { useMapList } from '~/contexts/mapListContext';
3
+ import Search from '~/components/modules/filter/search';
4
+
5
+ const SearchContainer = ({
6
+ inputPlaceholder = "Keywords",
7
+ showSearchIcon = false,
8
+ className,
9
+ labelClassName
10
+ }) => {
11
+ const { query, setQuery, siteConfig } = useMapList();
12
+ const [inputValue, setInputValue] = useState(query != null ? query : "");
13
+ const debounceTimer = useRef(null);
14
+
15
+ const handleInputChange = e => {
16
+ setInputValue(e.target.value);
17
+ if (debounceTimer.current) {
18
+ clearTimeout(debounceTimer.current);
19
+ }
20
+ debounceTimer.current = setTimeout(() => {
21
+ setQuery(e.target.value);
22
+ }, 500);
23
+ };
24
+
25
+ const handleSubmitInput = value => {
26
+ setInputValue(value);
27
+ if (debounceTimer.current) {
28
+ clearTimeout(debounceTimer.current);
29
+ }
30
+ debounceTimer.current = setTimeout(() => {
31
+ setQuery(value);
32
+ }, 500);
33
+ };
34
+
35
+ const handleReset = () => {
36
+ setInputValue("");
37
+ setQuery("");
38
+ };
39
+
40
+ useEffect(() => {
41
+ if (query == null) {
42
+ setInputValue("");
43
+ }
44
+ }, [query]);
45
+
46
+ return (
47
+ <Search
48
+ inputPlaceholder={siteConfig.searchConfig.placeholder || inputPlaceholder}
49
+ showSearchIcon={showSearchIcon}
50
+ className={className}
51
+ labelClassName={labelClassName}
52
+ inputValue={inputValue}
53
+ handleInputChange={handleInputChange}
54
+ handleReset={handleReset}
55
+ label={siteConfig.searchConfig.label}
56
+ handleSubmitInput={handleSubmitInput}
57
+ />
58
+ );
59
+ };
60
+
61
+ export default SearchContainer;
@@ -7,7 +7,7 @@ import ListingDetails from '~/components/modules/jobListing/listing-details';
7
7
  const ListingDetailsContainer = ({ item, recruiter }) => {
8
8
  const { trackEvent, eventTypes } = useTrackEvent();
9
9
  const { travelTime } = useMap();
10
- const { siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat } = useMapList();
10
+ const { siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat, easyApplyUrl, easyApplyText } = useMapList();
11
11
 
12
12
  const {
13
13
  useDetailsPostMessage,
@@ -27,6 +27,8 @@ const ListingDetailsContainer = ({ item, recruiter }) => {
27
27
  navigateToEasyApply={navigateToEasyApply}
28
28
  Link={Link}
29
29
  linkFormat={linkFormat}
30
+ easyApplyUrl={easyApplyUrl}
31
+ easyApplyText={easyApplyText}
30
32
  useApplyDialog={useApplyDialog}
31
33
  internalApplyLink={internalApplyLink}
32
34
  companyName={companyName}