2019-01-18 14:03:58 +01:00
|
|
|
<template>
|
2024-02-05 16:48:02 +01:00
|
|
|
<v-card flat variant="outlined" rounded="xl">
|
|
|
|
|
<v-card-title v-if="event.band" primary-title>
|
2024-02-02 14:46:42 +01:00
|
|
|
<h3 class="headline mb-0">
|
2020-01-25 14:59:14 +01:00
|
|
|
<v-icon
|
2024-02-02 14:46:42 +01:00
|
|
|
v-if="hasUser"
|
2024-02-05 16:48:02 +01:00
|
|
|
class="ml-1 mr-1 text-medium-emphasis"
|
|
|
|
|
size="small"
|
2025-06-13 15:21:27 +02:00
|
|
|
:title="t('events.hide')"
|
|
|
|
|
icon='mdi-eye-off'
|
2022-08-03 18:40:05 +02:00
|
|
|
@click="toggleIgnore('band', event.band.name)"
|
2025-06-13 15:21:27 +02:00
|
|
|
/>
|
2024-02-05 16:48:02 +01:00
|
|
|
{{ event.band.name }}
|
2020-01-25 14:59:14 +01:00
|
|
|
</h3>
|
2019-01-21 20:58:25 +01:00
|
|
|
</v-card-title>
|
2024-02-05 16:48:02 +01:00
|
|
|
<v-card-text>
|
2024-02-06 07:43:46 +01:00
|
|
|
<v-row dense>
|
2024-02-05 16:48:02 +01:00
|
|
|
<v-col
|
2024-02-06 07:43:46 +01:00
|
|
|
cols="12"
|
2024-02-05 16:48:02 +01:00
|
|
|
xs="12"
|
|
|
|
|
sm="6"
|
2024-02-02 14:46:42 +01:00
|
|
|
>
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.date')" />{{
|
2020-01-25 14:59:14 +01:00
|
|
|
event.date
|
|
|
|
|
}}
|
2022-08-03 18:40:05 +02:00
|
|
|
({{ weekday }} {{ daysUntil }})
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
2024-02-06 07:43:46 +01:00
|
|
|
<v-col v-if="event.time" cols="12" xs="12" sm="6">
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.time')" />{{
|
2020-01-25 14:59:14 +01:00
|
|
|
event.time
|
2022-08-03 18:40:05 +02:00
|
|
|
}}
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
|
|
|
|
</v-row>
|
2024-02-06 07:43:46 +01:00
|
|
|
<v-row v-if="event.danceHall" dense>
|
2024-02-05 16:48:02 +01:00
|
|
|
<v-col
|
2024-02-06 07:43:46 +01:00
|
|
|
cols="12"
|
2024-02-05 16:48:02 +01:00
|
|
|
xs="12"
|
|
|
|
|
sm="6"
|
2024-02-02 14:46:42 +01:00
|
|
|
>
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.hall')" />
|
2022-08-03 18:40:05 +02:00
|
|
|
<v-icon
|
2024-02-02 14:46:42 +01:00
|
|
|
v-if="hasUser"
|
2024-02-05 16:48:02 +01:00
|
|
|
class="ml-1 mr-1 text-medium-emphasis"
|
|
|
|
|
size="small"
|
2025-06-13 15:21:27 +02:00
|
|
|
:title="t('events.hide')"
|
|
|
|
|
icon='mdi-eye-off'
|
2022-08-03 18:40:05 +02:00
|
|
|
@click="toggleIgnore('danceHall', event.danceHall.name)"
|
2025-06-13 15:21:27 +02:00
|
|
|
/>
|
2022-08-03 18:40:05 +02:00
|
|
|
{{ event.danceHall.name }}
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
|
|
|
|
<v-col
|
2024-02-06 07:43:46 +01:00
|
|
|
cols="12"
|
2024-02-05 16:48:02 +01:00
|
|
|
xs="12"
|
|
|
|
|
sm="6"
|
2020-01-25 14:59:14 +01:00
|
|
|
>
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.city')" />
|
2022-08-03 18:40:05 +02:00
|
|
|
<v-icon
|
2024-02-02 14:46:42 +01:00
|
|
|
v-if="hasUser"
|
2024-02-05 16:48:02 +01:00
|
|
|
class="ml-1 mr-1 text-medium-emphasis"
|
|
|
|
|
size="small"
|
2025-06-13 15:21:27 +02:00
|
|
|
:title="t('events.hide')"
|
|
|
|
|
icon='mdi-eye-off'
|
2022-08-03 18:40:05 +02:00
|
|
|
@click="toggleIgnore('city', event.danceHall.city)"
|
2025-06-13 15:21:27 +02:00
|
|
|
/>
|
2022-08-03 18:40:05 +02:00
|
|
|
{{ event.danceHall.city }}
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
|
|
|
|
<v-col
|
2024-02-06 07:43:46 +01:00
|
|
|
cols="12"
|
2024-02-05 16:48:02 +01:00
|
|
|
xs="12"
|
|
|
|
|
sm="6"
|
2020-01-25 14:59:14 +01:00
|
|
|
>
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.municipality')" />
|
2022-08-03 18:40:05 +02:00
|
|
|
<v-icon
|
2024-02-02 14:46:42 +01:00
|
|
|
v-if="hasUser"
|
2024-02-05 16:48:02 +01:00
|
|
|
class="ml-1 mr-1 text-medium-emphasis"
|
|
|
|
|
size="small"
|
2025-06-13 15:21:27 +02:00
|
|
|
:title="t('events.hide')"
|
|
|
|
|
icon='mdi-eye-off'
|
2022-08-03 18:40:05 +02:00
|
|
|
@click="
|
|
|
|
|
toggleIgnore('municipality', event.danceHall.municipality)
|
|
|
|
|
"
|
2025-06-13 15:21:27 +02:00
|
|
|
/>
|
2022-08-03 18:40:05 +02:00
|
|
|
{{ event.danceHall.municipality }}
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
|
|
|
|
<v-col
|
2024-02-06 07:43:46 +01:00
|
|
|
cols="12"
|
2024-02-05 16:48:02 +01:00
|
|
|
xs="12"
|
|
|
|
|
sm="6"
|
2020-01-25 14:59:14 +01:00
|
|
|
>
|
2025-06-13 15:21:27 +02:00
|
|
|
<strong class="mr-1" v-text="t('events.state')" />
|
2022-08-03 18:40:05 +02:00
|
|
|
<v-icon
|
2024-02-02 14:46:42 +01:00
|
|
|
v-if="hasUser"
|
2024-02-05 16:48:02 +01:00
|
|
|
class="ml-1 mr-1 text-medium-emphasis"
|
|
|
|
|
size="small"
|
2025-06-13 15:21:27 +02:00
|
|
|
:title="t('events.hide')"
|
|
|
|
|
icon='mdi-eye-off'
|
2022-08-03 18:40:05 +02:00
|
|
|
@click="toggleIgnore('state', event.danceHall.state)"
|
2025-06-13 15:21:27 +02:00
|
|
|
/>
|
2022-08-03 18:40:05 +02:00
|
|
|
{{ event.danceHall.state }}
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-col>
|
|
|
|
|
</v-row>
|
2024-02-02 14:46:42 +01:00
|
|
|
<distance-display v-for="distance in event.distances" :key="distance.origin" :distance="distance" />
|
2024-02-05 16:48:02 +01:00
|
|
|
</v-card-text>
|
2019-01-21 20:58:25 +01:00
|
|
|
</v-card>
|
2019-01-18 14:03:58 +01:00
|
|
|
</template>
|
|
|
|
|
|
2024-02-02 18:55:45 +01:00
|
|
|
<script setup lang='ts'>
|
2024-02-02 14:46:42 +01:00
|
|
|
|
2022-08-03 18:40:05 +02:00
|
|
|
import { format, formatDistanceToNow, parseISO } from 'date-fns'
|
|
|
|
|
import { enGB, sv } from 'date-fns/locale'
|
2024-02-05 16:48:02 +01:00
|
|
|
import { computed, type PropType } from 'vue'
|
2025-06-13 15:21:27 +02:00
|
|
|
|
2024-02-05 16:48:02 +01:00
|
|
|
import { useI18n } from '#i18n'
|
|
|
|
|
import DistanceDisplay from '~/components/pages/events/event-distance.vue'
|
2025-06-13 15:21:27 +02:00
|
|
|
import type { Event } from '~/graphql/generated/operations'
|
2020-01-21 15:51:51 +01:00
|
|
|
|
2024-02-02 18:55:45 +01:00
|
|
|
const props = defineProps({
|
|
|
|
|
event: {
|
|
|
|
|
type: Object as PropType<Event>,
|
2024-02-05 16:48:02 +01:00
|
|
|
required: true,
|
2020-01-25 14:59:14 +01:00
|
|
|
},
|
2024-02-02 18:55:45 +01:00
|
|
|
hasUser: {
|
|
|
|
|
type: Boolean,
|
2024-02-05 16:48:02 +01:00
|
|
|
required: true,
|
2024-02-02 18:55:45 +01:00
|
|
|
},
|
|
|
|
|
toggleIgnore: {
|
|
|
|
|
type: Function,
|
2024-02-05 16:48:02 +01:00
|
|
|
required: true,
|
|
|
|
|
},
|
2022-08-03 18:40:05 +02:00
|
|
|
})
|
2025-06-13 15:21:27 +02:00
|
|
|
const { t, locale: currentLocale } = useI18n()
|
2024-02-05 16:48:02 +01:00
|
|
|
const locale = computed(() => (currentLocale.value ?? 'sv') === 'en' ? enGB : sv)
|
2024-02-02 18:55:45 +01:00
|
|
|
const time = computed(() => (props.event.time || '').split('-')[0].replace('.', ':'))
|
|
|
|
|
const weekday = computed(() => format(parseISO(props.event.date), 'EEEE', { locale: locale.value }))
|
|
|
|
|
const daysUntil = computed(() => formatDistanceToNow(parseISO(`${props.event.date}T${time.value}`), {
|
|
|
|
|
addSuffix: true,
|
2024-02-05 16:48:02 +01:00
|
|
|
locale: locale.value,
|
2024-02-02 18:55:45 +01:00
|
|
|
}))
|
2019-01-18 14:03:58 +01:00
|
|
|
</script>
|