Show recent snippets from json data
This commit is contained in:
parent
d52b9b21ff
commit
33388408b6
@ -10,13 +10,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<ul class="snippet-items">
|
<ul class="snippet-items">
|
||||||
<snippet-list-element />
|
<snippet-list-element
|
||||||
|
v-for="(snippet, index) in snippets"
|
||||||
|
:key="index"
|
||||||
|
:snippet="snippet"
|
||||||
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import Snippet from "@/interfaces/Snippet";
|
||||||
import { Options, Vue } from "vue-class-component";
|
import { Options, Vue } from "vue-class-component";
|
||||||
|
|
||||||
import SnippetListElement from "./SnippetListElement.vue";
|
import SnippetListElement from "./SnippetListElement.vue";
|
||||||
@ -25,8 +30,13 @@ import SnippetListElement from "./SnippetListElement.vue";
|
|||||||
components: {
|
components: {
|
||||||
SnippetListElement,
|
SnippetListElement,
|
||||||
},
|
},
|
||||||
|
props: {
|
||||||
|
snippets: Array,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
export default class SnippetList extends Vue {}
|
export default class SnippetList extends Vue {
|
||||||
|
private snippets!: Snippet[];
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|||||||
@ -6,10 +6,38 @@
|
|||||||
class="snippet-image"
|
class="snippet-image"
|
||||||
/>
|
/>
|
||||||
<div class="snippet-text">
|
<div class="snippet-text">
|
||||||
<h4 class="snippet-title">Title</h4>
|
<h4 class="snippet-title">{{ snippet.title }}</h4>
|
||||||
<span class="snippet-date" title="pretty date">
|
<span class="snippet-date" :title="prettyDate">
|
||||||
relative date
|
{{ relativeDate }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Snippet from "@/interfaces/Snippet";
|
||||||
|
import { Options, Vue } from "vue-class-component";
|
||||||
|
|
||||||
|
import { DateTime } from "luxon";
|
||||||
|
|
||||||
|
@Options({
|
||||||
|
props: {
|
||||||
|
snippet: Object,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
export default class SnippetListElement extends Vue {
|
||||||
|
private snippet!: Snippet;
|
||||||
|
|
||||||
|
private get dateAsDateTime() {
|
||||||
|
return DateTime.fromSeconds(this.snippet.timeAdded);
|
||||||
|
}
|
||||||
|
|
||||||
|
private get prettyDate() {
|
||||||
|
return this.dateAsDateTime.toLocaleString(DateTime.DATETIME_FULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
private get relativeDate() {
|
||||||
|
return this.dateAsDateTime.toRelative()?.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|||||||
7
src/interfaces/Snippet.ts
Normal file
7
src/interfaces/Snippet.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export default interface Snippet {
|
||||||
|
title: string;
|
||||||
|
slug: string;
|
||||||
|
timeAdded: number;
|
||||||
|
snippet: string;
|
||||||
|
tags: string[];
|
||||||
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<snippet-list />
|
<snippet-list :snippets="recentSnippets" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@ -7,10 +7,21 @@ import { Options, Vue } from "vue-class-component";
|
|||||||
|
|
||||||
import SnippetList from "@/components/snippets/SnippetList.vue";
|
import SnippetList from "@/components/snippets/SnippetList.vue";
|
||||||
|
|
||||||
|
import snippets from "@/data/snippets.json";
|
||||||
|
import Snippet from "@/interfaces/Snippet";
|
||||||
|
|
||||||
@Options({
|
@Options({
|
||||||
components: {
|
components: {
|
||||||
SnippetList,
|
SnippetList,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
export default class HomeView extends Vue {}
|
export default class HomeView extends Vue {
|
||||||
|
private snippets: Snippet[] = snippets;
|
||||||
|
|
||||||
|
get recentSnippets() {
|
||||||
|
return this.snippets
|
||||||
|
.sort((a, b) => a.timeAdded - b.timeAdded)
|
||||||
|
.slice(0, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user