feat(front): [WIP] federated search in search modal
This commit is contained in:
parent
a7ad823a25
commit
0f2be469da
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue