2023-06-26 21:41:56 +02:00
|
|
|
<script setup lang="ts">
|
|
|
|
import type { Topic, Paper, Search, Filter } from '@/types'
|
|
|
|
import { papers } from '@/store'
|
|
|
|
import { computed } from 'vue';
|
|
|
|
import FilterSidebar from '@/components/papers/FilterSidebar.vue'
|
2023-06-21 22:29:53 +02:00
|
|
|
import TopicList from '@/components/papers/TopicList.vue'
|
2023-06-21 18:51:54 +02:00
|
|
|
|
2023-06-26 21:41:56 +02:00
|
|
|
const props = defineProps<{
|
|
|
|
search: Search,
|
|
|
|
filter: Filter,
|
|
|
|
}>()
|
|
|
|
const topics = computed(() => {
|
|
|
|
const topicReferences = [...new Set(papers.papers?.map((paper: Paper) => paper.reference))]
|
|
|
|
return topicReferences.map( (reference: string) => {
|
|
|
|
return {
|
|
|
|
'reference': reference,
|
|
|
|
'papers': papers.papers?.filter( (paper: Paper) => paper.reference === reference),
|
|
|
|
}
|
|
|
|
}) as Array<Topic>
|
|
|
|
})
|
2023-06-21 18:51:54 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2023-06-26 21:41:56 +02:00
|
|
|
<FilterSidebar
|
|
|
|
@filter="(filter: Filter) => filter = filter"
|
|
|
|
/>
|
2023-06-21 22:29:53 +02:00
|
|
|
<TopicList
|
2023-06-26 21:41:56 +02:00
|
|
|
:searchProp="search"
|
|
|
|
:filterProp="filter"
|
|
|
|
/>
|
2023-06-21 18:51:54 +02:00
|
|
|
</template>
|