@abcagency/hc-ui-components 1.0.4 → 1.0.6
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/globals.css +1 -1
- package/dist/index.js +237 -376
- package/package.json +37 -38
- package/rollup.config.js +3 -1
- package/src/components/layout/footer.js +7 -7
- package/src/components/layout/layout.js +1 -1
- package/src/components/modules/accordions/MapAccordionItem.js +69 -69
- package/src/components/modules/accordions/default.js +8 -8
- package/src/components/modules/accordions/filterItem.js +53 -53
- package/src/components/modules/accordions/filters.js +44 -44
- package/src/components/modules/animations/slidein.js +1 -1
- package/src/components/modules/buttons/button-group-apply.js +85 -85
- package/src/components/modules/buttons/commute-pill.js +21 -21
- package/src/components/modules/buttons/default.js +16 -16
- package/src/components/modules/buttons/items-pill.js +2 -2
- package/src/components/modules/buttons/pill-wrapper.js +1 -1
- package/src/components/modules/buttons/show-all-button.js +20 -20
- package/src/components/modules/cards/default.js +8 -8
- package/src/components/modules/cards/filter.js +5 -5
- package/src/components/modules/dialogs/apply-dialog.js +47 -47
- package/src/components/modules/filter/commute.js +151 -149
- package/src/components/modules/filter/index.js +86 -86
- package/src/components/modules/filter/item.js +77 -77
- package/src/components/modules/filter/location.js +13 -13
- package/src/components/modules/filter/points-of-interest.js +6 -6
- package/src/components/modules/filter/radio-item.js +51 -51
- package/src/components/modules/filter/search.js +91 -89
- package/src/components/modules/filter/sort.js +83 -83
- package/src/components/modules/grid.js +17 -36
- package/src/components/modules/icon.js +33 -33
- package/src/components/modules/jobListing/listing-details.js +88 -88
- package/src/components/modules/maps/info-window-card.js +17 -17
- package/src/components/modules/maps/info-window-content.js +60 -60
- package/src/components/modules/maps/list/field-mapper.js +111 -113
- package/src/components/modules/maps/list/header-item.js +90 -90
- package/src/components/modules/maps/list/header.js +46 -46
- package/src/components/modules/maps/list/index.js +104 -104
- package/src/components/modules/maps/list/item-expand-card/index.js +1 -1
- package/src/components/modules/maps/list/item-expand-card/recruiter-contact-nav.js +3 -3
- package/src/components/modules/maps/list/item-expand-card/recruiter-details.js +4 -4
- package/src/components/modules/maps/list/list-item/index.js +133 -133
- package/src/components/modules/maps/map-list.js +73 -73
- package/src/components/modules/maps/map.js +26 -25
- package/src/components/modules/maps/tabs.js +79 -79
- package/src/components/modules/navigation/nav-link.js +2 -2
- package/src/components/modules/navigation/navbar.js +21 -24
- package/src/components/modules/navigation/skip-link.js +1 -1
- package/src/components/modules/navigation/social.js +3 -3
- package/src/components/modules/sections/default.js +2 -2
- package/src/contexts/mapListContext.js +19 -18
- package/src/index.js +103 -116
- package/src/styles/globals.css +23 -25
- package/src/tailwind/tailwind.config.js +6 -5
- package/src/util/fieldMapper.js +1 -1
- package/src/util/loading.js +2 -2
- package/src/components/modules/filter/search.js.rej +0 -9
- package/src/components/modules/form.js +0 -362
- package/src/components/modules/jumbotron.js +0 -81
- package/src/components/modules/video-player.js +0 -126
package/package.json
CHANGED
|
@@ -1,38 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@abcagency/hc-ui-components",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"build": "rollup -c",
|
|
8
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
9
|
-
},
|
|
10
|
-
"keywords": [],
|
|
11
|
-
"author": "",
|
|
12
|
-
"license": "ISC",
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"@babel/
|
|
17
|
-
"@babel/
|
|
18
|
-
"@
|
|
19
|
-
"@
|
|
20
|
-
"@rollup/plugin-
|
|
21
|
-
"@rollup/plugin-
|
|
22
|
-
"@rollup/plugin-
|
|
23
|
-
"@
|
|
24
|
-
"@
|
|
25
|
-
"@tailwindcss/
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@abcagency/hc-ui-components",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "rollup -c",
|
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [],
|
|
11
|
+
"author": "",
|
|
12
|
+
"license": "ISC",
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@babel/cli": "^7.24.5",
|
|
15
|
+
"@babel/core": "^7.24.5",
|
|
16
|
+
"@babel/preset-env": "^7.24.5",
|
|
17
|
+
"@babel/preset-react": "^7.24.1",
|
|
18
|
+
"@rollup/plugin-alias": "^5.1.0",
|
|
19
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
20
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
21
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
22
|
+
"@rollup/plugin-replace": "^5.0.5",
|
|
23
|
+
"@tailwindcss/aspect-ratio": "^0.4.2",
|
|
24
|
+
"@tailwindcss/forms": "^0.5.7",
|
|
25
|
+
"@tailwindcss/typography": "^0.5.13",
|
|
26
|
+
"autoprefixer": "^10.4.19",
|
|
27
|
+
"dotenv": "^16.4.5",
|
|
28
|
+
"postcss": "^8.4.38",
|
|
29
|
+
"postcss-prefixer": "^3.0.0",
|
|
30
|
+
"postcss-preset-env": "^9.5.13",
|
|
31
|
+
"rollup": "^4.17.2",
|
|
32
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
33
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
34
|
+
"tailwindcss": "^3.4.3",
|
|
35
|
+
"tailwindcss-animate": "^1.0.7"
|
|
36
|
+
}
|
|
37
|
+
}
|
package/rollup.config.js
CHANGED
|
@@ -7,6 +7,7 @@ const commonjs = require('@rollup/plugin-commonjs');
|
|
|
7
7
|
const replace = require('@rollup/plugin-replace');
|
|
8
8
|
const dotenv = require('dotenv');
|
|
9
9
|
const postcss = require('rollup-plugin-postcss');
|
|
10
|
+
const prefixer = require('postcss-prefixer');
|
|
10
11
|
dotenv.config();
|
|
11
12
|
|
|
12
13
|
const plugins = [
|
|
@@ -18,7 +19,8 @@ const plugins = [
|
|
|
18
19
|
minimize: true,
|
|
19
20
|
plugins: [
|
|
20
21
|
require('tailwindcss'),
|
|
21
|
-
require('autoprefixer')
|
|
22
|
+
require('autoprefixer'),
|
|
23
|
+
|
|
22
24
|
],
|
|
23
25
|
}),
|
|
24
26
|
replace({
|
|
@@ -5,13 +5,13 @@ import site from '~/data/site.json';
|
|
|
5
5
|
|
|
6
6
|
const Footer = () => {
|
|
7
7
|
return (
|
|
8
|
-
<footer className="px-4 py-3 bg-slate-100 text-gray-700 text-center text-xs">
|
|
9
|
-
<div className="container flex justify-between items-center">
|
|
10
|
-
<p className="m-0">
|
|
8
|
+
<footer className="hc-px-4 hc-py-3 hc-bg-slate-100 hc-text-gray-700 hc-text-center hc-text-xs">
|
|
9
|
+
<div className="hc-container hc-flex hc-justify-between hc-items-center">
|
|
10
|
+
<p className="hc-m-0">
|
|
11
11
|
© {new Date().getFullYear()}. <a href={`${site.copyright.url}`} target="_blank">{site.copyright.name}</a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
<div className="flex items-center gap-3">
|
|
14
|
+
<div className="hc-flex hc-items-center hc-gap-3">
|
|
15
15
|
<NavSocial />
|
|
16
16
|
|
|
17
17
|
<Button.Scroll
|
|
@@ -19,10 +19,10 @@ const Footer = () => {
|
|
|
19
19
|
variant="icon"
|
|
20
20
|
size="sq"
|
|
21
21
|
>
|
|
22
|
-
<span className="sr-only">To the top!</span>
|
|
22
|
+
<span className="hc-sr-only">To the top!</span>
|
|
23
23
|
<Button.Icon
|
|
24
|
-
icon="mdi:arrow-collapse-up"
|
|
25
|
-
size="
|
|
24
|
+
icon="mdi:hc-arrow-collapse-up"
|
|
25
|
+
size="hc-size-4"
|
|
26
26
|
/>
|
|
27
27
|
</Button.Scroll>
|
|
28
28
|
</div>
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import Accordion from "~/components/modules/accordions/default";
|
|
2
|
-
import ListItem from "~/components/modules/maps/list/list-item";
|
|
3
|
-
import ItemExpandCard from "~/components/modules/maps/list/item-expand-card";
|
|
4
|
-
import { useMap } from "~/contexts/mapContext";
|
|
5
|
-
import { setStorageObject } from "~/util/localStorageUtil";
|
|
6
|
-
import { useEffect } from "react";
|
|
7
|
-
import { useMapList } from "~/contexts/mapListContext";
|
|
8
|
-
import React from 'react'
|
|
9
|
-
const MapAccordionItem = ({
|
|
10
|
-
item,
|
|
11
|
-
itemRefs,
|
|
12
|
-
itemExpandedContent,
|
|
13
|
-
fieldsShown,
|
|
14
|
-
showMap,
|
|
15
|
-
hasListItemSelected,
|
|
16
|
-
specialFeatures,
|
|
17
|
-
isActive
|
|
18
|
-
}) => {
|
|
19
|
-
const {
|
|
20
|
-
mapItems,
|
|
21
|
-
recruiters,
|
|
22
|
-
setMobileTab,
|
|
23
|
-
favorites,
|
|
24
|
-
handleSettingFavorites
|
|
25
|
-
} = useMapList();
|
|
26
|
-
const { selectItem } = useMap();
|
|
27
|
-
const setSelectedItemAndZoomMap = item => {
|
|
28
|
-
if (isActive) {
|
|
29
|
-
localStorage.removeItem("selectedListItem");
|
|
30
|
-
mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
|
|
31
|
-
selectItem(null, null, 9, { lat: 39.8283, lng: -98.5795 });
|
|
32
|
-
} else {
|
|
33
|
-
setStorageObject("selectedListItem", item);
|
|
34
|
-
let location = mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
|
|
35
|
-
selectItem(item, location, 12, {
|
|
36
|
-
lat: location?.latitude,
|
|
37
|
-
lng: location?.longitude
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
return (
|
|
42
|
-
<Accordion.Item key={item.id} id={item.id}>
|
|
43
|
-
<Accordion.Trigger.Blank>
|
|
44
|
-
<ListItem
|
|
45
|
-
ref={el => (itemRefs.current[item.id] = el)}
|
|
46
|
-
id={item.id}
|
|
47
|
-
key={item.id}
|
|
48
|
-
item={item}
|
|
49
|
-
fieldsShown={fieldsShown}
|
|
50
|
-
onClick={() => setSelectedItemAndZoomMap(item)}
|
|
51
|
-
showMap={showMap}
|
|
52
|
-
isActive={isActive}
|
|
53
|
-
setMobileTab={setMobileTab}
|
|
54
|
-
specialFeatures={specialFeatures}
|
|
55
|
-
className={hasListItemSelected ? isActive ? "!border-secondary border border-b-0" : "opacity-85" : ""}
|
|
56
|
-
favorites={favorites}
|
|
57
|
-
setFavorites={handleSettingFavorites}
|
|
58
|
-
/>
|
|
59
|
-
</Accordion.Trigger.Blank>
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
</Accordion.Item>
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export default MapAccordionItem;
|
|
1
|
+
import Accordion from "~/components/modules/accordions/default";
|
|
2
|
+
import ListItem from "~/components/modules/maps/list/list-item";
|
|
3
|
+
import ItemExpandCard from "~/components/modules/maps/list/item-expand-card";
|
|
4
|
+
import { useMap } from "~/contexts/mapContext";
|
|
5
|
+
import { setStorageObject } from "~/util/localStorageUtil";
|
|
6
|
+
import { useEffect } from "react";
|
|
7
|
+
import { useMapList } from "~/contexts/mapListContext";
|
|
8
|
+
import React from 'react'
|
|
9
|
+
const MapAccordionItem = ({
|
|
10
|
+
item,
|
|
11
|
+
itemRefs,
|
|
12
|
+
itemExpandedContent,
|
|
13
|
+
fieldsShown,
|
|
14
|
+
showMap,
|
|
15
|
+
hasListItemSelected,
|
|
16
|
+
specialFeatures,
|
|
17
|
+
isActive
|
|
18
|
+
}) => {
|
|
19
|
+
const {
|
|
20
|
+
mapItems,
|
|
21
|
+
recruiters,
|
|
22
|
+
setMobileTab,
|
|
23
|
+
favorites,
|
|
24
|
+
handleSettingFavorites
|
|
25
|
+
} = useMapList();
|
|
26
|
+
const { selectItem } = useMap();
|
|
27
|
+
const setSelectedItemAndZoomMap = item => {
|
|
28
|
+
if (isActive) {
|
|
29
|
+
localStorage.removeItem("selectedListItem");
|
|
30
|
+
mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
|
|
31
|
+
selectItem(null, null, 9, { lat: 39.8283, lng: -98.5795 });
|
|
32
|
+
} else {
|
|
33
|
+
setStorageObject("selectedListItem", item);
|
|
34
|
+
let location = mapItems.find(x => x.items.hasOwnProperty(item.id)) || null;
|
|
35
|
+
selectItem(item, location, 12, {
|
|
36
|
+
lat: location?.latitude,
|
|
37
|
+
lng: location?.longitude
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return (
|
|
42
|
+
<Accordion.Item key={item.id} id={item.id}>
|
|
43
|
+
<Accordion.Trigger.Blank>
|
|
44
|
+
<ListItem
|
|
45
|
+
ref={el => (itemRefs.current[item.id] = el)}
|
|
46
|
+
id={item.id}
|
|
47
|
+
key={item.id}
|
|
48
|
+
item={item}
|
|
49
|
+
fieldsShown={fieldsShown}
|
|
50
|
+
onClick={() => setSelectedItemAndZoomMap(item)}
|
|
51
|
+
showMap={showMap}
|
|
52
|
+
isActive={isActive}
|
|
53
|
+
setMobileTab={setMobileTab}
|
|
54
|
+
specialFeatures={specialFeatures}
|
|
55
|
+
className={hasListItemSelected ? isActive ? "!hc-border-secondary hc-border hc-border-b-0" : "hc-opacity-85" : ""}
|
|
56
|
+
favorites={favorites}
|
|
57
|
+
setFavorites={handleSettingFavorites}
|
|
58
|
+
/>
|
|
59
|
+
</Accordion.Trigger.Blank>
|
|
60
|
+
{isActive &&
|
|
61
|
+
<Accordion.Content bodyClassName="hc-px-2 hc-py-2 hc-pt-0 hc-bg-uiAccent/5 hc-border-secondary hc-border hc-border-t-0">
|
|
62
|
+
<ItemExpandCard content={itemExpandedContent(item, recruiters)} />
|
|
63
|
+
</Accordion.Content>
|
|
64
|
+
}
|
|
65
|
+
</Accordion.Item>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export default MapAccordionItem;
|
|
@@ -58,7 +58,7 @@ export const AccordionTrigger = forwardRef((
|
|
|
58
58
|
<RadixAccordion.Trigger
|
|
59
59
|
ref={forwardedRef}
|
|
60
60
|
className={twMerge(
|
|
61
|
-
'group flex justify-between w-full p-4 font-bold text-left text-uiText focus:outline-none focus-visible:ring focus-visible:ring-uiAccent focus-visible:ring-opacity-75 hover:text-primary focus:text-primary transition data-[state=open]:text-primary',
|
|
61
|
+
'hc-group hc-flex hc-justify-between hc-w-full hc-p-4 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none hc-focus-visible:ring hc-focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
|
|
62
62
|
className ?? ''
|
|
63
63
|
)}
|
|
64
64
|
{...props}
|
|
@@ -66,8 +66,8 @@ export const AccordionTrigger = forwardRef((
|
|
|
66
66
|
{children}
|
|
67
67
|
<Icon
|
|
68
68
|
icon="uil:angle-down"
|
|
69
|
-
size="
|
|
70
|
-
className="transition-transform group-data-[state=open]:!rotate-180"
|
|
69
|
+
size="hc-size-5"
|
|
70
|
+
className="hc-transition-transform hc-group-data-[state=open]:!hc-rotate-180"
|
|
71
71
|
aria-hidden="true"
|
|
72
72
|
/>
|
|
73
73
|
</RadixAccordion.Trigger>
|
|
@@ -87,13 +87,13 @@ export const AccordionTriggerHasHeader = forwardRef((
|
|
|
87
87
|
) => (
|
|
88
88
|
<RadixAccordion.Header
|
|
89
89
|
className={twMerge(
|
|
90
|
-
'group flex items-start justify-between w-full p-4 pr-3 font-bold text-left text-uiText focus:outline-none focus-visible:ring focus-visible:ring-uiAccent focus-visible:ring-opacity-75 hover:text-primary focus:text-primary transition data-[state=open]:text-primary',
|
|
90
|
+
'hc-group hc-flex hc-items-start hc-justify-between hc-w-full hc-p-4 hc-pr-3 hc-font-bold hc-text-left hc-text-uiText focus:hc-outline-none focus-visible:hc-ring focus-visible:hc-ring-uiAccent focus-visible:hc-ring-opacity-75 hover:hc-text-primary focus:hc-text-primary hc-transition data-[state=open]:hc-text-primary',
|
|
91
91
|
headerClassName ?? ''
|
|
92
92
|
)}
|
|
93
93
|
>
|
|
94
94
|
<RadixAccordion.Trigger
|
|
95
95
|
ref={forwardedRef}
|
|
96
|
-
className={twMerge('flex items-center justify-between w-full', className ?? '')}
|
|
96
|
+
className={twMerge('hc-flex hc-items-center hc-justify-between hc-w-full', className ?? '')}
|
|
97
97
|
{...props}
|
|
98
98
|
>
|
|
99
99
|
{children}
|
|
@@ -101,7 +101,7 @@ export const AccordionTriggerHasHeader = forwardRef((
|
|
|
101
101
|
icon="uil:angle-down"
|
|
102
102
|
size="w-5 h-5"
|
|
103
103
|
className={twMerge(
|
|
104
|
-
'transition-transform group-data-[state=open]:!rotate-180',
|
|
104
|
+
'hc-transition-transform group-data-[state=open]:!hc-hc-rotate-180',
|
|
105
105
|
iconClassName ?? ''
|
|
106
106
|
)}
|
|
107
107
|
aria-hidden="true"
|
|
@@ -142,8 +142,8 @@ export const AccordionContent = forwardRef((
|
|
|
142
142
|
<RadixAccordion.Content
|
|
143
143
|
ref={forwardedRef}
|
|
144
144
|
className={twMerge(
|
|
145
|
-
'data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp overflow-hidden',
|
|
146
|
-
|
|
145
|
+
'data-[state=open]:hc-animate-slideDown hc-data-[state=closed]:hc-animate-slideUp hc-overflow-hidden',
|
|
146
|
+
className ?? ''
|
|
147
147
|
)}
|
|
148
148
|
{...props}
|
|
149
149
|
>
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { memo } from "react";
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import Accordion from "~/components/modules/accordions/default";
|
|
4
|
-
import FilterItem from "~/components/modules/filter/item";
|
|
5
|
-
import ItemsPill from "~/components/modules/buttons/items-pill";
|
|
6
|
-
|
|
7
|
-
const AccordionFilterItem = memo(({ filter, setDefaultValue, setSelectedFilters, selectedFilters }) => {
|
|
8
|
-
const fieldKey = filter.id;
|
|
9
|
-
const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
|
|
10
|
-
? Object.keys(selectedFilters[fieldKey]).length
|
|
11
|
-
: 0;
|
|
12
|
-
|
|
13
|
-
const handleClearFilters = () => {
|
|
14
|
-
setSelectedFilters(prevFilters => {
|
|
15
|
-
const updatedFilters = { ...prevFilters };
|
|
16
|
-
delete updatedFilters[fieldKey];
|
|
17
|
-
return updatedFilters;
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
return (
|
|
21
|
-
<Accordion.Item key={filter.id} id={filter.id}>
|
|
22
|
-
<Accordion.Trigger.HasHeader
|
|
23
|
-
onClick={() => setDefaultValue(filter.id)}
|
|
24
|
-
className="stretched-link text-left"
|
|
25
|
-
iconClassName="order-last"
|
|
26
|
-
headerClassName="relative py-2 rounded border border-uiAccent/20 bg-white text-sm transition data-[state=open]:border-b-transparent data-[state=open]:rounded-b-none"
|
|
27
|
-
header={
|
|
28
|
-
activeItemsCount > 0 && (
|
|
29
|
-
<ItemsPill
|
|
30
|
-
activeItemsCount={activeItemsCount}
|
|
31
|
-
onClick={handleClearFilters}
|
|
32
|
-
/>
|
|
33
|
-
)
|
|
34
|
-
}
|
|
35
|
-
>
|
|
36
|
-
{filter.title}
|
|
37
|
-
</Accordion.Trigger.HasHeader>
|
|
38
|
-
<Accordion.Content bodyClassName="px-2 py-1 bg-white rounded-b border border-uiAccent/20 border-t-0 max-h-[20vh] md:max-h-[25vh] overflow-auto">
|
|
39
|
-
{filter.items.sort().map(item => (
|
|
40
|
-
<FilterItem
|
|
41
|
-
key={item.name}
|
|
42
|
-
item={item}
|
|
43
|
-
field={filter.id}
|
|
44
|
-
selectedFilters={selectedFilters}
|
|
45
|
-
setSelectedFilters={setSelectedFilters}
|
|
46
|
-
/>
|
|
47
|
-
))}
|
|
48
|
-
</Accordion.Content>
|
|
49
|
-
</Accordion.Item>
|
|
50
|
-
);
|
|
51
|
-
});
|
|
52
|
-
AccordionFilterItem.displayName = 'AccordionItem';
|
|
53
|
-
export default AccordionFilterItem;
|
|
1
|
+
import { memo } from "react";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Accordion from "~/components/modules/accordions/default";
|
|
4
|
+
import FilterItem from "~/components/modules/filter/item";
|
|
5
|
+
import ItemsPill from "~/components/modules/buttons/items-pill";
|
|
6
|
+
|
|
7
|
+
const AccordionFilterItem = memo(({ filter, setDefaultValue, setSelectedFilters, selectedFilters }) => {
|
|
8
|
+
const fieldKey = filter.id;
|
|
9
|
+
const activeItemsCount = selectedFilters != null && selectedFilters[fieldKey]
|
|
10
|
+
? Object.keys(selectedFilters[fieldKey]).length
|
|
11
|
+
: 0;
|
|
12
|
+
|
|
13
|
+
const handleClearFilters = () => {
|
|
14
|
+
setSelectedFilters(prevFilters => {
|
|
15
|
+
const updatedFilters = { ...prevFilters };
|
|
16
|
+
delete updatedFilters[fieldKey];
|
|
17
|
+
return updatedFilters;
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
return (
|
|
21
|
+
<Accordion.Item key={filter.id} id={filter.id}>
|
|
22
|
+
<Accordion.Trigger.HasHeader
|
|
23
|
+
onClick={() => setDefaultValue(filter.id)}
|
|
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
|
+
header={
|
|
28
|
+
activeItemsCount > 0 && (
|
|
29
|
+
<ItemsPill
|
|
30
|
+
activeItemsCount={activeItemsCount}
|
|
31
|
+
onClick={handleClearFilters}
|
|
32
|
+
/>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
>
|
|
36
|
+
{filter.title}
|
|
37
|
+
</Accordion.Trigger.HasHeader>
|
|
38
|
+
<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] hc-overflow-auto">
|
|
39
|
+
{filter.items.sort().map(item => (
|
|
40
|
+
<FilterItem
|
|
41
|
+
key={item.name}
|
|
42
|
+
item={item}
|
|
43
|
+
field={filter.id}
|
|
44
|
+
selectedFilters={selectedFilters}
|
|
45
|
+
setSelectedFilters={setSelectedFilters}
|
|
46
|
+
/>
|
|
47
|
+
))}
|
|
48
|
+
</Accordion.Content>
|
|
49
|
+
</Accordion.Item>
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
AccordionFilterItem.displayName = 'AccordionItem';
|
|
53
|
+
export default AccordionFilterItem;
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import Accordion from "~/components/modules/accordions/default";
|
|
2
|
-
import AccordionFilterItem from "./filterItem";
|
|
3
|
-
import FilterCard from "~/components/modules/cards/filter";
|
|
4
|
-
import Loading from "~/util/loading";
|
|
5
|
-
import { useMapList } from "~/contexts/mapListContext";
|
|
6
|
-
import React from 'react'
|
|
7
|
-
const AccordionFilters = ({
|
|
8
|
-
className,
|
|
9
|
-
defaultValue,
|
|
10
|
-
setDefaultValue,
|
|
11
|
-
setLocation,
|
|
12
|
-
setSelectedListItem
|
|
13
|
-
}) => {
|
|
14
|
-
const { filterOptions, selectedFilters, setSelectedFilters, favorites, filterByFavorites, setFilterByFavorites } = useMapList();
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<FilterCard className={className ?? ""}>
|
|
18
|
-
<FilterCard.Title icon="fa-solid:sliders-h">
|
|
19
|
-
<span>
|
|
20
|
-
Filter <span className="md:hidden lg:inline">your search</span>
|
|
21
|
-
</span>
|
|
22
|
-
</FilterCard.Title>
|
|
23
|
-
|
|
24
|
-
<Accordion defaultValue={defaultValue} className="space-y-4" >
|
|
25
|
-
{!filterOptions?.filters && (
|
|
26
|
-
<Accordion.Item>
|
|
27
|
-
<Loading />
|
|
28
|
-
</Accordion.Item>
|
|
29
|
-
)}
|
|
30
|
-
{filterOptions?.filters && filterOptions?.filters.map(filter => (
|
|
31
|
-
<AccordionFilterItem
|
|
32
|
-
key={filter.id}
|
|
33
|
-
filter={filter}
|
|
34
|
-
setDefaultValue={setDefaultValue}
|
|
35
|
-
selectedFilters={selectedFilters}
|
|
36
|
-
setSelectedFilters={prevFilters => { setSelectedFilters(prevFilters); setLocation(null); setSelectedListItem(null); }}
|
|
37
|
-
/>
|
|
38
|
-
))}
|
|
39
|
-
</Accordion>
|
|
40
|
-
</FilterCard>
|
|
41
|
-
);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export default AccordionFilters;
|
|
1
|
+
import Accordion from "~/components/modules/accordions/default";
|
|
2
|
+
import AccordionFilterItem from "./filterItem";
|
|
3
|
+
import FilterCard from "~/components/modules/cards/filter";
|
|
4
|
+
import Loading from "~/util/loading";
|
|
5
|
+
import { useMapList } from "~/contexts/mapListContext";
|
|
6
|
+
import React from 'react'
|
|
7
|
+
const AccordionFilters = ({
|
|
8
|
+
className,
|
|
9
|
+
defaultValue,
|
|
10
|
+
setDefaultValue,
|
|
11
|
+
setLocation,
|
|
12
|
+
setSelectedListItem
|
|
13
|
+
}) => {
|
|
14
|
+
const { filterOptions, selectedFilters, setSelectedFilters, favorites, filterByFavorites, setFilterByFavorites } = useMapList();
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<FilterCard className={className ?? ""}>
|
|
18
|
+
<FilterCard.Title icon="fa-solid:sliders-h">
|
|
19
|
+
<span>
|
|
20
|
+
Filter <span className="md:hc-hidden lg:hc-inline">your search</span>
|
|
21
|
+
</span>
|
|
22
|
+
</FilterCard.Title>
|
|
23
|
+
|
|
24
|
+
<Accordion defaultValue={defaultValue} className="hc-space-y-4" >
|
|
25
|
+
{!filterOptions?.filters && (
|
|
26
|
+
<Accordion.Item>
|
|
27
|
+
<Loading />
|
|
28
|
+
</Accordion.Item>
|
|
29
|
+
)}
|
|
30
|
+
{filterOptions?.filters && filterOptions?.filters.map(filter => (
|
|
31
|
+
<AccordionFilterItem
|
|
32
|
+
key={filter.id}
|
|
33
|
+
filter={filter}
|
|
34
|
+
setDefaultValue={setDefaultValue}
|
|
35
|
+
selectedFilters={selectedFilters}
|
|
36
|
+
setSelectedFilters={prevFilters => { setSelectedFilters(prevFilters); setLocation(null); setSelectedListItem(null); }}
|
|
37
|
+
/>
|
|
38
|
+
))}
|
|
39
|
+
</Accordion>
|
|
40
|
+
</FilterCard>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default AccordionFilters;
|