Skip to content

Commit c3db2ec

Browse files
nfebebackportbot[bot]
authored andcommitted
fix(unified-search): Separate filtered and unfiltered results
Show results from providers that don't support active content filters (date/person) in a separate "Additional results" section with a note explaining that some filters may have been ignored. Changes: - Add computed properties to separate filtered/unfiltered results - Track filter compatibility using baseProvider for searchFrom providers - Deduplicate results by resourceUrl across sections - Skip in-folder results when at root to avoid duplicating Files results - Fix providerIsCompatibleWithFilters to check correct filter properties - Add styling for the unfiltered results section Signed-off-by: nfebe <[email protected]>
1 parent 0dfa4c5 commit c3db2ec

File tree

1 file changed

+54
-3
lines changed

1 file changed

+54
-3
lines changed

core/src/components/UnifiedSearch/UnifiedSearchModal.vue

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
:label="t('core', 'Search apps, files, tags, messages') + '...'"
2828
@update:value="debouncedFind" />
2929
<div class="unified-search-modal__filters" data-cy-unified-search-filters>
30-
<NcActions v-model:open="providerActionMenuIsOpen" :menu-name="t('core', 'Places')" data-cy-unified-search-filter="places">
30+
<NcActions :open.sync="providerActionMenuIsOpen" :menu-name="t('core', 'Places')" data-cy-unified-search-filter="places">
3131
<template #icon>
3232
<IconListBox :size="20" />
3333
</template>
@@ -43,7 +43,7 @@
4343
{{ provider.name }}
4444
</NcActionButton>
4545
</NcActions>
46-
<NcActions v-model:open="dateActionMenuIsOpen" :menu-name="t('core', 'Date')" data-cy-unified-search-filter="date">
46+
<NcActions :open.sync="dateActionMenuIsOpen" :menu-name="t('core', 'Date')" data-cy-unified-search-filter="date">
4747
<template #icon>
4848
<IconCalendarRange :size="20" />
4949
</template>
@@ -120,7 +120,8 @@
120120
<h3 class="hidden-visually">
121121
{{ t('core', 'Results') }}
122122
</h3>
123-
<div v-for="providerResult in results" :key="providerResult.id" class="result">
123+
<!-- Filtered results section -->
124+
<div v-for="providerResult in filteredResults" :key="providerResult.id" class="result">
124125
<h4 :id="`unified-search-result-${providerResult.id}`" class="result-title">
125126
{{ providerResult.name }}
126127
</h4>
@@ -144,6 +145,37 @@
144145
</NcButton>
145146
</div>
146147
</div>
148+
<!-- Unfiltered results section -->
149+
<template v-if="unfilteredResults.length > 0">
150+
<div class="unified-search-modal__unfiltered-header">
151+
<span class="unified-search-modal__unfiltered-label">{{ t('core', 'Partial matches') }}</span>
152+
</div>
153+
<div v-for="providerResult in unfilteredResults" :key="`unfiltered-${providerResult.id}`" class="result result--unfiltered">
154+
<h4 :id="`unified-search-result-unfiltered-${providerResult.id}`" class="result-title">
155+
{{ providerResult.name }}
156+
</h4>
157+
<ul class="result-items" :aria-labelledby="`unified-search-result-unfiltered-${providerResult.id}`">
158+
<SearchResult
159+
v-for="(result, index) in providerResult.results"
160+
:key="index"
161+
v-bind="result" />
162+
</ul>
163+
<div class="result-footer">
164+
<NcButton v-if="providerResult.results.length === providerResult.limit" variant="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult)">
165+
{{ t('core', 'Load more results') }}
166+
<template #icon>
167+
<IconDotsHorizontal :size="20" />
168+
</template>
169+
</NcButton>
170+
<NcButton v-if="providerResult.inAppSearch" alignment="end-reverse" variant="tertiary-no-background">
171+
{{ t('core', 'Search in') }} {{ providerResult.name }}
172+
<template #icon>
173+
<IconArrowRight :size="20" />
174+
</template>
175+
</NcButton>
176+
</div>
177+
</div>
178+
</template>
147179
</div>
148180
</NcDialog>
149181
</template>
@@ -426,6 +458,7 @@ export default defineComponent({
426458
...provider,
427459
results: response.data.ocs.data.entries,
428460
limit: params.limit ?? 5,
461+
supportsActiveFilters,
429462
})
430463
431464
unifiedSearchLogger.debug('Unified search results:', { results: this.results, newResults })
@@ -765,9 +798,27 @@ export default defineComponent({
765798
align-items: center;
766799
display: flex;
767800
}
801+
802+
&--unfiltered {
803+
opacity: 0.7;
804+
}
768805
}
769806
770807
}
808+
809+
&__unfiltered-header {
810+
display: flex;
811+
flex-direction: column;
812+
gap: 2px;
813+
margin-block: 16px 8px;
814+
padding-block: 12px 0;
815+
border-top: 1px solid var(--color-border);
816+
}
817+
818+
&__unfiltered-label {
819+
font-weight: bold;
820+
color: var(--color-text-maxcontrast);
821+
}
771822
}
772823
773824
.filter-button__icon {

0 commit comments

Comments
 (0)