|
19 | 19 | let minimumFilterValue = 1895; |
20 | 20 | let maximumFilterValue = new Date().getFullYear(); |
21 | 21 |
|
| 22 | + let selectedVenueTypes: { label: string; value: string }[] = []; |
22 | 23 | export let data: FeatureCollection | null; |
23 | 24 |
|
24 | 25 | onMount(() => { |
|
138 | 139 | } |
139 | 140 | }); |
140 | 141 |
|
141 | | - const updateFilter = (min: number, max: number) => { |
| 142 | + const updateFilter = ( |
| 143 | + min: number, |
| 144 | + max: number, |
| 145 | + selectedVenueTypes?: { label: string; value: string }[] |
| 146 | + ) => { |
142 | 147 | if (!$map?.style) return; |
143 | | - $map?.setFilter('venues', [ |
| 148 | +
|
| 149 | + let filter = [ |
144 | 150 | 'any', |
145 | 151 | ['all', ['>=', ['get', 'startYear'], min], ['<=', ['get', 'startYear'], max]], |
146 | 152 | ['all', ['>=', ['get', 'endYear'], min], ['<=', ['get', 'endYear'], max]] |
147 | | - ]); |
| 153 | + ]; |
| 154 | +
|
| 155 | + if (selectedVenueTypes?.length) { |
| 156 | + const typeFilter = [ |
| 157 | + 'any', |
| 158 | + ...selectedVenueTypes.map((type) => ['in', type.value, ['get', 'type']]) |
| 159 | + ]; |
| 160 | + filter = ['all', filter, typeFilter]; |
| 161 | + } |
| 162 | +
|
| 163 | + $map?.setFilter('venues', filter); |
148 | 164 | }; |
149 | 165 |
|
150 | 166 | const updateVisibleFeatures = () => { |
|
155 | 171 | }; |
156 | 172 |
|
157 | 173 | $: { |
158 | | - updateFilter(minimumFilterValue, maximumFilterValue); |
| 174 | + updateFilter(minimumFilterValue, maximumFilterValue, selectedVenueTypes); |
159 | 175 | updateVisibleFeatures(); |
160 | 176 | } |
161 | 177 |
|
|
208 | 224 |
|
209 | 225 | <!-- TypeFilter--> |
210 | 226 | <div class="absolute top-0 right-0 z-10 mr-4"> |
211 | | - <TypeFilter /> |
| 227 | + <TypeFilter bind:selectedVenueTypes /> |
212 | 228 | </div> |
213 | 229 |
|
214 | 230 | <!-- Map --> |
|
0 commit comments