@abcagency/hc-ui-components 1.3.14 → 1.3.16

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 (166) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  2. package/dist/apis/hcApi.js +1 -1
  3. package/dist/apis/hcApi.js.map +1 -1
  4. package/dist/clientToken.js.map +1 -1
  5. package/dist/components/HireControlMap.js +15 -5
  6. package/dist/components/HireControlMap.js.map +1 -1
  7. package/dist/components/modules/accordions/MapAccordionItem.js +11 -1
  8. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  9. package/dist/components/modules/accordions/default.js.map +1 -1
  10. package/dist/components/modules/accordions/filterItem.js +2 -1
  11. package/dist/components/modules/accordions/filterItem.js.map +1 -1
  12. package/dist/components/modules/accordions/filters.js +0 -3
  13. package/dist/components/modules/accordions/filters.js.map +1 -1
  14. package/dist/components/modules/buttons/button-group-apply.js +36 -15
  15. package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
  16. package/dist/components/modules/buttons/commute-pill.js.map +1 -1
  17. package/dist/components/modules/buttons/default.js.map +1 -1
  18. package/dist/components/modules/buttons/items-pill.js.map +1 -1
  19. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
  20. package/dist/components/modules/buttons/show-all-button.js.map +1 -1
  21. package/dist/components/modules/cards/default.js.map +1 -1
  22. package/dist/components/modules/cards/filter.js.map +1 -1
  23. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
  24. package/dist/components/modules/filter/commute.js +22 -6
  25. package/dist/components/modules/filter/commute.js.map +1 -1
  26. package/dist/components/modules/filter/index.js +7 -0
  27. package/dist/components/modules/filter/index.js.map +1 -1
  28. package/dist/components/modules/filter/item.js +16 -1
  29. package/dist/components/modules/filter/item.js.map +1 -1
  30. package/dist/components/modules/filter/location.js +1 -1
  31. package/dist/components/modules/filter/location.js.map +1 -1
  32. package/dist/components/modules/filter/points-of-interest.js.map +1 -1
  33. package/dist/components/modules/filter/radio-item.js +7 -0
  34. package/dist/components/modules/filter/radio-item.js.map +1 -1
  35. package/dist/components/modules/filter/search.js.map +1 -1
  36. package/dist/components/modules/filter/sort.js.map +1 -1
  37. package/dist/components/modules/grid.js.map +1 -1
  38. package/dist/components/modules/icon.js.map +1 -1
  39. package/dist/components/modules/jobListing/listing-details.js +6 -0
  40. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  41. package/dist/components/modules/maps/info-window-card.js.map +1 -1
  42. package/dist/components/modules/maps/info-window-content.js +20 -0
  43. package/dist/components/modules/maps/info-window-content.js.map +1 -1
  44. package/dist/components/modules/maps/list/field-mapper.js.map +1 -1
  45. package/dist/components/modules/maps/list/header-item.js.map +1 -1
  46. package/dist/components/modules/maps/list/header.js.map +1 -1
  47. package/dist/components/modules/maps/list/index.js +21 -12
  48. package/dist/components/modules/maps/list/index.js.map +1 -1
  49. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -1
  50. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -1
  51. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -1
  52. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -1
  53. package/dist/components/modules/maps/list/list-item/index.js +12 -2
  54. package/dist/components/modules/maps/list/list-item/index.js.map +1 -1
  55. package/dist/components/modules/maps/map-list.js.map +1 -1
  56. package/dist/components/modules/maps/map-marker.js +10 -0
  57. package/dist/components/modules/maps/map-marker.js.map +1 -1
  58. package/dist/components/modules/maps/map.js.map +1 -1
  59. package/dist/components/modules/maps/place-marker.js.map +1 -1
  60. package/dist/components/modules/maps/tabs.js.map +1 -1
  61. package/dist/constants/eventTypes.js +16 -0
  62. package/dist/constants/eventTypes.js.map +1 -0
  63. package/dist/constants/placeTypes.js.map +1 -1
  64. package/dist/contexts/mapContext.js +9 -27
  65. package/dist/contexts/mapContext.js.map +1 -1
  66. package/dist/contexts/mapListContext.js +57 -38
  67. package/dist/contexts/mapListContext.js.map +1 -1
  68. package/dist/contexts/placesContext.js.map +1 -1
  69. package/dist/contexts/trackEventContext.js +20 -0
  70. package/dist/contexts/trackEventContext.js.map +1 -0
  71. package/dist/hooks/useList.js +1 -13
  72. package/dist/hooks/useList.js.map +1 -1
  73. package/dist/services/apis/hcApi.js +1 -1
  74. package/dist/services/apis/hcApi.js.map +1 -1
  75. package/dist/services/clientToken.js.map +1 -1
  76. package/dist/services/configService.js.map +1 -1
  77. package/dist/services/googlePlacesNearbyService.js.map +1 -1
  78. package/dist/services/listingAggregatorService.js +43 -16
  79. package/dist/services/listingAggregatorService.js.map +1 -1
  80. package/dist/services/listingEntityService.js.map +1 -1
  81. package/dist/services/listingService.js.map +1 -1
  82. package/dist/services/recruiterService.js.map +1 -1
  83. package/dist/util/filterUtil.js.map +1 -1
  84. package/dist/util/loading.js.map +1 -1
  85. package/dist/util/localStorageUtil.js.map +1 -1
  86. package/dist/util/mapIconUtil.js.map +1 -1
  87. package/dist/util/mapUtil.js.map +1 -1
  88. package/dist/util/sortUtil.js.map +1 -1
  89. package/dist/util/stringUtils.js.map +1 -1
  90. package/jsconfig.json +7 -7
  91. package/package.json +60 -60
  92. package/postcss.config.js +13 -13
  93. package/preset.default.js +15 -15
  94. package/rollup.config.mjs +88 -87
  95. package/src/apis/hcApi.js +93 -93
  96. package/src/clientToken.js +9 -9
  97. package/src/components/HireControlMap.js +129 -124
  98. package/src/components/modules/accordions/MapAccordionItem.js +74 -72
  99. package/src/components/modules/accordions/default.js +171 -171
  100. package/src/components/modules/accordions/filterItem.js +55 -53
  101. package/src/components/modules/accordions/filters.js +47 -47
  102. package/src/components/modules/buttons/button-group-apply.js +123 -116
  103. package/src/components/modules/buttons/commute-pill.js +22 -22
  104. package/src/components/modules/buttons/default.js +194 -194
  105. package/src/components/modules/buttons/items-pill.js +35 -35
  106. package/src/components/modules/buttons/pill-wrapper.js +27 -27
  107. package/src/components/modules/buttons/show-all-button.js +20 -20
  108. package/src/components/modules/cards/default.js +167 -167
  109. package/src/components/modules/cards/filter.js +56 -56
  110. package/src/components/modules/dialogs/apply-dialog.js +48 -48
  111. package/src/components/modules/filter/commute.js +154 -149
  112. package/src/components/modules/filter/index.js +89 -87
  113. package/src/components/modules/filter/item.js +87 -76
  114. package/src/components/modules/filter/location.js +71 -71
  115. package/src/components/modules/filter/points-of-interest.js +44 -44
  116. package/src/components/modules/filter/radio-item.js +57 -53
  117. package/src/components/modules/filter/search.js +92 -92
  118. package/src/components/modules/filter/sort.js +83 -83
  119. package/src/components/modules/grid.js +54 -54
  120. package/src/components/modules/icon.js +33 -33
  121. package/src/components/modules/jobListing/listing-details.js +99 -95
  122. package/src/components/modules/maps/info-window-card.js +17 -17
  123. package/src/components/modules/maps/info-window-content.js +81 -74
  124. package/src/components/modules/maps/list/field-mapper.js +112 -112
  125. package/src/components/modules/maps/list/header-item.js +91 -91
  126. package/src/components/modules/maps/list/header.js +47 -47
  127. package/src/components/modules/maps/list/index.js +112 -107
  128. package/src/components/modules/maps/list/item-expand-card/index.js +22 -22
  129. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -50
  130. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -68
  131. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  132. package/src/components/modules/maps/list/list-item/index.js +135 -133
  133. package/src/components/modules/maps/map-list.js +74 -74
  134. package/src/components/modules/maps/map-marker.js +88 -86
  135. package/src/components/modules/maps/map.js +230 -230
  136. package/src/components/modules/maps/place-marker.js +41 -41
  137. package/src/components/modules/maps/tabs.js +81 -81
  138. package/src/constants/eventTypes.js +13 -0
  139. package/src/constants/placeTypes.js +8 -8
  140. package/src/contexts/mapContext.js +101 -115
  141. package/src/contexts/mapListContext.js +242 -222
  142. package/src/contexts/placesContext.js +102 -102
  143. package/src/contexts/trackEventContext.js +14 -0
  144. package/src/hooks/useList.js +89 -100
  145. package/src/index.js +3 -3
  146. package/src/services/configService.js +16 -16
  147. package/src/services/googlePlacesNearbyService.js +33 -33
  148. package/src/services/listingAggregatorService.js +50 -45
  149. package/src/services/listingEntityService.js +15 -15
  150. package/src/services/listingService.js +26 -26
  151. package/src/services/recruiterService.js +17 -17
  152. package/src/styles/index.css +23 -23
  153. package/src/util/arrayUtil.js +3 -3
  154. package/src/util/fieldMapper.js +22 -22
  155. package/src/util/filterUtil.js +195 -195
  156. package/src/util/loading.js +17 -17
  157. package/src/util/localStorageUtil.js +26 -26
  158. package/src/util/mapIconUtil.js +180 -180
  159. package/src/util/mapUtil.js +91 -91
  160. package/src/util/sortUtil.js +32 -32
  161. package/src/util/stringUtils.js +6 -6
  162. package/src/util/urlFilterUtil.js +90 -90
  163. package/tailwind.config.js +126 -126
  164. package/.editorconfig +0 -12
  165. package/.eslintrc +0 -105
  166. package/.prettierignore +0 -3
@@ -1,76 +1,87 @@
1
- import React, { useState, useEffect } from 'react';
2
-
3
- const FilterItem = ({
4
- className,
5
- item,
6
- type = 'checkbox',
7
- itemKey = null,
8
- hasCount = true,
9
- field,
10
- selectedFilters,
11
- setSelectedFilters,
12
- ...rest
13
- }) => {
14
- const itemName = item.name ? item.name : item;
15
- itemKey = itemKey === null ? itemName : itemKey;
16
- var isActive =
17
- selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];
18
-
19
- const changeHandler = () => {
20
- setSelectedFilters(prevFilters => {
21
- const updatedFilters = { ...prevFilters };
22
- if (!isActive) {
23
- if (!updatedFilters[field]) {
24
- updatedFilters[field] = {};
25
- }
26
- updatedFilters[field][itemKey] = true;
27
- return updatedFilters;
28
- }
29
- delete updatedFilters[field][itemKey];
30
- if (Object.keys(updatedFilters[field]).length === 0) {
31
- delete updatedFilters[field];
32
- }
33
- return updatedFilters;
34
- });
35
- };
36
- const [activeItem, setActiveItem] = useState(isActive);
37
-
38
- useEffect(() => {
39
- if (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;
40
- else if (activeItem === true) {
41
- setActiveItem(false);
42
- }
43
- }, [selectedFilters]);
44
-
45
- return (
46
- <label
47
- className={`
48
- hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5
49
- ${className ?? ""}
50
- `}
51
- {...rest}
52
- >
53
- <input
54
- id={itemKey}
55
- name={field}
56
- disabled={item.count == 0}
57
- value={itemName}
58
- type={type}
59
- className={`hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-sm`}
60
- checked={activeItem}
61
- onChange={() => {
62
- setActiveItem(!activeItem);
63
- changeHandler();
64
- }}
65
- />
66
- <span className="font-medium">{itemName}</span>
67
- {hasCount && (
68
- <span className="hc-inline-block hc-mt-1 hc-ml-auto hc-text-xs hc-leading-none hc-text-primary">
69
- ({item.count})
70
- </span>
71
- )}
72
- </label>
73
- );
74
- };
75
-
76
- export default FilterItem;
1
+ import React, { useState, useEffect } from 'react';
2
+
3
+ import { useTrackEvent } from '~/contexts/trackEventContext';
4
+
5
+ const FilterItem = ({
6
+ className,
7
+ item,
8
+ type = 'checkbox',
9
+ itemKey = null,
10
+ hasCount = true,
11
+ field,
12
+ selectedFilters,
13
+ setSelectedFilters,
14
+ ...rest
15
+ }) => {
16
+ const { trackEvent, eventTypes } = useTrackEvent();
17
+ const itemName = item.name ? item.name : item;
18
+ itemKey = itemKey === null ? itemName : itemKey;
19
+ var isActive =
20
+ selectedFilters != undefined && !!selectedFilters[field]?.[itemKey];
21
+
22
+ useEffect(() => {
23
+ if(!selectedFilters)
24
+ return;
25
+ setActiveItem(!!selectedFilters[field]?.[itemKey]);
26
+ },[selectedFilters, field, itemKey]);
27
+ const changeHandler = () => {
28
+ if (!isActive) {
29
+ trackEvent(eventTypes.FILTER_APPLIED, { filterType: field, filterChecked: itemKey });
30
+ }
31
+ setSelectedFilters(prevFilters => {
32
+ const updatedFilters = { ...prevFilters };
33
+ if (!isActive) {
34
+ if (!updatedFilters[field]) {
35
+ updatedFilters[field] = {};
36
+ }
37
+ updatedFilters[field][itemKey] = true;
38
+ return updatedFilters;
39
+ }
40
+ delete updatedFilters[field][itemKey];
41
+ if (Object.keys(updatedFilters[field]).length === 0) {
42
+ delete updatedFilters[field];
43
+ }
44
+ return updatedFilters;
45
+ });
46
+ };
47
+ const [activeItem, setActiveItem] = useState(isActive);
48
+
49
+ useEffect(() => {
50
+ if (selectedFilters && selectedFilters[field] && Object.keys(selectedFilters[field])?.length > 0) return;
51
+ else if (activeItem === true) {
52
+ setActiveItem(false);
53
+ }
54
+ }, [selectedFilters]);
55
+
56
+ return (
57
+ <label
58
+ className={`
59
+ hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5
60
+ ${className ?? ""}
61
+ `}
62
+ {...rest}
63
+ >
64
+ <input
65
+ id={itemKey}
66
+ name={field}
67
+ disabled={item.count == 0}
68
+ value={itemName}
69
+ type={type}
70
+ className={`hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-sm`}
71
+ checked={activeItem}
72
+ onChange={() => {
73
+ setActiveItem(!activeItem);
74
+ changeHandler();
75
+ }}
76
+ />
77
+ <span className="font-medium">{itemName}</span>
78
+ {hasCount && (
79
+ <span className="hc-inline-block hc-mt-1 hc-ml-auto hc-text-xs hc-leading-none hc-text-primary">
80
+ ({item.count})
81
+ </span>
82
+ )}
83
+ </label>
84
+ );
85
+ };
86
+
87
+ export default FilterItem;
@@ -1,71 +1,71 @@
1
- import React from 'react';
2
-
3
- import Accordion from '~/components/modules/accordions/default';
4
- import FilterCommute from '~/components/modules/filter/commute';
5
- import FilterPointsOfInterest from '~/components/modules/filter/points-of-interest';
6
- import FilterCard from '~/components/modules/cards/filter';
7
- import AccordionFilterItem from '~/components/modules/accordions/filterItem';
8
-
9
- import Loading from '~/util/loading';
10
-
11
- import { useMapList } from '~/contexts/mapListContext';
12
-
13
- const FilterLocation = ({
14
- className,
15
- defaultValue,
16
- setDefaultValue,
17
- showMap = false,
18
- setLocation,
19
- setSelectedListItem
20
- }) => {
21
- const { setSelectedFilters, selectedFilters, filterOptions } = useMapList();
22
- // const activeItemsCount = selectedFilters != null && selectedFilters["cityState"]
23
- // ? Object.keys(selectedFilters["cityState"]).length
24
- // : 0;
25
-
26
- // const handleClearFilters = () => {
27
- // setSelectedFilters(prevFilters => {
28
- // const updatedFilters = { ...prevFilters };
29
- // delete updatedFilters["cityState"];
30
- // return updatedFilters;
31
- // });
32
- // };
33
-
34
- var locations = filterOptions?.locations;
35
- var pointsOfInterest = filterOptions?.pointsOfInterest;
36
- return (
37
- <FilterCard className={className ?? ""}>
38
- <FilterCard.Title icon="fluent:hc-location-16-filled">
39
- <span>
40
- <span className="hc-hidden lg:hc-inline">Job</span> location
41
- </span>
42
- </FilterCard.Title>
43
- {!locations && (
44
- <Loading />
45
- )}
46
- {locations && <Accordion defaultValue={defaultValue} className="hc-space-y-4">
47
- {locations?.map(filter => (
48
- <AccordionFilterItem
49
- key={filter.id}
50
- filter={filter}
51
- setDefaultValue={setDefaultValue}
52
- selectedFilters={selectedFilters}
53
- setSelectedFilters={prevFilters => { setSelectedFilters(prevFilters); setLocation(null); setSelectedListItem(null); }}
54
- />
55
- ))}
56
- {showMap && <FilterCommute className="hc-mt-6" />}
57
- {showMap && (
58
- <FilterPointsOfInterest
59
- className="hc-mt-4"
60
- pointsOfInterest={pointsOfInterest}
61
- setDefaultValue={setDefaultValue}
62
- defaultValue={defaultValue}
63
- />
64
- )}
65
- </Accordion>
66
- }
67
- </FilterCard>
68
- );
69
- };
70
-
71
- export default FilterLocation;
1
+ import React, { useEffect } from 'react';
2
+
3
+ import Accordion from '~/components/modules/accordions/default';
4
+ import FilterCommute from '~/components/modules/filter/commute';
5
+ import FilterPointsOfInterest from '~/components/modules/filter/points-of-interest';
6
+ import FilterCard from '~/components/modules/cards/filter';
7
+ import AccordionFilterItem from '~/components/modules/accordions/filterItem';
8
+
9
+ import Loading from '~/util/loading';
10
+
11
+ import { useMapList } from '~/contexts/mapListContext';
12
+
13
+ const FilterLocation = ({
14
+ className,
15
+ defaultValue,
16
+ setDefaultValue,
17
+ showMap = false,
18
+ setLocation,
19
+ setSelectedListItem
20
+ }) => {
21
+ const { setSelectedFilters, selectedFilters, filterOptions } = useMapList();
22
+ // const activeItemsCount = selectedFilters != null && selectedFilters["cityState"]
23
+ // ? Object.keys(selectedFilters["cityState"]).length
24
+ // : 0;
25
+
26
+ // const handleClearFilters = () => {
27
+ // setSelectedFilters(prevFilters => {
28
+ // const updatedFilters = { ...prevFilters };
29
+ // delete updatedFilters["cityState"];
30
+ // return updatedFilters;
31
+ // });
32
+ // };
33
+
34
+ var locations = filterOptions?.locations;
35
+ var pointsOfInterest = filterOptions?.pointsOfInterest;
36
+ return (
37
+ <FilterCard className={className ?? ""}>
38
+ <FilterCard.Title icon="fluent:location-16-filled">
39
+ <span>
40
+ <span className="hc-hidden lg:hc-inline">Job</span> location
41
+ </span>
42
+ </FilterCard.Title>
43
+ {!locations && (
44
+ <Loading />
45
+ )}
46
+ {locations && <Accordion defaultValue={defaultValue} className="hc-space-y-4">
47
+ {locations?.map(filter => (
48
+ <AccordionFilterItem
49
+ key={filter.id}
50
+ filter={filter}
51
+ setDefaultValue={setDefaultValue}
52
+ selectedFilters={selectedFilters}
53
+ setSelectedFilters={prevFilters => { setSelectedFilters(prevFilters); setLocation(null); setSelectedListItem(null); }}
54
+ />
55
+ ))}
56
+ {showMap && <FilterCommute className="hc-mt-6" />}
57
+ {showMap && (
58
+ <FilterPointsOfInterest
59
+ className="hc-mt-4"
60
+ pointsOfInterest={pointsOfInterest}
61
+ setDefaultValue={setDefaultValue}
62
+ defaultValue={defaultValue}
63
+ />
64
+ )}
65
+ </Accordion>
66
+ }
67
+ </FilterCard>
68
+ );
69
+ };
70
+
71
+ export default FilterLocation;
@@ -1,44 +1,44 @@
1
- import React from 'react';
2
-
3
- import Accordion from '~/components/modules/accordions/default';
4
- import RadioItem from '~/components/modules/filter/radio-item';
5
-
6
- const FilterPointsOfInterest = ({
7
- title = "Points of interest",
8
- pointsOfInterest,
9
- setDefaultValue,
10
- className,
11
- defaultValue
12
- }) => {
13
- return (
14
- <div
15
- className={`
16
- hc-relative
17
- ${className ?? ""}
18
- `}
19
- >
20
- <Accordion defaultValue={defaultValue} className="hc-space-y-4">
21
- <Accordion.Item id="points-of-interest">
22
- <Accordion.Trigger.HasHeader
23
- onClick={() => setDefaultValue("points-of-interest")}
24
- className="hc-stretched-link hc-text-left"
25
- iconClassName="hc-order-last"
26
- headerClassName="hc-relative hc-py-2 hc-rounded hc-border hc-border-uiAccent/20 hc-bg-white hc-text-sm hc-transition data-[state=open]:hc-border-b-transparent data-[state=open]:hc-rounded-b-none"
27
- >
28
- {title}
29
- </Accordion.Trigger.HasHeader>
30
- <Accordion.Content bodyClassName="hc-px-2 hc-py-1 hc-bg-white hc-rounded-b hc-border hc-border-uiAccent/20 hc-border-t-0 hc-max-h-[20vh] md:hc-max-h-[25vh] ohc-verflow-auto">
31
- {pointsOfInterest.items.map((item, index) => {
32
- return <RadioItem
33
- key={item.key + index}
34
- item={item}
35
- field={item.id} />;
36
- })}
37
- </Accordion.Content>
38
- </Accordion.Item>
39
- </Accordion>
40
- </div>
41
- );
42
- };
43
-
44
- export default FilterPointsOfInterest;
1
+ import React from 'react';
2
+
3
+ import Accordion from '~/components/modules/accordions/default';
4
+ import RadioItem from '~/components/modules/filter/radio-item';
5
+
6
+ const FilterPointsOfInterest = ({
7
+ title = "Points of interest",
8
+ pointsOfInterest,
9
+ setDefaultValue,
10
+ className,
11
+ defaultValue
12
+ }) => {
13
+ return (
14
+ <div
15
+ className={`
16
+ hc-relative
17
+ ${className ?? ""}
18
+ `}
19
+ >
20
+ <Accordion defaultValue={defaultValue} className="hc-space-y-4">
21
+ <Accordion.Item id="points-of-interest">
22
+ <Accordion.Trigger.HasHeader
23
+ onClick={() => setDefaultValue("points-of-interest")}
24
+ className="hc-stretched-link hc-text-left"
25
+ iconClassName="hc-order-last"
26
+ headerClassName="hc-relative hc-py-2 hc-rounded hc-border hc-border-uiAccent/20 hc-bg-white hc-text-sm hc-transition data-[state=open]:hc-border-b-transparent data-[state=open]:hc-rounded-b-none"
27
+ >
28
+ {title}
29
+ </Accordion.Trigger.HasHeader>
30
+ <Accordion.Content bodyClassName="hc-px-2 hc-py-1 hc-bg-white hc-rounded-b hc-border hc-border-uiAccent/20 hc-border-t-0 hc-max-h-[20vh] md:hc-max-h-[25vh] ohc-verflow-auto">
31
+ {pointsOfInterest.items.map((item, index) => {
32
+ return <RadioItem
33
+ key={item.key + index}
34
+ item={item}
35
+ field={item.id} />;
36
+ })}
37
+ </Accordion.Content>
38
+ </Accordion.Item>
39
+ </Accordion>
40
+ </div>
41
+ );
42
+ };
43
+
44
+ export default FilterPointsOfInterest;
@@ -1,53 +1,57 @@
1
- import React from 'react';
2
-
3
- import Icon from '~/components/modules/icon';
4
-
5
- import { useMap } from "~/contexts/mapContext";
6
-
7
- const RadioItem = ({
8
- className,
9
- item,
10
- field,
11
- ...rest
12
- }) => {
13
- const { selectedPlaces, setSelectedPlaces } = useMap();
14
- const chosenPlace = item.key.toLowerCase();
15
- let isActive = selectedPlaces.includes(chosenPlace);
16
-
17
- const changeHandler = () => {
18
- setSelectedPlaces([isActive ? '' : chosenPlace]);
19
- };
20
-
21
- return (
22
- <label key={item.key}
23
- className={`
24
- hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5
25
- ${item.count === 0 ? 'hc-text-uiDisabled hc-cursor-not-allowed' : 'hover:hc-bg-uiAccent/5'}
26
- ${className ?? ""}
27
- `}
28
- {...rest}
29
- >
30
- <input
31
- key={item.key}
32
- id={item.Key}
33
- name={field}
34
- value={item.key}
35
- type={"radio"}
36
- className={`hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-full`}
37
- checked={isActive}
38
- onClick={() => {
39
- changeHandler();
40
- }}
41
- onChange={() => { }}
42
- />
43
- <span className="hc-font-medium">{item.key}</span>
44
- {isActive &&
45
- <div className="hc-w-full hc-unselect-div">
46
- <Icon className="hc-float-right" icon="mdi:times"></Icon>
47
- </div>
48
- }
49
- </label>
50
- );
51
- };
52
-
53
- export default RadioItem;
1
+ import React from 'react';
2
+
3
+ import Icon from '~/components/modules/icon';
4
+
5
+ import { useMap } from "~/contexts/mapContext";
6
+ import { useTrackEvent } from '~/contexts/trackEventContext';
7
+
8
+ const RadioItem = ({
9
+ className,
10
+ item,
11
+ field,
12
+ ...rest
13
+ }) => {
14
+ const { trackEvent, eventTypes } = useTrackEvent();
15
+ const { selectedPlaces, setSelectedPlaces } = useMap();
16
+ const chosenPlace = item.key.toLowerCase();
17
+ let isActive = selectedPlaces.includes(chosenPlace);
18
+
19
+ const changeHandler = () => {
20
+ if(!isActive)
21
+ trackEvent(eventTypes.POI_APPLIED, { chosenPlace });
22
+ setSelectedPlaces([isActive ? '' : chosenPlace]);
23
+ };
24
+
25
+ return (
26
+ <label key={item.key}
27
+ className={`
28
+ hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5
29
+ ${item.count === 0 ? 'hc-text-uiDisabled hc-cursor-not-allowed' : 'hover:hc-bg-uiAccent/5'}
30
+ ${className ?? ""}
31
+ `}
32
+ {...rest}
33
+ >
34
+ <input
35
+ key={item.key}
36
+ id={item.Key}
37
+ name={field}
38
+ value={item.key}
39
+ type={"radio"}
40
+ className={`hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-full`}
41
+ checked={isActive}
42
+ onClick={() => {
43
+ changeHandler();
44
+ }}
45
+ onChange={() => { }}
46
+ />
47
+ <span className="hc-font-medium">{item.key}</span>
48
+ {isActive &&
49
+ <div className="hc-w-full hc-unselect-div">
50
+ <Icon className="hc-float-right" icon="mdi:times"></Icon>
51
+ </div>
52
+ }
53
+ </label>
54
+ );
55
+ };
56
+
57
+ export default RadioItem;