willba-component-library 0.3.4 → 0.3.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/lib/components/FilterBar/FilterBarTypes.d.ts +13 -7
- package/lib/components/FilterBar/components/buttons/select-button/SelectButton.d.ts +1 -0
- package/lib/components/FilterBar/components/cards/image-card/ImageCard.d.ts +2 -2
- package/lib/components/FilterBar/components/common/FilterSectionHeader.d.ts +8 -0
- package/lib/components/FilterBar/components/dates/Dates.d.ts +15 -0
- package/lib/components/FilterBar/components/dates/index.d.ts +1 -0
- package/lib/components/FilterBar/components/guests/Guests.d.ts +1 -0
- package/lib/components/FilterBar/utils/getLocalizedContent.d.ts +8 -0
- package/lib/components/FilterBar/utils/index.d.ts +1 -0
- package/lib/index.d.ts +13 -7
- package/lib/index.esm.js +97 -49
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +366 -318
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +366 -318
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterBar/FilterBar.css +1 -1
- package/src/components/FilterBar/FilterBar.stories.tsx +45 -38
- package/src/components/FilterBar/FilterBar.tsx +19 -11
- package/src/components/FilterBar/FilterBarTypes.ts +15 -7
- package/src/components/FilterBar/components/buttons/select-button/SelectButton.css +13 -13
- package/src/components/FilterBar/components/buttons/select-button/SelectButton.tsx +6 -3
- package/src/components/FilterBar/components/cards/image-card/ImageCard.tsx +2 -2
- package/src/components/FilterBar/components/categories/Categories.tsx +1 -0
- package/src/components/FilterBar/components/common/FilterSectionHeader.css +29 -0
- package/src/components/FilterBar/components/common/FilterSectionHeader.tsx +16 -0
- package/src/components/FilterBar/components/dates/Dates.tsx +57 -0
- package/src/components/FilterBar/components/dates/index.ts +1 -0
- package/src/components/FilterBar/components/guests/GuestCount/GuestCount.css +4 -7
- package/src/components/FilterBar/components/guests/Guests.css +5 -20
- package/src/components/FilterBar/components/guests/Guests.tsx +8 -2
- package/src/components/FilterBar/components/locations/Locations.css +1 -15
- package/src/components/FilterBar/components/locations/Locations.tsx +43 -14
- package/src/components/FilterBar/utils/getLocalizedContent.tsx +21 -0
- package/src/components/FilterBar/utils/index.tsx +1 -0
- package/src/components/FilterBar/utils/parseLocations.tsx +5 -1
- package/src/core/components/calendar/Calendar.css +100 -50
- package/src/locales/en/filterBar.json +1 -1
- package/src/locales/fi/filterBar.json +2 -2
package/package.json
CHANGED
|
@@ -79,59 +79,66 @@ export const Main: Story = {
|
|
|
79
79
|
outerLoading: false,
|
|
80
80
|
locations: {
|
|
81
81
|
multiSelect: false,
|
|
82
|
+
disabled: false,
|
|
82
83
|
data: [
|
|
83
84
|
{
|
|
84
85
|
id: 1,
|
|
85
|
-
label:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
description:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
imageUrl:
|
|
94
|
-
'//i0.wp.com/picjumbo.com/wp-content/uploads/beautiful-fall-nature-scenery-free-image.jpeg?w=2210&quality=70',
|
|
86
|
+
label: [
|
|
87
|
+
{ content: 'Helsinki Center', locale: 'en' },
|
|
88
|
+
{ content: 'Helsinki Keskusta', locale: 'fi' },
|
|
89
|
+
],
|
|
90
|
+
description: [
|
|
91
|
+
{ content: 'Main training facility in downtown', locale: 'en' },
|
|
92
|
+
{ content: 'Pääkoulutuslaitoksemme keskustassa', locale: 'fi' },
|
|
93
|
+
],
|
|
94
|
+
imageUrl: '',
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
id: 2,
|
|
98
|
-
label:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
label: [
|
|
99
|
+
{ content: 'Espoo Campus', locale: 'en' },
|
|
100
|
+
{ content: 'Espoon Kampus', locale: 'fi' },
|
|
101
|
+
],
|
|
102
|
+
description: [
|
|
103
|
+
{ content: 'Modern facilities with sea views', locale: 'en' },
|
|
104
|
+
{ content: 'Modernit tilat merinäköalalla', locale: 'fi' },
|
|
105
|
+
],
|
|
106
|
+
imageUrl: '',
|
|
102
107
|
},
|
|
103
108
|
{
|
|
104
109
|
id: 3,
|
|
105
|
-
label:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
description:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
imageUrl:
|
|
114
|
-
'//i0.wp.com/picjumbo.com/wp-content/uploads/beautiful-fall-nature-scenery-free-image.jpeg?w=2210&quality=70',
|
|
110
|
+
label: [
|
|
111
|
+
{ content: 'Tampere Resort', locale: 'en' },
|
|
112
|
+
{ content: 'Tampereen Lomakeskus', locale: 'fi' },
|
|
113
|
+
],
|
|
114
|
+
description: [
|
|
115
|
+
{ content: 'Lakeside retreat with full amenities', locale: 'en' },
|
|
116
|
+
{ content: 'Järvenrannalla sijaitseva lomakeskus', locale: 'fi' },
|
|
117
|
+
],
|
|
118
|
+
imageUrl: '',
|
|
115
119
|
},
|
|
116
120
|
{
|
|
117
121
|
id: 4,
|
|
118
|
-
label:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
imageUrl:
|
|
123
|
-
'//i0.wp.com/picjumbo.com/wp-content/uploads/beautiful-fall-nature-scenery-free-image.jpeg?w=2210&quality=70',
|
|
122
|
+
label: [
|
|
123
|
+
{ content: 'Turku Harbor', locale: 'en' },
|
|
124
|
+
{ content: 'Turun Satama', locale: 'fi' },
|
|
125
|
+
],
|
|
126
|
+
imageUrl: null,
|
|
124
127
|
},
|
|
125
128
|
{
|
|
126
129
|
id: 5,
|
|
127
|
-
label:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
description:
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
label: [
|
|
131
|
+
{ content: 'Oulu North', locale: 'en' },
|
|
132
|
+
{ content: 'Oulun Pohjoinen', locale: 'fi' },
|
|
133
|
+
],
|
|
134
|
+
description: [
|
|
135
|
+
{
|
|
136
|
+
content: 'Northern location with winter activities',
|
|
137
|
+
locale: 'en',
|
|
138
|
+
},
|
|
139
|
+
{ content: 'Pohjoinen kohde talviaktiviteeteilla', locale: 'fi' },
|
|
140
|
+
],
|
|
141
|
+
imageUrl: null,
|
|
135
142
|
},
|
|
136
143
|
],
|
|
137
144
|
},
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
} from './components'
|
|
26
26
|
|
|
27
27
|
import './FilterBar.css'
|
|
28
|
+
import { Dates } from './components/dates'
|
|
28
29
|
|
|
29
30
|
export default function FilterBar({
|
|
30
31
|
language = LANGUAGE_FALLBACK,
|
|
@@ -47,7 +48,7 @@ export default function FilterBar({
|
|
|
47
48
|
|
|
48
49
|
// Refs for SelectButtons
|
|
49
50
|
const locationsButtonRef = useRef<HTMLButtonElement>(null)
|
|
50
|
-
const
|
|
51
|
+
const datesButtonRef = useRef<HTMLButtonElement>(null)
|
|
51
52
|
const guestsButtonRef = useRef<HTMLButtonElement>(null)
|
|
52
53
|
const previouslyFocusedButtonRef = useRef<HTMLButtonElement | null>(null)
|
|
53
54
|
|
|
@@ -153,6 +154,7 @@ export default function FilterBar({
|
|
|
153
154
|
handleSelectedFilter(FilterSections.LOCATIONS)
|
|
154
155
|
}}
|
|
155
156
|
active={!!selectedLocations.length}
|
|
157
|
+
disabled={locations?.disabled}
|
|
156
158
|
ariaExpanded={selectedFilter === FilterSections.LOCATIONS}
|
|
157
159
|
ariaControls="will-locations-filter"
|
|
158
160
|
/>
|
|
@@ -162,7 +164,7 @@ export default function FilterBar({
|
|
|
162
164
|
)}
|
|
163
165
|
|
|
164
166
|
<SelectButton
|
|
165
|
-
ref={
|
|
167
|
+
ref={datesButtonRef}
|
|
166
168
|
label={t('calendar.label')}
|
|
167
169
|
description={
|
|
168
170
|
parsedDates
|
|
@@ -172,7 +174,7 @@ export default function FilterBar({
|
|
|
172
174
|
: t('calendar.eventsLabelPlaceholder')
|
|
173
175
|
}
|
|
174
176
|
onClick={() => {
|
|
175
|
-
previouslyFocusedButtonRef.current =
|
|
177
|
+
previouslyFocusedButtonRef.current = datesButtonRef.current
|
|
176
178
|
handleSelectedFilter(FilterSections.CALENDAR)
|
|
177
179
|
}}
|
|
178
180
|
active={!!parsedDates}
|
|
@@ -212,18 +214,18 @@ export default function FilterBar({
|
|
|
212
214
|
className={`will-filter-bar-container ${mode || 'light'}`}
|
|
213
215
|
style={(!tabs || tabs.length < 2) && !isMobile ? { top: 66 } : {}}
|
|
214
216
|
>
|
|
215
|
-
<CloseButton handleClose={() => handleSelectedFilter(false)} />
|
|
216
|
-
|
|
217
217
|
{selectedFilter === FilterSections.CALENDAR && (
|
|
218
218
|
<div id="will-calendar-filter">
|
|
219
|
-
<
|
|
219
|
+
<Dates
|
|
220
|
+
autoFocus
|
|
221
|
+
ref={filtersRef}
|
|
222
|
+
onClose={() => handleSelectedFilter(false)}
|
|
220
223
|
calendarRange={calendarRange}
|
|
221
224
|
setCalendarRange={setCalendarRange}
|
|
222
225
|
disableCalendarDates={disableCalendarDates}
|
|
223
226
|
selectedPath={selectedPath}
|
|
224
227
|
language={language}
|
|
225
|
-
|
|
226
|
-
autoFocus
|
|
228
|
+
filtersRef={filtersRef}
|
|
227
229
|
/>
|
|
228
230
|
</div>
|
|
229
231
|
)}
|
|
@@ -235,22 +237,28 @@ export default function FilterBar({
|
|
|
235
237
|
ageCategoryCounts={ageCategoryCounts}
|
|
236
238
|
ref={filtersRef}
|
|
237
239
|
autoFocus
|
|
240
|
+
onClose={() => handleSelectedFilter(false)}
|
|
238
241
|
/>
|
|
239
242
|
</div>
|
|
240
243
|
)}
|
|
241
244
|
{selectedFilter === FilterSections.CATEGORIES && (
|
|
242
|
-
<
|
|
245
|
+
<div id="will-categories-filter">
|
|
246
|
+
<Categories
|
|
247
|
+
categories={categories}
|
|
248
|
+
setCategories={setCategories}
|
|
249
|
+
/>
|
|
250
|
+
</div>
|
|
243
251
|
)}
|
|
244
252
|
{selectedFilter === FilterSections.LOCATIONS && (
|
|
245
253
|
<div id="will-locations-filter">
|
|
246
254
|
<Locations
|
|
247
|
-
|
|
255
|
+
autoFocus
|
|
248
256
|
ref={filtersRef}
|
|
257
|
+
locations={locations?.data}
|
|
249
258
|
language={language}
|
|
250
259
|
selectedLocations={selectedLocations}
|
|
251
260
|
setSelectedLocations={setSelectedLocations}
|
|
252
261
|
multiSelect={locations?.multiSelect}
|
|
253
|
-
autoFocus
|
|
254
262
|
onClose={() => handleSelectedFilter(false)}
|
|
255
263
|
/>
|
|
256
264
|
</div>
|
|
@@ -12,10 +12,7 @@ export type FilterBarTypes = {
|
|
|
12
12
|
mode?: string
|
|
13
13
|
tabs?: Tab[]
|
|
14
14
|
outerLoading?: boolean
|
|
15
|
-
locations?:
|
|
16
|
-
multiSelect: boolean
|
|
17
|
-
data: Location[]
|
|
18
|
-
}
|
|
15
|
+
locations?: Locations
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
export type AgeCategoryCount = {
|
|
@@ -59,6 +56,11 @@ type Translations = {
|
|
|
59
56
|
[key: string]: string
|
|
60
57
|
}
|
|
61
58
|
|
|
59
|
+
export type LocaleTranslation = Array<{
|
|
60
|
+
content: string
|
|
61
|
+
locale: string
|
|
62
|
+
}>
|
|
63
|
+
|
|
62
64
|
export type Tab = {
|
|
63
65
|
path: string
|
|
64
66
|
default?: boolean
|
|
@@ -66,9 +68,15 @@ export type Tab = {
|
|
|
66
68
|
label?: Translations
|
|
67
69
|
}
|
|
68
70
|
|
|
71
|
+
export type Locations = {
|
|
72
|
+
multiSelect: boolean
|
|
73
|
+
disabled?: boolean
|
|
74
|
+
data: Location[]
|
|
75
|
+
}
|
|
76
|
+
|
|
69
77
|
export type Location = {
|
|
70
78
|
id: number
|
|
71
|
-
label:
|
|
72
|
-
description?:
|
|
73
|
-
imageUrl?: string
|
|
79
|
+
label: LocaleTranslation
|
|
80
|
+
description?: LocaleTranslation | null
|
|
81
|
+
imageUrl?: string | null
|
|
74
82
|
}
|
|
@@ -10,16 +10,19 @@
|
|
|
10
10
|
text-align: initial;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
.will-filter-bar-select-button.disabled {
|
|
14
|
+
cursor: not-allowed;
|
|
15
|
+
}
|
|
16
|
+
|
|
13
17
|
.will-filter-bar-select-button .select-button-wrapper {
|
|
14
18
|
display: flex;
|
|
15
19
|
align-items: center;
|
|
16
20
|
flex-wrap: wrap;
|
|
17
21
|
gap: 10px;
|
|
18
|
-
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
.will-filter-bar-select-button .select-button-wrapper > div {
|
|
22
|
-
display: grid
|
|
25
|
+
display: grid;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
.will-filter-bar-select-button .select-button-label {
|
|
@@ -38,25 +41,24 @@
|
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
.will-filter-bar-select-button .select-button-description span {
|
|
41
|
-
font: inherit
|
|
44
|
+
font: inherit;
|
|
42
45
|
}
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
.will-filter-bar-select-button .select-button-label.active,
|
|
48
|
+
.will-filter-bar-select-button .select-button-description.active {
|
|
46
49
|
font-weight: 700;
|
|
47
50
|
font-size: 15px;
|
|
48
51
|
opacity: 1;
|
|
49
|
-
|
|
50
|
-
}
|
|
52
|
+
}
|
|
51
53
|
|
|
52
54
|
@media (max-width: 960px) {
|
|
53
55
|
.will-filter-bar-select-button {
|
|
54
56
|
padding: 15px 0;
|
|
55
|
-
|
|
57
|
+
}
|
|
56
58
|
|
|
57
59
|
.will-filter-bar-select-button:first-child {
|
|
58
60
|
padding: 0 0 15px 0;
|
|
59
|
-
|
|
61
|
+
}
|
|
60
62
|
|
|
61
63
|
.will-filter-bar-select-button .select-button-wrapper {
|
|
62
64
|
justify-content: center;
|
|
@@ -65,11 +67,9 @@
|
|
|
65
67
|
|
|
66
68
|
.will-filter-bar-select-button .select-button-description {
|
|
67
69
|
white-space: wrap;
|
|
68
|
-
|
|
70
|
+
}
|
|
69
71
|
|
|
70
72
|
.will-filter-bar-select-button .select-button-divider {
|
|
71
|
-
display: none
|
|
73
|
+
display: none;
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
|
|
75
|
-
|
|
@@ -7,20 +7,23 @@ type Props = {
|
|
|
7
7
|
onClick: () => void
|
|
8
8
|
description: string
|
|
9
9
|
active?: boolean
|
|
10
|
+
disabled?: boolean
|
|
10
11
|
ariaExpanded?: boolean
|
|
11
12
|
ariaControls?: string
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export const SelectButton = forwardRef<HTMLButtonElement, Props>(
|
|
15
|
-
({ active, label, onClick, description, ariaExpanded, ariaControls }, ref) => {
|
|
16
|
+
({ active, label, onClick, description, disabled, ariaExpanded, ariaControls }, ref) => {
|
|
16
17
|
return (
|
|
17
18
|
<button
|
|
18
19
|
ref={ref}
|
|
19
|
-
className=
|
|
20
|
-
onClick={onClick}
|
|
20
|
+
className={`will-filter-bar-select-button ${disabled ? 'disabled' : ''}`}
|
|
21
|
+
onClick={disabled ? undefined : onClick}
|
|
22
|
+
disabled={disabled}
|
|
21
23
|
aria-expanded={ariaExpanded}
|
|
22
24
|
aria-controls={ariaControls}
|
|
23
25
|
aria-haspopup="true"
|
|
26
|
+
aria-disabled={disabled}
|
|
24
27
|
>
|
|
25
28
|
<span className="select-button-wrapper">
|
|
26
29
|
<div>
|
|
@@ -28,6 +28,7 @@ export const Categories = ({ categories, setCategories }: Props) => {
|
|
|
28
28
|
return (
|
|
29
29
|
<div className="will-filter-bar-categories">
|
|
30
30
|
<h3 className="will-categories-filter-title">{t('categories.label')}</h3>
|
|
31
|
+
|
|
31
32
|
<div className="will-categories-filter-inner">
|
|
32
33
|
{categoriesPlaceholder.map((itm, idx) => (
|
|
33
34
|
<div key={idx}>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.will-filter-section-header {
|
|
2
|
+
display: flex;
|
|
3
|
+
justify-content: space-between;
|
|
4
|
+
align-items: center;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.will-filter-section-title {
|
|
8
|
+
font-size: 22px;
|
|
9
|
+
margin: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.will-filter-section-action {
|
|
13
|
+
display: flex;
|
|
14
|
+
gap: 8px;
|
|
15
|
+
align-items: center;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.will-filter-section-action .will-filter-bar-close-button {
|
|
19
|
+
position: relative;
|
|
20
|
+
top: auto;
|
|
21
|
+
right: auto;
|
|
22
|
+
margin: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (max-width: 960px) {
|
|
26
|
+
.will-filter-section-title {
|
|
27
|
+
font-size: 18px;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react'
|
|
2
|
+
import './FilterSectionHeader.css'
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
title: string
|
|
6
|
+
action?: ReactNode
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const FilterSectionHeader = ({ title, action }: Props) => {
|
|
10
|
+
return (
|
|
11
|
+
<div className="will-filter-section-header">
|
|
12
|
+
<h3 className="will-filter-section-title">{title}</h3>
|
|
13
|
+
{action && <div className="will-filter-section-action">{action}</div>}
|
|
14
|
+
</div>
|
|
15
|
+
)
|
|
16
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DateRange } from 'react-day-picker'
|
|
2
|
+
import { Calendar } from '../../../../core/components'
|
|
3
|
+
import { DisableCalendarDates } from '../../../../core/components/calendar/CalendarTypes'
|
|
4
|
+
import { CloseButton } from '../buttons'
|
|
5
|
+
import { FilterSectionHeader } from '../common/FilterSectionHeader'
|
|
6
|
+
import { forwardRef } from 'react'
|
|
7
|
+
|
|
8
|
+
type Props = {
|
|
9
|
+
ref: React.RefObject<HTMLDivElement>
|
|
10
|
+
onClose?: () => void
|
|
11
|
+
autoFocus?: boolean
|
|
12
|
+
calendarRange: DateRange | undefined
|
|
13
|
+
setCalendarRange: (range: DateRange | undefined) => void
|
|
14
|
+
disableCalendarDates?: DisableCalendarDates
|
|
15
|
+
selectedPath?: string
|
|
16
|
+
language?: string
|
|
17
|
+
filtersRef?: React.RefObject<HTMLDivElement>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const Dates = forwardRef<HTMLDivElement, Props>(
|
|
21
|
+
(
|
|
22
|
+
{
|
|
23
|
+
onClose,
|
|
24
|
+
autoFocus,
|
|
25
|
+
calendarRange,
|
|
26
|
+
setCalendarRange,
|
|
27
|
+
disableCalendarDates,
|
|
28
|
+
selectedPath,
|
|
29
|
+
language,
|
|
30
|
+
filtersRef,
|
|
31
|
+
},
|
|
32
|
+
ref
|
|
33
|
+
) => {
|
|
34
|
+
return (
|
|
35
|
+
<div className="will-filter-bar-dates" ref={ref}>
|
|
36
|
+
<FilterSectionHeader
|
|
37
|
+
title={''}
|
|
38
|
+
action={onClose && <CloseButton handleClose={onClose} />}
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
<div className="will-dates-filter-container">
|
|
42
|
+
<Calendar
|
|
43
|
+
autoFocus={autoFocus}
|
|
44
|
+
calendarRange={calendarRange}
|
|
45
|
+
setCalendarRange={setCalendarRange}
|
|
46
|
+
disableCalendarDates={disableCalendarDates}
|
|
47
|
+
selectedPath={selectedPath}
|
|
48
|
+
language={language}
|
|
49
|
+
ref={filtersRef}
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
Dates.displayName = 'Dates'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Dates } from './Dates'
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
.will-guests-filter-label,
|
|
1
|
+
.will-guests-filter-label,
|
|
2
|
+
.will-guests-filter-count {
|
|
2
3
|
font-size: 18px;
|
|
3
|
-
color: var(--will-text)
|
|
4
|
+
color: var(--will-text);
|
|
4
5
|
}
|
|
5
6
|
|
|
6
7
|
.will-guests-filter-inner {
|
|
7
8
|
display: flex;
|
|
8
9
|
align-items: center;
|
|
9
10
|
justify-content: space-between;
|
|
10
|
-
margin-top: 30px;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.will-guests-filter-label {
|
|
14
14
|
display: block;
|
|
15
15
|
font-weight: 600;
|
|
16
16
|
margin-bottom: 10px;
|
|
17
|
-
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
.will-guests-filter-inner .will-guests-filter-counter {
|
|
@@ -29,7 +28,6 @@
|
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
.will-guests-filter-counter-button {
|
|
32
|
-
|
|
33
31
|
border-radius: 50%;
|
|
34
32
|
background-color: transparent;
|
|
35
33
|
border: 1px solid var(--will-grey);
|
|
@@ -53,10 +51,9 @@
|
|
|
53
51
|
}
|
|
54
52
|
|
|
55
53
|
@media (max-width: 960px) {
|
|
56
|
-
|
|
57
54
|
.will-guests-filter-inner {
|
|
58
55
|
width: 100%;
|
|
59
56
|
margin: 15px 0;
|
|
60
57
|
justify-content: space-between;
|
|
61
58
|
}
|
|
62
|
-
}
|
|
59
|
+
}
|
|
@@ -2,32 +2,17 @@
|
|
|
2
2
|
text-align: initial;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
.will-guests-filter-title {
|
|
6
|
-
font-size: 22px;
|
|
7
|
-
margin: 10px 0;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.will-guests-filter-subtitle {
|
|
11
|
-
font-size: 15px;
|
|
12
|
-
font-weight: 500;
|
|
13
|
-
color:var(--will-text)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
5
|
.will-guests-filter-container {
|
|
18
6
|
display: flex;
|
|
19
7
|
flex-direction: column;
|
|
20
8
|
min-width: 400px;
|
|
9
|
+
gap: 20px;
|
|
10
|
+
margin-top: 20px;
|
|
21
11
|
}
|
|
22
12
|
|
|
23
|
-
|
|
24
13
|
@media (max-width: 960px) {
|
|
25
|
-
.will-guests-filter-title {
|
|
26
|
-
font-size: 18px;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
14
|
.will-guests-filter-container {
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
margin-top: 15px;
|
|
16
|
+
min-width: 100%;
|
|
32
17
|
}
|
|
33
|
-
}
|
|
18
|
+
}
|
|
@@ -4,6 +4,8 @@ import { useTranslation } from 'react-i18next'
|
|
|
4
4
|
import { useAutoFocus } from '../../../../core/hooks'
|
|
5
5
|
import { GuestCount } from './GuestCount/GuestCount'
|
|
6
6
|
import { AgeCategoryCount, AgeCategoryType } from '../../FilterBarTypes'
|
|
7
|
+
import { FilterSectionHeader } from '../common/FilterSectionHeader'
|
|
8
|
+
import { CloseButton } from '../../../../core/components'
|
|
7
9
|
|
|
8
10
|
import './Guests.css'
|
|
9
11
|
|
|
@@ -12,16 +14,20 @@ type Props = {
|
|
|
12
14
|
updateGuestsCount: (arg1: string, arg2: number) => void
|
|
13
15
|
ageCategoryCounts: AgeCategoryCount
|
|
14
16
|
autoFocus?: boolean
|
|
17
|
+
onClose?: () => void
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
export const Guests = forwardRef<HTMLDivElement, Props>(
|
|
18
|
-
({ ageCategories, updateGuestsCount, ageCategoryCounts, autoFocus }: Props, ref) => {
|
|
21
|
+
({ ageCategories, updateGuestsCount, ageCategoryCounts, autoFocus, onClose }: Props, ref) => {
|
|
19
22
|
const { t } = useTranslation('filterBar')
|
|
20
23
|
const containerRef = useAutoFocus<HTMLDivElement>(autoFocus)
|
|
21
24
|
|
|
22
25
|
return (
|
|
23
26
|
<div className="will-filter-bar-guests" ref={ref}>
|
|
24
|
-
<
|
|
27
|
+
<FilterSectionHeader
|
|
28
|
+
title={t('guests.title')}
|
|
29
|
+
action={onClose && <CloseButton handleClose={onClose} />}
|
|
30
|
+
/>
|
|
25
31
|
|
|
26
32
|
<div className="will-guests-filter-container" ref={containerRef}>
|
|
27
33
|
{ageCategories?.map((category) => (
|
|
@@ -2,29 +2,15 @@
|
|
|
2
2
|
text-align: initial;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
.will-locations-filter-title {
|
|
6
|
-
font-size: 22px;
|
|
7
|
-
margin: 10px 0;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.will-locations-filter-subtitle {
|
|
11
|
-
font-size: 15px;
|
|
12
|
-
font-weight: 500;
|
|
13
|
-
color: var(--will-text);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
5
|
.will-locations-filter-container {
|
|
17
6
|
display: flex;
|
|
18
7
|
gap: 10px;
|
|
19
8
|
flex-direction: column;
|
|
20
9
|
min-width: 400px;
|
|
10
|
+
margin-top: 20px;
|
|
21
11
|
}
|
|
22
12
|
|
|
23
13
|
@media (max-width: 960px) {
|
|
24
|
-
.will-locations-filter-title {
|
|
25
|
-
font-size: 18px;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
14
|
.will-locations-filter-container {
|
|
29
15
|
margin-top: 15px;
|
|
30
16
|
min-width: 100%;
|