|
@@ -171,26 +171,51 @@ module.exports = {
|
|
|
* FETCH TAGS
|
|
|
*/
|
|
|
async tags (obj, args, context, info) {
|
|
|
- return WIKI.models.tags.query().orderBy('tag', 'asc')
|
|
|
+ const pages = await WIKI.models.pages.query().column([
|
|
|
+ 'path',
|
|
|
+ { locale: 'localeCode' },
|
|
|
+ ])
|
|
|
+ .withGraphJoined('tags')
|
|
|
+ const allTags = _.filter(pages, r => {
|
|
|
+ return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
|
|
|
+ path: r.path,
|
|
|
+ locale: r.locale
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .flatMap(r => r.tags)
|
|
|
+ return _.orderBy(_.uniqBy(allTags, 'id'), ['tag'], ['asc'])
|
|
|
},
|
|
|
/**
|
|
|
* SEARCH TAGS
|
|
|
*/
|
|
|
async searchTags (obj, args, context, info) {
|
|
|
const query = _.trim(args.query)
|
|
|
- const results = await WIKI.models.tags.query()
|
|
|
- .column('tag')
|
|
|
- .where(builder => {
|
|
|
- builder.andWhere(builderSub => {
|
|
|
+ const pages = await WIKI.models.pages.query().column([
|
|
|
+ 'path',
|
|
|
+ { locale: 'localeCode' },
|
|
|
+ ])
|
|
|
+ .withGraphJoined('tags')
|
|
|
+ .modifyGraph('tags', builder => {
|
|
|
+ builder.select('tag')
|
|
|
+ })
|
|
|
+ .modify(queryBuilder => {
|
|
|
+ queryBuilder.andWhere(builderSub => {
|
|
|
if (WIKI.config.db.type === 'postgres') {
|
|
|
- builderSub.where('tag', 'ILIKE', `%${query}%`)
|
|
|
+ builderSub.where('tags.tag', 'ILIKE', `%${query}%`)
|
|
|
} else {
|
|
|
- builderSub.where('tag', 'LIKE', `%${query}%`)
|
|
|
+ builderSub.where('tags.tag', 'LIKE', `%${query}%`)
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
- .limit(5)
|
|
|
- return results.map(r => r.tag)
|
|
|
+ const allTags = _.filter(pages, r => {
|
|
|
+ return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
|
|
|
+ path: r.path,
|
|
|
+ locale: r.locale
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .flatMap(r => r.tags)
|
|
|
+ .map(t => t.tag)
|
|
|
+ return _.uniq(allTags).slice(0, 5)
|
|
|
},
|
|
|
/**
|
|
|
* FETCH PAGE TREE
|