diff --git a/composables/useEventSeriesListSearchFilter.js b/composables/useEventSeriesListSearchFilter.js index 5c784ed5..92d6e0b2 100644 --- a/composables/useEventSeriesListSearchFilter.js +++ b/composables/useEventSeriesListSearchFilter.js @@ -1,7 +1,7 @@ // TODO Convert this composable into TypeScript export default function useEventSeriesListSearchFilter() { - return { pastEventSeriesQuery, currentEventSeriesQuery } + return { pastEventSeriesQuery, currentEventSeriesQueryCurrent, currentEventSeriesQueryOngoing } } async function pastEventSeriesQuery( @@ -58,7 +58,7 @@ async function pastEventSeriesQuery( return data } -async function currentEventSeriesQuery( +async function currentEventSeriesQueryCurrent( currentPage = 1, documentsPerPage = 10, sort, @@ -97,7 +97,7 @@ async function currentEventSeriesQuery( should: [ { term: { - ongoing: true, + ongoing: false, }, }, { @@ -108,7 +108,59 @@ async function currentEventSeriesQuery( }, }, ], - minimum_should_match: 1, + minimum_should_match: 2, + } + }, + ...parseSort(sort, orderBy), + }), + } + ) + + const data = await response.json() + return data +} + +async function currentEventSeriesQueryOngoing( + currentPage = 1, + documentsPerPage = 10, + sort, + orderBy, + source = ['*'], +) { + const config = useRuntimeConfig() + if ( + config.public.esReadKey === '' || + config.public.esURL === '' || + config.public.esAlias === '' + ) + return + + const response = await fetch( + `${config.public.esURL}/${config.public.esAlias}/_search`, + { + headers: { + Authorization: `ApiKey ${config.public.esReadKey}`, + 'Content-Type': 'application/json', + }, + method: 'POST', + body: JSON.stringify({ + from: (currentPage - 1) * documentsPerPage, + size: documentsPerPage, + _source: [...source], + query: { + bool: { + filter: [ + { + term: { + 'sectionHandle.keyword': 'ftvaEventSeries', + }, + }, + { + term: { + ongoing: true, + }, + } + ] } }, ...parseSort(sort, orderBy), diff --git a/pages/series/index.vue b/pages/series/index.vue index 78d9d4bd..f5b6f928 100644 --- a/pages/series/index.vue +++ b/pages/series/index.vue @@ -137,17 +137,38 @@ async function searchES() { isLoading.value = true // COMPOSABLE - const { currentEventSeriesQuery, pastEventSeriesQuery } = useEventSeriesListSearchFilter() + const { currentEventSeriesQueryCurrent, currentEventSeriesQueryOngoing, pastEventSeriesQuery } = useEventSeriesListSearchFilter() try { let results if (currentView.value === 'current') { - results = await currentEventSeriesQuery(currentPage.value, - documentsPerPage, - 'startDate', - 'asc', - ['*'],) + const [currentSeriesResult, ongoingSeriesResult] = await Promise.all([ + currentEventSeriesQueryCurrent( + currentPage.value, + documentsPerPage, + 'startDate', + 'asc', + ['*'] + ), + currentEventSeriesQueryOngoing( + currentPage.value, + documentsPerPage, + 'startDate', + 'asc', + ['*'] + ) + ]) + + // Combine results with current series first, ongoing series last + const currentSeries = currentSeriesResult?.hits?.hits || [] + const ongoingSeries = ongoingSeriesResult?.hits?.hits || [] + results = { + hits: { + hits: [...currentSeries, ...ongoingSeries], + total: { value: currentSeries.length + ongoingSeries.length }, + }, + } } else { results = await pastEventSeriesQuery(currentPage.value, documentsPerPage,