Integrate time until visually
This commit is contained in:
27
src/App.vue
27
src/App.vue
@@ -1,30 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import HelloWorld from './components/HelloWorld.vue'
|
||||
import ResponsiveTimeUntil from "./components/ResponsiveTimeUntil.vue"
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<a href="https://vitejs.dev" target="_blank">
|
||||
<img src="/vite.svg" class="logo" alt="Vite logo" />
|
||||
</a>
|
||||
<a href="https://vuejs.org/" target="_blank">
|
||||
<img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
|
||||
</a>
|
||||
</div>
|
||||
<HelloWorld msg="Vite + Vue" />
|
||||
<ResponsiveTimeUntil />
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.logo {
|
||||
height: 6em;
|
||||
padding: 1.5em;
|
||||
will-change: filter;
|
||||
transition: filter 300ms;
|
||||
}
|
||||
.logo:hover {
|
||||
filter: drop-shadow(0 0 2em #646cffaa);
|
||||
}
|
||||
.logo.vue:hover {
|
||||
filter: drop-shadow(0 0 2em #42b883aa);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
defineProps<{ msg: string }>()
|
||||
|
||||
const count = ref(0)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<h1>{{ msg }}</h1>
|
||||
|
||||
<div class="card">
|
||||
<button type="button" @click="count++">count is {{ count }}</button>
|
||||
<p>
|
||||
Edit
|
||||
<code>components/HelloWorld.vue</code> to test HMR
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Check out
|
||||
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
|
||||
>create-vue</a
|
||||
>, the official Vue + Vite starter
|
||||
</p>
|
||||
<p>
|
||||
Install
|
||||
<a href="https://github.com/johnsoncodehk/volar" target="_blank">Volar</a>
|
||||
in your IDE for a better DX
|
||||
</p>
|
||||
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.read-the-docs {
|
||||
color: #888;
|
||||
}
|
||||
</style>
|
||||
40
src/components/ResponsiveTimeUntil.vue
Normal file
40
src/components/ResponsiveTimeUntil.vue
Normal file
@@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
import { onUnmounted, ref } from "vue"
|
||||
import { timeUntil } from "../services/time-until"
|
||||
|
||||
const timeUntilTarget = timeUntil("2024-03-13T09:00:00.000Z")
|
||||
|
||||
const yearsUntil = ref(timeUntilTarget.years)
|
||||
const monthsUntil = ref(timeUntilTarget.months)
|
||||
const daysUntil = ref(timeUntilTarget.days)
|
||||
const hoursUntil = ref(timeUntilTarget.hours)
|
||||
const secondsUntil = ref(timeUntilTarget.seconds)
|
||||
|
||||
const id = setInterval(() => {
|
||||
const timeUntilTarget = timeUntil("2024-03-13T09:00:00.000Z")
|
||||
|
||||
yearsUntil.value = timeUntilTarget.years
|
||||
monthsUntil.value = timeUntilTarget.months
|
||||
daysUntil.value = timeUntilTarget.days
|
||||
hoursUntil.value = timeUntilTarget.hours
|
||||
secondsUntil.value = timeUntilTarget.seconds
|
||||
}, 1000)
|
||||
|
||||
onUnmounted(() => clearInterval(id))
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section>
|
||||
<div>{{ yearsUntil }} years</div>
|
||||
<div>{{ monthsUntil }} months</div>
|
||||
<div>{{ daysUntil }} days</div>
|
||||
<div>{{ hoursUntil }} hours</div>
|
||||
<div>{{ secondsUntil }} seconds</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
section {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
import { DateTime } from "luxon"
|
||||
|
||||
interface TimeUntilReturn {
|
||||
export interface TimeUntilReturn {
|
||||
years: number
|
||||
months: number
|
||||
days: number
|
||||
|
||||
Reference in New Issue
Block a user