diff --git a/src/controllers/pagesOrder.js b/src/controllers/pagesOrder.js index d1e6362..12493b9 100644 --- a/src/controllers/pagesOrder.js +++ b/src/controllers/pagesOrder.js @@ -87,7 +87,7 @@ class PagesOrder { static async update(currentPageId, parentPageId, putAbovePageId) { const pageOrder = await Model.get(parentPageId); - pageOrder.shift(currentPageId, putAbovePageId); + pageOrder.putAbove(currentPageId, putAbovePageId); await pageOrder.save(); } } diff --git a/src/models/pageOrder.js b/src/models/pageOrder.js index a47694c..09c9534 100644 --- a/src/models/pageOrder.js +++ b/src/models/pageOrder.js @@ -103,9 +103,14 @@ class PageOrder { * * @returns void */ - shift(currentPageId, putAbovePageId) { + putAbove(currentPageId, putAbovePageId) { const found1 = this.order.indexOf(putAbovePageId); const found2 = this.order.indexOf(currentPageId); + + if (found1 === -1 || found2 === -1) { + return + } + const margin = found1 < found2 ? 1 : 0; this.order.splice(found1, 0, currentPageId); diff --git a/test/models/pageOrder.js b/test/models/pageOrder.js index e492123..bb40207 100644 --- a/test/models/pageOrder.js +++ b/test/models/pageOrder.js @@ -110,7 +110,15 @@ describe('PageOrder model', () => { pageOrder.push(3); }).to.throw('given id is not string'); + pageOrder.push('4'); + pageOrder.push('5'); + pageOrder.push('2'); + pageOrder.putAbove('2', '3'); + expect(pageOrder.data.order).to.deep.equals(['1', '2', '3', '4', '5']); + + pageOrder.putAbove('2', '10'); + expect(pageOrder.data.order).to.deep.equals(['1', '2', '3', '4', '5']); await pageOrder.destroy(); });