From 76f05fe2749808daf2c7bb226bee25719813f154 Mon Sep 17 00:00:00 2001 From: Y-k-Y Date: Thu, 28 Apr 2022 02:21:10 +0900 Subject: [PATCH 1/9] fix: fix order of page categories with raw type --- src/backend/models/page.ts | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/backend/models/page.ts b/src/backend/models/page.ts index d90b1869..3983395a 100644 --- a/src/backend/models/page.ts +++ b/src/backend/models/page.ts @@ -84,9 +84,45 @@ class Page { * @returns {Promise} */ public static async getAll(query: Record = {}): Promise { - const docs = await pagesDb.find(query); + const result: PageData[] = []; + const obj = {}; + let docs = await pagesDb.find(query); - return Promise.all(docs.map(doc => new Page(doc))); + docs = docs.sort((a, b) => { + if (a.body.time > b.body.time) { + return 1; + } + + if (a.body.time < b.body.time) { + return -1; + } + + return 0; + }); + docs.forEach(doc => { + if(doc.parent === '0') { + // @ts-ignore + obj[doc._id] = []; + // @ts-ignore + obj[doc._id].push(doc); + } else { + // @ts-ignore + obj[doc._id] = []; + // @ts-ignore + obj[doc.parent].push(doc); + } + }); + Object.entries(obj).forEach(([key, value]) => { + // @ts-ignore + if(!key || value.length <=0) { + return; + } else { + // @ts-ignore + result.push(...value); + } + }); + + return Promise.all(result.map(doc => new Page(doc))); } /** From 7603f727f0ec53b55213e78eabbc042147d25618 Mon Sep 17 00:00:00 2001 From: Y-k-Y Date: Thu, 28 Apr 2022 22:36:30 +0900 Subject: [PATCH 2/9] refactor: change method location and others --- src/backend/controllers/pages.ts | 41 +++++++++++++++++++++++++++++++ src/backend/models/page.ts | 40 ++---------------------------- src/backend/routes/pages.ts | 3 ++- src/backend/views/pages/form.twig | 2 +- 4 files changed, 46 insertions(+), 40 deletions(-) diff --git a/src/backend/controllers/pages.ts b/src/backend/controllers/pages.ts index 6a4bd075..59f8c33c 100644 --- a/src/backend/controllers/pages.ts +++ b/src/backend/controllers/pages.ts @@ -62,6 +62,47 @@ class Pages { return nullFilteredPages; } + /** + * Group given pages with descending order of creation time + * + * @param {pages[]} pages - pages to group + * @returns {Page[]} + */ + public static group(pages: Page[]): Page[] { + const result: Page[] = []; + const obj:Record> = {}; + + pages.sort((a, b) => { + if (a.body.time > b.body.time) { + return 1; + } + + if (a.body.time < b.body.time) { + return -1; + } + + 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] = []; + obj[doc._parent].push(doc); + } + }); + + Object.entries(obj).forEach(([, value]) => { + if (value.length <=0) { + return; + } else { + result.push(...value); + } + }); + + return result; + } + /** * Set all children elements to null * diff --git a/src/backend/models/page.ts b/src/backend/models/page.ts index 3983395a..d90b1869 100644 --- a/src/backend/models/page.ts +++ b/src/backend/models/page.ts @@ -84,45 +84,9 @@ class Page { * @returns {Promise} */ public static async getAll(query: Record = {}): Promise { - const result: PageData[] = []; - const obj = {}; - let docs = await pagesDb.find(query); + const docs = await pagesDb.find(query); - docs = docs.sort((a, b) => { - if (a.body.time > b.body.time) { - return 1; - } - - if (a.body.time < b.body.time) { - return -1; - } - - return 0; - }); - docs.forEach(doc => { - if(doc.parent === '0') { - // @ts-ignore - obj[doc._id] = []; - // @ts-ignore - obj[doc._id].push(doc); - } else { - // @ts-ignore - obj[doc._id] = []; - // @ts-ignore - obj[doc.parent].push(doc); - } - }); - Object.entries(obj).forEach(([key, value]) => { - // @ts-ignore - if(!key || value.length <=0) { - return; - } else { - // @ts-ignore - result.push(...value); - } - }); - - return Promise.all(result.map(doc => new Page(doc))); + return Promise.all(docs.map(doc => new Page(doc))); } /** diff --git a/src/backend/routes/pages.ts b/src/backend/routes/pages.ts index 82c81078..174abb95 100644 --- a/src/backend/routes/pages.ts +++ b/src/backend/routes/pages.ts @@ -12,9 +12,10 @@ const router = express.Router(); router.get('/page/new', verifyToken, allowEdit, async (req: Request, res: Response, next: NextFunction) => { try { const pagesAvailable = await Pages.getAll(); + const groupedPagesAvailable = Pages.group(pagesAvailable); res.render('pages/form', { - pagesAvailable, + groupedPagesAvailable, page: null, }); } catch (error) { diff --git a/src/backend/views/pages/form.twig b/src/backend/views/pages/form.twig index 2e3bc13e..cb56940a 100644 --- a/src/backend/views/pages/form.twig +++ b/src/backend/views/pages/form.twig @@ -22,7 +22,7 @@ {% endif %} - {% for _page in groupedPagesAvailable %} + {% for _page in pagesAvailableGrouped %} {% if _page._id != currentPageId %}