feat: Custom sorting at page tree

pull/7619/head
Ruslan Semak 8 months ago
parent 00a3b55c12
commit 6edd006c7b

@ -173,8 +173,8 @@ module.exports = {
async singleByPath(obj, args, context, info) { async singleByPath(obj, args, context, info) {
let page = await WIKI.models.pages.getPageFromDb({ let page = await WIKI.models.pages.getPageFromDb({
path: args.path, path: args.path,
locale: args.locale, locale: args.locale
}); })
if (page) { if (page) {
if (WIKI.auth.checkAccess(context.req.user, ['manage:pages', 'delete:pages'], { if (WIKI.auth.checkAccess(context.req.user, ['manage:pages', 'delete:pages'], {
path: page.path, path: page.path,
@ -281,7 +281,42 @@ module.exports = {
builder.orWhereIn('id', _.isString(curPage.ancestors) ? JSON.parse(curPage.ancestors) : curPage.ancestors) builder.orWhereIn('id', _.isString(curPage.ancestors) ? JSON.parse(curPage.ancestors) : curPage.ancestors)
} }
} }
}).orderBy([{ column: 'isFolder', order: 'desc' }, 'title']) })
// Ruslan: Custom sorting for "Tree Navigation" for folder "Users"
// const customSortingOrder = [
// '📁 Шаблон',
// 'Landing'
// ]
const emojiRegex = /^[\u{1F300}-\u{1F6FF}\u{1F900}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/u
const russianRegex = /[\u0400-\u04FF]/
const userPrefix = 'Users/'
results.sort((a, b) => {
if (a.isFolder !== b.isFolder) {
return b.isFolder - a.isFolder
}
if (a.path.startsWith(userPrefix) || a.path.startsWith(userPrefix)) {
// Emoji first
const aIsEmoji = emojiRegex.test(a.title)
const bIsEmoji = emojiRegex.test(b.title)
if (aIsEmoji && !bIsEmoji) return -1
if (!aIsEmoji && bIsEmoji) return 1
// Russian second, only by first letter due to title must contain russian + english
const aIsRussian = russianRegex.test(a.title[0])
const bIsRussian = russianRegex.test(b.title[1])
if (aIsRussian && !bIsRussian) return -1
if (!aIsRussian && bIsRussian) return 1
}
return a.title.localeCompare(b.title)
})
return results.filter(r => { return results.filter(r => {
return WIKI.auth.checkAccess(context.req.user, ['read:pages'], { return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
path: r.path, path: r.path,

Loading…
Cancel
Save