|
27 | 27 | :label="t('core', 'Search apps, files, tags, messages') + '...'" |
28 | 28 | @update:value="debouncedFind" /> |
29 | 29 | <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"> |
31 | 31 | <template #icon> |
32 | 32 | <IconListBox :size="20" /> |
33 | 33 | </template> |
|
43 | 43 | {{ provider.name }} |
44 | 44 | </NcActionButton> |
45 | 45 | </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"> |
47 | 47 | <template #icon> |
48 | 48 | <IconCalendarRange :size="20" /> |
49 | 49 | </template> |
|
120 | 120 | <h3 class="hidden-visually"> |
121 | 121 | {{ t('core', 'Results') }} |
122 | 122 | </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"> |
124 | 125 | <h4 :id="`unified-search-result-${providerResult.id}`" class="result-title"> |
125 | 126 | {{ providerResult.name }} |
126 | 127 | </h4> |
|
144 | 145 | </NcButton> |
145 | 146 | </div> |
146 | 147 | </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 v-for="(result, index) in providerResult.results" |
| 159 | + :key="index" |
| 160 | + v-bind="result" /> |
| 161 | + </ul> |
| 162 | + <div class="result-footer"> |
| 163 | + <NcButton v-if="providerResult.results.length === providerResult.limit" variant="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult)"> |
| 164 | + {{ t('core', 'Load more results') }} |
| 165 | + <template #icon> |
| 166 | + <IconDotsHorizontal :size="20" /> |
| 167 | + </template> |
| 168 | + </NcButton> |
| 169 | + <NcButton v-if="providerResult.inAppSearch" alignment="end-reverse" variant="tertiary-no-background"> |
| 170 | + {{ t('core', 'Search in') }} {{ providerResult.name }} |
| 171 | + <template #icon> |
| 172 | + <IconArrowRight :size="20" /> |
| 173 | + </template> |
| 174 | + </NcButton> |
| 175 | + </div> |
| 176 | + </div> |
| 177 | + </template> |
147 | 178 | </div> |
148 | 179 | </NcDialog> |
149 | 180 | </template> |
@@ -445,6 +476,7 @@ export default defineComponent({ |
445 | 476 | ...provider, |
446 | 477 | results: response.data.ocs.data.entries, |
447 | 478 | limit: params.limit ?? 5, |
| 479 | + supportsActiveFilters, |
448 | 480 | }) |
449 | 481 |
|
450 | 482 | unifiedSearchLogger.debug('Unified search results:', { results: this.results, newResults }) |
@@ -793,9 +825,27 @@ export default defineComponent({ |
793 | 825 | align-items: center; |
794 | 826 | display: flex; |
795 | 827 | } |
| 828 | +
|
| 829 | + &--unfiltered { |
| 830 | + opacity: 0.7; |
| 831 | + } |
796 | 832 | } |
797 | 833 |
|
798 | 834 | } |
| 835 | +
|
| 836 | + &__unfiltered-header { |
| 837 | + display: flex; |
| 838 | + flex-direction: column; |
| 839 | + gap: 2px; |
| 840 | + margin-block: 16px 8px; |
| 841 | + padding-block: 12px 0; |
| 842 | + border-top: 1px solid var(--color-border); |
| 843 | + } |
| 844 | +
|
| 845 | + &__unfiltered-label { |
| 846 | + font-weight: bold; |
| 847 | + color: var(--color-text-maxcontrast); |
| 848 | + } |
799 | 849 | } |
800 | 850 |
|
801 | 851 | .filter-button__icon { |
|
0 commit comments