display when the target has passed

This commit is contained in:
Julien Calixte
2023-03-18 14:17:09 +01:00
parent 60991e08da
commit 784e54bbf8
4 changed files with 25 additions and 8 deletions

View File

@@ -21,6 +21,7 @@ const targetDate = computed(() =>
const { const {
timeUntilTarget, timeUntilTarget,
hasTargetPassed,
isYearsDisplayed, isYearsDisplayed,
isMonthsDisplayed, isMonthsDisplayed,
isDaysDisplayed, isDaysDisplayed,
@@ -85,8 +86,12 @@ const copyUrl = () => {
<span class="moment">seconds</span> <span class="moment">seconds</span>
</div> </div>
</section> </section>
<section v-else>No target set.</section> <section v-else class="no-target">No target set.</section>
<section v-if="targetDate" class="target-date">{{ targetDate }}</section> <section v-if="targetDate" class="target-date">
<div v-if="hasTargetPassed" class="has-target-passed">🎊</div>
<hr v-else />
{{ targetDate }}
</section>
<form @submit.prevent> <form @submit.prevent>
<div> <div>
<label for="title">Title:</label> <label for="title">Title:</label>
@@ -104,7 +109,7 @@ const copyUrl = () => {
</template> </template>
<style scoped> <style scoped>
div.responsive-time-until { .responsive-time-until {
display: flex; display: flex;
flex: 1; flex: 1;
flex-direction: column; flex-direction: column;
@@ -133,6 +138,14 @@ div.responsive-time-until {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.no-target {
padding: 1rem;
}
.has-target-passed {
font-size: 72px;
}
form { form {
display: none; display: none;
padding: 1rem; padding: 1rem;

View File

@@ -1,8 +1,11 @@
import { ref, computed, onUnmounted, ComputedRef } from "vue" import { ref, computed, onUnmounted, ComputedRef } from "vue"
import { timeUntil } from "../services/time-until" import { hasTimePassed, timeUntil } from "../services/time-until"
export const useTimeUntil = (target: ComputedRef<string | undefined>) => { export const useTimeUntil = (target: ComputedRef<string | undefined>) => {
const timeUntilTarget = target.value ? timeUntil(target.value) : null const timeUntilTarget = target.value ? timeUntil(target.value) : null
const hasTargetPassed = timeUntilTarget
? hasTimePassed(timeUntilTarget)
: false
const yearsUntil = ref(timeUntilTarget?.years ?? 0) const yearsUntil = ref(timeUntilTarget?.years ?? 0)
const monthsUntil = ref(timeUntilTarget?.months ?? 0) const monthsUntil = ref(timeUntilTarget?.months ?? 0)
@@ -46,6 +49,7 @@ export const useTimeUntil = (target: ComputedRef<string | undefined>) => {
return { return {
timeUntilTarget, timeUntilTarget,
hasTargetPassed,
isYearsDisplayed, isYearsDisplayed,
isMonthsDisplayed, isMonthsDisplayed,
isDaysDisplayed, isDaysDisplayed,

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, vi, afterEach, beforeEach } from "vitest" import { describe, it, expect, vi, afterEach, beforeEach } from "vitest"
import { hasPassed, timeUntil } from "./time-until" import { hasTimePassed, timeUntil } from "./time-until"
const noTime = () => ({ const noTime = () => ({
days: 0, days: 0,
@@ -57,9 +57,9 @@ describe("time until", () => {
describe("has passed", () => { describe("has passed", () => {
it("tells if the targed has passed", () => { it("tells if the targed has passed", () => {
expect(hasPassed(noTime())).toBeTruthy() expect(hasTimePassed(noTime())).toBeTruthy()
expect( expect(
hasPassed({ hasTimePassed({
years: 0, years: 0,
months: 0, months: 0,
days: 0, days: 0,

View File

@@ -38,5 +38,5 @@ export const timeUntil = (target: string): TimeUntilReturn => {
} }
} }
export const hasPassed = (timeUntil: TimeUntilReturn): boolean => export const hasTimePassed = (timeUntil: TimeUntilReturn): boolean =>
Object.entries(timeUntil).every(([_, value]) => value === 0) Object.entries(timeUntil).every(([_, value]) => value === 0)