Files
dancefinder-app/components/pages/events/Event/index.vue
T

152 lines
4.0 KiB
Vue
Raw Normal View History

<template>
<v-card flat outlined rounded class="mx-3 my-3 rounded-xl">
2019-01-21 20:58:25 +01:00
<v-card-title primary-title>
<h3 class="headline mb-0">
2020-01-25 14:59:14 +01:00
<v-icon
v-if="hasUser"
class="ml-1 mr-1"
2020-01-25 14:59:14 +01:00
medium
title="Dölj"
@click="toggleIgnore('band', event.band.name)"
>
mdi-eye-off
</v-icon>{{ event.band.name }}
2020-01-25 14:59:14 +01:00
</h3>
2019-01-21 20:58:25 +01:00
</v-card-title>
<v-container>
<v-layout row wrap>
<v-flex
xs12
sm6
>
<strong class="mr-1" v-text="$t('events.date')" />{{
2020-01-25 14:59:14 +01:00
event.date
}}
({{ weekday }} {{ daysUntil }})
</v-flex>
<v-flex v-if="event.time" xs12 sm6>
<strong class="mr-1" v-text="$t('events.time')" />{{
2020-01-25 14:59:14 +01:00
event.time
}}
</v-flex>
2019-01-21 20:58:25 +01:00
</v-layout>
<v-layout row wrap>
<v-flex
xs12
sm6
md3
>
<strong class="mr-1" v-text="$t('events.hall')" />
<v-icon
v-if="hasUser"
class="ml-1 mr-1"
2020-01-25 14:59:14 +01:00
small
:title="$t('events.hide')"
@click="toggleIgnore('danceHall', event.danceHall.name)"
>
mdi-eye-off
</v-icon>
{{ event.danceHall.name }}
</v-flex>
<v-flex
xs12
sm6
md3
2020-01-25 14:59:14 +01:00
>
<strong class="mr-1" v-text="$t('events.city')" />
<v-icon
v-if="hasUser"
class="ml-1 mr-1"
2020-01-25 14:59:14 +01:00
small
:title="$t('events.hide')"
@click="toggleIgnore('city', event.danceHall.city)"
>
mdi-eye-off
</v-icon>
{{ event.danceHall.city }}
</v-flex>
<v-flex
xs12
sm6
md3
2020-01-25 14:59:14 +01:00
>
<strong class="mr-1" v-text="$t('events.municipality')" />
<v-icon
v-if="hasUser"
class="ml-1 mr-1"
2020-01-25 14:59:14 +01:00
small
:title="$t('events.hide')"
@click="
toggleIgnore('municipality', event.danceHall.municipality)
"
>
mdi-eye-off
</v-icon>
{{ event.danceHall.municipality }}
</v-flex>
<v-flex
xs12
sm6
md3
2020-01-25 14:59:14 +01:00
>
<strong class="mr-1" v-text="$t('events.state')" />
<v-icon
v-if="hasUser"
class="ml-1 mr-1"
2020-01-25 14:59:14 +01:00
small
:title="$t('events.hide')"
@click="toggleIgnore('state', event.danceHall.state)"
>
mdi-eye-off
</v-icon>
{{ event.danceHall.state }}
</v-flex>
2019-01-21 20:58:25 +01:00
</v-layout>
<distance-display v-for="distance in event.distances" :key="distance.origin" :distance="distance" />
2019-01-21 20:58:25 +01:00
</v-container>
</v-card>
</template>
<script lang='ts'>
import { format, formatDistanceToNow, parseISO } from 'date-fns'
import { enGB, sv } from 'date-fns/locale'
import { computed, defineComponent, getCurrentInstance, PropType } from 'vue'
import { Event } from '~/graphql/generated/operations'
import DistanceDisplay from '~/components/pages/events/Event/distance.vue'
export default defineComponent({
name: 'EventDetail',
components: { DistanceDisplay },
2020-01-25 14:59:14 +01:00
props: {
event: {
type: Object as PropType<Event>,
2020-01-25 14:59:14 +01:00
required: true
},
2020-01-25 14:59:14 +01:00
hasUser: {
type: Boolean,
required: true
},
2020-01-25 14:59:14 +01:00
toggleIgnore: {
type: Function,
required: true
}
},
setup (props) {
const instance = getCurrentInstance()
2023-04-16 19:08:35 +02:00
const locale = computed(() => (instance?.proxy.$i18n.locale ?? 'sv') === 'en' ? enGB : sv)
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,
locale: locale.value
}))
2020-01-25 14:59:14 +01:00
return {
weekday,
daysUntil
}
}
})
</script>