willba-component-library 0.1.15 → 0.1.17
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/lib/components/FilterBar/FilterBar.d.ts +2 -1
- package/lib/components/FilterBar/components/buttons/tab-button/TabButton.d.ts +9 -0
- package/lib/components/FilterBar/hooks/useFilterBar.d.ts +2 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.esm.js +82 -44
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +82 -44
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +82 -44
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterBar/FilterBar.css +13 -2
- package/src/components/FilterBar/FilterBar.tsx +27 -6
- package/src/components/FilterBar/components/buttons/tab-button/TabButton.css +43 -0
- package/src/components/FilterBar/components/buttons/tab-button/TabButton.tsx +20 -0
- package/src/components/FilterBar/components/calendar/Calendar.tsx +7 -5
- package/src/components/FilterBar/hooks/useFilterBar.tsx +20 -1
- package/src/locales/en/filterBar.json +4 -0
- package/src/locales/fi/filterBar.json +4 -0
- package/src/themes/Default.css +3 -1
package/package.json
CHANGED
|
@@ -25,6 +25,16 @@
|
|
|
25
25
|
transform: translateY(-50%);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/* Tabs */
|
|
29
|
+
|
|
30
|
+
.will-filter-bar-tabs {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
width: fit-content;
|
|
34
|
+
position: relative;
|
|
35
|
+
z-index: 222;
|
|
36
|
+
}
|
|
37
|
+
|
|
28
38
|
/* Header */
|
|
29
39
|
.will-filter-bar-header {
|
|
30
40
|
display: flex;
|
|
@@ -35,8 +45,9 @@
|
|
|
35
45
|
|
|
36
46
|
|
|
37
47
|
border-radius: 40px;
|
|
48
|
+
border-top-left-radius: 0;
|
|
38
49
|
background-color: var(--will-white);
|
|
39
|
-
|
|
50
|
+
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
@media (max-width: 960px) {
|
|
@@ -54,7 +65,7 @@
|
|
|
54
65
|
|
|
55
66
|
padding: 90px 40px 30px 40px;
|
|
56
67
|
position: absolute;
|
|
57
|
-
top:
|
|
68
|
+
top: 45px;
|
|
58
69
|
z-index: 111;
|
|
59
70
|
border-radius: 25px;
|
|
60
71
|
width: -webkit-fill-available;
|
|
@@ -16,6 +16,7 @@ import './FilterBar.css'
|
|
|
16
16
|
import '../../themes/Default.css'
|
|
17
17
|
import i18n from '../../i18n'
|
|
18
18
|
import CloseButton from './components/buttons/close-button/CloseButton'
|
|
19
|
+
import TabButton from './components/buttons/tab-button/TabButton'
|
|
19
20
|
import { AgeCategoryType } from './FilterBarTypes'
|
|
20
21
|
|
|
21
22
|
export interface FilterBarProps {
|
|
@@ -24,11 +25,13 @@ export interface FilterBarProps {
|
|
|
24
25
|
ageCategories?: AgeCategoryType[]
|
|
25
26
|
redirectUrl: string
|
|
26
27
|
palette?: Palette
|
|
28
|
+
currentPath?: string
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
export default function FilterBar({
|
|
30
32
|
language,
|
|
31
33
|
ageCategories = AGE_CATEGORIES_FALLBACK,
|
|
34
|
+
currentPath,
|
|
32
35
|
redirectUrl = REDIRECT_URL_FALLBACK,
|
|
33
36
|
palette,
|
|
34
37
|
}: FilterBarProps) {
|
|
@@ -49,11 +52,13 @@ export default function FilterBar({
|
|
|
49
52
|
ageCategoryCounts,
|
|
50
53
|
categories,
|
|
51
54
|
calendarRange,
|
|
55
|
+
selectedPath,
|
|
52
56
|
setCalendarRange,
|
|
53
57
|
setCategories,
|
|
54
58
|
handleSelectedFilter,
|
|
55
59
|
handleSubmit,
|
|
56
60
|
updateGuestsCount,
|
|
61
|
+
setSelectedPath,
|
|
57
62
|
} = useFilterBar({ redirectUrl })
|
|
58
63
|
|
|
59
64
|
// Scroll in to view
|
|
@@ -81,13 +86,27 @@ export default function FilterBar({
|
|
|
81
86
|
}}
|
|
82
87
|
/>
|
|
83
88
|
)}
|
|
89
|
+
|
|
84
90
|
<div
|
|
85
91
|
className={`will-root ${selectedFilter ? 'isMobileAbsolute' : ''}`}
|
|
86
92
|
style={themePalette}
|
|
87
93
|
>
|
|
88
|
-
<div className="will-filter-bar-
|
|
94
|
+
<div className="will-filter-bar-tabs" ref={targetFilterBarRef}>
|
|
95
|
+
<TabButton
|
|
96
|
+
label={t('tabs.events')}
|
|
97
|
+
onClick={() => setSelectedPath('./events')}
|
|
98
|
+
active={selectedPath === '/events'}
|
|
99
|
+
/>
|
|
100
|
+
<TabButton
|
|
101
|
+
label={t('tabs.rooms')}
|
|
102
|
+
onClick={() => setSelectedPath('./rooms')}
|
|
103
|
+
active={selectedPath === '/rooms'}
|
|
104
|
+
/>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div className="will-filter-bar-header">
|
|
89
108
|
<SelectButton
|
|
90
|
-
style={
|
|
109
|
+
style={fontWeightBold(selectedFilter === 1 || selectedFilter === 2)}
|
|
91
110
|
label={t('calendar.startDate')}
|
|
92
111
|
onClick={() => handleSelectedFilter(1)}
|
|
93
112
|
date={
|
|
@@ -96,9 +115,11 @@ export default function FilterBar({
|
|
|
96
115
|
: null
|
|
97
116
|
}
|
|
98
117
|
/>
|
|
118
|
+
|
|
99
119
|
<Divider />
|
|
120
|
+
|
|
100
121
|
<SelectButton
|
|
101
|
-
style={
|
|
122
|
+
style={fontWeightBold(selectedFilter === 1 || selectedFilter === 2)}
|
|
102
123
|
label={t('calendar.endDate')}
|
|
103
124
|
onClick={() => handleSelectedFilter(2)}
|
|
104
125
|
date={
|
|
@@ -111,14 +132,14 @@ export default function FilterBar({
|
|
|
111
132
|
<SelectButton
|
|
112
133
|
label={t('guests.label')}
|
|
113
134
|
onClick={() => handleSelectedFilter(3)}
|
|
114
|
-
style={
|
|
135
|
+
style={fontWeightBold(selectedFilter === 3)}
|
|
115
136
|
/> */}
|
|
116
137
|
|
|
117
138
|
{/* <Divider />
|
|
118
139
|
<SelectButton
|
|
119
140
|
label={t('categories.label')}
|
|
120
141
|
onClick={() => handleSelectedFilter(4)}
|
|
121
|
-
style={
|
|
142
|
+
style={fontWeightBold(selectedFilter === 4)}
|
|
122
143
|
/> */}
|
|
123
144
|
|
|
124
145
|
<SubmitButton onClick={handleSubmit} />
|
|
@@ -156,7 +177,7 @@ export default function FilterBar({
|
|
|
156
177
|
|
|
157
178
|
////////////
|
|
158
179
|
|
|
159
|
-
const
|
|
180
|
+
const fontWeightBold = (input: boolean) => {
|
|
160
181
|
return { fontWeight: input ? 'bold' : 'initial' }
|
|
161
182
|
}
|
|
162
183
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.will-filter-bar-tab-button {
|
|
2
|
+
width: auto;
|
|
3
|
+
height: auto;
|
|
4
|
+
padding: 10px 50px;
|
|
5
|
+
cursor: pointer;
|
|
6
|
+
border: none;
|
|
7
|
+
white-space: nowrap;
|
|
8
|
+
text-transform: uppercase;
|
|
9
|
+
font-size: 12px;
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
border: 1px solid var(--will-black);
|
|
13
|
+
border-top: none;
|
|
14
|
+
background-color: var(--will-transparent-white);
|
|
15
|
+
user-select: none;
|
|
16
|
+
font-weight: 600;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* .will-filter-bar-tab-button:not(:first-child) {
|
|
20
|
+
border-left: none;
|
|
21
|
+
} */
|
|
22
|
+
|
|
23
|
+
.will-filter-bar-tab-button:hover {
|
|
24
|
+
background-color: var(--will-white);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.will-filter-bar-tab-button.active {
|
|
28
|
+
background-color: var(--will-white);
|
|
29
|
+
border-color: var(--will-white);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/* @media (max-width: 960px) {
|
|
38
|
+
.will-filter-bar-tab-button {
|
|
39
|
+
justify-content: center;
|
|
40
|
+
margin-bottom: 15px;
|
|
41
|
+
}
|
|
42
|
+
} */
|
|
43
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
import './TabButton.css'
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
onClick?: () => void
|
|
7
|
+
label: string
|
|
8
|
+
active?: boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default function SubmitButton({ onClick, label, active }: Props) {
|
|
12
|
+
return (
|
|
13
|
+
<button
|
|
14
|
+
className={`will-filter-bar-tab-button ${active && 'active'}`}
|
|
15
|
+
onClick={onClick}
|
|
16
|
+
>
|
|
17
|
+
{label}
|
|
18
|
+
</button>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
@@ -21,13 +21,15 @@ export default function Calendar({
|
|
|
21
21
|
//const { t } = useTranslation('filterBar')
|
|
22
22
|
const isTablet = useMediaQuery({ maxWidth: 960 })
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
// Add default selection
|
|
25
|
+
// const defaultCalendarSelected: DateRange = {
|
|
26
|
+
// from: currentMonth,
|
|
27
|
+
// to: addDays(currentMonth, 0),
|
|
28
|
+
// }
|
|
29
|
+
//--------------//----------------
|
|
28
30
|
|
|
29
31
|
useEffect(() => {
|
|
30
|
-
if (!calendarRange) setCalendarRange(
|
|
32
|
+
if (!calendarRange) setCalendarRange(undefined)
|
|
31
33
|
}, [])
|
|
32
34
|
|
|
33
35
|
return (
|
|
@@ -9,6 +9,8 @@ interface UseFilterBarPropsType {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export default function useFilterBar({ redirectUrl }: UseFilterBarPropsType) {
|
|
12
|
+
const [selectedPath, setSelectedPath] = useState('/events')
|
|
13
|
+
|
|
12
14
|
const [selectedFilter, setSelectedFilter] = useState<number | boolean>(false)
|
|
13
15
|
const [calendarRange, setCalendarRange] = useState<DateRange | undefined>()
|
|
14
16
|
|
|
@@ -69,7 +71,7 @@ export default function useFilterBar({ redirectUrl }: UseFilterBarPropsType) {
|
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
window.location.href = `${redirectUrl}${
|
|
74
|
+
window.location.href = `${redirectUrl}/${selectedPath}${
|
|
73
75
|
queryParams ? `?${queryParams.toString()}` : ''
|
|
74
76
|
}`
|
|
75
77
|
handleSelectedFilter(false)
|
|
@@ -83,6 +85,21 @@ export default function useFilterBar({ redirectUrl }: UseFilterBarPropsType) {
|
|
|
83
85
|
}
|
|
84
86
|
}, [selectedFilter])
|
|
85
87
|
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
let currentPath = '/events' // Default path name
|
|
90
|
+
|
|
91
|
+
if (typeof window !== 'undefined') {
|
|
92
|
+
// Get current path name
|
|
93
|
+
currentPath =
|
|
94
|
+
window.location.pathname.includes('/events') ||
|
|
95
|
+
window.location.pathname.includes('/rooms')
|
|
96
|
+
? window.location.pathname
|
|
97
|
+
: '/events'
|
|
98
|
+
|
|
99
|
+
setSelectedPath(currentPath)
|
|
100
|
+
}
|
|
101
|
+
}, [])
|
|
102
|
+
|
|
86
103
|
const handleResetFilters = () => {
|
|
87
104
|
setAgeCategoryCounts({})
|
|
88
105
|
handleSubmit()
|
|
@@ -94,6 +111,7 @@ export default function useFilterBar({ redirectUrl }: UseFilterBarPropsType) {
|
|
|
94
111
|
ageCategoryCounts,
|
|
95
112
|
categories,
|
|
96
113
|
calendarRange,
|
|
114
|
+
selectedPath,
|
|
97
115
|
setCalendarRange,
|
|
98
116
|
setSelectedFilter,
|
|
99
117
|
setAgeCategoryCounts,
|
|
@@ -102,5 +120,6 @@ export default function useFilterBar({ redirectUrl }: UseFilterBarPropsType) {
|
|
|
102
120
|
handleSubmit,
|
|
103
121
|
updateGuestsCount,
|
|
104
122
|
handleResetFilters,
|
|
123
|
+
setSelectedPath,
|
|
105
124
|
}
|
|
106
125
|
}
|
package/src/themes/Default.css
CHANGED
|
@@ -11,13 +11,15 @@
|
|
|
11
11
|
|
|
12
12
|
color: #1E1E1E;
|
|
13
13
|
|
|
14
|
-
/*
|
|
14
|
+
/* Palette */
|
|
15
15
|
--will-primary: #374269;
|
|
16
16
|
--will-secondary: #374269;
|
|
17
17
|
--will-grey: #ABA7AF;
|
|
18
18
|
--will-white: #fff;
|
|
19
|
+
--will-black: #000;
|
|
19
20
|
--will-onahau: #CDEEFF;
|
|
20
21
|
--will-text: #5A5959;
|
|
22
|
+
--will-transparent-white: rgba(255, 255, 255, 0.8);
|
|
21
23
|
|
|
22
24
|
/* Confines */
|
|
23
25
|
--will-box-shadow: 0px 6px 11px 0px #a7a4a480;
|