1
0
Fork 0
mirror of https://github.com/codex-team/codex.docs.git synced 2025-08-09 15:35:25 +02:00

refactor: fix method names and variables also split methods to be clear their role

This commit is contained in:
Y-k-Y 2022-04-29 10:02:00 +09:00
parent 7603f727f0
commit 5a1be35d71
2 changed files with 44 additions and 18 deletions

View file

@ -63,16 +63,13 @@ class Pages {
} }
/** /**
* Group given pages with descending order of creation time * Sort given pages with descending order of creation time
* *
* @param {pages[]} pages - pages to group * @param {pages[]} pages - pages to sort
* @returns {Page[]} * @returns {page[]}
*/ */
public static group(pages: Page[]): Page[] { public static sortByTimeDesc(pages: Page[]): Page[] {
const result: Page[] = []; return pages.sort((a, b) => {
const obj:Record<string, Array<Page>> = {};
pages.sort((a, b) => {
if (a.body.time > b.body.time) { if (a.body.time > b.body.time) {
return 1; return 1;
} }
@ -82,18 +79,36 @@ class Pages {
} }
return 0; return 0;
}).forEach(doc => { });
if (doc._parent === '0' && typeof doc._id === 'string') { }
obj[doc._id] = [];
obj[doc._id].push(doc);
} else if (doc._parent !== '0' && doc._parent && doc._id) { /**
obj[doc._id] = []; * Group given pages by their parents
obj[doc._parent].push(doc); *
* @param {pages[]} pages - pages to group
* @returns {Page[]}
*/
public static groupByParent(pages: Page[]): Page[] {
const result: Page[] = [];
const pagesGroupedByParent:Record<string, Array<Page>> = {};
pages.forEach(page => {
pagesGroupedByParent[String(page._id)] = [];
if (this.isRootPage(page)) {
pagesGroupedByParent[String(page._id)].push(page);
} else {
pagesGroupedByParent[String(page._parent)].push(page);
} }
}); });
Object.entries(obj).forEach(([, value]) => { /**
if (value.length <=0) { * It converts grouped object to array
* Also removes redundant keys when there is no children
*/
Object.entries(pagesGroupedByParent).forEach(([, value]) => {
if (value.length <= 0) {
return; return;
} else { } else {
result.push(...value); result.push(...value);
@ -244,6 +259,16 @@ class Pages {
throw new Error('Please, fill page Header'); throw new Error('Please, fill page Header');
} }
} }
/**
* Check if the given page is root
*
* @param {page} page - page to check
* @returns {boolean}
*/
private static isRootPage(page:Page):boolean {
return page._parent === '0';
}
} }
export default Pages; export default Pages;

View file

@ -12,7 +12,8 @@ const router = express.Router();
router.get('/page/new', verifyToken, allowEdit, async (req: Request, res: Response, next: NextFunction) => { router.get('/page/new', verifyToken, allowEdit, async (req: Request, res: Response, next: NextFunction) => {
try { try {
const pagesAvailable = await Pages.getAll(); const pagesAvailable = await Pages.getAll();
const groupedPagesAvailable = Pages.group(pagesAvailable); const sortedPagesAvailable = Pages.sortByTimeDesc(pagesAvailable);
const groupedPagesAvailable = Pages.groupByParent(sortedPagesAvailable);
res.render('pages/form', { res.render('pages/form', {
groupedPagesAvailable, groupedPagesAvailable,