diff --git a/components/Event.vue b/components/Event.vue
index 9be5bdb2..5ec95749 100644
--- a/components/Event.vue
+++ b/components/Event.vue
@@ -7,7 +7,7 @@
v-card-title.text-h5 {{event.title}}
v-card-text
-
+
time.text-h6(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') mdi-event {{ event|when }}
v-btn.d-block.text-h6(text color='primary' big @click="$emit('placeclick', event.place.id)") mdi-map-marker {{event.place.name}}
diff --git a/components/Home.vue b/components/Home.vue
index 21129339..c3b17ef4 100644
--- a/components/Home.vue
+++ b/components/Home.vue
@@ -7,11 +7,12 @@
#calbar.row.mb-2
.col-xl-5.col-lg-5.col-sm-5.col-xs-12
- //- this is needed as v-calendar does not support SSR
- //- https://github.com/nathanreyes/v-calendar/issues/336
- client-only
- Calendar(@dayclick='dayClick'
- @monthchange='monthChange' :events='events')
+ v-date-picker(
+ @update:picker-date='monthChange'
+ :locale='settings.locale'
+ :events='calendarEvents'
+ v-model='date'
+ landscape)
.col
Search(
@@ -19,10 +20,10 @@
@update='updateFilters'
)
- .text-h3.text-center(v-if='selectedDay') {{selectedDay|day}}
+ v-chip.text-h3.text-center(v-if='selectedDay' close) {{selectedDay|day}}
#events
Event(v-for='event in events'
- :key='event.id' :event='event'
+ :key='event.id' :event='event'
@tagclick='tagClick' @placeclick='placeClick')
@@ -37,27 +38,42 @@ import Search from '@/components/Search'
export default {
name: 'Home',
+ components: { Calendar, Event, Search, Announcement },
+ async asyncData ({ params }) {
+ const events = await this.$api.getEvents({
+ start: this.start,
+ end: this.end,
+ places: this.filters.places,
+ tags: this.filters.tags
+ })
+ return { events }
+ },
data () {
return {
+ date: dayjs().format('YYYY-MM-DD'),
events: [],
- start: null,
+ start: dayjs().format('YYYY-MM-DD'),
end: null,
- filters: { tags: [], places: []},
+ filters: { tags: [], places: [] },
selectedDay: null
}
},
- components: { Calendar, Event, Search, Announcement },
computed: {
- ...mapState(['settings', 'announcements'])
+ ...mapState(['settings', 'announcements']),
+ calendarEvents () {
+ return this.events.map(e => dayjs.unix(e.start_datetime).format('YYYY-MM-DD'))
+ }
},
methods: {
...mapActions(['setFilters']),
async updateEvents () {
this.events = await this.$api.getEvents({
- start: this.start, end: this.end,
- places: this.filters.places, tags: this.filters.tags
+ start: this.start,
+ end: this.end,
+ places: this.filters.places,
+ tags: this.filters.tags
})
- this.setFilters(this.filters)
+ // this.setFilters(this.filters)
},
placeClick (place_id) {
if (this.filters.places.includes(place_id)) {
@@ -79,10 +95,12 @@ export default {
this.filters = filters
this.updateEvents()
},
- monthChange (page) {
- this.start = dayjs().year(page.year).month(page.month - 1).startOf('month').startOf('week').unix()
- this.end = dayjs().year(page.year).month(page.month - 1).endOf('month').endOf('week').unix()
- this.updateEvents ()
+ monthChange (monthYear) {
+ // return
+ const [year, month] = monthYear.split('-')
+ this.start = dayjs().year(year).month(month - 1).startOf('month').unix() // .startOf('week').unix()
+ this.end = dayjs().year(year).month(month - 1).endOf('month').unix() // .endOf('week').unix()
+ this.updateEvents()
},
async dayClick (day) {
const datetime = day.dateTime / 1000
@@ -94,7 +112,7 @@ export default {
this.selectedDay = datetime
this.events = await this.$api.getEvents({
start: this.selectedDay,
- end: this.selectedDay+24*60*60
+ end: this.selectedDay + 24 * 60 * 60
})
}
},