@abcagency/hc-ui-components 1.1.1 → 1.2.1

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 (234) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintrc +144 -0
  3. package/.prettierignore +3 -0
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js +516 -0
  5. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  6. package/dist/apis/hcApi.js +189 -0
  7. package/dist/apis/hcApi.js.map +1 -0
  8. package/dist/clientToken.js +10 -0
  9. package/dist/clientToken.js.map +1 -0
  10. package/dist/components/HireControlMap.js +130 -0
  11. package/dist/components/HireControlMap.js.map +1 -0
  12. package/dist/components/modules/accordions/MapAccordionItem.js +76 -0
  13. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -0
  14. package/dist/components/modules/accordions/default.js +108 -0
  15. package/dist/components/modules/accordions/default.js.map +1 -0
  16. package/dist/components/modules/accordions/filterItem.js +50 -0
  17. package/dist/components/modules/accordions/filterItem.js.map +1 -0
  18. package/dist/components/modules/accordions/filters.js +46 -0
  19. package/dist/components/modules/accordions/filters.js.map +1 -0
  20. package/dist/components/modules/buttons/button-group-apply.js +84 -0
  21. package/dist/components/modules/buttons/button-group-apply.js.map +1 -0
  22. package/dist/components/modules/buttons/commute-pill.js +18 -0
  23. package/dist/components/modules/buttons/commute-pill.js.map +1 -0
  24. package/dist/components/modules/buttons/default.js +145 -0
  25. package/dist/components/modules/buttons/default.js.map +1 -0
  26. package/dist/components/modules/buttons/items-pill.js +23 -0
  27. package/dist/components/modules/buttons/items-pill.js.map +1 -0
  28. package/dist/components/modules/buttons/pill-wrapper.js +20 -0
  29. package/dist/components/modules/buttons/pill-wrapper.js.map +1 -0
  30. package/dist/components/modules/buttons/show-all-button.js +39 -0
  31. package/dist/components/modules/buttons/show-all-button.js.map +1 -0
  32. package/dist/components/modules/cards/default.js +102 -0
  33. package/dist/components/modules/cards/default.js.map +1 -0
  34. package/dist/components/modules/cards/filter.js +38 -0
  35. package/dist/components/modules/cards/filter.js.map +1 -0
  36. package/dist/components/modules/dialogs/apply-dialog.js +46 -0
  37. package/dist/components/modules/dialogs/apply-dialog.js.map +1 -0
  38. package/dist/components/modules/filter/commute.js +184 -0
  39. package/dist/components/modules/filter/commute.js.map +1 -0
  40. package/dist/components/modules/filter/index.js +79 -0
  41. package/dist/components/modules/filter/index.js.map +1 -0
  42. package/dist/components/modules/filter/item.js +71 -0
  43. package/dist/components/modules/filter/item.js.map +1 -0
  44. package/dist/components/modules/filter/location.js +68 -0
  45. package/dist/components/modules/filter/location.js.map +1 -0
  46. package/dist/components/modules/filter/points-of-interest.js +38 -0
  47. package/dist/components/modules/filter/points-of-interest.js.map +1 -0
  48. package/dist/components/modules/filter/radio-item.js +46 -0
  49. package/dist/components/modules/filter/radio-item.js.map +1 -0
  50. package/dist/components/modules/filter/search.js +83 -0
  51. package/dist/components/modules/filter/search.js.map +1 -0
  52. package/dist/components/modules/filter/sort.js +93 -0
  53. package/dist/components/modules/filter/sort.js.map +1 -0
  54. package/dist/components/modules/grid.js +39 -0
  55. package/dist/components/modules/grid.js.map +1 -0
  56. package/dist/components/modules/icon.js +23 -0
  57. package/dist/components/modules/icon.js.map +1 -0
  58. package/dist/components/modules/jobListing/listing-details.js +69 -0
  59. package/dist/components/modules/jobListing/listing-details.js.map +1 -0
  60. package/dist/components/modules/maps/info-window-card.js +14 -0
  61. package/dist/components/modules/maps/info-window-card.js.map +1 -0
  62. package/dist/components/modules/maps/info-window-content.js +39 -0
  63. package/dist/components/modules/maps/info-window-content.js.map +1 -0
  64. package/dist/components/modules/maps/list/field-mapper.js +88 -0
  65. package/dist/components/modules/maps/list/field-mapper.js.map +1 -0
  66. package/dist/components/modules/maps/list/header-item.js +59 -0
  67. package/dist/components/modules/maps/list/header-item.js.map +1 -0
  68. package/dist/components/modules/maps/list/header.js +37 -0
  69. package/dist/components/modules/maps/list/header.js.map +1 -0
  70. package/dist/components/modules/maps/list/index.js +93 -0
  71. package/dist/components/modules/maps/list/index.js.map +1 -0
  72. package/dist/components/modules/maps/list/item-expand-card/index.js +16 -0
  73. package/dist/components/modules/maps/list/item-expand-card/index.js.map +1 -0
  74. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +38 -0
  75. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +1 -0
  76. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js +40 -0
  77. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +1 -0
  78. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js +20 -0
  79. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +1 -0
  80. package/dist/components/modules/maps/list/list-item/index.js +98 -0
  81. package/dist/components/modules/maps/list/list-item/index.js.map +1 -0
  82. package/dist/components/modules/maps/map-list.js +57 -0
  83. package/dist/components/modules/maps/map-list.js.map +1 -0
  84. package/dist/components/modules/maps/map-marker.js +85 -0
  85. package/dist/components/modules/maps/map-marker.js.map +1 -0
  86. package/dist/components/modules/maps/map.js +201 -0
  87. package/dist/components/modules/maps/map.js.map +1 -0
  88. package/dist/components/modules/maps/place-marker.js +37 -0
  89. package/dist/components/modules/maps/place-marker.js.map +1 -0
  90. package/dist/components/modules/maps/tabs.js +84 -0
  91. package/dist/components/modules/maps/tabs.js.map +1 -0
  92. package/dist/constants/placeTypes.js +11 -0
  93. package/dist/constants/placeTypes.js.map +1 -0
  94. package/dist/contexts/mapContext.js +133 -0
  95. package/dist/contexts/mapContext.js.map +1 -0
  96. package/dist/contexts/mapListContext.js +278 -0
  97. package/dist/contexts/mapListContext.js.map +1 -0
  98. package/dist/contexts/placesContext.js +152 -0
  99. package/dist/contexts/placesContext.js.map +1 -0
  100. package/dist/hooks/useList.js +119 -0
  101. package/dist/hooks/useList.js.map +1 -0
  102. package/dist/index.js +2 -4536
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/_virtual/_rollupPluginBabelHelpers.js +372 -0
  105. package/dist/services/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  106. package/dist/services/apis/hcApi.js +189 -0
  107. package/dist/services/apis/hcApi.js.map +1 -0
  108. package/dist/services/clientToken.js +7 -0
  109. package/dist/services/clientToken.js.map +1 -0
  110. package/dist/services/configService.js +33 -0
  111. package/dist/services/configService.js.map +1 -0
  112. package/dist/services/googlePlacesNearbyService.js +61 -0
  113. package/dist/services/googlePlacesNearbyService.js.map +1 -0
  114. package/dist/services/listingAggregatorService.js +56 -0
  115. package/dist/services/listingAggregatorService.js.map +1 -0
  116. package/dist/services/listingEntityService.js +36 -0
  117. package/dist/services/listingEntityService.js.map +1 -0
  118. package/dist/services/listingService.js +60 -112
  119. package/dist/services/listingService.js.map +1 -0
  120. package/dist/services/recruiterService.js +36 -0
  121. package/dist/services/recruiterService.js.map +1 -0
  122. package/dist/services/styles/index.css +3 -0
  123. package/dist/styles/index.css +3 -0
  124. package/dist/util/filterUtil.js +213 -0
  125. package/dist/util/filterUtil.js.map +1 -0
  126. package/dist/util/loading.js +16 -0
  127. package/dist/util/loading.js.map +1 -0
  128. package/dist/util/localStorageUtil.js +32 -0
  129. package/dist/util/localStorageUtil.js.map +1 -0
  130. package/dist/util/mapIconUtil.js +73 -0
  131. package/dist/util/mapIconUtil.js.map +1 -0
  132. package/dist/util/mapUtil.js +76 -0
  133. package/dist/util/mapUtil.js.map +1 -0
  134. package/dist/util/sortUtil.js +33 -0
  135. package/dist/util/sortUtil.js.map +1 -0
  136. package/dist/util/stringUtils.js +9 -0
  137. package/dist/util/stringUtils.js.map +1 -0
  138. package/jsconfig.json +7 -0
  139. package/package.json +51 -38
  140. package/postcss.config.js +13 -15
  141. package/{src/tailwind/preset.default.js → preset.default.js} +15 -15
  142. package/rollup.config.mjs +87 -0
  143. package/src/apis/hcApi.js +93 -87
  144. package/src/clientToken.js +9 -9
  145. package/src/components/HireControlMap.js +121 -0
  146. package/src/components/modules/accordions/MapAccordionItem.js +72 -69
  147. package/src/components/modules/accordions/default.js +171 -173
  148. package/src/components/modules/accordions/filterItem.js +53 -53
  149. package/src/components/modules/accordions/filters.js +47 -44
  150. package/src/components/modules/buttons/button-group-apply.js +113 -85
  151. package/src/components/modules/buttons/commute-pill.js +22 -21
  152. package/src/components/modules/buttons/default.js +196 -196
  153. package/src/components/modules/buttons/items-pill.js +32 -31
  154. package/src/components/modules/buttons/pill-wrapper.js +27 -26
  155. package/src/components/modules/buttons/show-all-button.js +20 -20
  156. package/src/components/modules/cards/default.js +167 -168
  157. package/src/components/modules/cards/filter.js +56 -55
  158. package/src/components/modules/dialogs/apply-dialog.js +48 -47
  159. package/src/components/modules/filter/commute.js +148 -151
  160. package/src/components/modules/filter/index.js +87 -86
  161. package/src/components/modules/filter/item.js +76 -77
  162. package/src/components/modules/filter/location.js +71 -69
  163. package/src/components/modules/filter/points-of-interest.js +44 -43
  164. package/src/components/modules/filter/radio-item.js +53 -51
  165. package/src/components/modules/filter/search.js +92 -91
  166. package/src/components/modules/filter/sort.js +83 -83
  167. package/src/components/modules/grid.js +55 -56
  168. package/src/components/modules/icon.js +33 -33
  169. package/src/components/modules/jobListing/listing-details.js +94 -88
  170. package/src/components/modules/maps/info-window-card.js +17 -17
  171. package/src/components/modules/maps/info-window-content.js +58 -60
  172. package/src/components/modules/maps/list/field-mapper.js +112 -111
  173. package/src/components/modules/maps/list/header-item.js +91 -90
  174. package/src/components/modules/maps/list/header.js +47 -46
  175. package/src/components/modules/maps/list/index.js +107 -104
  176. package/src/components/modules/maps/list/item-expand-card/index.js +22 -21
  177. package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +50 -48
  178. package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +68 -67
  179. package/src/components/modules/maps/list/item-expand-card/recruiter-headshot.js +22 -22
  180. package/src/components/modules/maps/list/list-item/index.js +134 -133
  181. package/src/components/modules/maps/map-list.js +74 -73
  182. package/src/components/modules/maps/map-marker.js +86 -84
  183. package/src/components/modules/maps/map.js +229 -226
  184. package/src/components/modules/maps/place-marker.js +1 -1
  185. package/src/components/modules/maps/tabs.js +81 -79
  186. package/src/constants/placeTypes.js +8 -8
  187. package/src/contexts/mapContext.js +20 -19
  188. package/src/contexts/mapListContext.js +20 -15
  189. package/src/contexts/placesContext.js +4 -0
  190. package/src/hooks/useList.js +12 -10
  191. package/src/index.js +3 -103
  192. package/src/services/configService.js +16 -16
  193. package/src/services/googlePlacesNearbyService.js +33 -33
  194. package/src/services/listingAggregatorService.js +5 -4
  195. package/src/services/listingEntityService.js +2 -1
  196. package/src/services/listingService.js +27 -28
  197. package/src/services/recruiterService.js +17 -17
  198. package/src/styles/{globals.css → index.css} +23 -23
  199. package/src/util/arrayUtil.js +3 -3
  200. package/src/util/fieldMapper.js +22 -19
  201. package/src/util/filterUtil.js +19 -19
  202. package/src/util/loading.js +17 -17
  203. package/src/util/localStorageUtil.js +26 -26
  204. package/src/util/mapIconUtil.js +3 -3
  205. package/src/util/sortUtil.js +32 -32
  206. package/src/util/stringUtils.js +6 -6
  207. package/{src/tailwind/tailwind.config.js → tailwind.config.js} +126 -127
  208. package/dist/globals.css +0 -3
  209. package/dist/output.css +0 -784
  210. package/dist/services/globals.css +0 -3
  211. package/rollup.config.js +0 -68
  212. package/src/components/layout/footer.js +0 -34
  213. package/src/components/layout/header.js +0 -23
  214. package/src/components/layout/layout.js +0 -36
  215. package/src/components/modules/animations/slidein.js +0 -41
  216. package/src/components/modules/navigation/nav-link.js +0 -65
  217. package/src/components/modules/navigation/navbar.js +0 -106
  218. package/src/components/modules/navigation/skip-link.js +0 -21
  219. package/src/components/modules/navigation/social.js +0 -29
  220. package/src/components/modules/sections/default.js +0 -59
  221. package/src/components/modules/sections/sectionContext.js +0 -4
  222. package/src/hooks/useClickOutside.js +0 -16
  223. package/src/hooks/useEventListener.js +0 -25
  224. package/src/hooks/useEventTracker.js +0 -19
  225. package/src/hooks/useRefScrollProgress.js +0 -24
  226. package/src/hooks/useScript.js +0 -63
  227. package/src/hooks/useScrollDirection.js +0 -39
  228. package/src/hooks/useSectionTracker.js +0 -95
  229. package/src/hooks/useUserAgent.js +0 -43
  230. package/src/hooks/useWindowSize.js +0 -28
  231. package/src/index.css +0 -25
  232. package/src/styles/fonts.js +0 -0
  233. package/src/util/page-head.js +0 -62
  234. package/src/util/provider.js +0 -12
@@ -1,69 +1,71 @@
1
- import Accordion from "~/components/modules/accordions/default";
2
- import FilterItem from "~/components/modules/filter/item";
3
- import React from 'react';
4
- import FilterCommute from "~/components/modules/filter/commute";
5
- import FilterPointsOfInterest from "~/components/modules/filter/points-of-interest";
6
- import ItemsPill from "~/components/modules/buttons/items-pill";
7
- import FilterCard from "~/components/modules/cards/filter";
8
- import Loading from "~/util/loading";
9
- import AccordionFilterItem from "~/components/modules/accordions/filterItem";
10
- import { useMapList } from "~/contexts/mapListContext";
11
-
12
- const FilterLocation = ({
13
- className,
14
- defaultValue,
15
- setDefaultValue,
16
- showMap = false,
17
- setLocation,
18
- setSelectedListItem
19
- }) => {
20
- const { setSelectedFilters, selectedFilters, filterOptions } = useMapList();
21
- const activeItemsCount = selectedFilters != null && selectedFilters["cityState"]
22
- ? Object.keys(selectedFilters["cityState"]).length
23
- : 0;
24
-
25
- const handleClearFilters = () => {
26
- setSelectedFilters(prevFilters => {
27
- const updatedFilters = { ...prevFilters };
28
- delete updatedFilters["cityState"];
29
- return updatedFilters;
30
- });
31
- };
32
- var locations = filterOptions?.locations;
33
- var pointsOfInterest = filterOptions?.pointsOfInterest;
34
- return (
35
- <FilterCard className={className ?? ""}>
36
- <FilterCard.Title icon="fluent:hc-location-16-filled">
37
- <span>
38
- <span className="hc-hidden lg:hc-inline">Job</span> location
39
- </span>
40
- </FilterCard.Title>
41
- {!locations && (
42
- <Loading />
43
- )}
44
- {locations && <Accordion defaultValue={defaultValue} className="hc-space-y-4">
45
- {locations?.map(filter =>
46
- (<AccordionFilterItem
47
- key={filter.id}
48
- filter={filter}
49
- setDefaultValue={setDefaultValue}
50
- selectedFilters={selectedFilters}
51
- setSelectedFilters={prevFilters => { setSelectedFilters(prevFilters); setLocation(null); setSelectedListItem(null); }}
52
- />
53
- ))}
54
- {showMap && <FilterCommute className="hc-mt-6" />}
55
- {showMap && (
56
- <FilterPointsOfInterest
57
- className="hc-mt-4"
58
- pointsOfInterest={pointsOfInterest}
59
- setDefaultValue={setDefaultValue}
60
- defaultValue={defaultValue}
61
- />
62
- )}
63
- </Accordion>
64
- }
65
- </FilterCard>
66
- );
67
- };
68
-
69
- export default FilterLocation;
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,43 +1,44 @@
1
- import Accordion from "~/components/modules/accordions/default";
2
- import RadioItem from "~/components/modules/filter/radio-item";
3
- import React from 'react'
4
-
5
- const FilterPointsOfInterest = ({
6
- title = "Points of interest",
7
- pointsOfInterest,
8
- setDefaultValue,
9
- className,
10
- defaultValue
11
- }) => {
12
- return (
13
- <div
14
- className={`
15
- hc-relative
16
- ${className ?? ""}
17
- `}
18
- >
19
- <Accordion defaultValue={defaultValue} className="hc-space-y-4">
20
- <Accordion.Item id="points-of-interest">
21
- <Accordion.Trigger.HasHeader
22
- onClick={() => setDefaultValue("points-of-interest")}
23
- className="hc-stretched-link hc-text-left"
24
- iconClassName="hc-order-last"
25
- 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"
26
- >
27
- {title}
28
- </Accordion.Trigger.HasHeader>
29
- <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">
30
- {pointsOfInterest.items.map((item, index) => {
31
- return <RadioItem
32
- key={item.key + index}
33
- item={item}
34
- field={item.id} />;
35
- })}
36
- </Accordion.Content>
37
- </Accordion.Item>
38
- </Accordion>
39
- </div>
40
- );
41
- };
42
-
43
- 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,51 +1,53 @@
1
- import Icon from "~/components/modules/icon";
2
- import { useMap } from "~/contexts/mapContext";
3
- import React from 'react'
4
-
5
- const RadioItem = ({
6
- className,
7
- item,
8
- field,
9
- ...rest
10
- }) => {
11
- const { selectedPlaces, setSelectedPlaces } = useMap();
12
- const chosenPlace = item.key.toLowerCase();
13
- let isActive = selectedPlaces.includes(chosenPlace);
14
-
15
- const changeHandler = () => {
16
- setSelectedPlaces([isActive ? '' : chosenPlace]);
17
- };
18
-
19
- return (
20
- <label key={item.key}
21
- className={`
22
- 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
23
- ${item.count === 0 ? 'hc-text-uiDisabled hc-cursor-not-allowed' : 'hover:hc-bg-uiAccent/5'}
24
- ${className ?? ""}
25
- `}
26
- {...rest}
27
- >
28
- <input
29
- key={item.key}
30
- id={item.Key}
31
- name={field}
32
- value={item.key}
33
- type={"radio"}
34
- className={`hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-full`}
35
- checked={isActive}
36
- onClick={() => {
37
- changeHandler();
38
- }}
39
- onChange={() => { }}
40
- />
41
- <span className="hc-font-medium">{item.key}</span>
42
- {isActive &&
43
- <div className="hc-w-full hc-unselect-div">
44
- <Icon className="hc-float-right" icon="mdi:times"></Icon>
45
- </div>
46
- }
47
- </label>
48
- );
49
- };
50
-
51
- export default RadioItem;
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,91 +1,92 @@
1
- import { useRef, useState, useEffect } from "react";
2
- import Button from "~/components/modules/buttons/default";
3
- import Icon from "~/components/modules/icon";
4
- import FilterCard from "~/components/modules/cards/filter";
5
- import { useMapList } from "~/contexts/mapListContext";
6
- import React from 'react'
7
-
8
- const Search = ({
9
- inputPlaceholder = "Keywords",
10
- showSearchIcon = false,
11
- className,
12
- labelClassName
13
- }) => {
14
- const [inputValue, setInputValue] = useState(query != null ? query : "");
15
- const debounceTimer = useRef(null);
16
- const {
17
- query,
18
- setQuery,
19
- siteConfig
20
- } = useMapList();
21
- const handleInputChange = e => {
22
- setInputValue(e.target.value);
23
- if (debounceTimer.current) {
24
- clearTimeout(debounceTimer.current);
25
- }
26
- debounceTimer.current = setTimeout(() => {
27
- setQuery(e.target.value);
28
- }, 500);
29
- };
30
-
31
- const handleReset = () => {
32
- setInputValue("");
33
- setQuery("");
34
- };
35
-
36
- useEffect(() => {
37
- if (query == null) {
38
- setInputValue("");
39
- }
40
- }, [query]);
41
- inputPlaceholder = siteConfig.searchConfig.placeholder;
42
- return (
43
- <FilterCard as="form" className={className ?? ""}>
44
- <FilterCard.Title
45
- as="label"
46
- icon="fluent:search-12-filled"
47
- className={labelClassName ?? ""}
48
- >
49
- <span>
50
- {siteConfig.searchConfig.label}
51
- </span>
52
- </FilterCard.Title>
53
-
54
- <div className="hc-relative hc-flex hc-items-center hc-px-2 hc-rounded hc-bg-white hc-border hc-border-uiAccent/20 focus-within:hc-ring-1 focus-within:hc-ring-uiAccent">
55
- {showSearchIcon && (
56
- <Icon
57
- icon="fluent:search-12-filled"
58
- size="hc-size-4"
59
- className="hc-mr-2 hc-text-uiAccent/50"
60
- />
61
- )}
62
- <input
63
- type="text"
64
- name="search"
65
- onKeyDown={e => {
66
- if (e.key === 'Enter') {
67
- e.preventDefault();
68
- }
69
- }}
70
- placeholder={inputPlaceholder}
71
- value={inputValue}
72
- className="hc-w-full hc-px-0 hc-py-2 hc-text-sm hc-border-0 hc-transition-colors placeholder:hc-text-uiText/50 focus:hc-ring-0 focus:hc-outline-none"
73
- onChange={handleInputChange}
74
- />
75
-
76
- <Button.Btn
77
- type="reset"
78
- variant="icon"
79
- size="sqsm"
80
- className={`transition-opacity ${inputValue ? "hc-opacity-100" : "hc-opacity-0 hc-pointer-events-none"}`}
81
- onClick={handleReset}
82
- >
83
- <span className="sr-only">Clear</span>
84
- <Button.Icon icon="uil:times" className="hc-text-uiAccent" />
85
- </Button.Btn>
86
- </div>
87
- </FilterCard>
88
- );
89
- };
90
-
91
- export default Search;
1
+ import React, { useRef, useState, useEffect } from 'react';
2
+
3
+ import Button from '~/components/modules/buttons/default';
4
+ import Icon from '~/components/modules/icon';
5
+ import FilterCard from '~/components/modules/cards/filter';
6
+
7
+ import { useMapList } from '~/contexts/mapListContext';
8
+
9
+ const Search = ({
10
+ inputPlaceholder = "Keywords",
11
+ showSearchIcon = false,
12
+ className,
13
+ labelClassName
14
+ }) => {
15
+ const [inputValue, setInputValue] = useState(query != null ? query : "");
16
+ const debounceTimer = useRef(null);
17
+ const {
18
+ query,
19
+ setQuery,
20
+ siteConfig
21
+ } = useMapList();
22
+ const handleInputChange = e => {
23
+ setInputValue(e.target.value);
24
+ if (debounceTimer.current) {
25
+ clearTimeout(debounceTimer.current);
26
+ }
27
+ debounceTimer.current = setTimeout(() => {
28
+ setQuery(e.target.value);
29
+ }, 500);
30
+ };
31
+
32
+ const handleReset = () => {
33
+ setInputValue("");
34
+ setQuery("");
35
+ };
36
+
37
+ useEffect(() => {
38
+ if (query == null) {
39
+ setInputValue("");
40
+ }
41
+ }, [query]);
42
+ inputPlaceholder = siteConfig.searchConfig.placeholder;
43
+ return (
44
+ <FilterCard as="form" className={className ?? ""}>
45
+ <FilterCard.Title
46
+ as="label"
47
+ icon="fluent:search-12-filled"
48
+ className={labelClassName ?? ""}
49
+ >
50
+ <span>
51
+ {siteConfig.searchConfig.label}
52
+ </span>
53
+ </FilterCard.Title>
54
+
55
+ <div className="hc-relative hc-flex hc-items-center hc-px-2 hc-rounded hc-bg-white hc-border hc-border-uiAccent/20 focus-within:hc-ring-1 focus-within:hc-ring-uiAccent">
56
+ {showSearchIcon && (
57
+ <Icon
58
+ icon="fluent:search-12-filled"
59
+ size="hc-size-4"
60
+ className="hc-mr-2 hc-text-uiAccent/50"
61
+ />
62
+ )}
63
+ <input
64
+ type="text"
65
+ name="search"
66
+ onKeyDown={e => {
67
+ if (e.key === 'Enter') {
68
+ e.preventDefault();
69
+ }
70
+ }}
71
+ placeholder={inputPlaceholder}
72
+ value={inputValue}
73
+ className="hc-w-full hc-px-0 hc-py-2 hc-text-sm hc-border-0 hc-transition-colors placeholder:hc-text-uiText/50 focus:hc-ring-0 focus:hc-outline-none"
74
+ onChange={handleInputChange}
75
+ />
76
+
77
+ <Button.Btn
78
+ type="reset"
79
+ variant="icon"
80
+ size="sqsm"
81
+ className={`transition-opacity ${inputValue ? "hc-opacity-100" : "hc-opacity-0 hc-pointer-events-none"}`}
82
+ onClick={handleReset}
83
+ >
84
+ <span className="sr-only">Clear</span>
85
+ <Button.Icon icon="uil:times" className="hc-text-uiAccent" />
86
+ </Button.Btn>
87
+ </div>
88
+ </FilterCard>
89
+ );
90
+ };
91
+
92
+ export default Search;