diff options
| author | Leonardo Bishop <me@leonardobishop.com> | 2025-01-23 15:59:58 +0000 |
|---|---|---|
| committer | Leonardo Bishop <me@leonardobishop.com> | 2025-01-23 15:59:58 +0000 |
| commit | 0248517c6845a6c755d40c89d3d769ce7d60bd03 (patch) | |
| tree | def59a310f2bbe0a1e7913b99547200da686ecc2 /components/EventListing.vue | |
| parent | 850affbd55fee9cd48a82ade94a3a5e60fd737a8 (diff) | |
Some more shit
Diffstat (limited to 'components/EventListing.vue')
| -rw-r--r-- | components/EventListing.vue | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/components/EventListing.vue b/components/EventListing.vue index 9271692..287fbfc 100644 --- a/components/EventListing.vue +++ b/components/EventListing.vue @@ -1,11 +1,12 @@ <script setup lang="ts"> import { StarIcon } from 'lucide-vue-next'; -import { add, format } from 'date-fns'; +import { format, formatDistanceToNow } from 'date-fns'; import { type Event as ScheduledEvent } from '~/stores/schedule'; import Spinner from './Spinner.vue'; -const { event } = defineProps<{ +const { event, showRelativeTime } = defineProps<{ event: ScheduledEvent; + showRelativeTime?: boolean; }>(); const selectedEventStore = useSelectedEventStore(); @@ -14,6 +15,29 @@ const errorStore = useErrorStore(); const config = useRuntimeConfig(); const addingToFavourite = ref(false); +const relativeTime = ref(); +const timer = ref(); + +const updateRelativeTime = () => { + if (event.start < new Date() && event.end > new Date()) { + relativeTime.value = 'now'; + } else { + relativeTime.value = `in ${formatDistanceToNow(event.start)}` + } +}; + +onMounted(() => { + if (showRelativeTime) { + updateRelativeTime(); + timer.value = setInterval(updateRelativeTime, 1000); + } +}); + +onUnmounted(() => { + if (timer.value) { + clearInterval(timer.value); + } +}); const addFavourite = async () => { addingToFavourite.value = true; @@ -74,7 +98,7 @@ const removeFavourite = async () => { <div class="event"> <div class="event-details" @click="selectedEventStore.setSelectedEvent(event)"> <span class="event-info"> - {{ format(event.start, "kk:mm") }} - {{ format(event.end, "kk:mm") }}, {{ event.room }} + <span>{{ format(event.start, "kk:mm") }} - {{ format(event.end, "kk:mm") }},</span> <span>{{ event.room }}</span> <span v-if="showRelativeTime">-</span> <span v-if="showRelativeTime" class="relative-time">{{ relativeTime }}</span> </span> <span class="event-title">{{ event.title }}</span> <span class="event-speaker">{{ event.persons.map(p => p.name).join(", ") }}</span> @@ -147,5 +171,9 @@ const removeFavourite = async () => { .event-button-loading { cursor: progress; } + +.relative-time { + color: var(--color-text-success); +} </style>
\ No newline at end of file |
