@abcagency/hc-ui-components 1.3.18 → 1.3.19

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 (191) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  2. package/dist/apis/hcApi.js +85 -183
  3. package/dist/apis/hcApi.js.map +1 -1
  4. package/dist/components/HireControlMap.js +10 -5
  5. package/dist/components/HireControlMap.js.map +1 -1
  6. package/dist/components/modules/accordions/MapAccordionItem.js +10 -67
  7. package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
  8. package/dist/components/modules/filter/index.js.map +1 -1
  9. package/dist/components/modules/filter/radio-item.js +1 -2
  10. package/dist/components/modules/filter/radio-item.js.map +1 -1
  11. package/dist/components/modules/jobListing/listing-details-container.js +45 -0
  12. package/dist/components/modules/jobListing/listing-details-container.js.map +1 -0
  13. package/dist/components/modules/jobListing/listing-details.js +24 -24
  14. package/dist/components/modules/jobListing/listing-details.js.map +1 -1
  15. package/dist/components/modules/{maps/list → list}/field-mapper.js +8 -7
  16. package/dist/components/modules/list/field-mapper.js.map +1 -0
  17. package/dist/components/modules/{maps/list → list}/header-item.js +2 -2
  18. package/dist/components/modules/list/header-item.js.map +1 -0
  19. package/dist/components/modules/{maps/list → list}/header.js +6 -4
  20. package/dist/components/modules/list/header.js.map +1 -0
  21. package/dist/components/modules/list/index.js +36 -0
  22. package/dist/components/modules/list/index.js.map +1 -0
  23. package/dist/components/modules/{maps/list → list}/item-expand-card/index.js +3 -1
  24. package/dist/components/modules/list/item-expand-card/index.js.map +1 -0
  25. package/dist/components/modules/{maps/list → list}/item-expand-card/recruiter-contact-nav.js +2 -2
  26. package/dist/components/modules/list/item-expand-card/recruiter-contact-nav.js.map +1 -0
  27. package/dist/components/modules/{maps/list → list}/item-expand-card/recruiter-details.js +1 -1
  28. package/dist/components/modules/list/item-expand-card/recruiter-details.js.map +1 -0
  29. package/dist/components/modules/list/item-expand-card/recruiter-headshot.js.map +1 -0
  30. package/dist/components/modules/list/item-list.js +28 -0
  31. package/dist/components/modules/list/item-list.js.map +1 -0
  32. package/dist/components/modules/list/list-item/index.js +75 -0
  33. package/dist/components/modules/list/list-item/index.js.map +1 -0
  34. package/dist/components/modules/list/list-item/list-item-container.js +47 -0
  35. package/dist/components/modules/list/list-item/list-item-container.js.map +1 -0
  36. package/dist/components/modules/{maps/list/list-item/index.js → list/list-item/list-item.js} +29 -33
  37. package/dist/components/modules/list/list-item/list-item.js.map +1 -0
  38. package/dist/components/modules/maps/map-list.js +3 -3
  39. package/dist/components/modules/maps/map-list.js.map +1 -1
  40. package/dist/contexts/mapContext.js +84 -113
  41. package/dist/contexts/mapContext.js.map +1 -1
  42. package/dist/contexts/mapListContext.js +181 -293
  43. package/dist/contexts/mapListContext.js.map +1 -1
  44. package/dist/contexts/trackEventContext.js +1 -1
  45. package/dist/services/configService.js +10 -28
  46. package/dist/services/configService.js.map +1 -1
  47. package/dist/services/googlePlacesNearbyService.js +33 -58
  48. package/dist/services/googlePlacesNearbyService.js.map +1 -1
  49. package/dist/services/listingAggregatorService.js +35 -75
  50. package/dist/services/listingAggregatorService.js.map +1 -1
  51. package/dist/services/listingEntityService.js +10 -31
  52. package/dist/services/listingEntityService.js.map +1 -1
  53. package/dist/services/listingService.js +26 -60
  54. package/dist/services/listingService.js.map +1 -1
  55. package/dist/services/recruiterService.js +11 -31
  56. package/dist/services/recruiterService.js.map +1 -1
  57. package/dist/types/apis/hcApi.d.ts +5 -0
  58. package/dist/types/clientToken.d.ts +2 -0
  59. package/dist/types/components/modules/accordions/MapAccordionItem.d.ts +9 -0
  60. package/dist/types/components/modules/accordions/default.d.ts +19 -0
  61. package/dist/types/components/modules/buttons/button-group-apply.d.ts +24 -0
  62. package/dist/types/components/modules/buttons/commute-pill.d.ts +5 -0
  63. package/dist/types/components/modules/buttons/default.d.ts +48 -0
  64. package/dist/types/components/modules/buttons/pill-wrapper.d.ts +3 -0
  65. package/dist/types/components/modules/dialogs/apply-dialog.d.ts +8 -0
  66. package/dist/types/components/modules/filter/sort.d.ts +8 -0
  67. package/dist/types/components/modules/grid.d.ts +8 -0
  68. package/dist/types/components/modules/icon.d.ts +10 -0
  69. package/dist/types/components/modules/jobListing/listing-details-container.d.ts +6 -0
  70. package/dist/types/components/modules/jobListing/listing-details.d.ts +18 -0
  71. package/dist/types/components/modules/list/field-mapper.d.ts +10 -0
  72. package/dist/types/components/modules/list/header-item.d.ts +11 -0
  73. package/dist/types/components/modules/list/header.d.ts +11 -0
  74. package/dist/types/components/modules/list/index.d.ts +9 -0
  75. package/dist/types/components/modules/list/item-expand-card/index.d.ts +7 -0
  76. package/dist/types/components/modules/list/item-expand-card/recruiter-contact-nav.d.ts +17 -0
  77. package/dist/types/components/modules/list/item-expand-card/recruiter-details.d.ts +21 -0
  78. package/dist/types/components/modules/list/item-expand-card/recruiter-headshot.d.ts +8 -0
  79. package/dist/types/components/modules/list/item-list.d.ts +21 -0
  80. package/dist/types/components/modules/list/list-item/index.d.ts +12 -0
  81. package/dist/types/components/modules/list/list-item/list-item-container.d.ts +14 -0
  82. package/dist/types/components/modules/list/list-item/list-item.d.ts +3 -0
  83. package/dist/types/constants/eventTypes.d.ts +13 -0
  84. package/dist/types/contexts/mapContext.d.ts +29 -0
  85. package/dist/types/contexts/mapListContext.d.ts +58 -0
  86. package/dist/types/contexts/trackEventContext.d.ts +6 -0
  87. package/dist/types/enums/SectionType.d.ts +9 -0
  88. package/dist/types/hooks/useList.d.ts +13 -0
  89. package/dist/types/services/configService.d.ts +6 -0
  90. package/dist/types/services/googlePlacesNearbyService.d.ts +5 -0
  91. package/dist/types/services/listingAggregatorService.d.ts +12 -0
  92. package/dist/types/services/listingEntityService.d.ts +6 -0
  93. package/dist/types/services/listingService.d.ts +9 -0
  94. package/dist/types/services/recruiterService.d.ts +6 -0
  95. package/dist/types/types/Address.d.ts +7 -0
  96. package/dist/types/types/ContentSection.d.ts +8 -0
  97. package/dist/types/types/GetListingParams.d.ts +8 -0
  98. package/dist/types/types/LatLng.d.ts +4 -0
  99. package/dist/types/types/ListingEntity.d.ts +10 -0
  100. package/dist/types/types/ListingFields.d.ts +20 -0
  101. package/dist/types/types/Listings.d.ts +31 -0
  102. package/dist/types/types/Recruiter.d.ts +9 -0
  103. package/dist/types/types/SimilarListing.d.ts +24 -0
  104. package/dist/types/types/config/Colors.d.ts +8 -0
  105. package/dist/types/types/config/MapConfig.d.ts +29 -0
  106. package/dist/types/types/config/PointsOfInterestConfig.d.ts +13 -0
  107. package/dist/types/types/config/SearchConfig.d.ts +4 -0
  108. package/dist/types/util/filterUtil.d.ts +28 -0
  109. package/dist/types/util/loading.d.ts +3 -0
  110. package/dist/types/util/localStorageUtil.d.ts +3 -0
  111. package/dist/types/util/mapUtil.d.ts +15 -0
  112. package/dist/types/util/sortUtil.d.ts +1 -0
  113. package/dist/types/util/stringUtils.d.ts +1 -0
  114. package/dist/util/filterUtil.js +1 -3
  115. package/dist/util/filterUtil.js.map +1 -1
  116. package/dist/util/localStorageUtil.js +37 -28
  117. package/dist/util/localStorageUtil.js.map +1 -1
  118. package/dist/util/mapUtil.js.map +1 -1
  119. package/package.json +23 -17
  120. package/rollup.config.mjs +23 -19
  121. package/src/apis/{hcApi.js → hcApi.ts} +27 -11
  122. package/src/components/HireControlMap.js +132 -129
  123. package/src/components/modules/accordions/MapAccordionItem.js +32 -74
  124. package/src/components/modules/filter/index.js +89 -89
  125. package/src/components/modules/filter/radio-item.js +0 -1
  126. package/src/components/modules/jobListing/listing-details-container.js +40 -0
  127. package/src/components/modules/jobListing/listing-details.js +209 -99
  128. package/src/components/modules/{maps/list → list}/field-mapper.js +114 -112
  129. package/src/components/modules/{maps/list → list}/header.js +49 -47
  130. package/src/components/modules/list/index.tsx +83 -0
  131. package/src/components/modules/{maps/list → list}/item-expand-card/index.js +24 -22
  132. package/src/components/modules/list/item-list.tsx +198 -0
  133. package/src/components/modules/list/list-item/index.js +70 -0
  134. package/src/components/modules/list/list-item/list-item-container.js +43 -0
  135. package/src/components/modules/{maps/list/list-item/index.js → list/list-item/list-item.js} +32 -38
  136. package/src/components/modules/maps/map-list.js +74 -74
  137. package/src/contexts/mapContext.tsx +129 -0
  138. package/src/contexts/mapListContext.tsx +297 -0
  139. package/src/enums/SectionType.ts +9 -0
  140. package/src/services/{configService.js → configService.ts} +16 -16
  141. package/src/services/{googlePlacesNearbyService.js → googlePlacesNearbyService.ts} +11 -2
  142. package/src/services/listingAggregatorService.ts +76 -0
  143. package/src/services/listingEntityService.ts +16 -0
  144. package/src/services/listingService.ts +40 -0
  145. package/src/services/{recruiterService.js → recruiterService.ts} +18 -17
  146. package/src/types/Address.ts +7 -0
  147. package/src/types/ContentSection.ts +9 -0
  148. package/src/types/GetListingParams.ts +8 -0
  149. package/src/types/LatLng.ts +4 -0
  150. package/src/types/ListingEntity.ts +11 -0
  151. package/src/types/ListingFields.ts +20 -0
  152. package/src/types/Listings.ts +32 -0
  153. package/src/types/Recruiter.ts +9 -0
  154. package/src/types/SimilarListing.ts +24 -0
  155. package/src/types/config/Colors.ts +8 -0
  156. package/src/types/config/MapConfig.ts +30 -0
  157. package/src/types/config/PointsOfInterestConfig.ts +13 -0
  158. package/src/types/config/SearchConfig.ts +4 -0
  159. package/src/util/filterUtil.js +239 -239
  160. package/src/util/localStorageUtil.ts +34 -0
  161. package/src/util/mapUtil.js +91 -91
  162. package/tsconfig.json +23 -0
  163. package/dist/components/modules/maps/list/field-mapper.js.map +0 -1
  164. package/dist/components/modules/maps/list/header-item.js.map +0 -1
  165. package/dist/components/modules/maps/list/header.js.map +0 -1
  166. package/dist/components/modules/maps/list/index.js +0 -102
  167. package/dist/components/modules/maps/list/index.js.map +0 -1
  168. package/dist/components/modules/maps/list/item-expand-card/index.js.map +0 -1
  169. package/dist/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js.map +0 -1
  170. package/dist/components/modules/maps/list/item-expand-card/recruiter-details.js.map +0 -1
  171. package/dist/components/modules/maps/list/item-expand-card/recruiter-headshot.js.map +0 -1
  172. package/dist/components/modules/maps/list/list-item/index.js.map +0 -1
  173. package/dist/services/_virtual/_rollupPluginBabelHelpers.js +0 -372
  174. package/dist/services/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  175. package/dist/services/apis/hcApi.js +0 -189
  176. package/dist/services/apis/hcApi.js.map +0 -1
  177. package/dist/services/clientToken.js +0 -7
  178. package/dist/services/clientToken.js.map +0 -1
  179. package/dist/services/styles/index.css +0 -3
  180. package/src/components/modules/maps/list/index.js +0 -112
  181. package/src/contexts/mapContext.js +0 -101
  182. package/src/contexts/mapListContext.js +0 -242
  183. package/src/services/listingAggregatorService.js +0 -50
  184. package/src/services/listingEntityService.js +0 -15
  185. package/src/services/listingService.js +0 -26
  186. package/src/util/localStorageUtil.js +0 -27
  187. /package/dist/components/modules/{maps/list → list}/item-expand-card/recruiter-headshot.js +0 -0
  188. /package/src/components/modules/{maps/list → list}/header-item.js +0 -0
  189. /package/src/components/modules/{maps/list → list}/item-expand-card/recruiter-contact-nav.js +0 -0
  190. /package/src/components/modules/{maps/list → list}/item-expand-card/recruiter-details.js +0 -0
  191. /package/src/components/modules/{maps/list → list}/item-expand-card/recruiter-headshot.js +0 -0
@@ -1,99 +1,209 @@
1
- import React from 'react';
2
-
3
- import RecruiterHeadshot from '~/components/modules/maps/list/item-expand-card/recruiter-headshot';
4
- import RecruiterDetails from '~/components/modules/maps/list/item-expand-card/recruiter-details';
5
- import RecruiterContactNav from '~/components/modules/maps/list/item-expand-card/recruiter-contact-nav';
6
- import ApplyButtonGroup from '~/components/modules/buttons/button-group-apply';
7
- import CommutePill from '~/components/modules/buttons/commute-pill';
8
-
9
- import { useMap } from '~/contexts/mapContext';
10
- import { useMapList } from '~/contexts/mapListContext';
11
- import { useTrackEvent } from '~/contexts/trackEventContext';
12
-
13
- const ListingDetails = ({ item, recruiters }) => {
14
- const { trackEvent, eventTypes } = useTrackEvent();
15
- const { travelTime } = useMap();
16
- const { siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat } = useMapList();
17
- if (!item) {
18
- return null;
19
- }
20
- let matchingRecruiter = !recruiters ? null : recruiters[item?.recruiterId];
21
- return (
22
- <div className="hc-w-full">
23
- <div className="hc-grow hc-flex hc-flex-wrap hc-items-center hc-gap-4">
24
- {matchingRecruiter?.headshot && (
25
- <RecruiterHeadshot
26
- image={`https:${matchingRecruiter.headshot}`}
27
- alt={matchingRecruiter?.firstName}
28
- className="hc-bg-gray-300"
29
- />
30
- )}
31
- {matchingRecruiter && (
32
- <RecruiterDetails
33
- contactNav={
34
- <RecruiterContactNav>
35
- {matchingRecruiter?.mobilePhone && (
36
- <RecruiterContactNav.Button
37
- href={`tel:${matchingRecruiter.mobilePhone}`}
38
- title={`Call ${matchingRecruiter.mobilePhone}`}
39
- icon="fluent:phone-32-regular"
40
- />
41
- )}
42
- {matchingRecruiter?.email && (
43
- <RecruiterContactNav.Button
44
- href={`mailto:${matchingRecruiter.email}`}
45
- title={`email ${matchingRecruiter.email}`}
46
- icon="bi:envelope-at"
47
- />
48
- )}
49
- {matchingRecruiter?.linkedIn && (
50
- <RecruiterContactNav.Button
51
- href={matchingRecruiter.linkedIn}
52
- title="LinkedIn"
53
- icon="ant-design:linkedin-outlined"
54
- />
55
- )}
56
- </RecruiterContactNav>
57
- }
58
- >
59
- {matchingRecruiter?.firstName && matchingRecruiter?.lastName && (
60
- <RecruiterDetails.Title>
61
- {`${matchingRecruiter?.firstName} ${matchingRecruiter?.lastName}`}
62
- </RecruiterDetails.Title>
63
- )}
64
- {item.details?.recruiter?.title && (
65
- <RecruiterDetails.Text>
66
- {item.details.recruiter.title}
67
- </RecruiterDetails.Text>
68
- )}
69
- </RecruiterDetails>
70
- )}
71
- <ApplyButtonGroup
72
- useDetailsPostMessage={siteConfig.useDetailsPostMessage}
73
- navigateToDetails={navigateToDetails}
74
- navigateToEasyApply={navigateToEasyApply}
75
- Link={Link}
76
- linkFormat={linkFormat}
77
- includeDialog={siteConfig.useApplyDialog}
78
- internalApplyLink={siteConfig.internalApplyLink}
79
- companyName={siteConfig.companyName}
80
- applyUrl={item?.applyUrl}
81
- itemId={item.id}
82
- item={item}
83
- trackEvent={trackEvent}
84
- eventTypes={eventTypes}
85
- detailsUrl={item.useClientJobUrl ? item?.detailsUrl : `${siteConfig.jobsDomain}${item.id}`}
86
- className={`
87
- lg:hc-w-auto hc-order-first lg:hc-order-last md:hc-self-center hc-py-2 lg:hc-p-0 lg:hc-mb-0 hc-border-b lg:hc-border-none hc-border-uiAccent/20
88
- ${matchingRecruiter ? "lg:hc-flex-col lg:hc-w-auto" : "lg:hc-flex-row"}
89
- `}
90
- />
91
- </div>
92
- <div className="hc-w-full">
93
- <CommutePill travelTime={travelTime} className="hc-ml-0" />
94
- </div>
95
- </div>
96
- );
97
- };
98
-
99
- export default ListingDetails;
1
+ // import React from 'react';
2
+
3
+ // import RecruiterHeadshot from '~/components/modules/list/item-expand-card/recruiter-headshot';
4
+ // import RecruiterDetails from '~/components/modules/list/item-expand-card/recruiter-details';
5
+ // import RecruiterContactNav from '~/components/modules/list/item-expand-card/recruiter-contact-nav';
6
+ // import ApplyButtonGroup from '~/components/modules/buttons/button-group-apply';
7
+ // import CommutePill from '~/components/modules/buttons/commute-pill';
8
+
9
+ // import { useMap } from '~/contexts/mapContext';
10
+ // import { useMapList } from '~/contexts/mapListContext';
11
+ // import { useTrackEvent } from '~/contexts/trackEventContext';
12
+
13
+ // const ListingDetails = ({ item, recruiters }) => {
14
+ // const { trackEvent, eventTypes } = useTrackEvent();
15
+ // const { travelTime } = useMap();
16
+ // const { siteConfig, navigateToDetails, navigateToEasyApply, Link, linkFormat } = useMapList();
17
+ // if (!item) {
18
+ // return null;
19
+ // }
20
+ // let matchingRecruiter = !recruiters ? null : recruiters[item?.recruiterId];
21
+ // return (
22
+ // <div className="hc-w-full">
23
+ // <div className="hc-grow hc-flex hc-flex-wrap hc-items-center hc-gap-4">
24
+ // {matchingRecruiter?.headshot && (
25
+ // <RecruiterHeadshot
26
+ // image={`https:${matchingRecruiter.headshot}`}
27
+ // alt={matchingRecruiter?.firstName}
28
+ // className="hc-bg-gray-300"
29
+ // />
30
+ // )}
31
+ // {matchingRecruiter && (
32
+ // <RecruiterDetails
33
+ // contactNav={
34
+ // <RecruiterContactNav>
35
+ // {matchingRecruiter?.mobilePhone && (
36
+ // <RecruiterContactNav.Button
37
+ // href={`tel:${matchingRecruiter.mobilePhone}`}
38
+ // title={`Call ${matchingRecruiter.mobilePhone}`}
39
+ // icon="fluent:phone-32-regular"
40
+ // />
41
+ // )}
42
+ // {matchingRecruiter?.email && (
43
+ // <RecruiterContactNav.Button
44
+ // href={`mailto:${matchingRecruiter.email}`}
45
+ // title={`email ${matchingRecruiter.email}`}
46
+ // icon="bi:envelope-at"
47
+ // />
48
+ // )}
49
+ // {matchingRecruiter?.linkedIn && (
50
+ // <RecruiterContactNav.Button
51
+ // href={matchingRecruiter.linkedIn}
52
+ // title="LinkedIn"
53
+ // icon="ant-design:linkedin-outlined"
54
+ // />
55
+ // )}
56
+ // </RecruiterContactNav>
57
+ // }
58
+ // >
59
+ // {matchingRecruiter?.firstName && matchingRecruiter?.lastName && (
60
+ // <RecruiterDetails.Title>
61
+ // {`${matchingRecruiter?.firstName} ${matchingRecruiter?.lastName}`}
62
+ // </RecruiterDetails.Title>
63
+ // )}
64
+ // {item.details?.recruiter?.title && (
65
+ // <RecruiterDetails.Text>
66
+ // {item.details.recruiter.title}
67
+ // </RecruiterDetails.Text>
68
+ // )}
69
+ // </RecruiterDetails>
70
+ // )}
71
+ // <ApplyButtonGroup
72
+ // useDetailsPostMessage={siteConfig.useDetailsPostMessage}
73
+ // navigateToDetails={navigateToDetails}
74
+ // navigateToEasyApply={navigateToEasyApply}
75
+ // Link={Link}
76
+ // linkFormat={linkFormat}
77
+ // includeDialog={siteConfig.useApplyDialog}
78
+ // internalApplyLink={siteConfig.internalApplyLink}
79
+ // companyName={siteConfig.companyName}
80
+ // applyUrl={item?.applyUrl}
81
+ // itemId={item.id}
82
+ // item={item}
83
+ // trackEvent={trackEvent}
84
+ // eventTypes={eventTypes}
85
+ // detailsUrl={item.useClientJobUrl ? item?.detailsUrl : `${siteConfig.jobsDomain}${item.id}`}
86
+ // className={`
87
+ // lg:hc-w-auto hc-order-first lg:hc-order-last md:hc-self-center hc-py-2 lg:hc-p-0 lg:hc-mb-0 hc-border-b lg:hc-border-none hc-border-uiAccent/20
88
+ // ${matchingRecruiter ? "lg:hc-flex-col lg:hc-w-auto" : "lg:hc-flex-row"}
89
+ // `}
90
+ // />
91
+ // </div>
92
+ // <div className="hc-w-full">
93
+ // <CommutePill travelTime={travelTime} className="hc-ml-0" />
94
+ // </div>
95
+ // </div>
96
+ // );
97
+ // };
98
+
99
+ // export default ListingDetails;
100
+ import React from 'react';
101
+ import RecruiterHeadshot from '~/components/modules/list/item-expand-card/recruiter-headshot';
102
+ import RecruiterDetails from '~/components/modules/list/item-expand-card/recruiter-details';
103
+ import RecruiterContactNav from '~/components/modules/list/item-expand-card/recruiter-contact-nav';
104
+ import ApplyButtonGroup from '~/components/modules/buttons/button-group-apply';
105
+ import CommutePill from '~/components/modules/buttons/commute-pill';
106
+
107
+ const ListingDetails = ({
108
+ item,
109
+ recruiters,
110
+ travelTime,
111
+ useDetailsPostMessage,
112
+ navigateToDetails,
113
+ navigateToEasyApply,
114
+ Link,
115
+ linkFormat,
116
+ useApplyDialog,
117
+ internalApplyLink,
118
+ companyName,
119
+ jobsDomain,
120
+ trackEvent,
121
+ eventTypes
122
+ }) => {
123
+ console.log(item);
124
+ if (!item) {
125
+ return null;
126
+ }
127
+
128
+ let matchingRecruiter = !recruiters ? null : recruiters[item?.recruiterId];
129
+
130
+ return (
131
+ <div className="hc-w-full">
132
+ <div className="hc-grow hc-flex hc-flex-wrap hc-items-center hc-gap-4">
133
+ {matchingRecruiter?.headshot && (
134
+ <RecruiterHeadshot
135
+ image={`https:${matchingRecruiter.headshot}`}
136
+ alt={matchingRecruiter?.firstName}
137
+ className="hc-bg-gray-300"
138
+ />
139
+ )}
140
+ {matchingRecruiter && (
141
+ <RecruiterDetails
142
+ contactNav={
143
+ <RecruiterContactNav>
144
+ {matchingRecruiter?.mobilePhone && (
145
+ <RecruiterContactNav.Button
146
+ href={`tel:${matchingRecruiter.mobilePhone}`}
147
+ title={`Call ${matchingRecruiter.mobilePhone}`}
148
+ icon="fluent:phone-32-regular"
149
+ />
150
+ )}
151
+ {matchingRecruiter?.email && (
152
+ <RecruiterContactNav.Button
153
+ href={`mailto:${matchingRecruiter.email}`}
154
+ title={`email ${matchingRecruiter.email}`}
155
+ icon="bi:envelope-at"
156
+ />
157
+ )}
158
+ {matchingRecruiter?.linkedIn && (
159
+ <RecruiterContactNav.Button
160
+ href={matchingRecruiter.linkedIn}
161
+ title="LinkedIn"
162
+ icon="ant-design:linkedin-outlined"
163
+ />
164
+ )}
165
+ </RecruiterContactNav>
166
+ }
167
+ >
168
+ {matchingRecruiter?.firstName && matchingRecruiter?.lastName && (
169
+ <RecruiterDetails.Title>
170
+ {`${matchingRecruiter?.firstName} ${matchingRecruiter?.lastName}`}
171
+ </RecruiterDetails.Title>
172
+ )}
173
+ {item.details?.recruiter?.title && (
174
+ <RecruiterDetails.Text>
175
+ {item.details.recruiter.title}
176
+ </RecruiterDetails.Text>
177
+ )}
178
+ </RecruiterDetails>
179
+ )}
180
+ <ApplyButtonGroup
181
+ useDetailsPostMessage={useDetailsPostMessage}
182
+ navigateToDetails={navigateToDetails}
183
+ navigateToEasyApply={navigateToEasyApply}
184
+ Link={Link}
185
+ linkFormat={linkFormat}
186
+ includeDialog={useApplyDialog}
187
+ internalApplyLink={internalApplyLink}
188
+ companyName={companyName}
189
+ applyUrl={item?.applyUrl}
190
+ itemId={item.id}
191
+ item={item}
192
+ trackEvent={trackEvent}
193
+ eventTypes={eventTypes}
194
+ detailsUrl={item.useClientJobUrl ? item?.detailsUrl : `${jobsDomain}${item.id}`}
195
+ className={`
196
+ lg:hc-w-auto hc-order-first lg:hc-order-last md:hc-self-center hc-py-2 lg:hc-p-0 lg:hc-mb-0 hc-border-b lg:hc-border-none hc-border-uiAccent/20
197
+ ${matchingRecruiter ? "lg:hc-flex-col lg:hc-w-auto" : "lg:hc-flex-row"}
198
+ `}
199
+ />
200
+ </div>
201
+ <div className="hc-w-full">
202
+ <CommutePill travelTime={travelTime} className="hc-ml-0" />
203
+ </div>
204
+ </div>
205
+ );
206
+ };
207
+
208
+ export default ListingDetails;
209
+
@@ -1,112 +1,114 @@
1
- import React from 'react';
2
-
3
- import Grid from '~/components/modules/grid';
4
- import Icon from '~/components/modules/icon';
5
- import PillWrapper from '~/components/modules/buttons/pill-wrapper';
6
-
7
- import { capitalize } from '~/util/stringUtils';
8
-
9
- const FieldMapper = ({
10
- item,
11
- fieldsShown,
12
- specialFeatures,
13
- handleFavouriteClick,
14
- isFavorite
15
- }) => {
16
- const orderedFields = fieldsShown.filter(field => field in item.fields);
17
-
18
- const specialFeaturePills = field => {
19
- return field === 'position' && specialFeatures &&
20
- Object.entries(specialFeatures).map(([featureKey, featureLabel]) => {
21
- return item.fields[featureKey] === 1 && (
22
- <PillWrapper key={featureKey}>{featureLabel}</PillWrapper>
23
- );
24
- });
25
- };
26
-
27
- return (
28
- <>
29
- {orderedFields.map(field => {
30
- let value = item.fields[field];
31
- return (
32
- <Grid.Item
33
- key={field}
34
- className={`
35
- hc-hidden md:hc-block
36
- ${field.toLowerCase() === "position" ? "hc-col-span-2 hc-text-balance hc-pr-2 hc-font-semibold" : "hc-col-span-1"}
37
- `}
38
- >
39
- <span className="hc-sr-only">{capitalize(field)}</span>
40
- {value}
41
- <br />
42
- {specialFeaturePills(field)}
43
- </Grid.Item>
44
- );
45
- })}
46
- <Grid.Item className="md:hc-hidden">
47
- {fieldsShown.includes("position") &&
48
- <>
49
- <div className="hc-flex hc-items-start">
50
- <div className="hc-flex hc-justify-between hc-items-center hc-min-w-[100%]"> {/* Use percentage for minimum width */}
51
- <h3 className="hc-font-bold hc-mb-3 hc-flex-1">{item.fields.position}</h3>
52
- <div className="hc-flex hc-justify-end hc-pb-2">
53
- <Icon
54
- icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
55
- size="hc-size-3.5"
56
- iconClasses={isFavorite ? "hc-text-primary" : ""}
57
- className={`hc-transition-opacity hc-duration-300 hc-cursor-pointer
58
- ${isFavorite ? "hc-opacity-100" : "hc-text-uiText/60 group-hover:hc-opacity-100"}
59
- `}
60
- onClick={e => handleFavouriteClick(e)}
61
- />
62
- </div>
63
- </div>
64
- </div>
65
- {specialFeatures && <div className='hc-pb-4'>{specialFeaturePills("position", true)} </div>}
66
- </>
67
- }
68
-
69
- <ul className="hc-space-y-2 hc-text-xs">
70
- {[
71
- {
72
- field: "category",
73
- name: "Category",
74
- icon: "icon-park-solid:tree-list"
75
- },
76
- {
77
- field: "schedule",
78
- name: "Schedule",
79
- icon: "gravity-ui:clock-fill"
80
- },
81
- {
82
- field: "cityState",
83
- name: "Location",
84
- icon: "fluent:location-16-filled"
85
- },
86
- {
87
- field: "travelTime",
88
- name: "Commute",
89
- icon: "ri:pin-distance-fill"
90
- }
91
- ].map(listItem => (
92
- (fieldsShown.includes(listItem.field) && item.fields[listItem.field]) &&
93
- <li
94
- key={listItem.field}
95
- className="hc-flex hc-gap-2"
96
- >
97
- <Icon
98
- icon={listItem.icon}
99
- size="hc-size-3.5"
100
- className="hc-text-uiAccent/30"
101
- />
102
- <span className="hc-sr-only">{listItem.name}</span>
103
- {item.fields[listItem.field]}
104
- </li>
105
- ))}
106
- </ul>
107
- </Grid.Item>
108
- </>
109
- );
110
- };
111
-
112
- export default FieldMapper;
1
+ import React from 'react';
2
+
3
+ import Grid from '~/components/modules/grid';
4
+ import Icon from '~/components/modules/icon';
5
+ import PillWrapper from '~/components/modules/buttons/pill-wrapper';
6
+
7
+ import { capitalize } from '~/util/stringUtils';
8
+
9
+ const FieldMapper = ({
10
+ item,
11
+ fieldsShown,
12
+ specialFeatures,
13
+ handleFavouriteClick,
14
+ isFavorite,
15
+ includeFavorite
16
+ }) => {
17
+ const orderedFields = fieldsShown.filter(field => field in item.fields);
18
+
19
+ const specialFeaturePills = field => {
20
+ return field === 'position' && specialFeatures &&
21
+ Object.entries(specialFeatures).map(([featureKey, featureLabel]) => {
22
+ return item.fields[featureKey] === 1 && (
23
+ <PillWrapper key={featureKey}>{featureLabel}</PillWrapper>
24
+ );
25
+ });
26
+ };
27
+
28
+ return (
29
+ <>
30
+ {orderedFields.map(field => {
31
+ let value = item.fields[field];
32
+ return (
33
+ <Grid.Item
34
+ key={field}
35
+ className={`
36
+ hc-hidden md:hc-block
37
+ ${field.toLowerCase() === "position" ? "hc-col-span-2 hc-text-balance hc-pr-2 hc-font-semibold" : "hc-col-span-1"}
38
+ `}
39
+ >
40
+ <span className="hc-sr-only">{capitalize(field)}</span>
41
+ {value}
42
+ <br />
43
+ {specialFeaturePills(field)}
44
+ </Grid.Item>
45
+ );
46
+ })}
47
+ <Grid.Item className="md:hc-hidden">
48
+ {fieldsShown.includes("position") &&
49
+ <>
50
+ <div className="hc-flex hc-items-start">
51
+ <div className="hc-flex hc-justify-between hc-items-center hc-min-w-[100%]"> {/* Use percentage for minimum width */}
52
+ <h3 className="hc-font-bold hc-mb-3 hc-flex-1">{item.fields.position}</h3>
53
+ {includeFavorite && <div className="hc-flex hc-justify-end hc-pb-2">
54
+ <Icon
55
+ icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
56
+ size="hc-size-3.5"
57
+ iconClasses={isFavorite ? "hc-text-primary" : ""}
58
+ className={`hc-transition-opacity hc-duration-300 hc-cursor-pointer
59
+ ${isFavorite ? "hc-opacity-100" : "hc-text-uiText/60 group-hover:hc-opacity-100"}
60
+ `}
61
+ onClick={e => handleFavouriteClick(e)}
62
+ />
63
+ </div>
64
+ }
65
+ </div>
66
+ </div>
67
+ {specialFeatures && <div className='hc-pb-4'>{specialFeaturePills("position", true)} </div>}
68
+ </>
69
+ }
70
+
71
+ <ul className="hc-space-y-2 hc-text-xs">
72
+ {[
73
+ {
74
+ field: "category",
75
+ name: "Category",
76
+ icon: "icon-park-solid:tree-list"
77
+ },
78
+ {
79
+ field: "schedule",
80
+ name: "Schedule",
81
+ icon: "gravity-ui:clock-fill"
82
+ },
83
+ {
84
+ field: "cityState",
85
+ name: "Location",
86
+ icon: "fluent:location-16-filled"
87
+ },
88
+ {
89
+ field: "travelTime",
90
+ name: "Commute",
91
+ icon: "ri:pin-distance-fill"
92
+ }
93
+ ].map(listItem => (
94
+ (fieldsShown.includes(listItem.field) && item.fields[listItem.field]) &&
95
+ <li
96
+ key={listItem.field}
97
+ className="hc-flex hc-gap-2"
98
+ >
99
+ <Icon
100
+ icon={listItem.icon}
101
+ size="hc-size-3.5"
102
+ className="hc-text-uiAccent/30"
103
+ />
104
+ <span className="hc-sr-only">{listItem.name}</span>
105
+ {item.fields[listItem.field]}
106
+ </li>
107
+ ))}
108
+ </ul>
109
+ </Grid.Item>
110
+ </>
111
+ );
112
+ };
113
+
114
+ export default FieldMapper;
@@ -1,47 +1,49 @@
1
- import React from 'react';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- import Grid from '~/components/modules/grid';
5
- import HeaderItem from '~/components/modules/maps/list/header-item';
6
-
7
- const ListHeader = ({
8
- className,
9
- fieldsShown,
10
- fieldNames,
11
- fieldIsSortable = true,
12
- setSortSetting,
13
- sortSetting
14
- }) => {
15
- return (
16
- <Grid
17
- columns="hc-grid-flow-col hc-auto-cols-fr"
18
- gap="hc-gap-0"
19
- isAnimated={false}
20
- className={twMerge`
21
- hc-hidden md:hc-grid hc-bg-uiAccent/10 hc-border-b hc-border-uiAccent/10 hc-sticky hc-top-0 hc-z-10
22
- ${className ?? ""}
23
- `}
24
- >
25
- {fieldsShown.map(field => (
26
- <HeaderItem
27
- key={field}
28
- isSortable={fieldIsSortable}
29
- sortSetting={sortSetting}
30
- field={field}
31
- setSortSetting={setSortSetting}
32
- >
33
- {fieldNames[field]}
34
- </HeaderItem>
35
- ))}
36
- <HeaderItem key={"favorite"}
37
- isSortable={false}
38
- field={"favorite"}
39
- >
40
- Favorite
41
- </HeaderItem>
42
-
43
- </Grid>
44
- );
45
- };
46
-
47
- export default ListHeader;
1
+ import React from 'react';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ import Grid from '~/components/modules/grid';
5
+ import HeaderItem from '~/components/modules/list/header-item';
6
+
7
+ const ListHeader = ({
8
+ className,
9
+ fieldsShown,
10
+ fieldNames,
11
+ fieldIsSortable = true,
12
+ setSortSetting,
13
+ sortSetting,
14
+ includeFavorite = false
15
+ }) => {
16
+ return (
17
+ <Grid
18
+ columns="hc-grid-flow-col hc-auto-cols-fr"
19
+ gap="hc-gap-0"
20
+ isAnimated={false}
21
+ className={twMerge`
22
+ hc-hidden md:hc-grid hc-bg-uiAccent/10 hc-border-b hc-border-uiAccent/10 hc-sticky hc-top-0 hc-z-10
23
+ ${className ?? ""}
24
+ `}
25
+ >
26
+ {fieldsShown.map(field => (
27
+ <HeaderItem
28
+ key={field}
29
+ isSortable={fieldIsSortable}
30
+ sortSetting={sortSetting}
31
+ field={field}
32
+ setSortSetting={setSortSetting}
33
+ >
34
+ {fieldNames[field]}
35
+ </HeaderItem>
36
+ ))}
37
+ { includeFavorite == true &&
38
+ <HeaderItem key={"favorite"}
39
+ isSortable={false}
40
+ field={"favorite"}
41
+ >
42
+ Favorite
43
+ </HeaderItem>
44
+ }
45
+ </Grid>
46
+ );
47
+ };
48
+
49
+ export default ListHeader;