mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
33 lines
1.0 KiB
JavaScript
33 lines
1.0 KiB
JavaScript
export default function(options = {}) {
|
|
const { queryId, querySlug, path, message = 'Page not found.' } = options
|
|
return {
|
|
asyncData: async context => {
|
|
const {
|
|
params: { id, slug },
|
|
redirect,
|
|
error,
|
|
app: { apolloProvider },
|
|
} = context
|
|
const idOrSlug = id || slug
|
|
|
|
const variables = { idOrSlug }
|
|
const client = apolloProvider.defaultClient
|
|
|
|
let response
|
|
let resource
|
|
response = await client.query({ query: queryId, variables })
|
|
resource = response.data[Object.keys(response.data)[0]][0]
|
|
if (resource && resource.slug === slug) return // all good
|
|
if (resource && resource.slug !== slug) {
|
|
return redirect(`/${path}/${resource.id}/${resource.slug}`)
|
|
}
|
|
|
|
response = await client.query({ query: querySlug, variables })
|
|
resource = response.data[Object.keys(response.data)[0]][0]
|
|
if (resource) return redirect(`/${path}/${resource.id}/${resource.slug}`)
|
|
|
|
return error({ statusCode: 404, key: message })
|
|
},
|
|
}
|
|
}
|