Files
website-old/src/components/Post.vue

84 lines
2.1 KiB
Vue
Executable File

<template>
<nuxt-link :to="`/blog/${slug}`">
<div class="h-full rounded-lg dark:shadow-white shadow-xl w-full bg-gray-100 dark:bg-gray-800 transform hover:-translate-y-2 duration-300">
<div class="max-w-full">
<img class="max-w-full rounded-t-lg" :src="`https://athena.arthurdanjou.fr/files/${cover}`" alt="Post Cover" />
</div>
<div class="px-8 py-4 flex flex-col justify-between">
<div>
<div class="flex space-x-2 mb-2">
<div v-for="tag in tags">
<Tag :content="tag" :pill="true"/>
</div>
</div>
<h1 class="text-2xl font-bold">{{ $t(title) }}</h1>
<p class="text-base mt-3 text-gray-700 dark:text-gray-400 text-justify">{{ $t(description) }}</p>
</div>
<div class="flex justify-between">
<h5 class="text-base text-gray-700 dark:text-gray-400">{{ formatDate }}</h5>
<h5 class="text-base text-gray-700 dark:text-gray-400">{{ reading_time }} min.</h5>
</div>
</div>
</div>
</nuxt-link>
</template>
<script lang="ts">
import {computed, defineComponent, useContext} from "@nuxtjs/composition-api";
interface PostProps {
title: string,
description: string,
date: string,
cover: string,
slug: string,
tags: Array<string>,
reading_time: number
}
export default defineComponent({
name: "Post",
props: {
title: {
type: String,
default: "Title"
},
description: {
type: String,
default: "Description"
},
date: {
type: String,
default: "Date"
},
cover: {
type: String,
default: "string"
},
slug: {
type: String,
default: "slug"
},
tags: {
type: Array,
default: () => ["Tag1", "Tag2", "Tag3"],
},
reading_time: {
type: Number,
default: 0
}
},
setup(props: PostProps) {
const { i18n } = useContext()
const formatDate = computed(() => {
const [first, second, third]: any = props.date.split('-')
return `${first} ${i18n.t(`month.${second}`)} ${third}`
})
return {
formatDate
}
}
})
</script>