mirror of
https://github.com/codex-team/codex.docs.git
synced 2025-08-08 06:55:26 +02:00
remove migration and order is optional
This commit is contained in:
parent
07dc88efc3
commit
ec34075bc5
4 changed files with 19 additions and 51 deletions
|
@ -74,10 +74,14 @@ class PagesOrder {
|
|||
* @return {Page[]}
|
||||
*/
|
||||
static async getOrderedChildren(pages, currentPageId, parentPageId, ignoreSelf = false) {
|
||||
const children = await PagesOrder.get(parentPageId);
|
||||
const result = [];
|
||||
const children = await Model.get(parentPageId);
|
||||
const unordered = pages.filter(page => page._parent === parentPageId).map(page => page._id);
|
||||
|
||||
children.order.forEach(pageId => {
|
||||
// Create unique array with ordered and unordered pages id
|
||||
const ordered = [...new Set([...children.order, ...unordered])];
|
||||
|
||||
const result = [];
|
||||
ordered.forEach(pageId => {
|
||||
pages.forEach(page => {
|
||||
if (page._id === pageId && (pageId !== currentPageId || !ignoreSelf)) {
|
||||
result.push(page);
|
||||
|
@ -89,13 +93,16 @@ class PagesOrder {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} unordered
|
||||
* @param {string} currentPageId - page's id that changes the order
|
||||
* @param {string} parentPageId - parent page's id that contains both two pages
|
||||
* @param {string} putAbovePageId - page's id above which we put the target page
|
||||
*/
|
||||
static async update(currentPageId, parentPageId, putAbovePageId) {
|
||||
static async update(unordered, currentPageId, parentPageId, putAbovePageId) {
|
||||
const pageOrder = await Model.get(parentPageId);
|
||||
|
||||
// Create unique array with ordered and unordered pages id
|
||||
pageOrder.order = [...new Set([...pageOrder.order, ...unordered])];
|
||||
pageOrder.putAbove(currentPageId, putAbovePageId);
|
||||
await pageOrder.save();
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ const router = express.Router();
|
|||
const multer = require('multer')();
|
||||
const Pages = require('../../controllers/pages');
|
||||
const PagesOrder = require('../../controllers/pagesOrder');
|
||||
const Aliases = require("../../controllers/aliases");
|
||||
/**
|
||||
* GET /page/:id
|
||||
*
|
||||
|
@ -81,13 +80,15 @@ router.post('/page/:id', multer.any(), async (req, res) => {
|
|||
|
||||
try {
|
||||
const {title, body, parent, putAbovePageId, uri} = req.body;
|
||||
const pages = await Pages.getAll();
|
||||
let page = await Pages.get(id);
|
||||
|
||||
if (page._parent !== parent) {
|
||||
await PagesOrder.move(page._parent, parent, id);
|
||||
} else {
|
||||
if (putAbovePageId && putAbovePageId !== '0') {
|
||||
await PagesOrder.update(page._id, page._parent, putAbovePageId);
|
||||
const unordered = pages.filter( _page => _page._parent === page._parent).map(_page => _page._id);
|
||||
await PagesOrder.update(unordered, page._id, page._parent, putAbovePageId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,15 +21,16 @@ function createMenuTree(parentPageId, pages, pagesOrder, level = 1, currentLevel
|
|||
* if we got some children order on parents tree, then we push found pages in order sequence
|
||||
* otherwise just find all pages includes parent tree
|
||||
*/
|
||||
let branch = [];
|
||||
let ordered = [];
|
||||
if (childrenOrder) {
|
||||
branch = childrenOrder.order.map( pageId => {
|
||||
ordered = childrenOrder.order.map( pageId => {
|
||||
return pages.find( page => page._id === pageId);
|
||||
});
|
||||
} else {
|
||||
branch = pages.filter( page => page._parent === parentPageId);
|
||||
}
|
||||
|
||||
const unordered = pages.filter( page => page._parent === parentPageId);
|
||||
const branch = [...new Set([...ordered, ...unordered])];
|
||||
|
||||
/**
|
||||
* stop recursion when we got the passed max level
|
||||
*/
|
||||
|
|
|
@ -2,46 +2,5 @@ const Datastore = require('nedb');
|
|||
const config = require('../../../config');
|
||||
const db = new Datastore({filename: `./${config.database}/pagesOrder.db`, autoload: true});
|
||||
|
||||
/**
|
||||
* Current DataStore preparation
|
||||
* Add initial row for RootPage
|
||||
*/
|
||||
(async function() {
|
||||
const parentIdOfRootPages = '0';
|
||||
const cbk = (resolve, reject) => (err, doc) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
resolve(doc);
|
||||
};
|
||||
|
||||
const order = await new Promise((resolve, reject) => {
|
||||
db.findOne({page: parentIdOfRootPages}, cbk(resolve, reject));
|
||||
});
|
||||
|
||||
if (!order) {
|
||||
const Pages = require('../../controllers/pages');
|
||||
|
||||
// Converter
|
||||
const pages = await Pages.getAll();
|
||||
|
||||
async function convert(pages, parentId) {
|
||||
const children = pages.filter(page => page._parent === parentId);
|
||||
const initialData = {
|
||||
page: parentId,
|
||||
order: children.map(page => page._id)
|
||||
};
|
||||
await db.insert(initialData);
|
||||
|
||||
children.forEach(async page => {
|
||||
await convert(pages, page._id);
|
||||
});
|
||||
}
|
||||
|
||||
await convert(pages, parentIdOfRootPages);
|
||||
}
|
||||
|
||||
}());
|
||||
|
||||
module.exports = db;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue