48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
import { parseFile } from '../file/util.mjs'
|
|
import { parseArticle, parseArticles } from '../article/util.mjs'
|
|
|
|
export async function getTree(ctx) {
|
|
let res = await ctx.db.safeCallProc('common.pages_get_tree', [])
|
|
let out = []
|
|
let children = []
|
|
let map = new Map()
|
|
for (let page of res.first) {
|
|
if (!page.parent_id) {
|
|
out.push(page)
|
|
} else {
|
|
children.push(page)
|
|
}
|
|
map.set(page.id, page)
|
|
}
|
|
for (let page of children) {
|
|
let parent = map.get(page.parent_id)
|
|
if (!parent.children) {
|
|
parent.children = []
|
|
}
|
|
parent.children.push(page)
|
|
}
|
|
return {
|
|
tree: out
|
|
}
|
|
}
|
|
|
|
export async function getPage(ctx, path, page = 0, per_page = 10) {
|
|
let res = await ctx.db.safeCallProc('common.pages_get_single', [path, page, per_page])
|
|
|
|
let articleMap = new Map()
|
|
|
|
let out = {
|
|
page: res.results[0][0] || null,
|
|
articles: parseArticles(res.results[1]),
|
|
total_articles: res.results[2][0].total_articles,
|
|
featured: parseArticle(res.results[4][0]),
|
|
}
|
|
out.articles.forEach(article => {
|
|
article.files = []
|
|
articleMap.set(article.id, article)
|
|
})
|
|
res.results[3].forEach(file => {
|
|
articleMap.get(file.id).files.push(parseFile(file))
|
|
})
|
|
return out
|
|
}
|