Skip to content

Commit

Permalink
Merge pull request #641 from HDRUK/filter-fix
Browse files Browse the repository at this point in the history
fix greyed out filters
  • Loading branch information
cdjreekie committed Jan 14, 2022
2 parents 964fdbd + b6d1e58 commit 06069bd
Showing 1 changed file with 12 additions and 69 deletions.
81 changes: 12 additions & 69 deletions src/resources/search/filter.route.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import express from 'express';
import { getObjectFilters, getFilter } from './search.repository';
import { filtersService } from '../filters/dependency';
import { isEqual, lowerCase, isEmpty } from 'lodash';
import { isEqual, isEmpty } from 'lodash';
import searchUtil from './util/search.util';

const router = express.Router();
Expand All @@ -23,74 +23,15 @@ const typeMapper = {
router.get('/', async (req, res) => {
let searchString = req.query.search || ''; //If blank then return all
let tab = req.query.tab || ''; //If blank then return all
if (tab === '') {
let searchQuery = { $and: [{ activeflag: 'active' }] };
if (searchString.length > 0) searchQuery['$and'].push({ $text: { $search: searchString } });

await Promise.all([
getFilter(searchString, 'tool', 'tags.topic', true, getObjectFilters(searchQuery, req, 'tool')),
getFilter(searchString, 'tool', 'tags.features', true, getObjectFilters(searchQuery, req, 'tool')),
getFilter(searchString, 'tool', 'programmingLanguage.programmingLanguage', true, getObjectFilters(searchQuery, req, 'tool')),
getFilter(searchString, 'tool', 'categories.category', false, getObjectFilters(searchQuery, req, 'tool')),

getFilter(searchString, 'project', 'tags.topics', true, getObjectFilters(searchQuery, req, 'project')),
getFilter(searchString, 'project', 'tags.features', true, getObjectFilters(searchQuery, req, 'project')),
getFilter(searchString, 'project', 'categories.category', false, getObjectFilters(searchQuery, req, 'project')),

getFilter(searchString, 'paper', 'tags.topics', true, getObjectFilters(searchQuery, req, 'project')),
getFilter(searchString, 'paper', 'tags.features', true, getObjectFilters(searchQuery, req, 'project')),
]).then(values => {
return res.json({
success: true,
allFilters: {
toolTopicFilter: values[0][0],
toolFeatureFilter: values[1][0],
toolLanguageFilter: values[2][0],
toolCategoryFilter: values[3][0],

projectTopicFilter: values[4][0],
projectFeatureFilter: values[5][0],
projectCategoryFilter: values[6][0],

paperTopicFilter: values[7][0],
paperFeatureFilter: values[8][0],
},
filterOptions: {
toolTopicsFilterOptions: values[0][1],
featuresFilterOptions: values[1][1],
programmingLanguageFilterOptions: values[2][1],
toolCategoriesFilterOptions: values[3][1],

projectTopicsFilterOptions: values[4][1],
projectFeaturesFilterOptions: values[5][1],
projectCategoriesFilterOptions: values[6][1],

paperTopicsFilterOptions: values[7][1],
paperFeaturesFilterOptions: values[8][1],
},
});
});
} else {
const type = !isEmpty(tab) && typeof tab === 'string' ? lowerCase(tab.substring(0, tab.length - 1)) : '';
let defaultQuery = { $and: [{ activeflag: 'active' }] };
if (type === 'collection') {
defaultQuery['$and'].push({ publicflag: true });
} else if (type === 'course') {
defaultQuery['$and'].push({
$or: [{ 'courseOptions.startDate': { $gte: new Date(Date.now()) } }, { 'courseOptions.flexibleDates': true }],
});
}

if (searchString.length > 0) defaultQuery['$and'].push({ $text: { $search: searchString } });
const filterQuery = getObjectFilters(defaultQuery, req, type);
const useCachedFilters = isEqual(defaultQuery, filterQuery) && searchString.length === 0;

const filters = await filtersService.buildFilters(type, filterQuery, useCachedFilters);
const spatialV2 = searchUtil.arrayToTree(filters['spatial']);
filters['spatialv2'] = spatialV2;
return res.json({
success: true,
filters,

const type = !isEmpty(tab) && typeof tab === 'string' ? typeMapper[`${tab}`] : '';

let defaultQuery = { $and: [{ activeflag: 'active' }] };
if (type === 'collection') {
defaultQuery['$and'].push({ publicflag: true });
} else if (type === 'course') {
defaultQuery['$and'].push({
$or: [{ 'courseOptions.startDate': { $gte: new Date(Date.now()) } }, { 'courseOptions.flexibleDates': true }],
});
}

Expand All @@ -99,6 +40,8 @@ router.get('/', async (req, res) => {
const useCachedFilters = isEqual(defaultQuery, filterQuery) && searchString.length === 0;

const filters = await filtersService.buildFilters(type, filterQuery, useCachedFilters);
const spatialV2 = searchUtil.arrayToTree(filters['spatial'] || []);
filters['spatialv2'] = spatialV2;
return res.json({
success: true,
filters,
Expand Down

0 comments on commit 06069bd

Please sign in to comment.