feat(front): [WIP] federated search in search modal

This commit is contained in:
ArneBo 2025-04-22 16:51:54 +02:00
parent a7ad823a25
commit 0f2be469da
1 changed files with 22 additions and 3 deletions

View File

@ -98,7 +98,8 @@ type Results = {
podcasts: Response['podcasts']['results'],
series: Response['series']['results'],
rss: [Response['rss']],
federation: [Response['federation']]
federation: [Response['federation']],
type: Category
}
const responses = ref<Partial<Response>>({})
@ -321,18 +322,21 @@ const search = async () => {
}
responses.value[category.type] = response.data
} else {
// TODO: add (@)type key to Response type
if (category.type === 'rss') {
const response = await axios.post<Response['rss']>(
category.endpoint,
{ url: trimmedQuery.value }
)
results.value.type = category.type
results.value.rss = [response.data]
responses.value[category.type] = response.data
} else if (category.type === 'federation') {
const response = await axios.post<Response['federation']>(
category.endpoint,
{ params }
{ object: trimmedQuery.value }
)
results.value.type = category.type
results.value.federation = [response.data]
responses.value[category.type] = response.data
} else if (category.type === 'playlists') {
@ -340,6 +344,7 @@ const search = async () => {
category.endpoint,
{ params }
)
results.value.type = category.type
results.value.playlists = response.data.results
responses.value[category.type] = response.data
} else if (category.type === 'podcasts') {
@ -347,6 +352,7 @@ const search = async () => {
category.endpoint,
{ params }
)
results.value.type = category.type
results.value.podcasts = response.data.results
responses.value[category.type] = response.data
} else if (category.type === 'radios') {
@ -354,6 +360,7 @@ const search = async () => {
category.endpoint,
{ params }
)
results.value.type = category.type
results.value.radios = response.data.results
responses.value[category.type] = response.data
} else if (category.type === 'series') {
@ -361,6 +368,7 @@ const search = async () => {
category.endpoint,
{ params }
)
results.value.type = category.type
results.value.series = response.data.results
responses.value[category.type] = response.data
}
@ -398,6 +406,8 @@ const radioConfig = computed<RadioConfig | null>(() =>
// Start the search
watch(queryDebounced, search, { immediate: true })
// TODO: Include redirectRoute function from RemoteSearchForm.vue and adapt to !results.value and results.value.type instead of objInfo
</script>
<template>
@ -503,9 +513,18 @@ watch(queryDebounced, search, { immediate: true })
</Link>
</span>
<span v-else-if="category.type === 'federation'">
<span v-else-if="category.type === 'federation' && count(category) > 0">
<!-- TODO: Federation search: backend adapter + display, fix results_per_category query -->
<!-- {{ resultsPerCategory(category) }} -->
<!-- TODO: compute :to url for federated object -->
<Link
v-for="result in resultsPerCategory(category)"
:key="result.id"
:to="{name: 'profile.full', params: result.object?.full_username}"
target="_blank"
>
{{ result.object?.full_username }}
</Link>
</span>
<EmptyState