79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
import SessionCache from './session-cache.js'
|
|
import { request } from 'graphql-request'
|
|
import DateTimeWrapper from './date-time-wrapper.js'
|
|
|
|
export function getUpcomingEvents({ url, limit }) {
|
|
const query = `
|
|
query ($limit: Int) {
|
|
events(limit: $limit) {
|
|
elements {
|
|
id,
|
|
title,
|
|
url,
|
|
beginsOn,
|
|
endsOn,
|
|
physicalAddress {
|
|
description,
|
|
locality
|
|
}
|
|
},
|
|
total
|
|
}
|
|
}
|
|
`
|
|
const dataInCache = SessionCache.get(sessionStorage, {
|
|
url,
|
|
query,
|
|
variables: { limit },
|
|
})
|
|
if (dataInCache !== null) {
|
|
return Promise.resolve(dataInCache)
|
|
}
|
|
return request(url, query, { limit }).then((data) => {
|
|
SessionCache.add(sessionStorage, { url, query, variables: { limit } }, data)
|
|
return Promise.resolve(data)
|
|
})
|
|
}
|
|
|
|
export function getUpcomingEventsByGroupName({ url, limit, groupName }) {
|
|
const query = `
|
|
query ($afterDatetime: DateTime, $groupName: String, $limit: Int) {
|
|
group(preferredUsername: $groupName) {
|
|
organizedEvents(afterDatetime: $afterDatetime, limit: $limit) {
|
|
elements {
|
|
id,
|
|
title,
|
|
url,
|
|
beginsOn,
|
|
endsOn,
|
|
physicalAddress {
|
|
description,
|
|
locality
|
|
}
|
|
},
|
|
total
|
|
}
|
|
}
|
|
}
|
|
`
|
|
const afterDatetime = DateTimeWrapper.getCurrentDatetimeAsString()
|
|
const dataInCache = SessionCache.get(sessionStorage, {
|
|
url,
|
|
query,
|
|
variables: { afterDatetime, groupName, limit },
|
|
})
|
|
if (dataInCache !== null) {
|
|
return Promise.resolve(dataInCache)
|
|
}
|
|
return request(url, query, { afterDatetime, groupName, limit }).then(
|
|
(data) => {
|
|
SessionCache.add(
|
|
sessionStorage,
|
|
{ url, query, variables: { afterDatetime, groupName, limit } },
|
|
data
|
|
)
|
|
return Promise.resolve(data)
|
|
}
|
|
)
|
|
}
|