@abcagency/hc-ui-components 1.9.9 → 1.9.12
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/containers/accordions/filter-container.js +1 -1
- package/dist/components/containers/accordions/filter-container.js.map +1 -1
- package/dist/components/modules/list/field-mapper-desktop.js +7 -3
- package/dist/components/modules/list/field-mapper-desktop.js.map +1 -1
- package/dist/components/modules/list/field-mapper-mobile.js +6 -4
- package/dist/components/modules/list/field-mapper-mobile.js.map +1 -1
- package/dist/contexts/mapListContext.js +2 -4
- package/dist/contexts/mapListContext.js.map +1 -1
- package/dist/types/util/filterUtil.d.ts +3 -1
- package/dist/util/filterUtil.js +157 -25
- package/dist/util/filterUtil.js.map +1 -1
- package/package.json +1 -1
- package/src/components/containers/accordions/filter-container.js +1 -1
- package/src/components/modules/list/field-mapper-desktop.jsx +9 -3
- package/src/components/modules/list/field-mapper-mobile.jsx +6 -4
- package/src/contexts/mapListContext.tsx +41 -43
- package/src/util/fieldMapper.js +6 -2
- package/src/util/filterUtil.js +128 -12
package/dist/util/filterUtil.js
CHANGED
|
@@ -3,12 +3,31 @@ import { getDistinctItemsByProximity } from './mapUtil.js';
|
|
|
3
3
|
import { isAlgoliaAvailable, filterListingsByAlgoliaSearch, isAlgoliaInitializing } from './algoliaSearchUtil.js';
|
|
4
4
|
import Fuse from 'fuse.js';
|
|
5
5
|
|
|
6
|
+
// Helper function to get field value from either fields or customFields
|
|
7
|
+
var getFieldValue = function getFieldValue(listing, fieldKey) {
|
|
8
|
+
// First check in fields
|
|
9
|
+
if (listing.fields && listing.fields[fieldKey] !== undefined && listing.fields[fieldKey] !== null) {
|
|
10
|
+
return listing.fields[fieldKey];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Then check in customFields array
|
|
14
|
+
if (listing.customFields && Array.isArray(listing.customFields)) {
|
|
15
|
+
var customField = listing.customFields.find(function (cf) {
|
|
16
|
+
return cf.id === fieldKey || cf.name === fieldKey;
|
|
17
|
+
});
|
|
18
|
+
if (customField) {
|
|
19
|
+
return customField.value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
};
|
|
6
24
|
var getFilterOptions = function getFilterOptions(listings, filteredListings, field) {
|
|
7
25
|
var excludeZeroCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
8
26
|
var options = new Set();
|
|
9
27
|
listings.forEach(function (listing) {
|
|
10
|
-
|
|
11
|
-
|
|
28
|
+
var value = getFieldValue(listing, field);
|
|
29
|
+
if (value) {
|
|
30
|
+
options.add(value);
|
|
12
31
|
}
|
|
13
32
|
});
|
|
14
33
|
var optionCounts = {};
|
|
@@ -16,8 +35,7 @@ var getFilterOptions = function getFilterOptions(listings, filteredListings, fie
|
|
|
16
35
|
optionCounts[option] = 0;
|
|
17
36
|
});
|
|
18
37
|
filteredListings.forEach(function (listing) {
|
|
19
|
-
|
|
20
|
-
var value = listing.fields[field];
|
|
38
|
+
var value = getFieldValue(listing, field);
|
|
21
39
|
if (value && Object.prototype.hasOwnProperty.call(optionCounts, value)) {
|
|
22
40
|
optionCounts[value] += 1;
|
|
23
41
|
}
|
|
@@ -52,7 +70,9 @@ var getSpecialFeatureOptions = function getSpecialFeatureOptions(listings, filte
|
|
|
52
70
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
53
71
|
featureKey = _ref2[0],
|
|
54
72
|
featureName = _ref2[1];
|
|
55
|
-
|
|
73
|
+
var value = getFieldValue(listing, featureKey);
|
|
74
|
+
// Support both numeric (1/0) and string ("true"/"false") boolean values
|
|
75
|
+
if (value == 1 || value === 1 || value === '1' || value === 'true' || value === true) {
|
|
56
76
|
featureCounts[featureName] += 1;
|
|
57
77
|
}
|
|
58
78
|
});
|
|
@@ -100,6 +120,90 @@ var getSpecialFeatureOptions = function getSpecialFeatureOptions(listings, filte
|
|
|
100
120
|
}
|
|
101
121
|
return specialFeatureOptions;
|
|
102
122
|
};
|
|
123
|
+
|
|
124
|
+
// Helper to detect if a custom field should be treated as boolean or multi-value
|
|
125
|
+
var isCustomFieldBoolean = function isCustomFieldBoolean(listings, fieldKey) {
|
|
126
|
+
var distinctValues = new Set();
|
|
127
|
+
var _iterator2 = _createForOfIteratorHelper(listings),
|
|
128
|
+
_step2;
|
|
129
|
+
try {
|
|
130
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
131
|
+
var listing = _step2.value;
|
|
132
|
+
var value = getFieldValue(listing, fieldKey);
|
|
133
|
+
if (value != null && value !== '' && value !== undefined) {
|
|
134
|
+
distinctValues.add(String(value).toLowerCase());
|
|
135
|
+
}
|
|
136
|
+
// If we find more than 2 non-empty distinct values, it's not boolean
|
|
137
|
+
if (distinctValues.size > 2) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Check if all values are boolean-like
|
|
143
|
+
} catch (err) {
|
|
144
|
+
_iterator2.e(err);
|
|
145
|
+
} finally {
|
|
146
|
+
_iterator2.f();
|
|
147
|
+
}
|
|
148
|
+
var booleanValues = new Set(['true', 'false', '1', '0', 'yes', 'no']);
|
|
149
|
+
var _iterator3 = _createForOfIteratorHelper(distinctValues),
|
|
150
|
+
_step3;
|
|
151
|
+
try {
|
|
152
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
153
|
+
var val = _step3.value;
|
|
154
|
+
if (!booleanValues.has(val)) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
} catch (err) {
|
|
159
|
+
_iterator3.e(err);
|
|
160
|
+
} finally {
|
|
161
|
+
_iterator3.f();
|
|
162
|
+
}
|
|
163
|
+
return distinctValues.size > 0 && distinctValues.size <= 2;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Get dynamic custom field filters (for non-boolean multi-value fields)
|
|
167
|
+
var getDynamicCustomFieldFilters = function getDynamicCustomFieldFilters(listings, filteredListings, siteConfig) {
|
|
168
|
+
var filterConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
169
|
+
if (!siteConfig.specialFeatures) return [];
|
|
170
|
+
var dynamicFilters = [];
|
|
171
|
+
var specialFeaturesKeys = Object.keys(siteConfig.specialFeatures);
|
|
172
|
+
|
|
173
|
+
// Find all custom fields used across listings
|
|
174
|
+
var allCustomFields = new Set();
|
|
175
|
+
listings.forEach(function (listing) {
|
|
176
|
+
if (listing.customFields && Array.isArray(listing.customFields)) {
|
|
177
|
+
listing.customFields.forEach(function (cf) {
|
|
178
|
+
if (cf.id || cf.name) {
|
|
179
|
+
allCustomFields.add(cf.id || cf.name);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// For each custom field, check if it's NOT in specialFeatures and NOT boolean
|
|
186
|
+
allCustomFields.forEach(function (fieldKey) {
|
|
187
|
+
// Skip if already in specialFeatures
|
|
188
|
+
if (specialFeaturesKeys.includes(fieldKey)) return;
|
|
189
|
+
|
|
190
|
+
// Check if this field has multiple non-boolean values
|
|
191
|
+
if (!isCustomFieldBoolean(listings, fieldKey)) {
|
|
192
|
+
var options = getFilterOptions(listings, filteredListings, fieldKey, filterConfig.hideZeroResults);
|
|
193
|
+
|
|
194
|
+
// Only add if there are meaningful options
|
|
195
|
+
if (options.length > 1) {
|
|
196
|
+
dynamicFilters.push({
|
|
197
|
+
id: fieldKey,
|
|
198
|
+
title: fieldKey.charAt(0).toUpperCase() + fieldKey.slice(1).replace(/([A-Z])/g, ' $1').trim(),
|
|
199
|
+
items: options,
|
|
200
|
+
isDynamic: true
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return dynamicFilters;
|
|
206
|
+
};
|
|
103
207
|
var getPointsOfInterestOptions = function getPointsOfInterestOptions(pointsOfInterestNames) {
|
|
104
208
|
return Object.entries(pointsOfInterestNames).sort().map(function (_ref5) {
|
|
105
209
|
var _ref6 = _slicedToArray(_ref5, 2),
|
|
@@ -129,10 +233,28 @@ var generateFilterOptions = function generateFilterOptions(filteredListings, all
|
|
|
129
233
|
});
|
|
130
234
|
}
|
|
131
235
|
if (fieldName == 'category') {
|
|
236
|
+
// For category counts, exclude specialFeatures from the filter calculation
|
|
237
|
+
// so that toggling specialFeatures updates category counts
|
|
238
|
+
var categoryCountListings = countListings;
|
|
239
|
+
if (filterConfig.dynamicCounts && selectedFilters.specialFeatures) {
|
|
240
|
+
categoryCountListings = allListings.filter(function (listing) {
|
|
241
|
+
return Object.entries(selectedFilters).every(function (_ref7) {
|
|
242
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
243
|
+
key = _ref8[0],
|
|
244
|
+
value = _ref8[1];
|
|
245
|
+
if (key === 'specialFeatures') return true; // Exclude specialFeatures
|
|
246
|
+
var fieldValue = getFieldValue(listing, key);
|
|
247
|
+
if (value && _typeof(value) === 'object' && value[fieldValue] === true) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}
|
|
132
254
|
return {
|
|
133
255
|
id: fieldName,
|
|
134
256
|
title: siteConfig.fieldNames[fieldName],
|
|
135
|
-
items: getFilterOptions(allListings,
|
|
257
|
+
items: getFilterOptions(allListings, categoryCountListings, fieldName, filterConfig.hideZeroResults)
|
|
136
258
|
};
|
|
137
259
|
}
|
|
138
260
|
if (fieldName == 'subCategory' && selectedFilters.category) {
|
|
@@ -163,12 +285,13 @@ var generateFilterOptions = function generateFilterOptions(filteredListings, all
|
|
|
163
285
|
var locations = siteConfig.locationFiltersShown.map(function (fieldName, index) {
|
|
164
286
|
var locationFilteredListings = allListings;
|
|
165
287
|
locationFilteredListings = allListings.filter(function (listing) {
|
|
166
|
-
return Object.entries(selectedFilters).every(function (
|
|
167
|
-
var
|
|
168
|
-
key =
|
|
169
|
-
value =
|
|
288
|
+
return Object.entries(selectedFilters).every(function (_ref9) {
|
|
289
|
+
var _ref10 = _slicedToArray(_ref9, 2),
|
|
290
|
+
key = _ref10[0],
|
|
291
|
+
value = _ref10[1];
|
|
170
292
|
if (siteConfig.locationFiltersShown.includes(key)) return true;
|
|
171
|
-
|
|
293
|
+
var fieldValue = getFieldValue(listing, key);
|
|
294
|
+
if (value && _typeof(value) === 'object' && value[fieldValue] === true) {
|
|
172
295
|
return true;
|
|
173
296
|
}
|
|
174
297
|
return false;
|
|
@@ -233,6 +356,9 @@ var generateFilterOptions = function generateFilterOptions(filteredListings, all
|
|
|
233
356
|
items: getPointsOfInterestOptions(siteConfig.pointsOfInterestConfig.pointsOfInterestNames)
|
|
234
357
|
};
|
|
235
358
|
|
|
359
|
+
// Get dynamic custom field filters (multi-value fields not in specialFeatures)
|
|
360
|
+
var dynamicCustomFilters = getDynamicCustomFieldFilters(allListings, countListings, siteConfig, filterConfig);
|
|
361
|
+
|
|
236
362
|
// Filter out null filters and ensure items arrays don't contain undefined values
|
|
237
363
|
var cleanFilters = dynamicFilters.filter(function (f) {
|
|
238
364
|
return f != null && f.items != null;
|
|
@@ -252,8 +378,11 @@ var generateFilterOptions = function generateFilterOptions(filteredListings, all
|
|
|
252
378
|
})
|
|
253
379
|
});
|
|
254
380
|
});
|
|
381
|
+
|
|
382
|
+
// Add dynamic custom field filters to the main filters array
|
|
383
|
+
var allCleanFilters = [].concat(_toConsumableArray(cleanFilters), _toConsumableArray(dynamicCustomFilters));
|
|
255
384
|
return {
|
|
256
|
-
filters:
|
|
385
|
+
filters: allCleanFilters,
|
|
257
386
|
locations: cleanLocations,
|
|
258
387
|
pointsOfInterest: pointsOfInterest
|
|
259
388
|
};
|
|
@@ -261,7 +390,7 @@ var generateFilterOptions = function generateFilterOptions(filteredListings, all
|
|
|
261
390
|
return null;
|
|
262
391
|
};
|
|
263
392
|
var applyFilters = /*#__PURE__*/function () {
|
|
264
|
-
var
|
|
393
|
+
var _ref11 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(allListings, selectedFilters, query, listingEntities, favorites, siteConfig) {
|
|
265
394
|
var isFirstLoad,
|
|
266
395
|
results,
|
|
267
396
|
invertedSpecialFeaturesMap,
|
|
@@ -279,10 +408,10 @@ var applyFilters = /*#__PURE__*/function () {
|
|
|
279
408
|
isFirstLoad = _args2.length > 6 && _args2[6] !== undefined ? _args2[6] : false;
|
|
280
409
|
results = allListings;
|
|
281
410
|
if (siteConfig.specialFeatures) {
|
|
282
|
-
invertedSpecialFeaturesMap = Object.entries(siteConfig.specialFeatures).reduce(function (acc,
|
|
283
|
-
var
|
|
284
|
-
key =
|
|
285
|
-
value =
|
|
411
|
+
invertedSpecialFeaturesMap = Object.entries(siteConfig.specialFeatures).reduce(function (acc, _ref12) {
|
|
412
|
+
var _ref13 = _slicedToArray(_ref12, 2),
|
|
413
|
+
key = _ref13[0],
|
|
414
|
+
value = _ref13[1];
|
|
286
415
|
acc[value] = key;
|
|
287
416
|
return acc;
|
|
288
417
|
}, {});
|
|
@@ -312,17 +441,20 @@ var applyFilters = /*#__PURE__*/function () {
|
|
|
312
441
|
case 4:
|
|
313
442
|
if (field === "specialFeatures" && invertedSpecialFeaturesMap && Object.keys(filterItems).length > 0) {
|
|
314
443
|
results = results.filter(function (listing) {
|
|
315
|
-
return Object.entries(filterItems).some(function (
|
|
316
|
-
var
|
|
317
|
-
filterName =
|
|
318
|
-
filterValue =
|
|
444
|
+
return Object.entries(filterItems).some(function (_ref14) {
|
|
445
|
+
var _ref15 = _slicedToArray(_ref14, 2),
|
|
446
|
+
filterName = _ref15[0],
|
|
447
|
+
filterValue = _ref15[1];
|
|
319
448
|
var listingFieldName = invertedSpecialFeaturesMap[filterName];
|
|
320
|
-
|
|
449
|
+
var value = getFieldValue(listing, listingFieldName);
|
|
450
|
+
// Support both numeric (1/0) and string ("true"/"false") boolean values
|
|
451
|
+
return filterValue && (value == 1 || value === 1 || value === '1' || value === 'true' || value === true);
|
|
321
452
|
});
|
|
322
453
|
});
|
|
323
454
|
} else if (Object.keys(filterItems).length > 0) {
|
|
324
455
|
results = results.filter(function (listing) {
|
|
325
|
-
|
|
456
|
+
var value = getFieldValue(listing, formattedField);
|
|
457
|
+
return Object.prototype.hasOwnProperty.call(filterItems, value);
|
|
326
458
|
});
|
|
327
459
|
}
|
|
328
460
|
case 5:
|
|
@@ -410,7 +542,7 @@ var applyFilters = /*#__PURE__*/function () {
|
|
|
410
542
|
}, _callee, null, [[25, 31]]);
|
|
411
543
|
}));
|
|
412
544
|
return function applyFilters(_x, _x2, _x3, _x4, _x5, _x6) {
|
|
413
|
-
return
|
|
545
|
+
return _ref11.apply(this, arguments);
|
|
414
546
|
};
|
|
415
547
|
}();
|
|
416
548
|
function searchResults(results, query) {
|
|
@@ -457,5 +589,5 @@ var filterListingsByLocation = function filterListingsByLocation(allListings, se
|
|
|
457
589
|
};
|
|
458
590
|
};
|
|
459
591
|
|
|
460
|
-
export { applyFilters, filterListingsByLocation, generateFilterOptions, getFilterOptions, getSpecialFeatureOptions };
|
|
592
|
+
export { applyFilters, filterListingsByLocation, generateFilterOptions, getDynamicCustomFieldFilters, getFieldValue, getFilterOptions, getSpecialFeatureOptions };
|
|
461
593
|
//# sourceMappingURL=filterUtil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterUtil.js","sources":["../../src/util/filterUtil.js"],"sourcesContent":["/* eslint-disable no-undef */\nimport { getDistinctItemsByProximity } from '~/util/mapUtil';\nimport { isAlgoliaAvailable, isAlgoliaInitializing, filterListingsByAlgoliaSearch } from '~/util/algoliaSearchUtil';\n\nimport Fuse from 'fuse.js';\n\nexport const getFilterOptions = (listings, filteredListings, field, excludeZeroCount = false) => {\n\tconst options = new Set();\n\tlistings.forEach(listing => {\n\t\tif (listing.fields && listing.fields[field]) {\n\t\t\toptions.add(listing.fields[field]);\n\t\t}\n\t});\n\n\tconst optionCounts = {};\n\toptions.forEach(option => {\n\t\toptionCounts[option] = 0;\n\t});\n\n\tfilteredListings.forEach(listing => {\n\t\tif (!listing.fields) return;\n\t\tconst value = listing.fields[field];\n\t\tif (value && Object.prototype.hasOwnProperty.call(optionCounts, value)) {\n\t\t\toptionCounts[value] += 1;\n\t\t}\n\t});\n\n\tlet result = Array.from(options)\n\t\t.filter(option => option != null && option !== '') // Filter out null/empty values\n\t\t.map(option => ({\n\t\t\tname: option,\n\t\t\tcount: optionCounts[option] || 0\n\t\t}))\n\t\t.filter(option => !(excludeZeroCount === true && option.count === 0));\n\n\t// Sort alphabetically\n\tresult.sort((a, b) => a.name.localeCompare(b.name));\n\n\treturn result;\n};\n\nexport const getSpecialFeatureOptions = (listings, filteredListings, siteConfig, favorites, filterConfig = {}) => {\n\tconst specialFeatures = siteConfig.specialFeatures;\n\tconst featureCounts = Object.keys(specialFeatures).sort().reduce((acc, key) => {\n\t\tacc[specialFeatures[key]] = 0;\n\t\treturn acc;\n\t}, {});\n\n\tfilteredListings.forEach(listing => {\n\t\tObject.entries(specialFeatures).forEach(([featureKey, featureName]) => {\n\t\t\tif (listing.fields[featureKey] == 1) {\n\t\t\t\tfeatureCounts[featureName] += 1;\n\t\t\t}\n\t\t});\n\t});\n\n\tlet specialFeatureOptions = Object.entries(featureCounts).map(([name, count]) => ({\n\t\tname,\n\t\tcount\n\t}));\n\n\t// Update favorite count\n\tfor (let option of specialFeatureOptions) {\n\t\tif (option.name === 'Favorite') {\n\t\t\toption.count = filteredListings.filter(x => favorites.includes(x.id)).length;\n\t\t}\n\t}\n\n\t// Hide favorites if filterConfig.showFavorites is false\n\tif (filterConfig.showFavorites === false) {\n\t\tspecialFeatureOptions = specialFeatureOptions.filter(option => option.name !== 'Favorite');\n\t}\n\n\t// Hide zero results if filterConfig.hideZeroResults is true\n\tif (filterConfig.hideZeroResults === true) {\n\t\tspecialFeatureOptions = specialFeatureOptions.filter(option => option.count > 0);\n\t}\n\n\treturn specialFeatureOptions;\n};\n\nconst getPointsOfInterestOptions = pointsOfInterestNames => {\n\treturn Object.entries(pointsOfInterestNames).sort().map(([key, name]) => ({\n\t\tkey,\n\t\tname\n\t}));\n};\n\nexport const generateFilterOptions = (\n\tfilteredListings,\n\tallListings,\n\tsiteConfig,\n\tfilterOptions,\n\tparentField,\n\tfavorites,\n\tselectedFilters,\n\tfilterConfig = {\n\t\thideZeroResults: false,\n\t\tdynamicCounts: true,\n\t\tshowFavorites: true,\n\t\tcollapsedByDefault: false,\n\t\tsortAlphabetically: false\n\t}\n) => {\n\tif (allListings.length > 0) {\n\t\t// Determine which listings to use for counts based on dynamicCounts setting\n\t\tconst countListings = filterConfig.dynamicCounts ? filteredListings : allListings;\n\n\t\tconst dynamicFilters = siteConfig.fieldFiltersShown.map(fieldName => {\n\t\t\tif (fieldName === parentField && filterOptions?.filters) {\n\t\t\t\treturn filterOptions.filters.find(filter => filter.id === fieldName);\n\t\t\t}\n\t\t\tif(fieldName == 'category'){\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, countListings, fieldName, filterConfig.hideZeroResults)\n\t\t\t\t};\n\t\t\t}\n\t\t\tif(fieldName == 'subCategory' && selectedFilters.category){\n\t\t\t\tconst categoryKeys = Object.keys(selectedFilters.category);\n\t\t\t\tconst filteredByCategory = allListings.filter(\n\t\t\t\t\tx => categoryKeys.includes(x.fields?.category)\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, filteredByCategory, fieldName, filterConfig.hideZeroResults)\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (fieldName == \"specialFeatures\") {\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getSpecialFeatureOptions(allListings, countListings, siteConfig, favorites, filterConfig).sort()\n\t\t\t\t};\n\t\t\t}\n\t\treturn {\n\t\t\tid: fieldName,\n\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\titems: getFilterOptions(allListings, countListings, fieldName, filterConfig.hideZeroResults)\n\t\t};\n\t});\t\tconst locations =\n\t\t\tsiteConfig.locationFiltersShown.map((fieldName, index) => {\n\t\t\t\tlet locationFilteredListings = allListings;\n\t\t\t\tlocationFilteredListings = allListings.filter(listing => {\n\t\t\t\t\treturn Object.entries(selectedFilters).every(([key, value]) => {\n\t\t\t\t\t\tif (siteConfig.locationFiltersShown.includes(key)) return true;\n\t\t\t\t\t\tif (value && typeof value === 'object' && value[listing.fields[key]] === true) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (index === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\titems: getFilterOptions(allListings, locationFilteredListings, fieldName, true)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t if (fieldName === 'entityName' && filterOptions?.locations) {\n\t\t\t\t\tconst cityIncluded = siteConfig.locationFiltersShown.includes('city');\n\t\t\t\t\tconst stateIncluded = siteConfig.locationFiltersShown.includes('state');\n\t\t\t\t\tconst cityStateIncluded = siteConfig.locationFiltersShown.includes('cityState');\n\t\t\t\t\tconst uniqueCities = cityIncluded ? [...new Set(filteredListings.map(listing => listing.fields.city))] : [];\n\t\t\t\t\tconst uniqueStates = stateIncluded ? [...new Set(filteredListings.map(listing => listing.fields.state))] : [];\n\t\t\t\t\tconst uniqueCityStates = cityStateIncluded ? [...new Set(filteredListings.map(listing => listing.fields.cityState))] : [];\n\t\t\t\t\tconst filteredByLocation = locationFilteredListings.filter(listing => {\n\t\t\t\t\t\tconst cityMatches = cityIncluded ? uniqueCities.includes(listing.fields.city) : true;\n\t\t\t\t\t\tconst stateMatches = stateIncluded ? uniqueStates.includes(listing.fields.state) : true;\n\t\t\t\t\t\tconst cityStateMatches = cityStateIncluded ? uniqueCityStates.includes(listing.fields.cityState) : true;\n\t\t\t\t\t\treturn cityMatches && stateMatches && cityStateMatches;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\titems: getFilterOptions(allListings, filteredByLocation, fieldName, true)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (fieldName === 'city') {\n\t\t\t\t\tif (siteConfig.locationFiltersShown.includes('state') && selectedFilters.state) {\n\t\t\t\t\t\tconst selectedStates = Object.keys(selectedFilters.state).filter(\n\t\t\t\t\t\t\tstate => selectedFilters.state[state] === true\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst filteredByLocation = locationFilteredListings.filter(listing =>\n\t\t\t\t\t\t\tselectedStates.includes(listing.fields.state)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\t\titems: getFilterOptions(allListings, filteredByLocation, fieldName, true)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, filteredListings, fieldName, true)\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst pointsOfInterest = {\n\t\t\tid: \"pointsOfInterest\",\n\t\t\ttitle: siteConfig.pointsOfInterestConfig.title,\n\t\t\titems: getPointsOfInterestOptions(\n\t\t\t\tsiteConfig.pointsOfInterestConfig.pointsOfInterestNames\n\t\t\t)\n\t\t};\n\n\t\t// Filter out null filters and ensure items arrays don't contain undefined values\n\t\tconst cleanFilters = dynamicFilters\n\t\t\t.filter(f => f != null && f.items != null)\n\t\t\t.map(f => ({\n\t\t\t\t...f,\n\t\t\t\titems: f.items.filter(item => item != null && item.name != null)\n\t\t\t}));\n\n\t\tconst cleanLocations = locations\n\t\t\t.filter(l => l != null && l.items != null)\n\t\t\t.map(l => ({\n\t\t\t\t...l,\n\t\t\t\titems: l.items.filter(item => item != null && item.name != null)\n\t\t\t}));\n\n\t\treturn {\n\t\t\tfilters: cleanFilters,\n\t\t\tlocations: cleanLocations,\n\t\t\tpointsOfInterest: pointsOfInterest\n\t\t};\n\t}\n\n\treturn null;\n};\n\nexport const applyFilters = async (\n\tallListings,\n\tselectedFilters,\n\tquery,\n\tlistingEntities,\n\tfavorites,\n\tsiteConfig,\n\tisFirstLoad = false\n) => {\n\tlet results = allListings;\n\tlet invertedSpecialFeaturesMap;\n\tif (siteConfig.specialFeatures) {\n\t\tinvertedSpecialFeaturesMap = Object.entries(siteConfig.specialFeatures).reduce((acc, [key, value]) => {\n\t\t\tacc[value] = key;\n\t\t\treturn acc;\n\t\t}, {});\n\n\t}\n\tconst hasFavorite = !!selectedFilters.specialFeatures && !!selectedFilters.specialFeatures.Favorite;\n\n\tif (hasFavorite && selectedFilters.specialFeatures.Favorite == true) {\n\t\tresults = results.filter(x => favorites.includes(x.id));\n\t}\n\tvar favorite;\n\tif (hasFavorite) {\n\t\tfavorite = selectedFilters.specialFeatures.Favorite;\n\t\tdelete selectedFilters.specialFeatures.Favorite;\n\t}\n\tfor (const [field, filterItems] of Object.entries(selectedFilters)) {\n\t\tconst formattedField = field;\n\t\tif (field === \"pointsOfInterest\") continue;\n\t\tif (field === \"specialFeatures\" && invertedSpecialFeaturesMap && Object.keys(filterItems).length > 0) {\n\t\t\tresults = results.filter(listing => {\n\t\t\t\treturn Object.entries(filterItems).some(([filterName, filterValue]) => {\n\t\t\t\t\tconst listingFieldName = invertedSpecialFeaturesMap[filterName];\n\t\t\t\t\treturn filterValue && listing.fields[listingFieldName] == 1;\n\t\t\t\t});\n\t\t\t});\n\t\t} else if (Object.keys(filterItems).length > 0) {\n\t\t\tresults = results.filter(listing =>\n\t\t\t\tObject.prototype.hasOwnProperty.call(filterItems, listing.fields[formattedField])\n\t\t\t);\n\t\t}\n\t}\n\tif (query) {\n\t\t// Wait for Algolia to finish initializing ONLY on first load (from URL/localStorage)\n\t\t// Don't wait on subsequent manual searches to avoid slowing down the interface\n\t\tif (isFirstLoad && isAlgoliaInitializing()) {\n\t\t\t// Wait up to 500ms for Algolia to initialize on first load\n\t\t\tlet attempts = 0;\n\t\t\twhile (isAlgoliaInitializing() && attempts < 10) {\n\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50));\n\t\t\t\tattempts++;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Use Algolia if available, otherwise fall back to Fuse.js\n\t\tif (isAlgoliaAvailable()) {\n\t\t\ttry {\n\t\t\t\tresults = await filterListingsByAlgoliaSearch(results, query);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Algolia search failed, falling back to Fuse.js:', error);\n\t\t\t\tresults = searchResults(results, query);\n\t\t\t}\n\t\t} else {\n\t\t\tresults = searchResults(results, query);\n\t\t}\n\t}\n\tconst distinctItems = getDistinctItemsByProximity(results, listingEntities);\n\tif (hasFavorite) {\n\t\tselectedFilters.specialFeatures.Favorite = favorite;\n\t}\n\treturn { filteredListings: results, mapItems: distinctItems };\n};\n\nfunction searchResults(results, query) {\n\tconst fields = [\n\t\t'id',\n\t\t'uniqueId',\n\t\t'fields.posted',\n\t\t'fields.subtitle',\n\t\t'fields.education',\n\t\t'fields.title',\n\t\t'fields.category',\n\t\t'fields.subCategory',\n\t\t'fields.shift',\n\t\t'fields.citystate',\n\t\t'fields.city',\n\t\t'fields.state',\n\t\t'fields.schedule',\n\t\t'fields.customflag1',\n\t\t'fields.bonus',\n\t\t'fields.remote',\n\t\t'fields.useclientjoburl',\n\t\t'fields.datecreated',\n\t\t'fields.datelastedited'\n\t];\n\n\tconst options = {\n\t\tincludeScore: true,\n\t\tthreshold: 0.3,\n\t\tkeys: fields\n\t};\n\n\tconst fuse = new Fuse(results, options);\n\tconst lowerCaseQuery = query.toLowerCase();\n\tconst queryTerms = lowerCaseQuery.split(' ');\n\n\tconst exactIdMatch = results.find(result => result.id.toString() === query || result.uniqueId === query);\n\tif (exactIdMatch) {\n\t\treturn [exactIdMatch];\n\t}\n\n\tconst fuseQuery = queryTerms.map(term => ({\n\t\t$or: fields.map(field => ({ [field]: term }))\n\t}));\n\n\tconst fuseResults = fuse.search({ $and: fuseQuery });\n\n\treturn fuseResults.map(result => result.item);\n}\n\nexport const filterListingsByLocation = (\n\tallListings,\n\tselectedLocation,\n\tlistingEntities\n) => {\n\tlet results = allListings;\n\tif (selectedLocation !== null) {\n\t\tresults = results.filter(item =>\n\t\t\tObject.prototype.hasOwnProperty.call(selectedLocation.items, item.id)\n\t\t);\n\t}\n\tconst mapItems = getDistinctItemsByProximity(results, listingEntities);\n\treturn { filteredListings: results, mapItems: mapItems };\n};\n"],"names":["getFilterOptions","listings","filteredListings","field","excludeZeroCount","arguments","length","undefined","options","Set","forEach","listing","fields","add","optionCounts","option","value","Object","prototype","hasOwnProperty","call","result","Array","from","filter","map","name","count","sort","a","b","localeCompare","getSpecialFeatureOptions","siteConfig","favorites","filterConfig","specialFeatures","featureCounts","keys","reduce","acc","key","entries","_ref","_ref2","_slicedToArray","featureKey","featureName","specialFeatureOptions","_ref3","_ref4","_iterator","_createForOfIteratorHelper","_step","s","n","done","x","includes","id","err","e","f","showFavorites","hideZeroResults","getPointsOfInterestOptions","pointsOfInterestNames","_ref5","_ref6","generateFilterOptions","allListings","filterOptions","parentField","selectedFilters","dynamicCounts","collapsedByDefault","sortAlphabetically","countListings","dynamicFilters","fieldFiltersShown","fieldName","filters","find","title","fieldNames","items","category","categoryKeys","filteredByCategory","_x$fields","locations","locationFiltersShown","index","locationFilteredListings","every","_ref7","_ref8","_typeof","cityIncluded","stateIncluded","cityStateIncluded","uniqueCities","_toConsumableArray","city","uniqueStates","state","uniqueCityStates","cityState","filteredByLocation","cityMatches","stateMatches","cityStateMatches","selectedStates","pointsOfInterest","pointsOfInterestConfig","cleanFilters","_objectSpread","item","cleanLocations","l","applyFilters","_ref9","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","listingEntities","isFirstLoad","results","invertedSpecialFeaturesMap","hasFavorite","favorite","_loop","_i","_Object$entries","attempts","distinctItems","_args2","wrap","_callee$","_context2","prev","next","_ref10","_ref11","Favorite","_Object$entries$_i","filterItems","formattedField","_loop$","_context","abrupt","some","_ref12","_ref13","filterName","filterValue","listingFieldName","stop","delegateYield","t0","isAlgoliaInitializing","Promise","resolve","setTimeout","isAlgoliaAvailable","filterListingsByAlgoliaSearch","sent","t1","console","error","searchResults","getDistinctItemsByProximity","mapItems","_x","_x2","_x3","_x4","_x5","_x6","apply","includeScore","threshold","fuse","Fuse","lowerCaseQuery","toLowerCase","queryTerms","split","exactIdMatch","toString","uniqueId","fuseQuery","term","$or","_defineProperty","fuseResults","search","$and","filterListingsByLocation","selectedLocation"],"mappings":";;;;;AAMO,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,QAAQ,EAAEC,gBAAgB,EAAEC,KAAK,EAA+B;AAAA,EAAA,IAA7BC,gBAAgB,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;AAC3F,EAAA,IAAMG,OAAO,GAAG,IAAIC,GAAG,EAAE,CAAA;AACzBR,EAAAA,QAAQ,CAACS,OAAO,CAAC,UAAAC,OAAO,EAAI;IAC3B,IAAIA,OAAO,CAACC,MAAM,IAAID,OAAO,CAACC,MAAM,CAACT,KAAK,CAAC,EAAE;MAC5CK,OAAO,CAACK,GAAG,CAACF,OAAO,CAACC,MAAM,CAACT,KAAK,CAAC,CAAC,CAAA;AACnC,KAAA;AACD,GAAC,CAAC,CAAA;EAEF,IAAMW,YAAY,GAAG,EAAE,CAAA;AACvBN,EAAAA,OAAO,CAACE,OAAO,CAAC,UAAAK,MAAM,EAAI;AACzBD,IAAAA,YAAY,CAACC,MAAM,CAAC,GAAG,CAAC,CAAA;AACzB,GAAC,CAAC,CAAA;AAEFb,EAAAA,gBAAgB,CAACQ,OAAO,CAAC,UAAAC,OAAO,EAAI;AACnC,IAAA,IAAI,CAACA,OAAO,CAACC,MAAM,EAAE,OAAA;AACrB,IAAA,IAAMI,KAAK,GAAGL,OAAO,CAACC,MAAM,CAACT,KAAK,CAAC,CAAA;AACnC,IAAA,IAAIa,KAAK,IAAIC,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACN,YAAY,EAAEE,KAAK,CAAC,EAAE;AACvEF,MAAAA,YAAY,CAACE,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,KAAA;AACD,GAAC,CAAC,CAAA;AAEF,EAAA,IAAIK,MAAM,GAAGC,KAAK,CAACC,IAAI,CAACf,OAAO,CAAC,CAC9BgB,MAAM,CAAC,UAAAT,MAAM,EAAA;AAAA,IAAA,OAAIA,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAK,EAAE,CAAA;AAAA,GAAA,CAAC;GACjDU,GAAG,CAAC,UAAAV,MAAM,EAAA;IAAA,OAAK;AACfW,MAAAA,IAAI,EAAEX,MAAM;AACZY,MAAAA,KAAK,EAAEb,YAAY,CAACC,MAAM,CAAC,IAAI,CAAA;KAC/B,CAAA;AAAA,GAAC,CAAC,CACFS,MAAM,CAAC,UAAAT,MAAM,EAAA;IAAA,OAAI,EAAEX,gBAAgB,KAAK,IAAI,IAAIW,MAAM,CAACY,KAAK,KAAK,CAAC,CAAC,CAAA;GAAC,CAAA,CAAA;;AAEtE;AACAN,EAAAA,MAAM,CAACO,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAA;IAAA,OAAKD,CAAC,CAACH,IAAI,CAACK,aAAa,CAACD,CAAC,CAACJ,IAAI,CAAC,CAAA;GAAC,CAAA,CAAA;AAEnD,EAAA,OAAOL,MAAM,CAAA;AACd,EAAC;AAEYW,IAAAA,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAI/B,QAAQ,EAAEC,gBAAgB,EAAE+B,UAAU,EAAEC,SAAS,EAAwB;AAAA,EAAA,IAAtBC,YAAY,GAAA9B,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAC5G,EAAA,IAAM+B,eAAe,GAAGH,UAAU,CAACG,eAAe,CAAA;AAClD,EAAA,IAAMC,aAAa,GAAGpB,MAAM,CAACqB,IAAI,CAACF,eAAe,CAAC,CAACR,IAAI,EAAE,CAACW,MAAM,CAAC,UAACC,GAAG,EAAEC,GAAG,EAAK;AAC9ED,IAAAA,GAAG,CAACJ,eAAe,CAACK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AAC7B,IAAA,OAAOD,GAAG,CAAA;GACV,EAAE,EAAE,CAAC,CAAA;AAENtC,EAAAA,gBAAgB,CAACQ,OAAO,CAAC,UAAAC,OAAO,EAAI;IACnCM,MAAM,CAACyB,OAAO,CAACN,eAAe,CAAC,CAAC1B,OAAO,CAAC,UAAAiC,IAAA,EAA+B;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA,EAAA,CAAA,CAAA;AAA7BG,QAAAA,UAAU,GAAAF,KAAA,CAAA,CAAA,CAAA;AAAEG,QAAAA,WAAW,GAAAH,KAAA,CAAA,CAAA,CAAA,CAAA;MAChE,IAAIjC,OAAO,CAACC,MAAM,CAACkC,UAAU,CAAC,IAAI,CAAC,EAAE;AACpCT,QAAAA,aAAa,CAACU,WAAW,CAAC,IAAI,CAAC,CAAA;AAChC,OAAA;AACD,KAAC,CAAC,CAAA;AACH,GAAC,CAAC,CAAA;AAEF,EAAA,IAAIC,qBAAqB,GAAG/B,MAAM,CAACyB,OAAO,CAACL,aAAa,CAAC,CAACZ,GAAG,CAAC,UAAAwB,KAAA,EAAA;AAAA,IAAA,IAAAC,KAAA,GAAAL,cAAA,CAAAI,KAAA,EAAA,CAAA,CAAA;AAAEvB,MAAAA,IAAI,GAAAwB,KAAA,CAAA,CAAA,CAAA;AAAEvB,MAAAA,KAAK,GAAAuB,KAAA,CAAA,CAAA,CAAA,CAAA;IAAA,OAAO;AACjFxB,MAAAA,IAAI,EAAJA,IAAI;AACJC,MAAAA,KAAK,EAALA,KAAAA;KACA,CAAA;AAAA,GAAC,CAAC,CAAA;;AAEH;AAAA,EAAA,IAAAwB,SAAA,GAAAC,0BAAA,CACmBJ,qBAAqB,CAAA;IAAAK,KAAA,CAAA;AAAA,EAAA,IAAA;IAAxC,KAAAF,SAAA,CAAAG,CAAA,EAAAD,EAAAA,CAAAA,CAAAA,KAAA,GAAAF,SAAA,CAAAI,CAAA,EAAAC,EAAAA,IAAA,GAA0C;AAAA,MAAA,IAAjCzC,MAAM,GAAAsC,KAAA,CAAArC,KAAA,CAAA;AACd,MAAA,IAAID,MAAM,CAACW,IAAI,KAAK,UAAU,EAAE;QAC/BX,MAAM,CAACY,KAAK,GAAGzB,gBAAgB,CAACsB,MAAM,CAAC,UAAAiC,CAAC,EAAA;AAAA,UAAA,OAAIvB,SAAS,CAACwB,QAAQ,CAACD,CAAC,CAACE,EAAE,CAAC,CAAA;AAAA,SAAA,CAAC,CAACrD,MAAM,CAAA;AAC7E,OAAA;AACD,KAAA;;AAEA;AAAA,GAAA,CAAA,OAAAsD,GAAA,EAAA;IAAAT,SAAA,CAAAU,CAAA,CAAAD,GAAA,CAAA,CAAA;AAAA,GAAA,SAAA;AAAAT,IAAAA,SAAA,CAAAW,CAAA,EAAA,CAAA;AAAA,GAAA;AACA,EAAA,IAAI3B,YAAY,CAAC4B,aAAa,KAAK,KAAK,EAAE;AACzCf,IAAAA,qBAAqB,GAAGA,qBAAqB,CAACxB,MAAM,CAAC,UAAAT,MAAM,EAAA;AAAA,MAAA,OAAIA,MAAM,CAACW,IAAI,KAAK,UAAU,CAAA;KAAC,CAAA,CAAA;AAC3F,GAAA;;AAEA;AACA,EAAA,IAAIS,YAAY,CAAC6B,eAAe,KAAK,IAAI,EAAE;AAC1ChB,IAAAA,qBAAqB,GAAGA,qBAAqB,CAACxB,MAAM,CAAC,UAAAT,MAAM,EAAA;AAAA,MAAA,OAAIA,MAAM,CAACY,KAAK,GAAG,CAAC,CAAA;KAAC,CAAA,CAAA;AACjF,GAAA;AAEA,EAAA,OAAOqB,qBAAqB,CAAA;AAC7B,EAAC;AAED,IAAMiB,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAAGC,qBAAqB,EAAI;AAC3D,EAAA,OAAOjD,MAAM,CAACyB,OAAO,CAACwB,qBAAqB,CAAC,CAACtC,IAAI,EAAE,CAACH,GAAG,CAAC,UAAA0C,KAAA,EAAA;AAAA,IAAA,IAAAC,KAAA,GAAAvB,cAAA,CAAAsB,KAAA,EAAA,CAAA,CAAA;AAAE1B,MAAAA,GAAG,GAAA2B,KAAA,CAAA,CAAA,CAAA;AAAE1C,MAAAA,IAAI,GAAA0C,KAAA,CAAA,CAAA,CAAA,CAAA;IAAA,OAAO;AACzE3B,MAAAA,GAAG,EAAHA,GAAG;AACHf,MAAAA,IAAI,EAAJA,IAAAA;KACA,CAAA;AAAA,GAAC,CAAC,CAAA;AACJ,CAAC,CAAA;IAEY2C,qBAAqB,GAAG,SAAxBA,qBAAqBA,CACjCnE,gBAAgB,EAChBoE,WAAW,EACXrC,UAAU,EACVsC,aAAa,EACbC,WAAW,EACXtC,SAAS,EACTuC,eAAe,EAQX;EAAA,IAPJtC,YAAY,GAAA9B,SAAA,CAAAC,MAAA,GAAAD,CAAAA,IAAAA,SAAA,CAAAE,CAAAA,CAAAA,KAAAA,SAAA,GAAAF,SAAA,CAAG,CAAA,CAAA,GAAA;AACd2D,IAAAA,eAAe,EAAE,KAAK;AACtBU,IAAAA,aAAa,EAAE,IAAI;AACnBX,IAAAA,aAAa,EAAE,IAAI;AACnBY,IAAAA,kBAAkB,EAAE,KAAK;AACzBC,IAAAA,kBAAkB,EAAE,KAAA;GACpB,CAAA;AAED,EAAA,IAAIN,WAAW,CAAChE,MAAM,GAAG,CAAC,EAAE;AAC3B;IACA,IAAMuE,aAAa,GAAG1C,YAAY,CAACuC,aAAa,GAAGxE,gBAAgB,GAAGoE,WAAW,CAAA;IAEjF,IAAMQ,cAAc,GAAG7C,UAAU,CAAC8C,iBAAiB,CAACtD,GAAG,CAAC,UAAAuD,SAAS,EAAI;MACpE,IAAIA,SAAS,KAAKR,WAAW,IAAID,aAAa,KAAbA,IAAAA,IAAAA,aAAa,KAAbA,KAAAA,CAAAA,IAAAA,aAAa,CAAEU,OAAO,EAAE;AACxD,QAAA,OAAOV,aAAa,CAACU,OAAO,CAACC,IAAI,CAAC,UAAA1D,MAAM,EAAA;AAAA,UAAA,OAAIA,MAAM,CAACmC,EAAE,KAAKqB,SAAS,CAAA;SAAC,CAAA,CAAA;AACrE,OAAA;MACA,IAAGA,SAAS,IAAI,UAAU,EAAC;QAC1B,OAAO;AACNrB,UAAAA,EAAE,EAAEqB,SAAS;AACbG,UAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;UACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEO,aAAa,EAAEG,SAAS,EAAE7C,YAAY,CAAC6B,eAAe,CAAA;SAC3F,CAAA;AACF,OAAA;AACA,MAAA,IAAGgB,SAAS,IAAI,aAAa,IAAIP,eAAe,CAACa,QAAQ,EAAC;QACzD,IAAMC,YAAY,GAAGtE,MAAM,CAACqB,IAAI,CAACmC,eAAe,CAACa,QAAQ,CAAC,CAAA;AAC1D,QAAA,IAAME,kBAAkB,GAAGlB,WAAW,CAAC9C,MAAM,CAC5C,UAAAiC,CAAC,EAAA;AAAA,UAAA,IAAAgC,SAAA,CAAA;AAAA,UAAA,OAAIF,YAAY,CAAC7B,QAAQ,CAAA,CAAA+B,SAAA,GAAChC,CAAC,CAAC7C,MAAM,cAAA6E,SAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,SAAA,CAAUH,QAAQ,CAAC,CAAA;AAAA,SAC/C,CAAC,CAAA;QACD,OAAO;AACN3B,UAAAA,EAAE,EAAEqB,SAAS;AACbG,UAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;UACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEkB,kBAAkB,EAAER,SAAS,EAAE7C,YAAY,CAAC6B,eAAe,CAAA;SAChG,CAAA;AACF,OAAA;MACA,IAAIgB,SAAS,IAAI,iBAAiB,EAAE;QACnC,OAAO;AACNrB,UAAAA,EAAE,EAAEqB,SAAS;AACbG,UAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;AACvCK,UAAAA,KAAK,EAAErD,wBAAwB,CAACsC,WAAW,EAAEO,aAAa,EAAE5C,UAAU,EAAEC,SAAS,EAAEC,YAAY,CAAC,CAACP,IAAI,EAAC;SACtG,CAAA;AACF,OAAA;MACD,OAAO;AACN+B,QAAAA,EAAE,EAAEqB,SAAS;AACbG,QAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;QACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEO,aAAa,EAAEG,SAAS,EAAE7C,YAAY,CAAC6B,eAAe,CAAA;OAC3F,CAAA;AACF,KAAC,CAAC,CAAA;AAAG,IAAA,IAAM0B,SAAS,GAClBzD,UAAU,CAAC0D,oBAAoB,CAAClE,GAAG,CAAC,UAACuD,SAAS,EAAEY,KAAK,EAAK;MACzD,IAAIC,wBAAwB,GAAGvB,WAAW,CAAA;AAC1CuB,MAAAA,wBAAwB,GAAGvB,WAAW,CAAC9C,MAAM,CAAC,UAAAb,OAAO,EAAI;QACxD,OAAOM,MAAM,CAACyB,OAAO,CAAC+B,eAAe,CAAC,CAACqB,KAAK,CAAC,UAAAC,KAAA,EAAkB;AAAA,UAAA,IAAAC,KAAA,GAAAnD,cAAA,CAAAkD,KAAA,EAAA,CAAA,CAAA;AAAhBtD,YAAAA,GAAG,GAAAuD,KAAA,CAAA,CAAA,CAAA;AAAEhF,YAAAA,KAAK,GAAAgF,KAAA,CAAA,CAAA,CAAA,CAAA;UACxD,IAAI/D,UAAU,CAAC0D,oBAAoB,CAACjC,QAAQ,CAACjB,GAAG,CAAC,EAAE,OAAO,IAAI,CAAA;AAC9D,UAAA,IAAIzB,KAAK,IAAIiF,OAAA,CAAOjF,KAAK,CAAA,KAAK,QAAQ,IAAIA,KAAK,CAACL,OAAO,CAACC,MAAM,CAAC6B,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;AAC9E,YAAA,OAAO,IAAI,CAAA;AACZ,WAAA;AACA,UAAA,OAAO,KAAK,CAAA;AACb,SAAC,CAAC,CAAA;AACH,OAAC,CAAC,CAAA;MACF,IAAImD,KAAK,KAAK,CAAC,EAAE;QAChB,OAAO;AACNjC,UAAAA,EAAE,EAAEqB,SAAS;AACbG,UAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;UACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEuB,wBAAwB,EAAEb,SAAS,EAAE,IAAI,CAAA;SAC9E,CAAA;AACF,OAAA;MACE,IAAIA,SAAS,KAAK,YAAY,IAAIT,aAAa,KAAbA,IAAAA,IAAAA,aAAa,KAAbA,KAAAA,CAAAA,IAAAA,aAAa,CAAEmB,SAAS,EAAE;QAC7D,IAAMQ,YAAY,GAAGjE,UAAU,CAAC0D,oBAAoB,CAACjC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrE,IAAMyC,aAAa,GAAGlE,UAAU,CAAC0D,oBAAoB,CAACjC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACvE,IAAM0C,iBAAiB,GAAGnE,UAAU,CAAC0D,oBAAoB,CAACjC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC/E,QAAA,IAAM2C,YAAY,GAAGH,YAAY,GAAAI,kBAAA,CAAO,IAAI7F,GAAG,CAACP,gBAAgB,CAACuB,GAAG,CAAC,UAAAd,OAAO,EAAA;AAAA,UAAA,OAAIA,OAAO,CAACC,MAAM,CAAC2F,IAAI,CAAA;SAAC,CAAA,CAAC,IAAI,EAAE,CAAA;AAC3G,QAAA,IAAMC,YAAY,GAAGL,aAAa,GAAAG,kBAAA,CAAO,IAAI7F,GAAG,CAACP,gBAAgB,CAACuB,GAAG,CAAC,UAAAd,OAAO,EAAA;AAAA,UAAA,OAAIA,OAAO,CAACC,MAAM,CAAC6F,KAAK,CAAA;SAAC,CAAA,CAAC,IAAI,EAAE,CAAA;AAC7G,QAAA,IAAMC,gBAAgB,GAAGN,iBAAiB,GAAAE,kBAAA,CAAO,IAAI7F,GAAG,CAACP,gBAAgB,CAACuB,GAAG,CAAC,UAAAd,OAAO,EAAA;AAAA,UAAA,OAAIA,OAAO,CAACC,MAAM,CAAC+F,SAAS,CAAA;SAAC,CAAA,CAAC,IAAI,EAAE,CAAA;QACzH,IAAMC,kBAAkB,GAAGf,wBAAwB,CAACrE,MAAM,CAAC,UAAAb,OAAO,EAAI;AACrE,UAAA,IAAMkG,WAAW,GAAGX,YAAY,GAAGG,YAAY,CAAC3C,QAAQ,CAAC/C,OAAO,CAACC,MAAM,CAAC2F,IAAI,CAAC,GAAG,IAAI,CAAA;AACpF,UAAA,IAAMO,YAAY,GAAGX,aAAa,GAAGK,YAAY,CAAC9C,QAAQ,CAAC/C,OAAO,CAACC,MAAM,CAAC6F,KAAK,CAAC,GAAG,IAAI,CAAA;AACvF,UAAA,IAAMM,gBAAgB,GAAGX,iBAAiB,GAAGM,gBAAgB,CAAChD,QAAQ,CAAC/C,OAAO,CAACC,MAAM,CAAC+F,SAAS,CAAC,GAAG,IAAI,CAAA;AACvG,UAAA,OAAOE,WAAW,IAAIC,YAAY,IAAIC,gBAAgB,CAAA;AACvD,SAAC,CAAC,CAAA;QACF,OAAO;AACNpD,UAAAA,EAAE,EAAEqB,SAAS;AACbG,UAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;UACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEsC,kBAAkB,EAAE5B,SAAS,EAAE,IAAI,CAAA;SACxE,CAAA;AACF,OAAA;MACA,IAAIA,SAAS,KAAK,MAAM,EAAE;AACzB,QAAA,IAAI/C,UAAU,CAAC0D,oBAAoB,CAACjC,QAAQ,CAAC,OAAO,CAAC,IAAIe,eAAe,CAACgC,KAAK,EAAE;AAC/E,UAAA,IAAMO,cAAc,GAAG/F,MAAM,CAACqB,IAAI,CAACmC,eAAe,CAACgC,KAAK,CAAC,CAACjF,MAAM,CAC/D,UAAAiF,KAAK,EAAA;AAAA,YAAA,OAAIhC,eAAe,CAACgC,KAAK,CAACA,KAAK,CAAC,KAAK,IAAI,CAAA;AAAA,WAC/C,CAAC,CAAA;AAED,UAAA,IAAMG,mBAAkB,GAAGf,wBAAwB,CAACrE,MAAM,CAAC,UAAAb,OAAO,EAAA;YAAA,OACjEqG,cAAc,CAACtD,QAAQ,CAAC/C,OAAO,CAACC,MAAM,CAAC6F,KAAK,CAAC,CAAA;AAAA,WAC9C,CAAC,CAAA;UAED,OAAO;AACN9C,YAAAA,EAAE,EAAEqB,SAAS;AACbG,YAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;YACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEsC,mBAAkB,EAAE5B,SAAS,EAAE,IAAI,CAAA;WACxE,CAAA;AACF,SAAA;AACD,OAAA;MAEA,OAAO;AACNrB,QAAAA,EAAE,EAAEqB,SAAS;AACbG,QAAAA,KAAK,EAAElD,UAAU,CAACmD,UAAU,CAACJ,SAAS,CAAC;QACvCK,KAAK,EAAErF,gBAAgB,CAACsE,WAAW,EAAEpE,gBAAgB,EAAE8E,SAAS,EAAE,IAAI,CAAA;OACtE,CAAA;AACF,KAAC,CAAC,CAAA;AAEH,IAAA,IAAMiC,gBAAgB,GAAG;AACxBtD,MAAAA,EAAE,EAAE,kBAAkB;AACtBwB,MAAAA,KAAK,EAAElD,UAAU,CAACiF,sBAAsB,CAAC/B,KAAK;AAC9CE,MAAAA,KAAK,EAAEpB,0BAA0B,CAChChC,UAAU,CAACiF,sBAAsB,CAAChD,qBACnC,CAAA;KACA,CAAA;;AAED;AACA,IAAA,IAAMiD,YAAY,GAAGrC,cAAc,CACjCtD,MAAM,CAAC,UAAAsC,CAAC,EAAA;MAAA,OAAIA,CAAC,IAAI,IAAI,IAAIA,CAAC,CAACuB,KAAK,IAAI,IAAI,CAAA;AAAA,KAAA,CAAC,CACzC5D,GAAG,CAAC,UAAAqC,CAAC,EAAA;AAAA,MAAA,OAAAsD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACFtD,CAAC,CAAA,EAAA,EAAA,EAAA;QACJuB,KAAK,EAAEvB,CAAC,CAACuB,KAAK,CAAC7D,MAAM,CAAC,UAAA6F,IAAI,EAAA;UAAA,OAAIA,IAAI,IAAI,IAAI,IAAIA,IAAI,CAAC3F,IAAI,IAAI,IAAI,CAAA;AAAA,SAAA,CAAA;AAAC,OAAA,CAAA,CAAA;AAAA,KAC/D,CAAC,CAAA;AAEJ,IAAA,IAAM4F,cAAc,GAAG5B,SAAS,CAC9BlE,MAAM,CAAC,UAAA+F,CAAC,EAAA;MAAA,OAAIA,CAAC,IAAI,IAAI,IAAIA,CAAC,CAAClC,KAAK,IAAI,IAAI,CAAA;AAAA,KAAA,CAAC,CACzC5D,GAAG,CAAC,UAAA8F,CAAC,EAAA;AAAA,MAAA,OAAAH,cAAA,CAAAA,cAAA,CAAA,EAAA,EACFG,CAAC,CAAA,EAAA,EAAA,EAAA;QACJlC,KAAK,EAAEkC,CAAC,CAAClC,KAAK,CAAC7D,MAAM,CAAC,UAAA6F,IAAI,EAAA;UAAA,OAAIA,IAAI,IAAI,IAAI,IAAIA,IAAI,CAAC3F,IAAI,IAAI,IAAI,CAAA;AAAA,SAAA,CAAA;AAAC,OAAA,CAAA,CAAA;AAAA,KAC/D,CAAC,CAAA;IAEJ,OAAO;AACNuD,MAAAA,OAAO,EAAEkC,YAAY;AACrBzB,MAAAA,SAAS,EAAE4B,cAAc;AACzBL,MAAAA,gBAAgB,EAAEA,gBAAAA;KAClB,CAAA;AACF,GAAA;AAEA,EAAA,OAAO,IAAI,CAAA;AACZ,EAAC;IAEYO,YAAY,gBAAA,YAAA;EAAA,IAAAC,KAAA,GAAAC,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAG,SAAAC,OAAAA,CAC3BvD,WAAW,EACXG,eAAe,EACfqD,KAAK,EACLC,eAAe,EACf7F,SAAS,EACTD,UAAU,EAAA;AAAA,IAAA,IAAA+F,WAAA;MAAAC,OAAA;MAAAC,0BAAA;MAAAC,WAAA;MAAAC,QAAA;MAAAC,KAAA;MAAAC,EAAA;MAAAC,eAAA;MAAAC,QAAA;MAAAC,aAAA;AAAAC,MAAAA,MAAA,GAAArI,SAAA,CAAA;AAAA,IAAA,OAAAsH,mBAAA,EAAA,CAAAgB,IAAA,CAAA,SAAAC,SAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAAE,IAAA;AAAA,QAAA,KAAA,CAAA;UACVf,WAAW,GAAAU,MAAA,CAAApI,MAAA,GAAA,CAAA,IAAAoI,MAAA,CAAA,CAAA,CAAA,KAAAnI,SAAA,GAAAmI,MAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;AAEfT,UAAAA,OAAO,GAAG3D,WAAW,CAAA;UAEzB,IAAIrC,UAAU,CAACG,eAAe,EAAE;AAC/B8F,YAAAA,0BAA0B,GAAGjH,MAAM,CAACyB,OAAO,CAACT,UAAU,CAACG,eAAe,CAAC,CAACG,MAAM,CAAC,UAACC,GAAG,EAAAwG,MAAA,EAAmB;AAAA,cAAA,IAAAC,MAAA,GAAApG,cAAA,CAAAmG,MAAA,EAAA,CAAA,CAAA;AAAhBvG,gBAAAA,GAAG,GAAAwG,MAAA,CAAA,CAAA,CAAA;AAAEjI,gBAAAA,KAAK,GAAAiI,MAAA,CAAA,CAAA,CAAA,CAAA;AAC/FzG,cAAAA,GAAG,CAACxB,KAAK,CAAC,GAAGyB,GAAG,CAAA;AAChB,cAAA,OAAOD,GAAG,CAAA;aACV,EAAE,EAAE,CAAC,CAAA;AAEP,WAAA;AACM2F,UAAAA,WAAW,GAAG,CAAC,CAAC1D,eAAe,CAACrC,eAAe,IAAI,CAAC,CAACqC,eAAe,CAACrC,eAAe,CAAC8G,QAAQ,CAAA;UAEnG,IAAIf,WAAW,IAAI1D,eAAe,CAACrC,eAAe,CAAC8G,QAAQ,IAAI,IAAI,EAAE;AACpEjB,YAAAA,OAAO,GAAGA,OAAO,CAACzG,MAAM,CAAC,UAAAiC,CAAC,EAAA;AAAA,cAAA,OAAIvB,SAAS,CAACwB,QAAQ,CAACD,CAAC,CAACE,EAAE,CAAC,CAAA;aAAC,CAAA,CAAA;AACxD,WAAA;AAEA,UAAA,IAAIwE,WAAW,EAAE;AAChBC,YAAAA,QAAQ,GAAG3D,eAAe,CAACrC,eAAe,CAAC8G,QAAQ,CAAA;AACnD,YAAA,OAAOzE,eAAe,CAACrC,eAAe,CAAC8G,QAAQ,CAAA;AAChD,WAAA;AAACb,UAAAA,KAAA,gBAAAV,mBAAA,EAAAC,CAAAA,IAAA,UAAAS,KAAA,GAAA;AAAA,YAAA,IAAAc,kBAAA,EAAAhJ,KAAA,EAAAiJ,WAAA,EAAAC,cAAA,CAAA;AAAA,YAAA,OAAA1B,mBAAA,EAAA,CAAAgB,IAAA,CAAA,SAAAW,OAAAC,QAAA,EAAA;AAAA,cAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAT,IAAA,GAAAS,QAAA,CAAAR,IAAA;AAAA,gBAAA,KAAA,CAAA;AAAAI,kBAAAA,kBAAA,GAAAtG,cAAA,CAAA0F,eAAA,CAAAD,EAAA,CACWnI,EAAAA,CAAAA,CAAAA,EAAAA,KAAK,GAAAgJ,kBAAA,CAAEC,CAAAA,CAAAA,EAAAA,WAAW,GAAAD,kBAAA,CAAA,CAAA,CAAA,CAAA;AACvBE,kBAAAA,cAAc,GAAGlJ,KAAK,CAAA;kBAAA,IACxBA,EAAAA,KAAK,KAAK,kBAAkB,CAAA,EAAA;AAAAoJ,oBAAAA,QAAA,CAAAR,IAAA,GAAA,CAAA,CAAA;AAAA,oBAAA,MAAA;AAAA,mBAAA;kBAAA,OAAAQ,QAAA,CAAAC,MAAA,CAAA,QAAA,EAAA,CAAA,CAAA,CAAA;AAAA,gBAAA,KAAA,CAAA;AAChC,kBAAA,IAAIrJ,KAAK,KAAK,iBAAiB,IAAI+H,0BAA0B,IAAIjH,MAAM,CAACqB,IAAI,CAAC8G,WAAW,CAAC,CAAC9I,MAAM,GAAG,CAAC,EAAE;AACrG2H,oBAAAA,OAAO,GAAGA,OAAO,CAACzG,MAAM,CAAC,UAAAb,OAAO,EAAI;sBACnC,OAAOM,MAAM,CAACyB,OAAO,CAAC0G,WAAW,CAAC,CAACK,IAAI,CAAC,UAAAC,MAAA,EAA+B;AAAA,wBAAA,IAAAC,MAAA,GAAA9G,cAAA,CAAA6G,MAAA,EAAA,CAAA,CAAA;AAA7BE,0BAAAA,UAAU,GAAAD,MAAA,CAAA,CAAA,CAAA;AAAEE,0BAAAA,WAAW,GAAAF,MAAA,CAAA,CAAA,CAAA,CAAA;AAChE,wBAAA,IAAMG,gBAAgB,GAAG5B,0BAA0B,CAAC0B,UAAU,CAAC,CAAA;wBAC/D,OAAOC,WAAW,IAAIlJ,OAAO,CAACC,MAAM,CAACkJ,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAC5D,uBAAC,CAAC,CAAA;AACH,qBAAC,CAAC,CAAA;AACH,mBAAC,MAAM,IAAI7I,MAAM,CAACqB,IAAI,CAAC8G,WAAW,CAAC,CAAC9I,MAAM,GAAG,CAAC,EAAE;AAC/C2H,oBAAAA,OAAO,GAAGA,OAAO,CAACzG,MAAM,CAAC,UAAAb,OAAO,EAAA;AAAA,sBAAA,OAC/BM,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACgI,WAAW,EAAEzI,OAAO,CAACC,MAAM,CAACyI,cAAc,CAAC,CAAC,CAAA;AAAA,qBAClF,CAAC,CAAA;AACF,mBAAA;AAAC,gBAAA,KAAA,CAAA,CAAA;AAAA,gBAAA,KAAA,KAAA;kBAAA,OAAAE,QAAA,CAAAQ,IAAA,EAAA,CAAA;AAAA,eAAA;AAAA,aAAA,EAAA1B,KAAA,CAAA,CAAA;AAAA,WAAA,CAAA,CAAA;UAAAC,EAAA,GAAA,CAAA,EAAAC,eAAA,GAdiCtH,MAAM,CAACyB,OAAO,CAAC+B,eAAe,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;AAAA,UAAA,IAAA,EAAA6D,EAAA,GAAAC,eAAA,CAAAjI,MAAA,CAAA,EAAA;AAAAuI,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,OAAAF,SAAA,CAAAmB,aAAA,CAAA3B,KAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;UAAA,IAAAQ,CAAAA,SAAA,CAAAoB,EAAA,EAAA;AAAApB,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;UAAA,OAAAF,SAAA,CAAAW,MAAA,CAAA,UAAA,EAAA,EAAA,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;UAAAlB,EAAA,EAAA,CAAA;AAAAO,UAAAA,SAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,MAAA;AAAA,QAAA,KAAA,EAAA;AAAA,UAAA,IAAA,CAgB9DjB,KAAK,EAAA;AAAAe,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,IAAA,EAGJf,WAAW,IAAIkC,qBAAqB,EAAE,CAAA,EAAA;AAAArB,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AACzC;AACIP,UAAAA,QAAQ,GAAG,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;AAAA,UAAA,IAAA,EACT0B,qBAAqB,EAAE,IAAI1B,QAAQ,GAAG,EAAE,CAAA,EAAA;AAAAK,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAAF,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,OACxC,IAAIoB,OAAO,CAAC,UAAAC,OAAO,EAAA;AAAA,YAAA,OAAIC,UAAU,CAACD,OAAO,EAAE,EAAE,CAAC,CAAA;WAAC,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;AACrD5B,UAAAA,QAAQ,EAAE,CAAA;AAACK,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,MAAA;AAAA,QAAA,KAAA,EAAA;UAAA,IAKTuB,CAAAA,kBAAkB,EAAE,EAAA;AAAAzB,YAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAAF,UAAAA,SAAA,CAAAC,IAAA,GAAA,EAAA,CAAA;AAAAD,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,OAENwB,6BAA6B,CAACtC,OAAO,EAAEH,KAAK,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;UAA7DG,OAAO,GAAAY,SAAA,CAAA2B,IAAA,CAAA;AAAA3B,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,MAAA;AAAA,QAAA,KAAA,EAAA;AAAAF,UAAAA,SAAA,CAAAC,IAAA,GAAA,EAAA,CAAA;UAAAD,SAAA,CAAA4B,EAAA,GAAA5B,SAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,CAAA;UAEP6B,OAAO,CAACC,KAAK,CAAC,iDAAiD,EAAA9B,SAAA,CAAA4B,EAAO,CAAC,CAAA;AACvExC,UAAAA,OAAO,GAAG2C,aAAa,CAAC3C,OAAO,EAAEH,KAAK,CAAC,CAAA;AAAC,QAAA,KAAA,EAAA;AAAAe,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,MAAA;AAAA,QAAA,KAAA,EAAA;AAGzCd,UAAAA,OAAO,GAAG2C,aAAa,CAAC3C,OAAO,EAAEH,KAAK,CAAC,CAAA;AAAC,QAAA,KAAA,EAAA;AAGpCW,UAAAA,aAAa,GAAGoC,2BAA2B,CAAC5C,OAAO,EAAEF,eAAe,CAAC,CAAA;AAC3E,UAAA,IAAII,WAAW,EAAE;AAChB1D,YAAAA,eAAe,CAACrC,eAAe,CAAC8G,QAAQ,GAAGd,QAAQ,CAAA;AACpD,WAAA;UAAC,OAAAS,SAAA,CAAAW,MAAA,CACM,QAAA,EAAA;AAAEtJ,YAAAA,gBAAgB,EAAE+H,OAAO;AAAE6C,YAAAA,QAAQ,EAAErC,aAAAA;WAAe,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAI,SAAA,CAAAkB,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAlC,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;GAC7D,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAzEYL,YAAYA,CAAAuD,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAA3D,KAAA,CAAA4D,KAAA,CAAA,IAAA,EAAAhL,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAyExB,GAAA;AAED,SAASuK,aAAaA,CAAC3C,OAAO,EAAEH,KAAK,EAAE;AACtC,EAAA,IAAMlH,MAAM,GAAG,CACd,IAAI,EACJ,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,CACvB,CAAA;AAED,EAAA,IAAMJ,OAAO,GAAG;AACf8K,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,SAAS,EAAE,GAAG;AACdjJ,IAAAA,IAAI,EAAE1B,MAAAA;GACN,CAAA;EAED,IAAM4K,IAAI,GAAG,IAAIC,IAAI,CAACxD,OAAO,EAAEzH,OAAO,CAAC,CAAA;AACvC,EAAA,IAAMkL,cAAc,GAAG5D,KAAK,CAAC6D,WAAW,EAAE,CAAA;AAC1C,EAAA,IAAMC,UAAU,GAAGF,cAAc,CAACG,KAAK,CAAC,GAAG,CAAC,CAAA;AAE5C,EAAA,IAAMC,YAAY,GAAG7D,OAAO,CAAC/C,IAAI,CAAC,UAAA7D,MAAM,EAAA;AAAA,IAAA,OAAIA,MAAM,CAACsC,EAAE,CAACoI,QAAQ,EAAE,KAAKjE,KAAK,IAAIzG,MAAM,CAAC2K,QAAQ,KAAKlE,KAAK,CAAA;GAAC,CAAA,CAAA;AACxG,EAAA,IAAIgE,YAAY,EAAE;IACjB,OAAO,CAACA,YAAY,CAAC,CAAA;AACtB,GAAA;AAEA,EAAA,IAAMG,SAAS,GAAGL,UAAU,CAACnK,GAAG,CAAC,UAAAyK,IAAI,EAAA;IAAA,OAAK;AACzCC,MAAAA,GAAG,EAAEvL,MAAM,CAACa,GAAG,CAAC,UAAAtB,KAAK,EAAA;AAAA,QAAA,OAAAiM,eAAA,CAAA,EAAA,EAAQjM,KAAK,EAAG+L,IAAI,CAAA,CAAA;OAAG,CAAA;KAC5C,CAAA;AAAA,GAAC,CAAC,CAAA;AAEH,EAAA,IAAMG,WAAW,GAAGb,IAAI,CAACc,MAAM,CAAC;AAAEC,IAAAA,IAAI,EAAEN,SAAAA;AAAU,GAAC,CAAC,CAAA;AAEpD,EAAA,OAAOI,WAAW,CAAC5K,GAAG,CAAC,UAAAJ,MAAM,EAAA;IAAA,OAAIA,MAAM,CAACgG,IAAI,CAAA;GAAC,CAAA,CAAA;AAC9C,CAAA;AAEO,IAAMmF,wBAAwB,GAAG,SAA3BA,wBAAwBA,CACpClI,WAAW,EACXmI,gBAAgB,EAChB1E,eAAe,EACX;EACJ,IAAIE,OAAO,GAAG3D,WAAW,CAAA;EACzB,IAAImI,gBAAgB,KAAK,IAAI,EAAE;AAC9BxE,IAAAA,OAAO,GAAGA,OAAO,CAACzG,MAAM,CAAC,UAAA6F,IAAI,EAAA;AAAA,MAAA,OAC5BpG,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACqL,gBAAgB,CAACpH,KAAK,EAAEgC,IAAI,CAAC1D,EAAE,CAAC,CAAA;AAAA,KACtE,CAAC,CAAA;AACF,GAAA;AACA,EAAA,IAAMmH,QAAQ,GAAGD,2BAA2B,CAAC5C,OAAO,EAAEF,eAAe,CAAC,CAAA;EACtE,OAAO;AAAE7H,IAAAA,gBAAgB,EAAE+H,OAAO;AAAE6C,IAAAA,QAAQ,EAAEA,QAAAA;GAAU,CAAA;AACzD;;;;"}
|
|
1
|
+
{"version":3,"file":"filterUtil.js","sources":["../../src/util/filterUtil.js"],"sourcesContent":["/* eslint-disable no-undef */\nimport { getDistinctItemsByProximity } from '~/util/mapUtil';\nimport { isAlgoliaAvailable, isAlgoliaInitializing, filterListingsByAlgoliaSearch } from '~/util/algoliaSearchUtil';\n\nimport Fuse from 'fuse.js';\n\n// Helper function to get field value from either fields or customFields\nexport const getFieldValue = (listing, fieldKey) => {\n\t// First check in fields\n\tif (listing.fields && listing.fields[fieldKey] !== undefined && listing.fields[fieldKey] !== null) {\n\t\treturn listing.fields[fieldKey];\n\t}\n\t\n\t// Then check in customFields array\n\tif (listing.customFields && Array.isArray(listing.customFields)) {\n\t\tconst customField = listing.customFields.find(\n\t\t\tcf => cf.id === fieldKey || cf.name === fieldKey\n\t\t);\n\t\tif (customField) {\n\t\t\treturn customField.value;\n\t\t}\n\t}\n\t\n\treturn undefined;\n};\n\nexport const getFilterOptions = (listings, filteredListings, field, excludeZeroCount = false) => {\n\tconst options = new Set();\n\tlistings.forEach(listing => {\n\t\tconst value = getFieldValue(listing, field);\n\t\tif (value) {\n\t\t\toptions.add(value);\n\t\t}\n\t});\n\n\tconst optionCounts = {};\n\toptions.forEach(option => {\n\t\toptionCounts[option] = 0;\n\t});\n\n\tfilteredListings.forEach(listing => {\n\t\tconst value = getFieldValue(listing, field);\n\t\tif (value && Object.prototype.hasOwnProperty.call(optionCounts, value)) {\n\t\t\toptionCounts[value] += 1;\n\t\t}\n\t});\n\n\tlet result = Array.from(options)\n\t\t.filter(option => option != null && option !== '') // Filter out null/empty values\n\t\t.map(option => ({\n\t\t\tname: option,\n\t\t\tcount: optionCounts[option] || 0\n\t\t}))\n\t\t.filter(option => !(excludeZeroCount === true && option.count === 0));\n\n\t// Sort alphabetically\n\tresult.sort((a, b) => a.name.localeCompare(b.name));\n\n\treturn result;\n};\n\nexport const getSpecialFeatureOptions = (listings, filteredListings, siteConfig, favorites, filterConfig = {}) => {\n\tconst specialFeatures = siteConfig.specialFeatures;\n\tconst featureCounts = Object.keys(specialFeatures).sort().reduce((acc, key) => {\n\t\tacc[specialFeatures[key]] = 0;\n\t\treturn acc;\n\t}, {});\n\n\tfilteredListings.forEach(listing => {\n\t\tObject.entries(specialFeatures).forEach(([featureKey, featureName]) => {\n\t\t\tconst value = getFieldValue(listing, featureKey);\n\t\t\t// Support both numeric (1/0) and string (\"true\"/\"false\") boolean values\n\t\t\tif (value == 1 || value === 1 || value === '1' || value === 'true' || value === true) {\n\t\t\t\tfeatureCounts[featureName] += 1;\n\t\t\t}\n\t\t});\n\t});\n\n\tlet specialFeatureOptions = Object.entries(featureCounts).map(([name, count]) => ({\n\t\tname,\n\t\tcount\n\t}));\n\n\t// Update favorite count\n\tfor (let option of specialFeatureOptions) {\n\t\tif (option.name === 'Favorite') {\n\t\t\toption.count = filteredListings.filter(x => favorites.includes(x.id)).length;\n\t\t}\n\t}\n\n\t// Hide favorites if filterConfig.showFavorites is false\n\tif (filterConfig.showFavorites === false) {\n\t\tspecialFeatureOptions = specialFeatureOptions.filter(option => option.name !== 'Favorite');\n\t}\n\n\t// Hide zero results if filterConfig.hideZeroResults is true\n\tif (filterConfig.hideZeroResults === true) {\n\t\tspecialFeatureOptions = specialFeatureOptions.filter(option => option.count > 0);\n\t}\n\n\treturn specialFeatureOptions;\n};\n\n// Helper to detect if a custom field should be treated as boolean or multi-value\nconst isCustomFieldBoolean = (listings, fieldKey) => {\n\tconst distinctValues = new Set();\n\t\n\tfor (const listing of listings) {\n\t\tconst value = getFieldValue(listing, fieldKey);\n\t\tif (value != null && value !== '' && value !== undefined) {\n\t\t\tdistinctValues.add(String(value).toLowerCase());\n\t\t}\n\t\t// If we find more than 2 non-empty distinct values, it's not boolean\n\t\tif (distinctValues.size > 2) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t// Check if all values are boolean-like\n\tconst booleanValues = new Set(['true', 'false', '1', '0', 'yes', 'no']);\n\tfor (const val of distinctValues) {\n\t\tif (!booleanValues.has(val)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\treturn distinctValues.size > 0 && distinctValues.size <= 2;\n};\n\n// Get dynamic custom field filters (for non-boolean multi-value fields)\nexport const getDynamicCustomFieldFilters = (listings, filteredListings, siteConfig, filterConfig = {}) => {\n\tif (!siteConfig.specialFeatures) return [];\n\t\n\tconst dynamicFilters = [];\n\tconst specialFeaturesKeys = Object.keys(siteConfig.specialFeatures);\n\t\n\t// Find all custom fields used across listings\n\tconst allCustomFields = new Set();\n\tlistings.forEach(listing => {\n\t\tif (listing.customFields && Array.isArray(listing.customFields)) {\n\t\t\tlisting.customFields.forEach(cf => {\n\t\t\t\tif (cf.id || cf.name) {\n\t\t\t\t\tallCustomFields.add(cf.id || cf.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t\n\t// For each custom field, check if it's NOT in specialFeatures and NOT boolean\n\tallCustomFields.forEach(fieldKey => {\n\t\t// Skip if already in specialFeatures\n\t\tif (specialFeaturesKeys.includes(fieldKey)) return;\n\t\t\n\t\t// Check if this field has multiple non-boolean values\n\t\tif (!isCustomFieldBoolean(listings, fieldKey)) {\n\t\t\tconst options = getFilterOptions(listings, filteredListings, fieldKey, filterConfig.hideZeroResults);\n\t\t\t\n\t\t\t// Only add if there are meaningful options\n\t\t\tif (options.length > 1) {\n\t\t\t\tdynamicFilters.push({\n\t\t\t\t\tid: fieldKey,\n\t\t\t\t\ttitle: fieldKey.charAt(0).toUpperCase() + fieldKey.slice(1).replace(/([A-Z])/g, ' $1').trim(),\n\t\t\t\t\titems: options,\n\t\t\t\t\tisDynamic: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\t\n\treturn dynamicFilters;\n};\n\nconst getPointsOfInterestOptions = pointsOfInterestNames => {\n\treturn Object.entries(pointsOfInterestNames).sort().map(([key, name]) => ({\n\t\tkey,\n\t\tname\n\t}));\n};\n\nexport const generateFilterOptions = (\n\tfilteredListings,\n\tallListings,\n\tsiteConfig,\n\tfilterOptions,\n\tparentField,\n\tfavorites,\n\tselectedFilters,\n\tfilterConfig = {\n\t\thideZeroResults: false,\n\t\tdynamicCounts: true,\n\t\tshowFavorites: true,\n\t\tcollapsedByDefault: false,\n\t\tsortAlphabetically: false\n\t}\n) => {\n\tif (allListings.length > 0) {\n\t\t// Determine which listings to use for counts based on dynamicCounts setting\n\t\tconst countListings = filterConfig.dynamicCounts ? filteredListings : allListings;\n\n\t\tconst dynamicFilters = siteConfig.fieldFiltersShown.map(fieldName => {\n\t\t\tif (fieldName === parentField && filterOptions?.filters) {\n\t\t\t\treturn filterOptions.filters.find(filter => filter.id === fieldName);\n\t\t\t}\n\t\t\tif(fieldName == 'category'){\n\t\t\t\t// For category counts, exclude specialFeatures from the filter calculation\n\t\t\t\t// so that toggling specialFeatures updates category counts\n\t\t\t\tlet categoryCountListings = countListings;\n\t\t\t\tif (filterConfig.dynamicCounts && selectedFilters.specialFeatures) {\n\t\t\t\t\tcategoryCountListings = allListings.filter(listing => {\n\t\t\t\t\t\treturn Object.entries(selectedFilters).every(([key, value]) => {\n\t\t\t\t\t\t\tif (key === 'specialFeatures') return true; // Exclude specialFeatures\n\t\t\t\t\t\t\tconst fieldValue = getFieldValue(listing, key);\n\t\t\t\t\t\t\tif (value && typeof value === 'object' && value[fieldValue] === true) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, categoryCountListings, fieldName, filterConfig.hideZeroResults)\n\t\t\t\t};\n\t\t\t}\n\t\t\tif(fieldName == 'subCategory' && selectedFilters.category){\n\t\t\t\tconst categoryKeys = Object.keys(selectedFilters.category);\n\t\t\t\tconst filteredByCategory = allListings.filter(\n\t\t\t\t\tx => categoryKeys.includes(x.fields?.category)\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, filteredByCategory, fieldName, filterConfig.hideZeroResults)\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (fieldName == \"specialFeatures\") {\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getSpecialFeatureOptions(allListings, countListings, siteConfig, favorites, filterConfig).sort()\n\t\t\t\t};\n\t\t\t}\n\t\treturn {\n\t\t\tid: fieldName,\n\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\titems: getFilterOptions(allListings, countListings, fieldName, filterConfig.hideZeroResults)\n\t\t};\n\t});\t\tconst locations =\n\t\t\tsiteConfig.locationFiltersShown.map((fieldName, index) => {\n\t\t\t\tlet locationFilteredListings = allListings;\n\t\t\t\tlocationFilteredListings = allListings.filter(listing => {\n\t\t\t\t\treturn Object.entries(selectedFilters).every(([key, value]) => {\n\t\t\t\t\t\tif (siteConfig.locationFiltersShown.includes(key)) return true;\n\t\t\t\t\t\tconst fieldValue = getFieldValue(listing, key);\n\t\t\t\t\t\tif (value && typeof value === 'object' && value[fieldValue] === true) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (index === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\titems: getFilterOptions(allListings, locationFilteredListings, fieldName, true)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t if (fieldName === 'entityName' && filterOptions?.locations) {\n\t\t\t\t\tconst cityIncluded = siteConfig.locationFiltersShown.includes('city');\n\t\t\t\t\tconst stateIncluded = siteConfig.locationFiltersShown.includes('state');\n\t\t\t\t\tconst cityStateIncluded = siteConfig.locationFiltersShown.includes('cityState');\n\t\t\t\t\tconst uniqueCities = cityIncluded ? [...new Set(filteredListings.map(listing => listing.fields.city))] : [];\n\t\t\t\t\tconst uniqueStates = stateIncluded ? [...new Set(filteredListings.map(listing => listing.fields.state))] : [];\n\t\t\t\t\tconst uniqueCityStates = cityStateIncluded ? [...new Set(filteredListings.map(listing => listing.fields.cityState))] : [];\n\t\t\t\t\tconst filteredByLocation = locationFilteredListings.filter(listing => {\n\t\t\t\t\t\tconst cityMatches = cityIncluded ? uniqueCities.includes(listing.fields.city) : true;\n\t\t\t\t\t\tconst stateMatches = stateIncluded ? uniqueStates.includes(listing.fields.state) : true;\n\t\t\t\t\t\tconst cityStateMatches = cityStateIncluded ? uniqueCityStates.includes(listing.fields.cityState) : true;\n\t\t\t\t\t\treturn cityMatches && stateMatches && cityStateMatches;\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\titems: getFilterOptions(allListings, filteredByLocation, fieldName, true)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (fieldName === 'city') {\n\t\t\t\t\tif (siteConfig.locationFiltersShown.includes('state') && selectedFilters.state) {\n\t\t\t\t\t\tconst selectedStates = Object.keys(selectedFilters.state).filter(\n\t\t\t\t\t\t\tstate => selectedFilters.state[state] === true\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst filteredByLocation = locationFilteredListings.filter(listing =>\n\t\t\t\t\t\t\tselectedStates.includes(listing.fields.state)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: fieldName,\n\t\t\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\t\t\titems: getFilterOptions(allListings, filteredByLocation, fieldName, true)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid: fieldName,\n\t\t\t\t\ttitle: siteConfig.fieldNames[fieldName],\n\t\t\t\t\titems: getFilterOptions(allListings, filteredListings, fieldName, true)\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst pointsOfInterest = {\n\t\t\tid: \"pointsOfInterest\",\n\t\t\ttitle: siteConfig.pointsOfInterestConfig.title,\n\t\t\titems: getPointsOfInterestOptions(\n\t\t\t\tsiteConfig.pointsOfInterestConfig.pointsOfInterestNames\n\t\t\t)\n\t\t};\n\n\t\t// Get dynamic custom field filters (multi-value fields not in specialFeatures)\n\t\tconst dynamicCustomFilters = getDynamicCustomFieldFilters(allListings, countListings, siteConfig, filterConfig);\n\n\t\t// Filter out null filters and ensure items arrays don't contain undefined values\n\t\tconst cleanFilters = dynamicFilters\n\t\t\t.filter(f => f != null && f.items != null)\n\t\t\t.map(f => ({\n\t\t\t\t...f,\n\t\t\t\titems: f.items.filter(item => item != null && item.name != null)\n\t\t\t}));\n\n\t\tconst cleanLocations = locations\n\t\t\t.filter(l => l != null && l.items != null)\n\t\t\t.map(l => ({\n\t\t\t\t...l,\n\t\t\t\titems: l.items.filter(item => item != null && item.name != null)\n\t\t\t}));\n\n\t\t// Add dynamic custom field filters to the main filters array\n\t\tconst allCleanFilters = [...cleanFilters, ...dynamicCustomFilters];\n\n\t\treturn {\n\t\t\tfilters: allCleanFilters,\n\t\t\tlocations: cleanLocations,\n\t\t\tpointsOfInterest: pointsOfInterest\n\t\t};\n\t}\n\n\treturn null;\n};\n\nexport const applyFilters = async (\n\tallListings,\n\tselectedFilters,\n\tquery,\n\tlistingEntities,\n\tfavorites,\n\tsiteConfig,\n\tisFirstLoad = false\n) => {\n\tlet results = allListings;\n\tlet invertedSpecialFeaturesMap;\n\tif (siteConfig.specialFeatures) {\n\t\tinvertedSpecialFeaturesMap = Object.entries(siteConfig.specialFeatures).reduce((acc, [key, value]) => {\n\t\t\tacc[value] = key;\n\t\t\treturn acc;\n\t\t}, {});\n\n\t}\n\tconst hasFavorite = !!selectedFilters.specialFeatures && !!selectedFilters.specialFeatures.Favorite;\n\n\tif (hasFavorite && selectedFilters.specialFeatures.Favorite == true) {\n\t\tresults = results.filter(x => favorites.includes(x.id));\n\t}\n\tvar favorite;\n\tif (hasFavorite) {\n\t\tfavorite = selectedFilters.specialFeatures.Favorite;\n\t\tdelete selectedFilters.specialFeatures.Favorite;\n\t}\n\tfor (const [field, filterItems] of Object.entries(selectedFilters)) {\n\t\tconst formattedField = field;\n\t\tif (field === \"pointsOfInterest\") continue;\n\t\tif (field === \"specialFeatures\" && invertedSpecialFeaturesMap && Object.keys(filterItems).length > 0) {\n\t\t\tresults = results.filter(listing => {\n\t\t\t\treturn Object.entries(filterItems).some(([filterName, filterValue]) => {\n\t\t\t\t\tconst listingFieldName = invertedSpecialFeaturesMap[filterName];\n\t\t\t\t\tconst value = getFieldValue(listing, listingFieldName);\n\t\t\t\t\t// Support both numeric (1/0) and string (\"true\"/\"false\") boolean values\n\t\t\t\t\treturn filterValue && (value == 1 || value === 1 || value === '1' || value === 'true' || value === true);\n\t\t\t\t});\n\t\t\t});\n\t\t} else if (Object.keys(filterItems).length > 0) {\n\t\t\tresults = results.filter(listing => {\n\t\t\t\tconst value = getFieldValue(listing, formattedField);\n\t\t\t\treturn Object.prototype.hasOwnProperty.call(filterItems, value);\n\t\t\t});\n\t\t}\n\t}\n\tif (query) {\n\t\t// Wait for Algolia to finish initializing ONLY on first load (from URL/localStorage)\n\t\t// Don't wait on subsequent manual searches to avoid slowing down the interface\n\t\tif (isFirstLoad && isAlgoliaInitializing()) {\n\t\t\t// Wait up to 500ms for Algolia to initialize on first load\n\t\t\tlet attempts = 0;\n\t\t\twhile (isAlgoliaInitializing() && attempts < 10) {\n\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50));\n\t\t\t\tattempts++;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Use Algolia if available, otherwise fall back to Fuse.js\n\t\tif (isAlgoliaAvailable()) {\n\t\t\ttry {\n\t\t\t\tresults = await filterListingsByAlgoliaSearch(results, query);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Algolia search failed, falling back to Fuse.js:', error);\n\t\t\t\tresults = searchResults(results, query);\n\t\t\t}\n\t\t} else {\n\t\t\tresults = searchResults(results, query);\n\t\t}\n\t}\n\tconst distinctItems = getDistinctItemsByProximity(results, listingEntities);\n\tif (hasFavorite) {\n\t\tselectedFilters.specialFeatures.Favorite = favorite;\n\t}\n\treturn { filteredListings: results, mapItems: distinctItems };\n};\n\nfunction searchResults(results, query) {\n\tconst fields = [\n\t\t'id',\n\t\t'uniqueId',\n\t\t'fields.posted',\n\t\t'fields.subtitle',\n\t\t'fields.education',\n\t\t'fields.title',\n\t\t'fields.category',\n\t\t'fields.subCategory',\n\t\t'fields.shift',\n\t\t'fields.citystate',\n\t\t'fields.city',\n\t\t'fields.state',\n\t\t'fields.schedule',\n\t\t'fields.customflag1',\n\t\t'fields.bonus',\n\t\t'fields.remote',\n\t\t'fields.useclientjoburl',\n\t\t'fields.datecreated',\n\t\t'fields.datelastedited'\n\t];\n\n\tconst options = {\n\t\tincludeScore: true,\n\t\tthreshold: 0.3,\n\t\tkeys: fields\n\t};\n\n\tconst fuse = new Fuse(results, options);\n\tconst lowerCaseQuery = query.toLowerCase();\n\tconst queryTerms = lowerCaseQuery.split(' ');\n\n\tconst exactIdMatch = results.find(result => result.id.toString() === query || result.uniqueId === query);\n\tif (exactIdMatch) {\n\t\treturn [exactIdMatch];\n\t}\n\n\tconst fuseQuery = queryTerms.map(term => ({\n\t\t$or: fields.map(field => ({ [field]: term }))\n\t}));\n\n\tconst fuseResults = fuse.search({ $and: fuseQuery });\n\n\treturn fuseResults.map(result => result.item);\n}\n\nexport const filterListingsByLocation = (\n\tallListings,\n\tselectedLocation,\n\tlistingEntities\n) => {\n\tlet results = allListings;\n\tif (selectedLocation !== null) {\n\t\tresults = results.filter(item =>\n\t\t\tObject.prototype.hasOwnProperty.call(selectedLocation.items, item.id)\n\t\t);\n\t}\n\tconst mapItems = getDistinctItemsByProximity(results, listingEntities);\n\treturn { filteredListings: results, mapItems: mapItems };\n};\n"],"names":["getFieldValue","listing","fieldKey","fields","undefined","customFields","Array","isArray","customField","find","cf","id","name","value","getFilterOptions","listings","filteredListings","field","excludeZeroCount","arguments","length","options","Set","forEach","add","optionCounts","option","Object","prototype","hasOwnProperty","call","result","from","filter","map","count","sort","a","b","localeCompare","getSpecialFeatureOptions","siteConfig","favorites","filterConfig","specialFeatures","featureCounts","keys","reduce","acc","key","entries","_ref","_ref2","_slicedToArray","featureKey","featureName","specialFeatureOptions","_ref3","_ref4","_iterator","_createForOfIteratorHelper","_step","s","n","done","x","includes","err","e","f","showFavorites","hideZeroResults","isCustomFieldBoolean","distinctValues","_iterator2","_step2","String","toLowerCase","size","booleanValues","_iterator3","_step3","val","has","getDynamicCustomFieldFilters","dynamicFilters","specialFeaturesKeys","allCustomFields","push","title","charAt","toUpperCase","slice","replace","trim","items","isDynamic","getPointsOfInterestOptions","pointsOfInterestNames","_ref5","_ref6","generateFilterOptions","allListings","filterOptions","parentField","selectedFilters","dynamicCounts","collapsedByDefault","sortAlphabetically","countListings","fieldFiltersShown","fieldName","filters","categoryCountListings","every","_ref7","_ref8","fieldValue","_typeof","fieldNames","category","categoryKeys","filteredByCategory","_x$fields","locations","locationFiltersShown","index","locationFilteredListings","_ref9","_ref10","cityIncluded","stateIncluded","cityStateIncluded","uniqueCities","_toConsumableArray","city","uniqueStates","state","uniqueCityStates","cityState","filteredByLocation","cityMatches","stateMatches","cityStateMatches","selectedStates","pointsOfInterest","pointsOfInterestConfig","dynamicCustomFilters","cleanFilters","_objectSpread","item","cleanLocations","l","allCleanFilters","concat","applyFilters","_ref11","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","listingEntities","isFirstLoad","results","invertedSpecialFeaturesMap","hasFavorite","favorite","_loop","_i","_Object$entries","attempts","distinctItems","_args2","wrap","_callee$","_context2","prev","next","_ref12","_ref13","Favorite","_Object$entries$_i","filterItems","formattedField","_loop$","_context","abrupt","some","_ref14","_ref15","filterName","filterValue","listingFieldName","stop","delegateYield","t0","isAlgoliaInitializing","Promise","resolve","setTimeout","isAlgoliaAvailable","filterListingsByAlgoliaSearch","sent","t1","console","error","searchResults","getDistinctItemsByProximity","mapItems","_x","_x2","_x3","_x4","_x5","_x6","apply","includeScore","threshold","fuse","Fuse","lowerCaseQuery","queryTerms","split","exactIdMatch","toString","uniqueId","fuseQuery","term","$or","_defineProperty","fuseResults","search","$and","filterListingsByLocation","selectedLocation"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@ const AccordionFiltersContainer = ({
|
|
|
43
43
|
filter.items = filter.items.filter(item => item.count > 0);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
else if(filter.id === 'specialFeatures' && !filter.items.some(item => item.name !== "Favorite" && item.count > 0)){
|
|
47
47
|
const favorite = filter.items.find(item => item.name === "Favorite");
|
|
48
48
|
return <FilterItem
|
|
49
49
|
key={"Favorite"}
|
|
@@ -2,18 +2,24 @@ import React from 'react';
|
|
|
2
2
|
import Grid from '~/components/modules/grid';
|
|
3
3
|
import PillWrapper from '~/components/modules/buttons/pill-wrapper';
|
|
4
4
|
import { capitalize } from '~/util/stringUtils';
|
|
5
|
+
import { getFieldValue } from '~/util/filterUtil';
|
|
5
6
|
|
|
6
7
|
const FieldMapperDesktop = ({
|
|
7
8
|
item,
|
|
8
9
|
fieldsShown,
|
|
9
10
|
specialFeatures
|
|
10
11
|
}) => {
|
|
11
|
-
|
|
12
|
+
// Check both fields and customFields for field presence
|
|
13
|
+
const orderedFields = fieldsShown.filter(field => {
|
|
14
|
+
const value = getFieldValue(item, field);
|
|
15
|
+
return value !== undefined && value !== null;
|
|
16
|
+
});
|
|
12
17
|
|
|
13
18
|
const specialFeaturePills = field => {
|
|
14
19
|
return field === 'title' && specialFeatures &&
|
|
15
20
|
Object.entries(specialFeatures).map(([featureKey, featureLabel]) => {
|
|
16
|
-
|
|
21
|
+
const value = getFieldValue(item, featureKey);
|
|
22
|
+
return value == 1 && (
|
|
17
23
|
<PillWrapper key={featureKey}>{featureLabel}</PillWrapper>
|
|
18
24
|
);
|
|
19
25
|
});
|
|
@@ -22,7 +28,7 @@ const FieldMapperDesktop = ({
|
|
|
22
28
|
return (
|
|
23
29
|
<>
|
|
24
30
|
{orderedFields.map((field, index) => {
|
|
25
|
-
let value = item
|
|
31
|
+
let value = getFieldValue(item, field);
|
|
26
32
|
return (
|
|
27
33
|
<Grid.Item
|
|
28
34
|
key={field}
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import Grid from '~/components/modules/grid';
|
|
3
3
|
import Icon from '~/components/modules/icon';
|
|
4
4
|
import PillWrapper from '~/components/modules/buttons/pill-wrapper';
|
|
5
|
+
import { getFieldValue } from '~/util/filterUtil';
|
|
5
6
|
|
|
6
7
|
const FieldMapperMobile = ({
|
|
7
8
|
item,
|
|
@@ -14,7 +15,8 @@ const FieldMapperMobile = ({
|
|
|
14
15
|
const specialFeaturePills = field => {
|
|
15
16
|
return field === 'title' && specialFeatures &&
|
|
16
17
|
Object.entries(specialFeatures).map(([featureKey, featureLabel]) => {
|
|
17
|
-
|
|
18
|
+
const value = getFieldValue(item, featureKey);
|
|
19
|
+
return value == 1 && (
|
|
18
20
|
<PillWrapper key={featureKey}>{featureLabel}</PillWrapper>
|
|
19
21
|
);
|
|
20
22
|
});
|
|
@@ -26,7 +28,7 @@ const FieldMapperMobile = ({
|
|
|
26
28
|
<>
|
|
27
29
|
<div className="hc-flex hc-items-start">
|
|
28
30
|
<div className="hc-flex hc-justify-between hc-items-center hc-min-w-[100%]">
|
|
29
|
-
<h3 className="hc-font-bold hc-mb-3 hc-flex-1">{item
|
|
31
|
+
<h3 className="hc-font-bold hc-mb-3 hc-flex-1">{getFieldValue(item, "title")}</h3>
|
|
30
32
|
{includeFavorite && <div className="hc-flex hc-justify-end hc-pb-2">
|
|
31
33
|
<Icon
|
|
32
34
|
icon={isFavorite ? "mdi:heart" : "mdi:heart-outline"}
|
|
@@ -83,7 +85,7 @@ const FieldMapperMobile = ({
|
|
|
83
85
|
icon: "ri:pin-distance-fill"
|
|
84
86
|
}
|
|
85
87
|
].map(listItem => (
|
|
86
|
-
(fieldsShown.includes(listItem.field) && item
|
|
88
|
+
(fieldsShown.includes(listItem.field) && getFieldValue(item, listItem.field)) &&
|
|
87
89
|
<li
|
|
88
90
|
key={listItem.field}
|
|
89
91
|
className="hc-flex hc-gap-2"
|
|
@@ -94,7 +96,7 @@ const FieldMapperMobile = ({
|
|
|
94
96
|
className="hc-text-uiAccent/30"
|
|
95
97
|
/>
|
|
96
98
|
<span className="hc-sr-only">{listItem.name}</span>
|
|
97
|
-
{item
|
|
99
|
+
{getFieldValue(item, listItem.field)}
|
|
98
100
|
</li>
|
|
99
101
|
))}
|
|
100
102
|
</ul>
|