forked from Mirrors/elk
feat: /public/local timeline and timeline header (#3)
Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
This commit is contained in:
parent
cf22ca25bf
commit
a17d3276d3
7 changed files with 87 additions and 14 deletions
13
components/main/MainContent.vue
Normal file
13
components/main/MainContent.vue
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<template>
|
||||||
|
<div flex flex-col>
|
||||||
|
<div flex justify-between>
|
||||||
|
<div p3 flex gap-1>
|
||||||
|
<slot name="title" />
|
||||||
|
</div>
|
||||||
|
<div p3 flex>
|
||||||
|
<slot name="actions" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -2,12 +2,16 @@
|
||||||
<div h-full of-hidden>
|
<div h-full of-hidden>
|
||||||
<main grid="~ lg:cols-[1fr_40rem_1fr]" h-full>
|
<main grid="~ lg:cols-[1fr_40rem_1fr]" h-full>
|
||||||
<div>
|
<div>
|
||||||
<NavTitle p4 />
|
<slot name="left">
|
||||||
|
<NavTitle p4 />
|
||||||
|
</slot>
|
||||||
</div>
|
</div>
|
||||||
<div h-full of-auto border="l r border">
|
<div h-full of-auto border="l r border">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
<div>Right</div>
|
<div>
|
||||||
|
<slot name="right" />
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
23
pages/home.vue
Normal file
23
pages/home.vue
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const token = useCookie('nuxtodon-token')
|
||||||
|
const router = useRouter()
|
||||||
|
if (!token.value)
|
||||||
|
router.replace('/public')
|
||||||
|
|
||||||
|
const masto = await useMasto()
|
||||||
|
const paginator = masto.timelines.getHomeIterable()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent>
|
||||||
|
<template #title>
|
||||||
|
<div i-ri:home-fill h-6 mr-1 /><span>Home</span>
|
||||||
|
</template>
|
||||||
|
<template #actions>
|
||||||
|
<div color-gray i-ri:equalizer-fill mr-1 h-6 />
|
||||||
|
</template>
|
||||||
|
<slot>
|
||||||
|
<TimelinePaginator :timelines="paginator" />
|
||||||
|
</slot>
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
|
@ -1,14 +1,14 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const token = useCookie('nuxtodon-token')
|
const token = useCookie('nuxtodon-token')
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
// TODO: move to middleware
|
// TODO: move to middleware
|
||||||
if (!token.value)
|
if (!token.value)
|
||||||
router.replace('/public')
|
router.replace('/public')
|
||||||
|
else
|
||||||
const masto = await useMasto()
|
router.replace('/home')
|
||||||
const paginator = masto.timelines.getHomeIterable()
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<TimelinePaginator :paginator="paginator" />
|
<div />
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
const masto = await useMasto()
|
|
||||||
const paginator = masto.timelines.getPublicIterable()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<TimelinePaginator :paginator="paginator" />
|
|
||||||
</template>
|
|
18
pages/public/index.vue
Normal file
18
pages/public/index.vue
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const masto = await useMasto()
|
||||||
|
const { data: timelines } = await useAsyncData('timelines-public', () => masto.timelines.fetchPublic().then(r => r.value))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent>
|
||||||
|
<template #title>
|
||||||
|
<div i-ri:earth-fill h-6 mr-1 /><span>Federated Timeline</span>
|
||||||
|
</template>
|
||||||
|
<template #actions>
|
||||||
|
<div color-gray i-ri:equalizer-fill mr-1 h-6 />
|
||||||
|
</template>
|
||||||
|
<slot>
|
||||||
|
<TimelineList :timelines="timelines" />
|
||||||
|
</slot>
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
23
pages/public/local.vue
Normal file
23
pages/public/local.vue
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const token = useCookie('nuxtodon-token')
|
||||||
|
const router = useRouter()
|
||||||
|
if (!token.value)
|
||||||
|
router.replace('/public')
|
||||||
|
|
||||||
|
const masto = await useMasto()
|
||||||
|
const { data: timelines } = await useAsyncData('timelines-home', () => masto.timelines.fetchPublic({ local: true }).then(r => r.value))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<MainContent>
|
||||||
|
<template #title>
|
||||||
|
<div i-ri:group-fill h-6 mr-1 /><span>Local timeline</span>
|
||||||
|
</template>
|
||||||
|
<template #actions>
|
||||||
|
<div color-gray i-ri:equalizer-fill mr-1 h-6 />
|
||||||
|
</template>
|
||||||
|
<slot>
|
||||||
|
<TimelineList :timelines="timelines" />
|
||||||
|
</slot>
|
||||||
|
</MainContent>
|
||||||
|
</template>
|
Loading…
Reference in a new issue