feat: copy orig story layout

This commit is contained in:
eggy 2022-08-10 13:14:48 -04:00
parent 6f05d95e2c
commit b030a8c832
4 changed files with 51 additions and 6 deletions

View File

@ -1,11 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import dayjs from "dayjs"; import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js"; import utc from "dayjs/plugin/utc.js";
import tz from "dayjs/plugin/timezone.js";
import type { BlogParsedContent } from "@/shared/types"; import type { BlogParsedContent } from "@/shared/types";
dayjs.extend(utc); dayjs.extend(utc);
dayjs.extend(tz);
const docs = await queryContent<BlogParsedContent>("/blog") const docs = await queryContent<BlogParsedContent>("/blog")
.sort({ date: 1 }) .sort({ date: 1 })

View File

@ -1,11 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import dayjs from "dayjs"; import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js"; import utc from "dayjs/plugin/utc.js";
import tz from "dayjs/plugin/timezone.js";
import { type StoryParsedContent } from "@/shared/types"; import { type StoryParsedContent } from "@/shared/types";
dayjs.extend(utc); dayjs.extend(utc);
dayjs.extend(tz);
const docs = await queryContent<StoryParsedContent>("/stories") const docs = await queryContent<StoryParsedContent>("/stories")
.sort({ date: 1 }) .sort({ date: 1 })

View File

@ -1,16 +1,64 @@
<script setup lang="ts"> <script setup lang="ts">
import type { StoryParsedContent } from "@/shared/types"; import type { StoryParsedContent } from "@/shared/types";
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js";
dayjs.extend(utc);
useTitle("Stories"); useTitle("Stories");
// TODO: paginate stories
const docs = await queryContent<StoryParsedContent>("/stories") const docs = await queryContent<StoryParsedContent>("/stories")
.sort({ date: 1 }) .sort({ date: 1 })
.where({ _draft: false }) .where({ _draft: false })
.find(); .find();
const getPrettyDate = (story: StoryParsedContent) => {
const date = dayjs(story.date).utc();
return date.format("DD MMM YYYY");
};
</script> </script>
<template> <template>
<main class="flex grow prose dark:prose-invert"> <main class="flex flex-col grow prose dark:prose-invert max-w-3xl">
<h1>Stories</h1> <h1>Stories</h1>
<div class="story-card p-4" v-for="(story, index) in docs" :key="index">
<a :href="story._path" class="no-underline">
<h3
class="text-left text-2xl sm:text-2xl font-bold hover:text-blue-700 leading-tight m-0"
>
{{ story.title }}
</h3>
</a>
<p class="my-1 text-sm">
{{ getPrettyDate(story) }} · {{ story.readingTime.text }}
</p>
<div class="flex flex-wrap">
<Tag
:dest="`/stories/tags/${tag}`"
v-for="(tag, index) in story.tags"
:key="index"
>
{{ tag }}
</Tag>
</div>
<p class="mb-1">{{ story.description }} ...</p>
<div class="text-right">
<a
:href="story._path"
class="no-underline hover:underline font-semibold text-blue-700 m-0"
>
Continue reading
</a>
</div>
</div>
</main> </main>
</template> </template>
<style scoped>
.story-card {
border: 0.1rem solid gray;
max-width: 100%;
border-radius: 0.5rem;
}
</style>

3
shared/types.d.ts vendored
View File

@ -11,7 +11,7 @@ interface BlogParsedContent extends ParsedContent {
date: Date; date: Date;
title: string; title: string;
tags: string[]; tags: string[];
description?: Record<string, any>; description?: string;
readingTime: ReadingTime; readingTime: ReadingTime;
} }
@ -19,5 +19,6 @@ interface StoryParsedContent extends ParsedContent {
date: Date; date: Date;
title: string; title: string;
tags: string[]; tags: string[];
description?: string;
readingTime: ReadingTime; readingTime: ReadingTime;
} }