@abcagency/hc-ui-components 1.4.23 → 1.5.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.
- package/dist/components/HireControlMap.js +21 -34
- package/dist/components/HireControlMap.js.map +1 -1
- package/dist/components/containers/accordions/filter-container.js +5 -13
- package/dist/components/containers/accordions/filter-container.js.map +1 -1
- package/dist/components/containers/accordions/filter-item-container.js +9 -9
- package/dist/components/containers/accordions/filter-item-container.js.map +1 -1
- package/dist/components/containers/accordions/map-accordion-item-container.js +5 -10
- package/dist/components/containers/accordions/map-accordion-item-container.js.map +1 -1
- package/dist/components/containers/filter/commute-container.js +3 -3
- package/dist/components/containers/filter/commute-container.js.map +1 -1
- package/dist/components/containers/filter/filter-container.js +5 -6
- package/dist/components/containers/filter/filter-container.js.map +1 -1
- package/dist/components/containers/filter/filter-item-container.js +12 -12
- package/dist/components/containers/filter/filter-item-container.js.map +1 -1
- package/dist/components/containers/filter/location-container.js +5 -6
- package/dist/components/containers/filter/location-container.js.map +1 -1
- package/dist/components/containers/filter/points-of-interest-container.js +5 -5
- package/dist/components/containers/filter/points-of-interest-container.js.map +1 -1
- package/dist/components/containers/filter/points-of-interest-radio-item-container.js +2 -2
- package/dist/components/containers/filter/points-of-interest-radio-item-container.js.map +1 -1
- package/dist/components/containers/filter/search-container.js +2 -2
- package/dist/components/containers/filter/search-container.js.map +1 -1
- package/dist/components/containers/jobListing/listing-details-container.js +2 -2
- package/dist/components/containers/jobListing/listing-details-container.js.map +1 -1
- package/dist/components/containers/list/item-list-container.js +8 -8
- package/dist/components/containers/list/item-list-container.js.map +1 -1
- package/dist/components/containers/list/list-item/list-item-container.js +2 -2
- package/dist/components/containers/list/list-item/list-item-container.js.map +1 -1
- package/dist/components/containers/maps/info-window-content-container.js +2 -2
- package/dist/components/containers/maps/info-window-content-container.js.map +1 -1
- package/dist/components/containers/maps/map-container.js +9 -8
- package/dist/components/containers/maps/map-container.js.map +1 -1
- package/dist/components/containers/maps/map-list-container.js +5 -5
- package/dist/components/containers/maps/map-list-container.js.map +1 -1
- package/dist/components/containers/maps/map-marker-container.js +6 -6
- package/dist/components/containers/maps/map-marker-container.js.map +1 -1
- package/dist/components/modules/accordions/MapAccordionItem.js +5 -5
- package/dist/components/modules/accordions/MapAccordionItem.js.map +1 -1
- package/dist/components/modules/accordions/default.js +15 -15
- package/dist/components/modules/accordions/default.js.map +1 -1
- package/dist/components/modules/accordions/filterItem.js +4 -4
- package/dist/components/modules/accordions/filterItem.js.map +1 -1
- package/dist/components/modules/accordions/filters.js +6 -6
- package/dist/components/modules/accordions/filters.js.map +1 -1
- package/dist/components/modules/buttons/button-group-apply.js +19 -19
- package/dist/components/modules/buttons/button-group-apply.js.map +1 -1
- package/dist/components/modules/buttons/default.js +9 -9
- package/dist/components/modules/buttons/default.js.map +1 -1
- package/dist/components/modules/buttons/items-pill.js +2 -2
- package/dist/components/modules/buttons/items-pill.js.map +1 -1
- package/dist/components/modules/buttons/pill-wrapper.js +2 -2
- package/dist/components/modules/buttons/pill-wrapper.js.map +1 -1
- package/dist/components/modules/buttons/show-all-button.js +3 -3
- package/dist/components/modules/buttons/show-all-button.js.map +1 -1
- package/dist/components/modules/cards/default.js +11 -11
- package/dist/components/modules/cards/default.js.map +1 -1
- package/dist/components/modules/cards/filter.js +5 -5
- package/dist/components/modules/cards/filter.js.map +1 -1
- package/dist/components/modules/dialogs/apply-dialog.js +19 -19
- package/dist/components/modules/dialogs/apply-dialog.js.map +1 -1
- package/dist/components/modules/filter/commute.js +19 -18
- package/dist/components/modules/filter/commute.js.map +1 -1
- package/dist/components/modules/filter/index.js +10 -10
- package/dist/components/modules/filter/index.js.map +1 -1
- package/dist/components/modules/filter/item.js +6 -6
- package/dist/components/modules/filter/item.js.map +1 -1
- package/dist/components/modules/filter/location.js +6 -6
- package/dist/components/modules/filter/location.js.map +1 -1
- package/dist/components/modules/filter/radio-item.js +6 -6
- package/dist/components/modules/filter/radio-item.js.map +1 -1
- package/dist/components/modules/filter/search.js +10 -10
- package/dist/components/modules/filter/search.js.map +1 -1
- package/dist/components/modules/filter/sort.js +28 -28
- package/dist/components/modules/filter/sort.js.map +1 -1
- package/dist/components/modules/grid.js +4 -4
- package/dist/components/modules/grid.js.map +1 -1
- package/dist/components/modules/icon.js +4 -4
- package/dist/components/modules/icon.js.map +1 -1
- package/dist/components/modules/jobListing/listing-details.js +4 -4
- package/dist/components/modules/jobListing/listing-details.js.map +1 -1
- package/dist/components/modules/list/field-mapper-desktop.js +8 -8
- package/dist/components/modules/list/field-mapper-desktop.js.map +1 -1
- package/dist/components/modules/list/field-mapper-mobile.js +18 -18
- package/dist/components/modules/list/field-mapper-mobile.js.map +1 -1
- package/dist/components/modules/list/header-item.js +7 -7
- package/dist/components/modules/list/header-item.js.map +1 -1
- package/dist/components/modules/list/header.js +5 -5
- package/dist/components/modules/list/header.js.map +1 -1
- package/dist/components/modules/list/item-expand-card/index.js +3 -3
- package/dist/components/modules/list/item-expand-card/index.js.map +1 -1
- package/dist/components/modules/list/item-list.js +15 -15
- package/dist/components/modules/list/item-list.js.map +1 -1
- package/dist/components/modules/list/list-item/list-item.js +13 -13
- package/dist/components/modules/list/list-item/list-item.js.map +1 -1
- package/dist/components/modules/maps/info-window-card.js +2 -2
- package/dist/components/modules/maps/info-window-card.js.map +1 -1
- package/dist/components/modules/maps/info-window-content.js +5 -5
- package/dist/components/modules/maps/info-window-content.js.map +1 -1
- package/dist/components/modules/maps/map-list.js +5 -5
- package/dist/components/modules/maps/map-list.js.map +1 -1
- package/dist/components/modules/maps/map-marker.js +3 -3
- package/dist/components/modules/maps/map-marker.js.map +1 -1
- package/dist/components/modules/maps/map.js +5 -5
- package/dist/components/modules/maps/map.js.map +1 -1
- package/dist/components/modules/maps/place-marker.js +5 -5
- package/dist/components/modules/maps/place-marker.js.map +1 -1
- package/dist/components/modules/maps/tabs.js +21 -21
- package/dist/components/modules/maps/tabs.js.map +1 -1
- package/dist/contexts/mapContext.js +18 -18
- package/dist/contexts/mapContext.js.map +1 -1
- package/dist/contexts/mapListContext.js +34 -27
- package/dist/contexts/mapListContext.js.map +1 -1
- package/dist/contexts/placesContext.js +2 -2
- package/dist/contexts/placesContext.js.map +1 -1
- package/dist/contexts/themeContext.js +2 -2
- package/dist/contexts/themeContext.js.map +1 -1
- package/dist/contexts/trackEventContext.js +2 -2
- package/dist/contexts/trackEventContext.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/core/dist/floating-ui.core.js +34 -21
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +103 -30
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +12 -4
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +37 -15
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +9 -8
- package/dist/packages/hc-ui-components/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/primitive/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/primitive/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-accordion/dist/index.js +8 -6
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-accordion/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-arrow/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-arrow/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collapsible/dist/index.js +5 -4
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collapsible/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collection/dist/index.js +5 -3
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-collection/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-compose-refs/dist/index.js +24 -3
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-context/dist/index.js +9 -9
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-context/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dialog/dist/index.js +6 -4
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dialog/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-direction/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-direction/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-guards/dist/index.js +4 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-id/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-id/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-popper/dist/index.js +6 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-popper/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-portal/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-presence/dist/index.js +17 -6
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-presence/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-primitive/dist/index.js +4 -2
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-primitive/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-roving-focus/dist/index.js +8 -5
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-select/dist/index.js +77 -31
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-select/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-slot/dist/index.js +46 -38
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-tabs/dist/index.js +2 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-tabs/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +39 -15
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +2 -2
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-previous/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-previous/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-size/dist/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-use-size/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-visually-hidden/dist/index.js +16 -16
- package/dist/packages/hc-ui-components/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@react-google-maps/api/dist/esm.js +8086 -7852
- package/dist/packages/hc-ui-components/node_modules/@react-google-maps/api/dist/esm.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@remix-run/router/dist/router.js +2 -2
- package/dist/packages/hc-ui-components/node_modules/@remix-run/router/dist/router.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@tanstack/react-virtual/dist/esm/index.js +1 -1
- package/dist/packages/hc-ui-components/node_modules/@tanstack/react-virtual/dist/esm/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/index.js +213 -152
- package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/utils.js +6 -2
- package/dist/packages/hc-ui-components/node_modules/@tanstack/virtual-core/dist/esm/utils.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/aria-hidden/dist/es2015/index.js +3 -2
- package/dist/packages/hc-ui-components/node_modules/aria-hidden/dist/es2015/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +2 -2
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/UI.js +2 -2
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/UI.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +12 -8
- package/dist/packages/hc-ui-components/node_modules/react-remove-scroll/dist/es2015/handleScroll.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/react-router/dist/index.js +6 -6
- package/dist/packages/hc-ui-components/node_modules/react-router/dist/index.js.map +1 -1
- package/dist/packages/hc-ui-components/node_modules/react-router-dom/dist/index.js +7 -7
- package/dist/packages/hc-ui-components/node_modules/react-router-dom/dist/index.js.map +1 -1
- package/dist/services/listingAggregatorService.js +15 -19
- package/dist/services/listingAggregatorService.js.map +1 -1
- package/dist/services/listingEntityService.js +2 -3
- package/dist/services/listingEntityService.js.map +1 -1
- package/dist/services/listingService.js +16 -1
- package/dist/services/listingService.js.map +1 -1
- package/dist/styles/index.css +3 -1
- package/dist/types/contexts/mapContext.d.ts +0 -1
- package/dist/types/services/listingAggregatorService.d.ts +2 -2
- package/dist/types/services/listingEntityService.d.ts +3 -2
- package/dist/types/types/GetListingParams.d.ts +1 -1
- package/dist/types/types/ListingEntity.d.ts +1 -2
- package/dist/types/types/ListingFields.d.ts +2 -4
- package/dist/types/types/Listings.d.ts +1 -0
- package/dist/types/util/mapUtil.d.ts +3 -3
- package/dist/util/filterUtil.js +6 -6
- package/dist/util/filterUtil.js.map +1 -1
- package/dist/util/loading.js +3 -3
- package/dist/util/loading.js.map +1 -1
- package/dist/util/mapUtil.js +25 -37
- package/dist/util/mapUtil.js.map +1 -1
- package/package.json +17 -60
- package/src/components/HireControlMap.js +8 -19
- package/src/components/containers/accordions/filter-container.js +1 -6
- package/src/components/containers/accordions/filter-item-container.js +2 -2
- package/src/components/containers/accordions/map-accordion-item-container.js +2 -6
- package/src/components/containers/filter/filter-container.js +2 -3
- package/src/components/containers/filter/filter-item-container.js +10 -10
- package/src/components/containers/filter/location-container.js +3 -3
- package/src/components/containers/list/item-list-container.tsx +3 -3
- package/src/components/containers/maps/info-window-content-container.js +1 -1
- package/src/components/containers/maps/map-container.js +1 -2
- package/src/components/modules/buttons/button-group-apply.js +8 -8
- package/src/components/modules/dialogs/apply-dialog.js +2 -2
- package/src/components/modules/list/field-mapper-desktop.jsx +2 -2
- package/src/components/modules/list/field-mapper-mobile.jsx +8 -8
- package/src/components/modules/list/header-item.js +1 -1
- package/src/components/modules/maps/map-list.js +1 -1
- package/src/contexts/mapContext.tsx +16 -17
- package/src/contexts/mapListContext.tsx +58 -52
- package/src/services/listingAggregatorService.ts +21 -29
- package/src/services/listingEntityService.ts +3 -3
- package/src/services/listingService.ts +11 -1
- package/src/types/GetListingParams.ts +1 -1
- package/src/types/ListingEntity.ts +1 -2
- package/src/types/ListingFields.ts +2 -4
- package/src/types/Listings.ts +1 -0
- package/src/util/filterUtil.js +6 -6
- package/src/util/mapUtil.js +41 -52
- package/src/styles/components.css +0 -30
|
@@ -53,7 +53,6 @@ interface MapListContextProps {
|
|
|
53
53
|
hiddenFilters?: string[];
|
|
54
54
|
containerStyle?: any;
|
|
55
55
|
ExpandListComponent?: React.ComponentType<{ listing: any }> | ((listing: any) => JSX.Element) | null;
|
|
56
|
-
noEntities?: boolean;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
const MapListContext = createContext<MapListContextProps | undefined>(undefined);
|
|
@@ -94,11 +93,8 @@ interface MapListProviderProps {
|
|
|
94
93
|
defaultFilters?: Record<string, any>;
|
|
95
94
|
containerStyle?: any;
|
|
96
95
|
localStorageKey: string;
|
|
97
|
-
getListingEntitiesCallback?: (origin?: string) => Promise<
|
|
96
|
+
getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>;
|
|
98
97
|
ExpandListComponent?: React.ComponentType<{ listing: Listing }> | ((listing: Listing) => JSX.Element) | null;
|
|
99
|
-
hideMap?: boolean;
|
|
100
|
-
hideFilters?: boolean;
|
|
101
|
-
noEntities?: boolean;
|
|
102
98
|
}
|
|
103
99
|
|
|
104
100
|
export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
@@ -122,24 +118,33 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
122
118
|
containerStyle,
|
|
123
119
|
ExpandListComponent,
|
|
124
120
|
getListingEntitiesCallback,
|
|
125
|
-
localStorageKey
|
|
126
|
-
hideMap = false,
|
|
127
|
-
hideFilters = false,
|
|
128
|
-
noEntities = false
|
|
121
|
+
localStorageKey
|
|
129
122
|
}) => {
|
|
130
123
|
const firstLoadFilters = () =>{
|
|
131
124
|
let urlFilters = filtersFromURL(window.location)?.filters;
|
|
132
125
|
return (setFiltersUrl === true && urlFilters && Object.keys(urlFilters).length > 0) ? urlFilters : getStorageObject(localStorageKey + 'selectedFilters', {}) || {}
|
|
133
126
|
}
|
|
127
|
+
|
|
128
|
+
const firstLoadQuery = (): string | null => {
|
|
129
|
+
if (resetFilters) return null;
|
|
130
|
+
// Check URL first
|
|
131
|
+
const urlData = filtersFromURL(window.location);
|
|
132
|
+
if (setFiltersUrl === true && urlData?.query) {
|
|
133
|
+
return urlData.query;
|
|
134
|
+
}
|
|
135
|
+
// Fall back to localStorage
|
|
136
|
+
return getQuery(localStorageKey);
|
|
137
|
+
}
|
|
138
|
+
|
|
134
139
|
const [allListings, setAllListings] = useState<Listing[]>([]);
|
|
135
140
|
const [filteredListings, setFilteredListings] = useState<Listing[]>([]);
|
|
136
141
|
const [loading, setLoading] = useState<boolean>(false);
|
|
137
142
|
const [mapItems, setMapItems] = useState<any>(getStorageObject(localStorageKey + 'mapItems', []) || []);
|
|
138
|
-
const [query, setQuery] = useState<string | null>(() =>
|
|
143
|
+
const [query, setQuery] = useState<string | null>(() => firstLoadQuery());
|
|
139
144
|
const [sortSetting, setSortSetting] = useState<{ field: string; type: string }>(getStorageObject(localStorageKey + 'sortSetting', { field: 'position', type: 'asc' }) || { field: 'position', type: 'asc' });
|
|
140
145
|
const [listingEntities, setListingEntities] = useState<Record<number, ListingEntity> | null>({});
|
|
141
146
|
const [firstLoad, setFirstLoad] = useState<boolean>(true);
|
|
142
|
-
const [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject(
|
|
147
|
+
const [commuteLocation, setCommuteLocation] = useState<any | null>(getStorageObject('commuteLocation'));
|
|
143
148
|
const [selectedFilters, setSelectedFilters] = useState<Record<string, any>>(() => resetFilters ? {} : firstLoadFilters());
|
|
144
149
|
const [filterOptions, setFilterOptions] = useState<any>();
|
|
145
150
|
const [recruiters, setRecruiters] = useState<Record<number, Recruiter>>({});
|
|
@@ -156,7 +161,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
156
161
|
if (!sortSetting) return;
|
|
157
162
|
localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
|
|
158
163
|
setNewFilteredListings(filteredListings);
|
|
159
|
-
}, [sortSetting, localStorageKey
|
|
164
|
+
}, [sortSetting, localStorageKey]);
|
|
160
165
|
|
|
161
166
|
useEffect(() => {
|
|
162
167
|
const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
|
|
@@ -167,32 +172,34 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
167
172
|
setStorageObject(localStorageKey + "commuteLocation", commuteLocation);
|
|
168
173
|
}, [commuteLocation, localStorageKey]);
|
|
169
174
|
|
|
170
|
-
|
|
171
175
|
useEffect(() => {
|
|
172
|
-
if (!commuteLocation
|
|
176
|
+
if (!commuteLocation) return;
|
|
173
177
|
|
|
174
178
|
async function fetchEntities() {
|
|
179
|
+
const distinctEntityIds = [
|
|
180
|
+
...new Set(allListings.map(listing => listing.entityId ?? -1))
|
|
181
|
+
];
|
|
175
182
|
try {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
183
|
+
console.log(getListingEntitiesCallback);
|
|
184
|
+
console.log("fetching entities")
|
|
185
|
+
const fetchedEntities = getListingEntitiesCallback !== null && getListingEntitiesCallback !== undefined ? await getListingEntitiesCallback(distinctEntityIds,
|
|
186
|
+
`${commuteLocation.lat}, ${commuteLocation.lng}`) : await getListingEntities(
|
|
187
|
+
distinctEntityIds,
|
|
188
|
+
`${commuteLocation.lat}, ${commuteLocation.lng}`
|
|
189
|
+
);
|
|
182
190
|
setListingEntities(fetchedEntities);
|
|
183
|
-
|
|
184
|
-
const newFilteredListings: Listing[] = [...filteredListings];
|
|
191
|
+
const newFilteredListings: Listing[] = [...filteredListings] ?? [];
|
|
185
192
|
for (let i = 0; i < allListings.length; i++) {
|
|
186
193
|
const listing = newFilteredListings[i];
|
|
187
194
|
if (
|
|
188
195
|
listing &&
|
|
189
196
|
listing.fields &&
|
|
190
|
-
listing.
|
|
191
|
-
listing.
|
|
197
|
+
listing.entityId !== undefined &&
|
|
198
|
+
listing.entityId !== -1
|
|
192
199
|
) {
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
200
|
+
const entityId = listing.entityId;
|
|
201
|
+
const travelTime = fetchedEntities[entityId]?.travelTime;
|
|
202
|
+
|
|
196
203
|
if (travelTime !== undefined && listing.fields) {
|
|
197
204
|
listing.fields.travelTime = travelTime;
|
|
198
205
|
}
|
|
@@ -204,35 +211,35 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
204
211
|
}
|
|
205
212
|
|
|
206
213
|
fetchEntities();
|
|
207
|
-
}, [commuteLocation, allListings, siteConfig.companyId
|
|
214
|
+
}, [commuteLocation, allListings, siteConfig.companyId]);
|
|
208
215
|
|
|
209
216
|
useEffect(() => {
|
|
210
217
|
const handleFetchListings = async () => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
218
|
+
if (!getStorageObject(localStorageKey + 'listings') ?? [].length) {
|
|
219
|
+
setLoading(true);
|
|
220
|
+
}
|
|
214
221
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
222
|
+
try {
|
|
223
|
+
const {
|
|
224
|
+
listingsResult,
|
|
225
|
+
fetchedEntities,
|
|
226
|
+
distinctItems
|
|
227
|
+
} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback);
|
|
228
|
+
if (defaultFilters) {
|
|
229
|
+
const filteredListings = listingsResult.filter(listing => {
|
|
230
|
+
if (!listing.fields) return false;
|
|
224
231
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
232
|
+
return Object.keys(defaultFilters).every(filterKey => {
|
|
233
|
+
const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
|
|
234
|
+
const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
|
|
235
|
+
return filterValues.includes(listingValue);
|
|
236
|
+
});
|
|
229
237
|
});
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
setListingEntities(entitiesByKey);
|
|
238
|
+
setAllListings(filteredListings);
|
|
239
|
+
} else {
|
|
240
|
+
setAllListings(listingsResult);
|
|
241
|
+
}
|
|
242
|
+
setListingEntities(fetchedEntities);
|
|
236
243
|
setMapItems(distinctItems);
|
|
237
244
|
} catch (error) {
|
|
238
245
|
console.log(error);
|
|
@@ -362,8 +369,7 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
362
369
|
defaultFilters,
|
|
363
370
|
hiddenFilters,
|
|
364
371
|
containerStyle,
|
|
365
|
-
ExpandListComponent
|
|
366
|
-
noEntities
|
|
372
|
+
ExpandListComponent
|
|
367
373
|
}}>
|
|
368
374
|
{children}
|
|
369
375
|
</MapListContext.Provider>
|
|
@@ -6,8 +6,7 @@ import { ListingEntity } from '~/types/ListingEntity';
|
|
|
6
6
|
|
|
7
7
|
interface FetchListingsResult {
|
|
8
8
|
listingsResult: Listing[];
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
fetchedEntities: Record<number, ListingEntity>;
|
|
11
10
|
distinctItems: any; // Update this type based on the return type of getDistinctItemsByProximity
|
|
12
11
|
}
|
|
13
12
|
|
|
@@ -15,46 +14,39 @@ const fetchListings = async (
|
|
|
15
14
|
commuteLocation: any | null = null,
|
|
16
15
|
entities: ListingEntity[] | null,
|
|
17
16
|
listings: Listing[] | null,
|
|
18
|
-
getListingEntitiesCallback?: (origin?: string) => Promise<ListingEntity[]>,
|
|
19
|
-
noEntities: boolean = false
|
|
17
|
+
getListingEntitiesCallback?: (entityIds: number[], origin?: string) => Promise<ListingEntity[]>,
|
|
20
18
|
): Promise<FetchListingsResult> => {
|
|
21
19
|
try {
|
|
22
20
|
const listingsResult = listings && listings.length > 0 ? listings : await getListings();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
const entity = entitiesByKey[listing.fields.entityKey] || entitiesByKey[listing.fields.entityKey.toLowerCase()];
|
|
41
|
-
console.log("Entity for listing with travel time", listing.fields.entityKey, entity);
|
|
42
|
-
|
|
43
|
-
if (entity) {
|
|
44
|
-
listing.fields.travelTime = entity.travelTime;
|
|
45
|
-
}
|
|
21
|
+
const distinctEntityIds: number[] = [
|
|
22
|
+
...new Set(listingsResult.map(listing => listing.entityId))
|
|
23
|
+
] as number[];
|
|
24
|
+
|
|
25
|
+
const fetchedEntities = !commuteLocation
|
|
26
|
+
? entities && entities.length > 0 ? entities : !getListingEntitiesCallback ? await getListingEntities(distinctEntityIds) : await getListingEntitiesCallback(distinctEntityIds)
|
|
27
|
+
: !getListingEntitiesCallback ? await getListingEntities(
|
|
28
|
+
distinctEntityIds,
|
|
29
|
+
`${commuteLocation.lat}, ${commuteLocation.lng}`
|
|
30
|
+
) : await getListingEntitiesCallback( distinctEntityIds,
|
|
31
|
+
`${commuteLocation.lat}, ${commuteLocation.lng}`);
|
|
32
|
+
for (let i = 0; i < listingsResult.length; i++) {
|
|
33
|
+
const listing = listingsResult[i];
|
|
34
|
+
if (listing.entityId && listing.entityId !== -1 && listing.fields) {
|
|
35
|
+
const entity = fetchedEntities[listing.entityId];
|
|
36
|
+
if (entity) {
|
|
37
|
+
listing.fields.travelTime = entity.travelTime;
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
41
|
|
|
50
42
|
const distinctItems = getDistinctItemsByProximity(
|
|
51
43
|
listingsResult,
|
|
52
|
-
|
|
44
|
+
fetchedEntities
|
|
53
45
|
);
|
|
54
46
|
|
|
55
47
|
return {
|
|
56
48
|
listingsResult,
|
|
57
|
-
|
|
49
|
+
fetchedEntities,
|
|
58
50
|
distinctItems
|
|
59
51
|
};
|
|
60
52
|
} catch (error) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import api from '~/apis/hcApi';
|
|
2
|
+
import { ListingEntity } from '~/types/ListingEntity';
|
|
2
3
|
|
|
3
|
-
export const getListingEntities = async (origin = ''): Promise<
|
|
4
|
+
export const getListingEntities = async (entityIds: number[], origin = ''): Promise<ListingEntity[]> => {
|
|
4
5
|
try {
|
|
5
|
-
|
|
6
|
-
const response = await api.get<any>(`/listingentities/MapEntities?origin=${origin}`);
|
|
6
|
+
const response = await api.post<ListingEntity[]>(`/ListingEntities?origin=${origin}`, entityIds);
|
|
7
7
|
return response;
|
|
8
8
|
} catch (error) {
|
|
9
9
|
console.error("Error fetching listing entities:", error);
|
|
@@ -5,8 +5,18 @@ import { Listing } from '../types/Listings';
|
|
|
5
5
|
|
|
6
6
|
export const getListings = async (params?: GetListingsParams): Promise<Listing[]> => {
|
|
7
7
|
try {
|
|
8
|
-
const
|
|
8
|
+
const query = new URLSearchParams();
|
|
9
9
|
|
|
10
|
+
if (params) {
|
|
11
|
+
if (params.location) params.location.forEach(loc => query.append('location', loc));
|
|
12
|
+
if (params.category) params.category.forEach(cat => query.append('category', cat));
|
|
13
|
+
if (params.categoryClass) params.categoryClass.forEach(catClass => query.append('categoryClass', catClass));
|
|
14
|
+
if (params.education) params.education.forEach(edu => query.append('education', edu));
|
|
15
|
+
if (params.city) params.city.forEach(cty => query.append('city', cty));
|
|
16
|
+
if (params.state) params.state.forEach(st => query.append('state', st));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const response = await api.get(`/Listings?${query.toString()}`);
|
|
10
20
|
return response as Listing[];
|
|
11
21
|
} catch (error) {
|
|
12
22
|
console.error(error);
|
|
@@ -2,10 +2,9 @@ export type ListingFields = {
|
|
|
2
2
|
posted?: string;
|
|
3
3
|
subTitle?: string;
|
|
4
4
|
education?: string;
|
|
5
|
-
|
|
5
|
+
position?: string;
|
|
6
6
|
category?: string;
|
|
7
|
-
|
|
8
|
-
applyUrl?: string;
|
|
7
|
+
categoryClass?: string;
|
|
9
8
|
shift?: string;
|
|
10
9
|
custom1?: string;
|
|
11
10
|
custom2?: string;
|
|
@@ -23,6 +22,5 @@ export type ListingFields = {
|
|
|
23
22
|
useClientJobUrl?: boolean;
|
|
24
23
|
dateCreated: Date;
|
|
25
24
|
dateLastEdited?: Date;
|
|
26
|
-
entityKey: string;
|
|
27
25
|
travelTime?: string;
|
|
28
26
|
}
|
package/src/types/Listings.ts
CHANGED
package/src/util/filterUtil.js
CHANGED
|
@@ -82,17 +82,17 @@ export const generateFilterOptions = (
|
|
|
82
82
|
if (fieldName === parentField && filterOptions?.filters) {
|
|
83
83
|
return filterOptions.filters.find(filter => filter.id === fieldName);
|
|
84
84
|
}
|
|
85
|
-
if(fieldName == '
|
|
85
|
+
if(fieldName == 'categoryClass'){
|
|
86
86
|
return {
|
|
87
87
|
id: fieldName,
|
|
88
88
|
title: siteConfig.fieldNames[fieldName],
|
|
89
89
|
items: getFilterOptions(allListings, allListings, fieldName)
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
|
-
if(fieldName == '
|
|
93
|
-
const
|
|
92
|
+
if(fieldName == 'category' && selectedFilters.categoryClass){
|
|
93
|
+
const categoryClassKeys = Object.keys(selectedFilters.categoryClass);
|
|
94
94
|
const filteredListings = allListings.filter(
|
|
95
|
-
x =>
|
|
95
|
+
x => categoryClassKeys.includes(x.fields?.categoryClass)
|
|
96
96
|
);
|
|
97
97
|
return {
|
|
98
98
|
id: fieldName,
|
|
@@ -255,9 +255,9 @@ function searchResults(results, query) {
|
|
|
255
255
|
'fields.posted',
|
|
256
256
|
'fields.subtitle',
|
|
257
257
|
'fields.education',
|
|
258
|
-
'fields.
|
|
258
|
+
'fields.position',
|
|
259
259
|
'fields.category',
|
|
260
|
-
'fields.
|
|
260
|
+
'fields.categoryclass',
|
|
261
261
|
'fields.shift',
|
|
262
262
|
'fields.citystate',
|
|
263
263
|
'fields.city',
|
package/src/util/mapUtil.js
CHANGED
|
@@ -1,59 +1,54 @@
|
|
|
1
|
-
export const getDistinctItemsByProximity = (items,
|
|
1
|
+
export const getDistinctItemsByProximity = (items, listingEntitiesDetails) => {
|
|
2
2
|
const clusters = {};
|
|
3
3
|
|
|
4
|
-
if (!
|
|
5
|
-
|
|
6
|
-
const listingEntitiesDetails = Array.isArray(listingEntitiesDetailsInput)
|
|
7
|
-
? listingEntitiesDetailsInput.reduce((acc, entity) => {
|
|
8
|
-
if (entity?.entityKey) acc[entity.entityKey.toLowerCase()] = entity;
|
|
9
|
-
return acc;
|
|
10
|
-
}, {})
|
|
11
|
-
: Object.keys(listingEntitiesDetailsInput).reduce((acc, key) => {
|
|
12
|
-
acc[key.toLowerCase()] = listingEntitiesDetailsInput[key];
|
|
13
|
-
return acc;
|
|
14
|
-
}, {});
|
|
4
|
+
if (!listingEntitiesDetails) return [];
|
|
15
5
|
|
|
16
6
|
const closeItemPairs = findCloseItems(listingEntitiesDetails);
|
|
17
7
|
if (closeItemPairs.length > 0) {
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
listingEntitiesDetails = adjustItemPositions(
|
|
9
|
+
listingEntitiesDetails,
|
|
10
|
+
closeItemPairs
|
|
11
|
+
);
|
|
20
12
|
}
|
|
21
13
|
|
|
22
14
|
items?.forEach(item => {
|
|
23
|
-
|
|
24
|
-
if (!entityKey || entityKey === '-1') return;
|
|
25
|
-
const entityDetails = listingEntitiesDetails[entityKey.toLowerCase()];
|
|
26
|
-
if (!entityDetails) {
|
|
27
|
-
console.error(`Details not found for entityKey: ${entityKey}`);
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
15
|
+
if(item.entityId !== -1){
|
|
30
16
|
|
|
31
|
-
|
|
17
|
+
const entityDetails = listingEntitiesDetails[item.entityId];
|
|
32
18
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
clusters[
|
|
41
|
-
|
|
19
|
+
if (!entityDetails) {
|
|
20
|
+
console.error(`Details not found for entityId: ${item.entityId}`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
item.mapDetails = entityDetails;
|
|
25
|
+
|
|
26
|
+
if (!clusters[item.entityId]) {
|
|
27
|
+
clusters[item.entityId] = {
|
|
28
|
+
...item.mapDetails,
|
|
29
|
+
items: { [item.id]: item }
|
|
30
|
+
};
|
|
31
|
+
} else {
|
|
32
|
+
clusters[item.entityId].items[item.id] = item;
|
|
33
|
+
}}
|
|
42
34
|
});
|
|
43
35
|
|
|
44
36
|
return Object.values(clusters);
|
|
45
37
|
};
|
|
46
38
|
|
|
47
|
-
export const findCloseItems =
|
|
39
|
+
export const findCloseItems = itemsObj => {
|
|
48
40
|
const closeItems = [];
|
|
49
|
-
const items = Object.values(
|
|
41
|
+
const items = Object.values(itemsObj); // Convert object to array for iteration
|
|
50
42
|
const proximityThreshold = 0.0001;
|
|
51
43
|
|
|
52
44
|
for (let i = 0; i < items.length; i++) {
|
|
53
45
|
for (let j = i + 1; j < items.length; j++) {
|
|
54
46
|
const distanceLat = Math.abs(items[i].latitude - items[j].latitude);
|
|
55
47
|
const distanceLng = Math.abs(items[i].longitude - items[j].longitude);
|
|
56
|
-
if (
|
|
48
|
+
if (
|
|
49
|
+
distanceLat < proximityThreshold &&
|
|
50
|
+
distanceLng < proximityThreshold
|
|
51
|
+
) {
|
|
57
52
|
closeItems.push({ item1: items[i], item2: items[j] });
|
|
58
53
|
}
|
|
59
54
|
}
|
|
@@ -62,18 +57,14 @@ export const findCloseItems = entitiesByKey => {
|
|
|
62
57
|
return closeItems;
|
|
63
58
|
};
|
|
64
59
|
|
|
65
|
-
export const adjustItemPositions = (
|
|
60
|
+
export const adjustItemPositions = (itemsObj, closeItemPairs) => {
|
|
66
61
|
const adjustmentValue = 0.0001;
|
|
67
|
-
const adjustedItems = { ...
|
|
62
|
+
const adjustedItems = { ...itemsObj }; // Create a shallow copy of the object
|
|
68
63
|
|
|
69
64
|
closeItemPairs.forEach(pair => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
adjustedItems[
|
|
73
|
-
...adjustedItems[key2],
|
|
74
|
-
latitude: adjustedItems[key2].latitude + adjustmentValue,
|
|
75
|
-
longitude: adjustedItems[key2].longitude + adjustmentValue
|
|
76
|
-
};
|
|
65
|
+
if (adjustedItems[pair.item1.id] && adjustedItems[pair.item2.id]) {
|
|
66
|
+
adjustedItems[pair.item2.id].latitude += adjustmentValue;
|
|
67
|
+
adjustedItems[pair.item2.id].longitude += adjustmentValue;
|
|
77
68
|
}
|
|
78
69
|
});
|
|
79
70
|
|
|
@@ -83,15 +74,13 @@ export const adjustItemPositions = (entitiesByKey, closeItemPairs) => {
|
|
|
83
74
|
export const clusterOptions = (clusterGridSize, fillColor) => {
|
|
84
75
|
return {
|
|
85
76
|
gridSize: clusterGridSize,
|
|
86
|
-
maxZoom:
|
|
87
|
-
styles:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
]
|
|
77
|
+
maxZoom:15,
|
|
78
|
+
styles:[{
|
|
79
|
+
url: createSvgDataUri(fillColor),
|
|
80
|
+
textColor:'white',
|
|
81
|
+
height: 40,
|
|
82
|
+
width: 40
|
|
83
|
+
}]
|
|
95
84
|
};
|
|
96
85
|
};
|
|
97
86
|
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
@config "../../tailwind.config.js";
|
|
2
|
-
|
|
3
|
-
/* Only include components and utilities - no base styles */
|
|
4
|
-
@tailwind components;
|
|
5
|
-
@tailwind utilities;
|
|
6
|
-
|
|
7
|
-
@layer components {
|
|
8
|
-
.track * {
|
|
9
|
-
@apply hc-pointer-events-none;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.stretched-link::after {
|
|
13
|
-
@apply hc-content-[''] hc-absolute hc-inset-0 hc-z-[1] hc-pointer-events-auto hc-bg-transparent;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/* Component-specific utilities */
|
|
18
|
-
.fit-content {
|
|
19
|
-
height: fit-content;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* CSS Variables for theming - these should be set by the consuming app */
|
|
23
|
-
:root {
|
|
24
|
-
--ui-text: #000000;
|
|
25
|
-
--ui-accent: #959595;
|
|
26
|
-
--primary: #959595;
|
|
27
|
-
--primary-dark: #959595;
|
|
28
|
-
--secondary: #959595;
|
|
29
|
-
--secondary-dark: #959595;
|
|
30
|
-
}
|